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

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

Ticket #1406 - Novos ajustes de layout para o resultado da busca

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($this->page_info['actual_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                        $ids = $this->bo->find($what,$rules,array('order'=>$search),false,true);
97
98                        if(is_array($ids)) {
99                                foreach($ids as $id_r) { //Quero apenas os ids, como valores nas posições do array
100                                        $retorno[] = $id_r[substr($id,strpos($id,".")+1)];
101                                }
102                        }
103                        else
104                                $retorno = array();
105                        return $retorno;
106                }
107               
108                function search($name,$max_results) {
109                        if(!$this->page_info["actual_catalog"])
110                                return array();
111                       
112                        $entries = array();
113                        $ids = $this->find($name);
114                        if(empty($ids))
115                                return array();
116                        $total_count_search = count($ids);
117                        $ids = array_slice($ids,0,$max_results,true);
118                       
119                        if($this->page_info['actual_catalog']!="bo_group_manager") { //Se não for grupo, tenho que ordenar as connections
120                                $entries = $this->bo->get_multiple_entries($ids,array("names_ordered"=>true,"uidnumber"=>true,"id_contact"=>true,"connections"=>true));                 
121                                /**
122                                 * As entradas vindas de get_multiple_entries não vem com as connections
123                                 * ordenadas. Abaixo eu ordeno o array connections de cada entrada para ter
124                                 * sempre na frente os valores defaults, primeiro o default de email, depois
125                                 * o de telefone.
126                                 */
127                                foreach($entries as &$valor) {
128                                        /* Sempre iniciar os arrays, pois pode interferir na
129                                         * ordenação atual se tiverem valores antigos desnecessários
130                                         * causando erro de tamanhos inconsistentes */
131                                        $valor['catalog'] = $this->page_info['actual_catalog'];
132                                        $default = array();
133                                        $type = array();
134                                       
135                                        foreach($valor['connections'] as $key => $value) {
136                                                $default[$key] = $value['connection_is_default'];
137                                                $type[$key] = $value['id_type'];
138                                        }
139                                        array_multisort($default, SORT_DESC, $type, SORT_ASC, $valor['connections']);
140                                }//Fim da ordenação
141                        }
142                        else {
143                                        $entries = $this->bo->get_multiple_entries($ids,array("id_group"=>true,"title"=>true,"short_name"=>true));
144                                        foreach ($entries as &$group) {
145                                                $group['catalog']=$this->page_info['actual_catalog'];
146                                        }
147                                }
148                        if($total_count_search>count($ids))
149                                $entries["has_more"] = true;
150                        return $entries;
151                }
152
153                /**
154                 * Lista todos os catalogos do contact center. Seu retorno é um array no seguinte formato:
155                 *
156                 * [pos] - posição do array, incremental
157                 *      [catalog] - catalogo
158                 *      [label] - nome do catálogo
159                 *
160                 * A posição catalog para catálogos ldap, possuem o seguinte padrão:
161                 *      catalogo#dn_base#is_external
162                 *
163                 * @return
164                 */
165                function get_all_catalogs() {
166                        $retorno = array();
167                        $bo_cc = CreateObject("contactcenter.bo_contactcenter");
168                        $branchs = $bo_cc->get_catalog_tree();
169                       
170                        foreach($branchs as $branch) { //Catalogos pessoais
171                                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.
172                                       
173                                        $catalog = array("catalog"=>$branch['class'],"label"=>$branch['name']);
174                                        $retorno[] = $catalog;
175                                }
176                        }
177                       
178                        $bo_ldap_manager = CreateObject("contactcenter.bo_ldap_manager");
179
180                        $branches = $bo_ldap_manager->get_all_ldap_sources();   //Ldaps expresso       
181                        if(is_array($branches)) {
182                                foreach($branches as $id=>$branch) {
183                                        $catalog = array('catalog'=>"bo_global_ldap_catalog#".
184                                                        $id."#".
185                                                        $branch['dn']."#".
186                                                        0,
187                                                        'label'=>$branch['name']);
188                                        $retorno[] = $catalog;
189                                }
190                        }
191                       
192                        $branches = $bo_ldap_manager->get_external_ldap_sources();//Ldaps externos
193                        if(is_array($branches)) {
194                                foreach($branches as $id=>$branch) {
195                                        $catalog =array('catalog'=>"bo_global_ldap_catalog#".
196                                                        $id."#".
197                                                        $branch['dn']."#".
198                                                        1,
199                                                        'label'=>$branch['name']);
200                                }
201                                $retorno[] = $catalog;
202                        }
203                        return $retorno;
204                }
205               
206                function remove_multiple_entries($ids) {
207                        $errors = array();
208                        $return = array();
209                        if($this->page_info['actual_catalog']==='bo_group_manager')
210                                $soGroup = CreateObject('contactcenter.so_group');
211                        foreach($ids as $id) {
212                                if($this->page_info['actual_catalog']==='bo_group_manager') {
213                                        $data = array ('id_group' => $id);
214                                        $check = $soGroup->delete($data);
215                                }
216                                else
217                                        $check = $this->bo->remove_single_entry($id);
218                               
219                                if(!$check)
220                                        $errors[] = $id;
221                        }
222                        $return['success'] = empty($errors)?true:false;
223                        $return['errors_ids'] = $errors;
224                        return $return;
225                }
226               
227          }
228?>
Note: See TracBrowser for help on using the repository browser.