2017-02-09 3 views
4

Ich fand diese global address book Plugin für RoundCube mit iRedMail. Ich benutze hMailServer als meinen E-Mail-Server obwohl ich mit Windows arbeite. Ich habe immer noch versucht dieses Plugin und funktioniert gut mit den Standardfeldern (Name, E-Mail und Domäne). Ich fügte vcard Feld in der Tabelle hinzu, obwohl Sie es in der Dokumentation nicht finden können. Ich zwickte auch die sql_global_backend.php und einige Codes hinzufügen, die ursprünglich aus rcube_contacts.php kommen:Roundcube-SQL-Global-Adress-Bücher benutzerdefinierte 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; 
} 

Dieser Code ermöglicht die Ansicht (Vorlage von roundcube) die vcard Feld zu lesen. Aber es kann nicht alles lesen.

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 

AKTUALISIERT

Mein Tisch global_addressbook sieht wie folgt aus:

_______________________________________________________________________________________________________________ 
| |   |    |   |   |   |            | 
| 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         | 

Und es so aussehen in der RoundCube Ansicht:

enter image description here

+0

Können Sie die in der Funktion convert_db_data() verwendete Funktion rcube_vcard() posten? –

+0

@KetanMalhotra. Der Code ist fast Tausende von Zeilen. Ich habe gerade meinen 'RoundCube' letzte Woche heruntergeladen und ich habe ihn nicht neu programmiert. Sie können dasselbe sehen, wenn Sie es herunterladen könnten. –

Antwort

0

Versuchen Sie diesen Weg, indem Sie vcard als Zeichenfolge mit der Methode extrahieren.

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

Nun wird nur die Registerkarte "Gruppen" angezeigt. 'Name' und' Anzeigename' fehlen jetzt. Gibt es andere Blockcodes, die ich neu konfigurieren muss? –

+0

@LekzFlores Ich denke meine bearbeitete Antwort muss sein, was Sie brauchen ...! –

+0

Das funktioniert auch nicht. –

Verwandte Themen