Changeset 527 for trunk/mobile


Ignore:
Timestamp:
10/13/08 12:41:14 (16 years ago)
Author:
eduardoalex
Message:

A antiga implementação de busca em todos os catálogos apresentava um erro
na geração do combo que agora foi resolvido através de uma nova implementação.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/mobile/inc/class.ui_mobilecc.inc.php

    r517 r527  
    55                var $bo; 
    66                var $page_info = array ( 
    7                                 'actual_catalog' => false 
     7                                'actual_catalog' => false, 
     8                                'is_external_catalog' => false 
    89                        ); 
    910                 
     
    1213                ); 
    1314                 
    14                 function ui_mobilecc() { 
     15                /** 
     16                 * Construtor... 
     17                 *  
     18                 */ 
     19                public function ui_mobilecc() { 
    1520                        $this->nextmatchs       = CreateObject('phpgwapi.nextmatchs'); 
    1621                } 
    1722                 
    18                 function set_catalog($catalog) { 
    19                         $this->bo= CreateObject("contactcenter.".$catalog); 
     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                        } 
    2041                        $this->page_info['actual_catalog'] = $catalog; 
    2142                } 
    2243                 
    23                 function find($name) { 
    24                         if(($this->page_info['actual_catalog']!="bo_people_catalog")  
    25                                 && ($this->page_info['actual_catalog']!="bo_group_manager") 
    26                                 && ($this->page_info['actual_catalog']!="bo_shared_catalog_manager")) { 
     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                                 
    2778                                $rules = array( 
    2879                                                        0 => array( 
     
    51102                                $rules = array(); 
    52103                        } 
    53                         $search='contact.names_ordered'; 
    54                         $id = 'contact.id_contact'; 
    55                         if($this->page_info['actual_catalog']=="bo_group_manager") { 
    56                                 $search = 'group.title'; 
    57                                 $id = 'group.id_group'; 
    58                         } 
    59                          
    60                         array_push($rules,array( 
    61                                                         'field' => $search, 
    62                                                         'type'  => 'iLIKE', 
    63                                                         'value' => '%'.$name.'%' 
    64                                                 ));              
    65                                          
    66                         $ids = $this->bo->find(array($id),$rules); 
    67                         foreach($ids as $id_r) { 
     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 
    68118                                $retorno[] = $id_r[substr($id,strpos($id,".")+1)]; 
    69119                        } 
     120                         
    70121                        return $retorno; 
    71122                } 
    72                          
     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                 
    73131                function contacts_list() { 
    74                          
     132 
    75133                        $entries = array(); 
    76134                        $actual_page = 0; 
    77                         /////////////// Pego os ids referente a consulta, se a mesma foi feita 
    78                         if(isset($_POST['name'])) { 
    79                                 $this->set_catalog($_POST['catalog']); 
    80                                 $ids = $this->find($_POST['name']); 
    81                                 if(is_array($ids)) { 
    82                                         $actual_page = 1; 
    83                                         $_SESSION["mobile_search_ids"] = $ids; 
    84                                         $_SESSION["mobile_search_catalog"] = $_POST['catalog']; 
    85                                         $ids = array_slice($ids,0,10); //Apenas a primeira página 
    86                                 } 
    87                         } 
    88                         else if(isset($_GET['page'])) { 
    89                                 $this->set_catalog($_SESSION["mobile_search_catalog"]); 
    90                                 $ids = array_slice($_SESSION["mobile_search_ids"],($_GET['page']-1)*10,10); //Página solicitada 
    91                                 $actual_page = $_GET['page']; 
    92                         } 
    93                         else  
     135 
     136                        if(isset($_POST['name']) && strlen($_POST['name'])<4) //Busca apenas para nomes com mais de 4 palavras 
    94137                                $ids = false; 
    95                                  
     138                        else { 
     139                                /////////////// Pego os ids referente a consulta, se a mesma foi feita 
     140                                if(isset($_POST['name'])) { 
     141                                        $this->set_catalog($_POST['catalog']); 
     142                                        $ids = $this->find($_POST['name']); 
     143                                        if(is_array($ids)) { 
     144                                                $actual_page = 1; 
     145                                                $_SESSION["mobile_search_ids"] = $ids; 
     146                                                $_SESSION["mobile_search_catalog"] = $_POST['catalog']; 
     147                                                $ids = array_slice($ids,0,10); //Apenas a primeira página 
     148                                        } 
     149                                } 
     150                                else if(isset($_GET['page'])) {  
     151                                        $this->set_catalog($_SESSION["mobile_search_catalog"]); 
     152                                        $ids = array_slice($_SESSION["mobile_search_ids"],($_GET['page']-1)*10,10); //Página solicitada 
     153                                        $actual_page = $_GET['page']; 
     154                                } 
     155                                else  
     156                                        $ids = false; 
     157                        } 
     158 
    96159                        ///////////// Pego os dados dos ids da página em questão. 
    97                         if(!is_array($ids)) { 
     160                        if(!is_array($ids) || count($_SESSION["mobile_search_ids"])>100 || (isset($_POST["name"]) && strlen($_POST['name'])<4)) {  
    98161                                $entries = array(); 
    99162                        } 
    100163                        else { //Só pego os dados completos caso haja resultado na busca 
    101                                 if(($this->page_info['actual_catalog']=="bo_people_catalog")) { 
     164                                if($this->page_info['actual_catalog']!="bo_group_manager") { //Se não for grupo, tenho que ordenar as connections 
    102165                                        $entries = $this->bo->get_multiple_entries($ids,array("names_ordered"=>true,"id_contact"=>true,"connections"=>true)); 
    103166                                        /** 
     
    113176                                                } 
    114177                                                array_multisort($default, SORT_DESC, $type, SORT_ASC, $valor['connections']); 
    115                                         } 
     178                                        }//Fim da ordenação 
    116179                                } 
    117180                                else { 
     
    119182                                } 
    120183                        } 
    121  
     184                         
    122185                        ///////////////// Monto os dados gerais da página no template. 
    123186                        $p = CreateObject('phpgwapi.Template',PHPGW_APP_TPL); 
     
    142205                        $p->set_var($texts); 
    143206 
    144                         /////////// Preenche o combo 
    145                         $p->set_var(array('option_value'=>'bo_people_catalog','option_text'=>'Pessoal')); 
    146                         if($this->page_info['actual_catalog']=="bo_people_catalog") 
    147                                 $p->set_var('selected','selected'); 
    148                         else 
    149                                 $p->set_var('selected',''); 
    150                         $p->parse('options','option',True); 
    151                         $p->set_var(array('option_value'=>'bo_group_manager','option_text'=>'Grupos')); 
    152                         if($this->page_info['actual_catalog']=="bo_group_manager") 
    153                                 $p->set_var('selected','selected'); 
    154                         else 
    155                                 $p->set_var('selected',''); 
    156                         $p->parse('options','option',True); 
    157  
     207                        /////////// Preenche o combo de catálogos 
     208                         
     209                        $bo_cc = CreateObject("contactcenter.bo_contactcenter"); 
     210                        $branchs = $bo_cc->get_catalog_tree(); 
     211                         
     212         
     213                        foreach($branchs as $branch) { //Pego apenas a estrutura dos ramos vindos do banco, pois as do ldap estão confusas e com dados aparentemente inconsistentes. 
     214                                if($branch['class']!="bo_global_ldap_catalog" && $branch['class']!="bo_catalog_group_catalog") { 
     215                                        $p->set_var(array('option_value'=>$branch['class'],'option_text'=>$branch['name'])); 
     216 
     217                                        if($this->page_info['actual_catalog']==$branch['class']) 
     218                                                $p->set_var('selected','selected'); 
     219                                        else 
     220                                                $p->set_var('selected',''); 
     221                                        $p->parse('options','option',True); 
     222                                } 
     223                                         
     224                        } 
     225                         
     226                        /////////// Preenche o combo, com dados do ldap 
     227                        $bo_ldap_manager = CreateObject("contactcenter.bo_ldap_manager"); 
     228                        $branchs = $bo_ldap_manager->get_all_ldap_sources(); 
     229                         
     230                        foreach($branchs as $id=>$branch) { //Ldaps expresso 
     231                                $p->set_var(array('option_value'=>"bo_global_ldap_catalog#". 
     232                                                $id."#". 
     233                                                $branch['dn']."#". 
     234                                                0, 
     235                                                'option_text'=>$branch['name'])); //No value eu passo também o id, o contexto e se é externo, quando é um ldap 
     236 
     237                                if($this->page_info['actual_catalog']=="bo_global_ldap_catalog#".$id."#".$branch['dn']."#". 0) 
     238                                        $p->set_var('selected','selected'); 
     239                                else 
     240                                        $p->set_var('selected',''); 
     241                                $p->parse('options','option',True);      
     242                        } 
     243                         
     244                        $branchs = $bo_ldap_manager->get_external_ldap_sources(); 
     245                         
     246                        foreach($branchs as $id=>$branch) { //Ldaps externos 
     247                                $p->set_var(array('option_value'=>"bo_global_ldap_catalog#". 
     248                                                $id."#". 
     249                                                $branch['dn']."#". 
     250                                                1, 
     251                                                'option_text'=>$branch['name'])); //No value eu passo também o id, o contexto e se é externo, quando é um ldap 
     252 
     253                                if($this->page_info['actual_catalog']=="bo_global_ldap_catalog#".$id."#".$branch['dn']."#". 1) 
     254                                        $p->set_var('selected','selected'); 
     255                                else 
     256                                        $p->set_var('selected',''); 
     257                                $p->parse('options','option',True);      
     258                        } 
    158259 
    159260                        /////////// Monta o resultado da pesquisa 
    160261                        $p->set_var('th_theme',$GLOBALS['phpgw_info']['theme']['th_bg']); 
    161                         if(empty($entries) && isset($_POST["name"])) { //Se foi feita a busca e não teve resultados... 
     262                                                 
     263                        if(empty($entries) && isset($_POST["name"]) && count($_SESSION["mobile_search_ids"])<=100 && strlen($_POST['name'])>=4) { //Se foi feita a busca e não teve resultados... 
    162264                                $p->set_var('message',lang('No matches found')); 
    163265                                $p->parse('rows','row_empty',True); 
    164266                        } 
    165                         else if((isset($_POST["name"])) || (isset($_GET["page"]))){ //Se teve resultados... 
     267                        else if(count($_SESSION["mobile_search_ids"])>100) { //Muitos resultados... 
     268                                $p->set_var('message',lang('too many results')); 
     269                                $p->parse('rows','row_empty',True);                      
     270                        } 
     271                        else if(isset($_POST["name"]) && strlen($_POST['name'])<4) { //Muitos resultados... 
     272                                $p->set_var('message',lang('the search argument must have at least 4 digits')); 
     273                                $p->parse('rows','row_empty',True);                      
     274                        } 
     275                        else if((isset($_POST["name"])) || (isset($_GET["page"]))){ //Renderizar... 
     276                                 
    166277                                /////////// Preenche o cabeçalho da consulta 
    167                                 if($this->page_info['actual_catalog']=="bo_people_catalog") { 
     278                                if($this->page_info['actual_catalog']!="bo_group_manager") { 
    168279                                        $p->set_var( 
    169280                                                        array('lang_people_name' => lang("Name"), 
     
    179290                                        $p->parse('header','group_header',True); 
    180291                                } 
     292 
    181293                                /////////// Preencho as linhas do resultado 
    182294                                foreach($entries as $entry) { 
    183295                                        $this->nextmatchs->template_alternate_row_color($p); 
    184                                         if($this->page_info['actual_catalog']=="bo_people_catalog") { 
     296                                        if(($this->page_info['actual_catalog']!="bo_group_manager") && 
     297                                                         (strpos($this->page_info['actual_catalog'],'bo_global_ldap_catalog')===false)){ //People 
    185298                                                $var = array('row_nome'=>$entry['names_ordered']); 
    186299                                                $conn1 = array_shift($entry['connections']); 
     
    205318                                                $p->parse('rows','row',True); 
    206319                                        } 
    207                                         else { 
     320                                        else if($this->page_info['actual_catalog']=="bo_group_manager"){ //Grupos 
    208321                                                $var = array( 
    209322                                                                'row_group_name'=>$entry['short_name'], 
     
    214327                                                $p->parse('rows','row_group',True); 
    215328                                        } 
     329                                        else { //Ldap 
     330                                                $var = array('row_nome'=>$entry['names_ordered'][0]); 
     331                                                $conn1 = array_shift($entry['connections']); 
     332                                                if(($conn1==NULL)) { 
     333                                                        $var['row_telefone'] = '&nbsp;'; 
     334                                                        $var['row_email'] = '&nbsp;'; 
     335                                                } 
     336                                                else if($conn1['id_type']==1) { 
     337                                                        $var['row_email'] = $conn1['connection_value']; 
     338                                                        $conn2=array_shift($entry['connections']); 
     339                                                        if($conn2==NULL) 
     340                                                                $var['row_telefone'] = '&nbsp'; 
     341                                                        else 
     342                                                                $var['row_telefone'] = $conn2['connection_value']; 
     343                                                } 
     344                                                else if($conn1['id_type']==2) { 
     345                                                        $var['row_email'] = '&nbsp;'; 
     346                                                        $var['row_telefone'] = $conn1['connection_value']; 
     347                                                } 
     348                                                $var['form_action'] = "index.php?menuaction=mobile.mobilemail.new_msg"; 
     349                                                $p->set_var($var); 
     350                                                $p->parse('rows','row',True); 
     351                                        } 
    216352                                } 
    217353                        } 
    218354                         
    219355                        ////////////////// Monto a paginação 
    220                         $num_pages = count($_SESSION["mobile_search_ids"])/10; 
    221                         if((count($_SESSION["mobile_search_ids"])%10!=0) || ($num_pages<1)) 
    222                                 $num_pages++; 
    223                         if($actual_page!=0) { 
    224                                 for($i=1;$i<=$num_pages;$i++) { 
    225                                         $p->set_var('num_page',$i); 
    226                                         $p->set_var('display_page',$i); 
    227                                         if($i!=$actual_page) 
    228                                                 $p->parse('pages','page',True); 
    229                                         else 
    230                                                 $p->parse('pages','page_no_link',True); 
    231                                 } 
    232                         } 
    233                          
    234                         if($actual_page>1) { 
    235                                 $p->set_var('num_page',$actual_page-1); 
    236                                 $p->set_var('display_page','<'); 
    237                                 $p->parse('back','page',True); 
    238                         } 
    239                          
    240                         if(($actual_page!=floor($num_pages)) && (floor($num_pages)>1) && ($actual_page!=0)) { 
    241                                 $p->set_var('num_page',$actual_page+1); 
    242                                 $p->set_var('display_page','>'); 
    243                                 $p->parse('next','page',True); 
    244                         }                                
     356                        if(!empty($entries) && count($_SESSION["mobile_search_ids"])<=100) { 
     357                                $num_pages = count($_SESSION["mobile_search_ids"])/10; 
     358                                 
     359                                if((count($_SESSION["mobile_search_ids"])%10!=0) || ($num_pages<1)) 
     360                                        $num_pages++; 
     361                                if($actual_page!=0) { 
     362                                        for($i=1;$i<=$num_pages;$i++) { 
     363                                                $p->set_var('num_page',$i); 
     364                                                $p->set_var('display_page',$i); 
     365                                                if($i!=$actual_page) 
     366                                                        $p->parse('pages','page',True); 
     367                                                else 
     368                                                        $p->parse('pages','page_no_link',True); 
     369                                        } 
     370                                } 
     371                                 
     372                                if($actual_page>1) { 
     373                                        $p->set_var('num_page',$actual_page-1); 
     374                                        $p->set_var('display_page','<'); 
     375                                        $p->parse('back','page',True); 
     376                                } 
     377                                 
     378                                if(($actual_page!=floor($num_pages)) && (floor($num_pages)>1) && ($actual_page!=0)) { 
     379                                        $p->set_var('num_page',$actual_page+1); 
     380                                        $p->set_var('display_page','>'); 
     381                                        $p->parse('next','page',True); 
     382                                }        
     383                        }                        
    245384                         
    246385                        $p->pfp('out','body'); 
Note: See TracChangeset for help on using the changeset viewer.