source: sandbox/webservice/api/adapters/CatalogAdapter.php @ 6149

Revision 6149, 3.5 KB checked in by niltonneto, 12 years ago (diff)

Ticket #2507 - Restruturado diretório para alinhamento com projeto REST.

  • Property svn:executable set to *
Line 
1<?php
2
3
4class CatalogAdapter extends ExpressoAdapter { 
5        private $minArgumentSearch;
6        private $userId;
7        private $ldapCatalog;
8
9        public function __construct($id){
10                parent::__construct($id);
11                $prefs = $GLOBALS['phpgw']->preferences->read();
12                $this-> setMinArgumentSearch($prefs['expressoMail']['search_characters_number']);
13        }
14       
15        protected function setMinArgumentSearch($minArgumentSearch){
16                $this->minArgumentSearch = $minArgumentSearch;
17        }
18       
19        protected function getMinArgumentSearch(){
20                return $this-> minArgumentSearch;
21        }
22       
23        protected function getUserId(){
24                return $GLOBALS['phpgw_info']['user']['account_id'];
25        }               
26
27       
28        protected function getLdapCatalog(){
29                if(!$this->ldapCatalog) {
30                        $catalog_config = CreateObject("contactcenter.bo_ldap_manager");
31                        $_SESSION['phpgw_info']['expressomail']['ldap_server'] = $catalog_config ? $catalog_config->srcs[1] : null;
32                        $this->ldapCatalog = CreateObject("expressoMail1_2.ldap_functions");
33                }
34       
35                return $this->ldapCatalog;
36        }
37       
38        protected function getDb(){
39                return $GLOBALS['phpgw']->db;
40        }       
41       
42        protected function getUserLdapAttrs($mail)
43        {
44                $filter="(&(phpgwAccountType=u)(mail=".$mail."))";
45                $ldap_context = $_SESSION['phpgw_info']['expressomail']['ldap_server']['dn'];
46                $justthese = array("dn", 'jpegPhoto','givenName', 'sn');
47                $this->getLdapCatalog()->ldapConnect(true);
48                $ds = $this->getLdapCatalog()->ds;
49                if ($ds){
50                        $sr = @ldap_search($ds, $ldap_context, $filter, $justthese);   
51                        if ($sr) {
52                                $entry = ldap_first_entry($ds, $sr);
53                                if($entry) {                                                                   
54                                        $givenName = @ldap_get_values_len($ds, $entry, "givenname");
55                                        $sn = @ldap_get_values_len($ds, $entry, "sn");
56                                        $contactHasImagePicture = (@ldap_get_values_len($ds, $entry, "jpegphoto") ? 1 : 0);
57                                        $dn = ldap_get_dn($ds, $entry);
58                                        return array(
59                                                "contactID" => urlencode($dn),
60                                                "contactFirstName" => $givenName[0],
61                                                "contactLastName"       => $sn[0],
62                                                "contactHasImagePicture" => $contactHasImagePicture
63                                        );
64                                }
65                        }
66                }
67                return false;
68        }
69       
70        protected function getUserLdapPhoto($contactID) {               
71                $ldap_context = $_SESSION['phpgw_info']['expressomail']['ldap_server']['dn'];
72                $justthese = array("dn", 'jpegPhoto','givenName', 'sn');
73                $this->getLdapCatalog()->ldapConnect(true);
74                $ds = $this->getLdapCatalog()->ds;             
75               
76                if ($ds){
77                        $resource = @ldap_read($ds, $contactID, "phpgwaccounttype=u");
78                        $n_entries = @ldap_count_entries($ds, $resource);
79
80                        if ( $n_entries == 1) {                 
81                                $first_entry = ldap_first_entry($ds, $resource);
82                                $obj = ldap_get_attributes($ds, $first_entry);
83                               
84                                if($obj['jpegPhoto']){
85                                        return ldap_get_values_len( $ds, $first_entry, "jpegPhoto");
86                                }
87                        }                                                               
88                }
89                return false;
90        }       
91       
92        protected function getGlobalContacts($search, $uidNumber){
93                $contacts = array();
94                $params = array ("search_for" => $search);
95                $result = $this->getLdapCatalog()->quicksearch($params);
96
97                foreach($result as $i => $row) {
98                        if(is_int($i)) {
99                                $contacts[$i] = array(
100                                        'contactMails'  => array($result[$i]['mail']),
101                                        'contactPhones' => array($result[$i]['phone']),
102                                        'contactAlias' => "",                                   
103                                        'contactFullName'       => ($result[$i]['cn'] != null ? mb_convert_encoding($row['cn'],"UTF8", "ISO_8859-1") : ""),
104                                        'contactBirthDate'      => "",
105                                        'contactNotes'          => ""
106                                );
107                                // Buscar atributos faltantes.
108                                if(is_array($this->getUserLdapAttrs($result[$i]['mail'])))
109                                        $contacts[$i] = array_merge($this->getUserLdapAttrs($result[$i]['mail']), $contacts[$i]);                               
110                        }
111                }
112                $result = array ('contacts' => $contacts);
113                $this->setResult($result);
114                return $this->getResponse();
115        }
116}
Note: See TracBrowser for help on using the repository browser.