Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/230.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Roundcube SQL全局通讯簿自定义vCard_Php_Roundcube_Hmail Server - Fatal编程技术网

Php Roundcube SQL全局通讯簿自定义vCard

Php Roundcube SQL全局通讯簿自定义vCard,php,roundcube,hmail-server,Php,Roundcube,Hmail Server,我找到了这个插件。不过,由于我使用的是Windows,所以我将其用作电子邮件服务器。我仍然尝试了这个插件,可以很好地使用默认字段(名称、电子邮件和域)。我在表中添加了vcard字段,尽管您在文档中找不到它。我还调整了sql\u global\u backend.php,并添加了一些源于rcube\u contacts.php的代码: public function get_record($id, $assoc=false) { $db = rcube::get_instance()-&g

我找到了这个插件。不过,由于我使用的是Windows,所以我将其用作电子邮件服务器。我仍然尝试了这个插件,可以很好地使用默认字段(名称、电子邮件和域)。我在表中添加了vcard字段,尽管您在文档中找不到它。我还调整了
sql\u global\u backend.php
,并添加了一些源于
rcube\u 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\u 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视图中,它是这样的:


尝试使用以下方法将
vcard
提取为字符串


您能发布convert\u db\u data()函数中使用的函数rcube\u vcard()吗?@KetanMalhotra。代码几乎有数千行。我上周刚下载了我的
RoundCube
,但没有重新编码。如果您可以下载它,您可以看到相同的内容。现在,它只显示
选项卡<现在缺少代码>名称和
显示名称
。是否还有其他块代码需要重新配置?@LekzFlores我想我编辑的答案一定是您需要的。。。!
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;
}