2017-02-09 13 views
4

RoundCubeglobal address book 플러그인을 찾았습니다. iRedMail입니다. 나는 윈도우와 일하고 있기 때문에 내 전자 메일 서버로 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 

업데이트]

이 같은 내 테이블 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

이 작업을 수행 할 수 없습니다. –