2017-02-09 12 views
4

Я нашел этот global address book плагин для RoundCube с iRedMail. Я использую hMailServer как мой сервер электронной почты, хотя, поскольку я работаю с Windows. Я все еще пробовал этот плагин и отлично работает с полями по умолчанию (имя, email и домен). Я добавил vcard поле в таблице, хотя вы не можете найти его в документации. Я также подправили sql_global_backend.php и добавить некоторые коды, поступающие первоначально из rcube_contacts.php:Roundcube-SQL-Global-Address-Books custom vCard

public function get_record($id, $assoc=false) { 
    $db = rcube::get_instance()->db; 
    $db->query('SELECT * FROM global_addressbook WHERE `ID`=?', $id); 
    if ($sql_arr = $db->fetch_assoc()) { 
     // $sql_arr['email'] = explode(',', $sql_arr['email']); // edited 
     $record = $this->convert_db_data($sql_arr);    // edited 
     $this->result = new rcube_result_set(1); 
     $this->result->add($record);       // edited 
    } 

    return $assoc && $record ? $record : $this->result; 

} 

/** 
* Convert data stored in the database into output format 
* Note: this code is originally from rcube_contacts.php 
*/ 
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'], RCUBE_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; 
} 

Этот код позволяет представление (шаблон Roundcube) читать VCARD поле. Но он не может читать все.

BEGIN:VCARD 
VERSION:3.0 
N:John;Doe;;;        // can read 
FN:John Doe         // can read 
EMAIL;TYPE=INTERNET;TYPE=WORK:[email protected] // can read 
TITLE:Programmer        // can't read 
ORG:John Doe Org        // can't read 
X-DEPARTMENT:Management System Department // can't read 
TEL:09123456789        // can't read 
END:VCARD 

ОБНОВЛЕНО

Моя таблица global_addressbook выглядеть следующим образом:

_______________________________________________________________________________________________________________ 
| |   |    |   |   |   |            | 
| ID | name | email  | firstname | surname | domain | vcard          | 
|____|__________|______________|___________|_________|_________|_______________________________________________| 
| |   |    |   |   |   |            | 
| 1 | John Doe | [email protected] | John | doe | doe.com | BEGIN:VCARD         | 
| |   |    |   |   |   | VERSION:3.0         | 
                   | N:John;Doe;;;        | 
                   | FN:John Doe         | 
                   | EMAIL;TYPE=INTERNET;TYPE=WORK:[email protected] | 
                   | TITLE:Programmer        | 
                   | ORG:John Doe Org        | 
                   | X-DEPARTMENT:Management System Department | 
                   | TEL:09123456789        | 
                   | END:VCARD         | 

И это выглядит, как это в Roundcube зрения:

enter image description here

+0

Можете ли вы опубликовать функцию rcube_vcard(), используемую в функции convert_db_data()? –

+0

@KetanMalhotra. Код составляет почти тысячи строк. Я только что загрузил свой «RoundCube» на прошлой неделе, и я не перекодировал его. Вы можете увидеть то же самое, если сможете скачать его. –

ответ

0

Попробуйте этот способ, извлекая vcard в виде строки, используя метод export.

private function convert_db_data($sql_arr) { 
    if ($sql_arr['vcard']) { 
     unset($sql_arr['email']); 
     $vcard = new rcube_vcard($sql_arr['vcard'], RCUBE_CHARSET, false, $this->vcard_fieldmap); 
     $sql_arr['vcard'] = $vcard->export(); 
    } else { 
     unset($sql_arr['vcard']); 
    } 

    return $sql_arr; 
} 
+0

Теперь отображается только вкладка «Группы». 'Name 'и' Display Name' теперь отсутствуют. Есть ли другие блок-коды, которые мне нужно переконфигурировать? –

+0

@LekzFlores Я думаю, что мой отредактированный ответ должен быть тем, что вам нужно ...! –

+0

Не могу заставить это работать. –