2017-02-09 14 views
4

このglobal address bookプラグインのRoundCubeにはiRedMailがあります。私はWindowsで作業しているので、私はhMailServerを自分の電子メールサーバとして使用しています。私はまだこのプラグインを試して、デフォルトのフィールド(の名前,のメールドメイン)でうまく動作します。私はvcardフィールドをテーブルに追加しましたが、ドキュメントには見つかりませんでした。私はまた、sql_global_backend.phpを微調整し、rcube_contacts.phpから元々来ていくつかのコードを追加します。Roundcube-SQL-Global-Address-Booksカスタム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; 
} 

このコードはのvcardフィールドを読み取るためにビュー(roundcubeのテンプレート)を可能にします。しかし、それはすべてを読むことはできません。

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 

UPDATED

このような私のテーブル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

convert_db_data()関数で使用される関数rcube_vcard()を投稿できますか? –

+0

@KetanMalhotra。コードはほぼ何千もの行です。私は先週、私の「RoundCube」をダウンロードしましたが、私はそれを再コーディングしませんでした。あなたがそれをダウンロードできる場合は、同じことが分かります。 –

答えて

0

メソッドを使用してvcardを文字列として抽出してください。

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

これは 'Groups'タブのみを表示します。 '名前'と '表示名'は今不足しています。私が再構成する必要がある他のブロックコードはありますか? –

+0

@LekzFlores私の編集した答えはあなたが必要とするものでなければならないと思う...! –

+0

これは動作しません。 –

関連する問題