source: branches/2.2/mobile/inc/class.bo_mobilecc.inc.php @ 3595

Revision 3595, 6.9 KB checked in by eduardoalex, 13 years ago (diff)

Ticket #1412 - adição do novo layout na tela de contatos.

Line 
1<?php
2   class bo_mobilecc {
3                var $bo = null;
4                var $page_info = array (
5                                'actual_catalog' => false,
6                                'is_external_catalog' => false
7                        );
8               
9                function set_catalog($catalog) {
10                        if(strpos($catalog,'bo_global_ldap_catalog')===false) //Ldap?
11                                $this->bo= CreateObject("contactcenter.".$catalog);
12                        else {
13                                $exploded = explode("#",$catalog);
14                                $this->bo= CreateObject("contactcenter.bo_global_ldap_catalog",$exploded[1],$exploded[2],$exploded[3]);
15                                if($exploded[3]==1)
16                                        $this->page_info['is_external_catalog'] = true;
17                                else {
18                                        $this->page_info['is_external_catalog'] = false;
19                                }
20
21                        }
22                        $this->page_info['actual_catalog'] = $catalog;
23                }
24               
25               
26                /**
27                 * Busca um nome a partir do catálogo. Se nenhum for setado utilizando a função set_catalog
28                 * ou se não houverem resultados, retorna um array vazio.
29                 *
30                 * Caso o catálogo seja grupos, a busca será por títulos, caso seja
31                 * contatos pessoais, será por names_ordered, se for contato no ldap, será
32                 * por cn.
33                 *
34                 * @return array, com os ids relativos a busca
35                 * @param $name string com o nome à ser buscado.
36                 */
37                public function find($name) {
38                        if(!$this->page_info["actual_catalog"]) //Essa função
39                                return array();
40                       
41                        if($this->page_info['actual_catalog']=="bo_group_manager") { //parametros de busca para grupos
42                                $id = 'group.id_group';
43                                $what = array('group.title',$id);
44                                $search = "group.title";
45                        }
46                        else { //parametros de busca para pessoas
47                                $id = 'contact.id_contact';
48                                $search = "contact.names_ordered";
49                                $what = array('contact.names_ordered',$id);
50                        }
51                       
52                        if ((strpos($catalog,'bo_global_ldap_catalog')!==false) &&
53                                        (!$this->page_info['is_external_catalog'])) { //Ldap do expresso, leva em conta alguns atributos do expresso
54
55                                array_push($what,'contact.object_class',
56                                                'contact.account_visible',
57                                                'contact.account_status'
58                                                );
59                               
60                                $rules = array(
61                                                        0 => array(
62                                                                'field' => 'contact.object_class',
63                                                                'type'  => '=',
64                                                                'value' => 'phpgwAccount'
65                                                        ),
66                                                        1 => array(
67                                                                'field' => 'contact.account_status',
68                                                                'type'  => 'iLIKE',
69                                                                'value' => '%'
70                                                        ),
71                                                        2 => array(
72                                                                'field' => 'contact.account_visible',
73                                                                'type'  => '!=',
74                                                                'value' => '-1'
75                                                        ),
76                                                        3 => array(
77                                                                'field' => 'contact.object_class',
78                                                                'type'  => '=',
79                                                                'value' => 'inetOrgPerson'
80                                                        )
81                                                );
82                        }
83                        else{
84                                $rules = array();
85                        }
86
87                       
88                       
89                        if ($name != '') { //String em branco, não preciso adicionar essa regra
90                                array_push($rules,array(
91                                                                'field' => $search,
92                                                                'type'  => 'iLIKE',
93                                                                'value' => $name
94                                                        ));             
95                        }
96                       
97                       
98                        $ids = $this->bo->find($what,$rules,false,false,true);
99
100                        if(is_array($ids)) {
101                                foreach($ids as $id_r) { //Quero apenas os ids, como valores nas posições do array
102                                        $retorno[] = $id_r[substr($id,strpos($id,".")+1)];
103                                }
104                        }
105                        else
106                                $retorno = array();
107                        return $retorno;
108                }
109               
110                function search($name,$max_results) {
111                        if(!$this->page_info["actual_catalog"])
112                                return array();
113                       
114                        $entries = array();
115                        $ids = $this->find($name);
116                        if(empty($ids))
117                                return array();
118                        $total_count_search = count($ids);
119                        $ids = array_slice($ids,0,$max_results,true);
120                       
121                        if($this->page_info['actual_catalog']!="bo_group_manager") { //Se não for grupo, tenho que ordenar as connections
122                                $entries = $this->bo->get_multiple_entries($ids,array("names_ordered"=>true,"uidnumber"=>true,"id_contact"=>true,"connections"=>true));                 
123                                /**
124                                 * As entradas vindas de get_multiple_entries não vem com as connections
125                                 * ordenadas. Abaixo eu ordeno o array connections de cada entrada para ter
126                                 * sempre na frente os valores defaults, primeiro o default de email, depois
127                                 * o de telefone.
128                                 */
129                                foreach($entries as &$valor) {
130                                        /* Sempre iniciar os arrays, pois pode interferir na
131                                         * ordenação atual se tiverem valores antigos desnecessários
132                                         * causando erro de tamanhos inconsistentes */
133                                        $valor['catalog'] = $this->page_info['actual_catalog'];
134                                        $default = array();
135                                        $type = array();
136                                       
137                                        foreach($valor['connections'] as $key => $value) {
138                                                $default[$key] = $value['connection_is_default'];
139                                                $type[$key] = $value['id_type'];
140                                        }
141                                        array_multisort($default, SORT_DESC, $type, SORT_ASC, $valor['connections']);
142                                }//Fim da ordenação
143                        }
144                        else {
145                                        $entries = $this->bo->get_multiple_entries($ids,array("id_group"=>true,"title"=>true,"short_name"=>true));
146                                        foreach ($entries as &$group) {
147                                                $group['catalog']=$this->page_info['actual_catalog'];
148                                        }
149                                }
150                        if($total_count_search>count($ids))
151                                $entries["has_more"] = true;
152                        return $entries;
153                }
154
155                /**
156                 * Lista todos os catalogos do contact center. Seu retorno é um array no seguinte formato:
157                 *
158                 * [pos] - posição do array, incremental
159                 *      [catalog] - catalogo
160                 *      [label] - nome do catálogo
161                 *
162                 * A posição catalog para catálogos ldap, possuem o seguinte padrão:
163                 *      catalogo#dn_base#is_external
164                 *
165                 * @return
166                 */
167                function get_all_catalogs() {
168                        $retorno = array();
169                        $bo_cc = CreateObject("contactcenter.bo_contactcenter");
170                        $branchs = $bo_cc->get_catalog_tree();
171                       
172                        foreach($branchs as $branch) { //Catalogos pessoais
173                                if($branch['class']!="bo_global_ldap_catalog" && $branch['class']!="bo_catalog_group_catalog") {//Pego apenas a estrutura dos ramos vindos do banco, pois as do ldap estão confusas e com dados aparentemente inconsistentes.
174                                       
175                                        $catalog = array("catalog"=>$branch['class'],"label"=>$branch['name']);
176                                        $retorno[] = $catalog;
177                                }
178                        }
179                       
180                        $bo_ldap_manager = CreateObject("contactcenter.bo_ldap_manager");
181
182                        $branches = $bo_ldap_manager->get_all_ldap_sources();   //Ldaps expresso       
183                        if(is_array($branches)) {
184                                foreach($branches as $id=>$branch) {
185                                        $catalog = array('catalog'=>"bo_global_ldap_catalog#".
186                                                        $id."#".
187                                                        $branch['dn']."#".
188                                                        0,
189                                                        'label'=>$branch['name']);
190                                        $retorno[] = $catalog;
191                                }
192                        }
193                       
194                        $branches = $bo_ldap_manager->get_external_ldap_sources();//Ldaps externos
195                        if(is_array($branches)) {
196                                foreach($branches as $id=>$branch) {
197                                        $catalog =array('catalog'=>"bo_global_ldap_catalog#".
198                                                        $id."#".
199                                                        $branch['dn']."#".
200                                                        1,
201                                                        'label'=>$branch['name']);
202                                }
203                                $retorno[] = $catalog;
204                        }
205                        return $retorno;
206                }
207               
208                function remove_multiple_entries($ids) {
209                        $errors = array();
210                        $return = array();
211                        if($this->page_info['actual_catalog']==='bo_group_manager')
212                                $soGroup = CreateObject('contactcenter.so_group');
213                        foreach($ids as $id) {
214                                if($this->page_info['actual_catalog']==='bo_group_manager') {
215                                        $data = array ('id_group' => $id);
216                                        $check = $soGroup->delete($data);
217                                }
218                                else
219                                        $check = $this->bo->remove_single_entry($id);
220                               
221                                if(!$check)
222                                        $errors[] = $id;
223                        }
224                        $return['success'] = empty($errors)?true:false;
225                        $return['errors_ids'] = $errors;
226                        return $return;
227                }
228               
229          }
230?>
Note: See TracBrowser for help on using the repository browser.