php – Roundcube-SQL-Global-Address-Books自定义vCard
发布时间:2020-12-13 22:27:36 所属栏目:PHP教程 来源:网络整理
导读:我在 RoundCube和 iRedMail找到了这个 global address book插件.我使用 hMailServer作为我的电子邮件服务器,因为我正在使用Windows.我仍尝试使用此插件,并使用默认字段(名称,电子邮件和域).我在表中添加了vcard字段,但是在文档中找不到它.我还调整了sql_glob
我在
RoundCube和
iRedMail找到了这个
global address book插件.我使用
hMailServer作为我的电子邮件服务器,因为我正在使用Windows.我仍尝试使用此插件,并使用默认字段(名称,电子邮件和域).我在表中添加了vcard字段,但是在文档中找不到它.我还调整了sql_global_backend.php并添加了一些最初来自rcube_contacts.php的代码:
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:john@doe.com // 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 | john@doe.com | John | doe | doe.com | BEGIN:VCARD | | | | | | | | VERSION:3.0 | | N:John;Doe;;; | | FN:John Doe | | EMAIL;TYPE=INTERNET;TYPE=WORK:john@doe.com | | TITLE:Programmer | | ORG:John Doe Org | | X-DEPARTMENT:Management System Department | | TEL:09123456789 | | END:VCARD | 它在RoundCube视图中看起来像这样: 解决方法
通过使用
export方法将vcard提取为字符串来尝试这种方式.
private function convert_db_data($sql_arr) { if ($sql_arr['vcard']) { unset($sql_arr['email']); $vcard = new rcube_vcard($sql_arr['vcard'],$this->vcard_fieldmap); $sql_arr['vcard'] = $vcard->export(); } else { unset($sql_arr['vcard']); } return $sql_arr; } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |