/**
  * Sync groups upstream
  *
  * @param  integer $gid (group id)
  * @return void
  */
 function groups_upstream_sync($gid)
 {
     $sql = 'SELECT * FROM ' . get_table_name($this->db_groupmembers) . ' WHERE contactgroup_id=?';
     $res = $this->db->query($sql, $gid);
     while ($member = $this->db->fetch_assoc($res)) {
         $members[] = $member;
     }
     if (is_array($members)) {
         foreach ($members as $member) {
             $sql = 'SELECT * FROM ' . get_table_name($this->db_name) . ' WHERE user_id=? AND carddav_contact_id=?';
             $res = $this->db->query($sql, $this->rc->user->ID, $member['contact_id']);
             $contact = $this->db->fetch_assoc($res);
             $vcard = new rcube_vcard();
             $vcard->load($contact['vcard']);
             $save_data = $vcard->get_assoc();
             $save_data['groups'][0] = array();
             $sql = 'SELECT contactgroup_id FROM ' . get_table_name($this->db_groupmembers) . ' WHERE contact_id=?';
             $res = $this->db->query($sql, $member['contact_id']);
             while ($group_id = $this->rc->db->fetch_assoc($res)) {
                 $group_ids[] = $group_id;
             }
             if (!empty($group_ids)) {
                 $categories = array();
                 foreach ($group_ids as $group_id) {
                     $sql = 'SELECT name FROM ' . get_table_name($this->db_groups) . ' WHERE contactgroup_id=? AND del=?';
                     $res = $this->db->query($sql, $group_id['contactgroup_id'], 0);
                     if ($category = $this->rc->db->fetch_assoc($res)) {
                         if ($category['name']) {
                             $categories[$category['name']] = $category['name'];
                         }
                     }
                 }
                 if (!empty($categories)) {
                     $save_data['groups'] = implode(',', $categories);
                 }
             }
             $this->update($member['contact_id'], $save_data);
         }
     }
 }
Beispiel #2
0
 /**
  * Some Apple vCard quirks (#1489993)
  */
 function test_parse_six()
 {
     $vcard = new rcube_vcard("BEGIN:VCARD\n" . "VERSION:3.0\n" . "N:;;;;\n" . "FN:Apple Computer AG\n" . "ITEM1.ADR;type=WORK;type=pref:;;Birgistrasse 4a;Wallisellen-Zürich;;8304;Switzerland\n" . "PHOTO;ENCODING=B:aHR0cDovL3Rlc3QuY29t\n" . "END:VCARD");
     $result = $vcard->get_assoc();
     $this->assertCount(1, $result['address:work'], "ITEM1.-prefixed entry");
 }
 private function convert_db_data($sql_arr)
 {
     $record = array();
     $record['ID'] = $sql_arr[$this->primary_key];
     if ($sql_arr['vcard']) {
         unset($sql_arr['email']);
         $vcard = new rcube_vcard($sql_arr['vcard'], RCMAIL_CHARSET, false, $this->vcard_fieldmap);
         $record += $vcard->get_assoc() + $sql_arr;
     } else {
         $record += $sql_arr;
         $record['email'] = explode(self::SEPARATOR, $record['email']);
         $record['email'] = array_map('trim', $record['email']);
     }
     return $record;
 }