source: trunk/mobile/inc/class.ui_mobilecc.inc.php @ 491

Revision 491, 11.0 KB checked in by eduardoalex, 16 years ago (diff)

Incrementada busca em todos os catálogos.
Falta ainda busca por OU quando for catálogo de ldap, e filtro para buscar apenas nomes com mais de 4 letras

Line 
1<?php
2        class ui_mobilecc{
3               
4                var $nextmatchs;
5                var $bo;
6                var $page_info = array (
7                                'actual_catalog' => false,
8                                'is_external_catalog' => false
9                        );
10               
11                var $public_functions = array(
12                        'contacts_list' => true,
13                );
14               
15                /**
16                 * Construtor...
17                 *
18                 */
19                public function ui_mobilecc() {
20                        $this->nextmatchs       = CreateObject('phpgwapi.nextmatchs');
21                }
22               
23                /**
24                 * Inicia um BO de catálogo do módulo de contactcenter.
25                 * @return
26                 * @param $catalog String com o catálogo
27                 */
28                private function set_catalog($catalog) {
29                        if(strpos($catalog,'bo_global_ldap_catalog')===false) //Ldap?
30                                $this->bo= CreateObject("contactcenter.".$catalog);
31                        else {
32                                $exploded = explode("#",$catalog);
33                                $this->bo= CreateObject("contactcenter.bo_global_ldap_catalog",$exploded[1],$exploded[2],$exploded[3]);
34                                if($exploded[3]==1)
35                                        $this->page_info['is_external_catalog'] = true;
36                                else {
37                                        $this->page_info['is_external_catalog'] = false;
38                                }
39                                       
40                        }
41                        $this->page_info['actual_catalog'] = $catalog;
42                }
43               
44                /**
45                 * Busca um nome a partir do catálogo. Se nenhum for informado previamente,
46                 * retorna um array vazio.
47                 *
48                 * Caso o catálogo atual seja grupos, a busca será por títulos, caso seja
49                 * contatos pessoais, será por names_ordered, se for contato no ldap, será
50                 * por cn.
51                 *
52                 * @return array, com os ids relativos a busca
53                 * @param $name string com o nome à ser buscado.
54                 */
55                public function find($name) {
56                        if(!$this->page_info["actual_catalog"])
57                                return array();
58                       
59                        if($this->page_info['actual_catalog']=="bo_group_manager") { //parametros de busca para grupos
60                                $id = 'group.id_group';
61                                $what = array('group.title',$id);
62                                $search = "group.title";
63                        }
64                        else { //parametros de busca para pessoas
65                                $id = 'contact.id_contact';
66                                $search = "contact.names_ordered";
67                                $what = array('contact.names_ordered',$id);
68                        }
69                       
70                        if ((strpos($this->page_info["actual_catalog"],'bo_global_ldap_catalog')!==false) &&
71                                        (!$this->page_info['is_external_catalog'])) { //Ldap do expresso, leva em conta alguns atributos do expresso
72
73                                array_push($what,'contact.object_class',
74                                                'contact.account_visible',
75                                                'contact.account_status'
76                                                );
77                               
78                                $rules = array(
79                                                        0 => array(
80                                                                'field' => 'contact.object_class',
81                                                                'type'  => '=',
82                                                                'value' => 'phpgwAccount'
83                                                        ),
84                                                        1 => array(
85                                                                'field' => 'contact.account_status',
86                                                                'type'  => 'iLIKE',
87                                                                'value' => '%'
88                                                        ),
89                                                        2 => array(
90                                                                'field' => 'contact.account_visible',
91                                                                'type'  => '!=',
92                                                                'value' => '-1'
93                                                        ),
94                                                        3 => array(
95                                                                'field' => 'contact.object_class',
96                                                                'type'  => '=',
97                                                                'value' => 'inetOrgPerson'
98                                                        )
99                                                );
100                        }
101                        else{
102                                $rules = array();
103                        }
104
105                       
106                       
107                        if ($name != '') { //String em branco, não preciso adicionar essa regra
108                                array_push($rules,array(
109                                                                'field' => $search,
110                                                                'type'  => 'iLIKE',
111                                                                'value' => '%'.$name.'%'
112                                                        ));             
113                        }
114                                                                                                               
115                        $ids = $this->bo->find($what,$rules);
116
117                        foreach($ids as $id_r) { //Quero apenas os ids, como valores nas posições do array
118                                $retorno[] = $id_r[substr($id,strpos($id,".")+1)];
119                        }
120                       
121                        return $retorno;
122                }
123               
124                /**
125                 * Monta a lista de contatos na tela, de acordo com a busca. Se não foi feita
126                 * busca, mostra apenas o formulário para pesquisa.
127                 *
128                 * @return
129                 */
130               
131                function contacts_list() {
132
133                        $entries = array();
134                        $actual_page = 0;
135
136                        /////////////// Pego os ids referente a consulta, se a mesma foi feita
137                        if(isset($_POST['name'])) {
138                                $this->set_catalog($_POST['catalog']);
139                                $ids = $this->find($_POST['name']);
140                                if(is_array($ids)) {
141                                        $actual_page = 1;
142                                        $_SESSION["mobile_search_ids"] = $ids;
143                                        $_SESSION["mobile_search_catalog"] = $_POST['catalog'];
144                                        $ids = array_slice($ids,0,10); //Apenas a primeira página
145                                }
146                        }
147                        else if(isset($_GET['page'])) {
148                                $this->set_catalog($_SESSION["mobile_search_catalog"]);
149                                $ids = array_slice($_SESSION["mobile_search_ids"],($_GET['page']-1)*10,10); //Página solicitada
150                                $actual_page = $_GET['page'];
151                        }
152                        else
153                                $ids = false;
154
155                        ///////////// Pego os dados dos ids da página em questão.
156                        if(!is_array($ids) || count($_SESSION["mobile_search_ids"])>100) {
157                                $entries = array();
158                        }
159                        else { //Só pego os dados completos caso haja resultado na busca
160                                if($this->page_info['actual_catalog']!="bo_group_manager") { //Se não for grupo, tenho que ordenar as connections
161                                        $entries = $this->bo->get_multiple_entries($ids,array("names_ordered"=>true,"id_contact"=>true,"connections"=>true));
162                                        /**
163                                         * As entradas vindas de get_multiple_entries não vem com as connections
164                                         * ordenadas. Abaixo eu ordeno o array connections de cada entrada para ter
165                                         * sempre na frente os valores defaults, primeiro o default de email, depois
166                                         * o de telefone.
167                                         */
168                                        foreach($entries as &$valor) {
169                                                foreach($valor['connections'] as $key => $value) {
170                                                        $default[$key] = $value['connection_is_default'];
171                                                        $type[$key] = $value['id_type'];
172                                                }
173                                                array_multisort($default, SORT_DESC, $type, SORT_ASC, $valor['connections']);
174                                        }//Fim da ordenação
175                                }
176                                else {
177                                        $entries = $this->bo->get_multiple_entries($ids,array("id_group"=>true,"title"=>true,"short_name"=>true));
178                                }
179                        }
180                       
181                        ///////////////// Monto os dados gerais da página no template.
182                        $p = CreateObject('phpgwapi.Template',PHPGW_APP_TPL);
183                        $p->set_file(Array('entries' => 'cc_main.tpl'));
184
185                        $p->set_block('entries','body');
186                        $p->set_block('entries','people_header');
187                        $p->set_block('entries','group_header');
188                        $p->set_block('entries','row');
189                        $p->set_block('entries','row_group');
190                        $p->set_block('entries','row_empty');
191                        $p->set_block('entries','option');
192                        $p->set_block('entries','page');
193                        $p->set_block('entries','page_no_link');
194                       
195                       
196                        $texts = array(
197                                'lang_name' => lang("Name"),
198                                'lang_catalog' => lang("Catalog"),
199                                'lang_buscar' => lang("Search")
200                                );
201                        $p->set_var($texts);
202
203                        /////////// Preenche o combo de catálogos
204                       
205                        $bo_cc = CreateObject("contactcenter.bo_contactcenter");
206                        $branchs = $bo_cc->get_catalog_tree();
207                       
208                        foreach($branchs as $branch) {
209
210                                if($branch['class']!="bo_global_ldap_catalog")
211                                        $p->set_var(array('option_value'=>$branch['class'],'option_text'=>$branch['name']));
212                               
213                                else
214                                        $p->set_var(array('option_value'=>$branch['class']."#".
215                                                        $branch['class_args'][0]."#".
216                                                        $branch['value']."#".
217                                                        $branch['external'],
218                                                        'option_text'=>$branch['name'])); //No value eu passo também o id, o contexto e se é externo, quando é um ldap
219
220                                if(($this->page_info['actual_catalog']==$branch['class']) ||
221                                                ($this->page_info['actual_catalog']==$branch['class']."#".$branch['class_args'][0]."#".$branch['value']."#".$branch['external']))
222                                        $p->set_var('selected','selected');
223                                else
224                                        $p->set_var('selected','');
225                                $p->parse('options','option',True);     
226                        }
227
228                        /////////// Monta o resultado da pesquisa
229                        $p->set_var('th_theme',$GLOBALS['phpgw_info']['theme']['th_bg']);
230                                               
231                        if(empty($entries) && isset($_POST["name"]) && count($_SESSION["mobile_search_ids"])<=100) { //Se foi feita a busca e não teve resultados...
232                                $p->set_var('message',lang('No matches found'));
233                                $p->parse('rows','row_empty',True);
234                        }
235                        else if(count($_SESSION["mobile_search_ids"])>100) { //Muitos resultados...
236                                $p->set_var('message',lang('too many results'));
237                                $p->parse('rows','row_empty',True);                     
238                        }
239                        else if((isset($_POST["name"])) || (isset($_GET["page"]))){ //Renderizar...
240                               
241                                /////////// Preenche o cabeçalho da consulta
242                                if($this->page_info['actual_catalog']!="bo_group_manager") {
243                                        $p->set_var(
244                                                        array('lang_people_name' => lang("Name"),
245                                                                'lang_phone' => lang("Phone"),
246                                                                'lang_mail' => lang("Email")));
247                                        $p->parse('header','people_header',True);
248                                }
249                                else {
250                                        $p->set_var(
251                                                        array('lang_group_name' => lang("Name"),
252                                                                'lang_title' => lang("Title")
253                                                                ));
254                                        $p->parse('header','group_header',True);
255                                }
256                               
257                                /////////// Preencho as linhas do resultado
258                                foreach($entries as $entry) {
259                                        $this->nextmatchs->template_alternate_row_color($p);
260                                        if(($this->page_info['actual_catalog']!="bo_group_manager") &&
261                                                         (strpos($this->page_info['actual_catalog'],'bo_global_ldap_catalog')===false)){ //People
262                                                $var = array('row_nome'=>$entry['names_ordered']);
263                                                $conn1 = array_shift($entry['connections']);
264                                                if(($conn1==NULL)||($conn1['connection_is_default']!=1)) {
265                                                        $var['row_telefone'] = '&nbsp;';
266                                                        $var['row_email'] = '&nbsp;';
267                                                }
268                                                else if($conn1['id_type']==1) {
269                                                        $var['row_email'] = $conn1['connection_value'];
270                                                        $conn2=array_shift($entry['connections']);
271                                                        if(($conn2==NULL)||($conn2['connection_is_default']!=1))
272                                                                $var['row_telefone'] = '&nbsp';
273                                                        else
274                                                                $var['row_telefone'] = $conn2['connection_value'];
275                                                }
276                                                else if($conn1['id_type']==2) {
277                                                        $var['row_email'] = '&nbsp;';
278                                                        $var['row_telefone'] = $conn1['connection_value'];
279                                                }
280                                                $p->set_var($var);
281                                                $p->parse('rows','row',True);
282                                        }
283                                        else if($this->page_info['actual_catalog']=="bo_group_manager"){ //Grupos
284                                                $var = array(
285                                                                'row_group_name'=>$entry['short_name'],
286                                                                'row_title' => $entry['title']
287                                                                );
288                                               
289                                                $p->set_var($var);
290                                                $p->parse('rows','row_group',True);
291                                        }
292                                        else { //Ldap
293                                                $var = array('row_nome'=>$entry['names_ordered'][0]);
294                                                $conn1 = array_shift($entry['connections']);
295                                                if(($conn1==NULL)) {
296                                                        $var['row_telefone'] = '&nbsp;';
297                                                        $var['row_email'] = '&nbsp;';
298                                                }
299                                                else if($conn1['id_type']==1) {
300                                                        $var['row_email'] = $conn1['connection_value'];
301                                                        $conn2=array_shift($entry['connections']);
302                                                        if($conn2==NULL)
303                                                                $var['row_telefone'] = '&nbsp';
304                                                        else
305                                                                $var['row_telefone'] = $conn2['connection_value'];
306                                                }
307                                                else if($conn1['id_type']==2) {
308                                                        $var['row_email'] = '&nbsp;';
309                                                        $var['row_telefone'] = $conn1['connection_value'];
310                                                }
311                                                $p->set_var($var);
312                                                $p->parse('rows','row',True);
313                                        }
314                                }
315                        }
316                       
317                        ////////////////// Monto a paginação
318                        if(!empty($entries) && count($_SESSION["mobile_search_ids"])<=100) {
319                                $num_pages = count($_SESSION["mobile_search_ids"])/10;
320                               
321                                if((count($_SESSION["mobile_search_ids"])%10!=0) || ($num_pages<1))
322                                        $num_pages++;
323                                if($actual_page!=0) {
324                                        for($i=1;$i<=$num_pages;$i++) {
325                                                $p->set_var('num_page',$i);
326                                                $p->set_var('display_page',$i);
327                                                if($i!=$actual_page)
328                                                        $p->parse('pages','page',True);
329                                                else
330                                                        $p->parse('pages','page_no_link',True);
331                                        }
332                                }
333                               
334                                if($actual_page>1) {
335                                        $p->set_var('num_page',$actual_page-1);
336                                        $p->set_var('display_page','<');
337                                        $p->parse('back','page',True);
338                                }
339                               
340                                if(($actual_page!=floor($num_pages)) && (floor($num_pages)>1) && ($actual_page!=0)) {
341                                        $p->set_var('num_page',$actual_page+1);
342                                        $p->set_var('display_page','>');
343                                        $p->parse('next','page',True);
344                                }       
345                        }                       
346                       
347                        $p->pfp('out','body');
348                }
349               
350        }
351?>
Note: See TracBrowser for help on using the repository browser.