Ignore:
Timestamp:
05/21/08 16:56:17 (16 years ago)
Author:
rafaelraymundo
Message:

Vide Trac - #197, #166, #198, #199

  1. Correção de problema na leitura do arquivo configuração.
  2. Permissão do click2dial também no contactcenter.
  3. Visualização de matricula, e nro celular no resultado da pesquisa(se estiverem populados)
  4. Adicionada a leitura a Catálogos Externos
File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/contactcenter/inc/class.bo_global_ldap_catalog.inc.php

    r167 r284  
    1616        */ 
    1717        include_once('class.abo_catalog.inc.php'); 
    18          
     18 
    1919        class bo_global_ldap_catalog extends abo_catalog 
    2020        { 
    2121                var $ldap; 
    22          
     22 
    2323                var $src_info; 
    24                  
     24 
    2525                var $trans_table; 
    26                  
     26 
     27                // used to determine if a catalog is external 
     28                var $external; 
     29 
    2730                var $fields = array( 
    2831                        'id_contact'    => true, 
     
    4043                        'pgp_key'       => true, 
    4144                        'notes'         => true, 
    42                          
     45                        'department'    => true, 
     46 
     47                        'empNumber'     => true, 
     48 
    4349                        /* Array fields */ 
    4450                        'companies'     => true, 
     
    4753                        'connections'   => true 
    4854                ); 
    49                  
     55 
    5056                /* 
    51                  
     57 
    5258                        @function global_ldap_catalog 
    5359                        @abstract Constructor 
    5460                        @author Raphael Derosso Pereira 
    55                          
     61                        @author Mário César Kolling (external catalogs) 
     62 
    5663                        @param integer $id_source The ID of the LDAP source 
    57                          
     64                        @param string $context Ldap bind DN 
     65                        @param integer $external 0 = internal catalog, 1 = external catalog 
     66 
    5867                */ 
    59                 function bo_global_ldap_catalog ( $id_source, $context ) 
    60                 { 
     68                function bo_global_ldap_catalog ( $id_source, $context, $external = 0 ) 
     69                { 
     70 
     71                        $this->external = $external; 
     72 
    6173                        if (!function_exists('ldap_search')) 
    6274                        { 
    6375                                exit('PHP LDAP support Unavailable!'); 
    6476                        } 
    65                          
     77 
    6678                        $this->ldap = CreateObject('contactcenter.bo_ldap_manager'); 
    67                          
    68                         $all_src = $this->ldap->get_all_ldap_sources(); 
     79 
     80                        if ($this->external) 
     81                        { 
     82                                $all_src = $this->ldap->get_external_ldap_sources(); 
     83                        } 
     84                        else 
     85                        { 
     86                                $all_src = $this->ldap->get_all_ldap_sources(); 
     87                        } 
    6988 
    7089                        if (!$all_src[$id_source] or !$context) 
     
    7594                        $this->src_info = $all_src[$id_source]; 
    7695                        $this->src_info['context'] = $context; 
    77                         $this->trans_table = $this->ldap->get_ldap_fields_association($id_source); 
    78                 } 
    79                  
     96 
     97                        if ($this->external) 
     98                        { 
     99                                $this->trans_table = $this->ldap->get_external_ldap_fields_association($id_source); 
     100                        } 
     101                        else 
     102                        { 
     103                                $this->trans_table = $this->ldap->get_ldap_fields_association($id_source); 
     104                        } 
     105                } 
     106 
    80107                /* 
    81                  
     108 
    82109                        @function find 
    83110                        @abstract Searches the LDAP directory for the specified fields with 
     
    85112                                that matches the rules. 
    86113                        @author Raphael Derosso Pereira 
    87                          
     114 
    88115                        @param array $what The fields to be taken 
    89116                        @param array $rules The rules to be match. See class.abo_catalog.inc.php 
     
    94121                                        'offset' => (integer) [NOT IMPLEMENTED] 
    95122                                ) 
    96                  
     123 
    97124                */ 
    98125                function find($what, $rules=false, $other=false) 
    99126                { 
    100127                        $restric_fields = $this->get_restrictions_without_branch($rules); 
    101                          
     128 
    102129                        $trans_f = $this->translate_fields($what, $restric_fields); 
    103                          
     130 
    104131                        foreach($trans_f as $orig => $field_a) 
    105132                        { 
     
    109136                                } 
    110137                        } 
    111                          
     138 
    112139                        $fields = array_unique($fields); 
    113                          
     140 
    114141                        $filter = $this->process_restrictions($rules, $trans_f); 
    115142 
    116143                        if(strstr($this->src_info['context'], "ldap://")) { 
    117144                                $refer_context  = str_replace("??base","",preg_replace('!^(ldap://[^/]+)/(.*$)!', '\\2', $this->src_info['context'])); 
    118                                 $host   = preg_replace('!^(ldap://[^/]+)/.*$!', '\\1', $this->src_info['context']);                              
     145                                $host   = preg_replace('!^(ldap://[^/]+)/.*$!', '\\1', $this->src_info['context']); 
    119146                                $this->src_info['host'] = $host; 
    120                                 //$this->src_info['acc'] = ''; 
    121                                 //$this->src_info['pw']  = '';                           
    122                         }                        
     147                                $this->src_info['acc'] = ''; 
     148                                $this->src_info['pw']  = ''; 
     149                        } 
    123150 
    124151                        $ldap = $GLOBALS['phpgw']->common->ldapConnect($this->src_info['host'], $this->src_info['acc'], $this->src_info['pw'], true); 
    125                          
     152 
    126153                        if (!$ldap) 
    127154                        { 
    128155                                return false; 
    129156                        } 
    130                          
    131                         $fields[]  ='phpgwAccountVisible'; 
    132                         $result_r = @ldap_search($ldap ,($refer_context  ? $refer_context  : $this->src_info['context']), $filter, $fields); 
     157 
     158                        if (!$this->external) 
     159                        { 
     160                                $fields[]  ='phpgwAccountVisible'; 
     161                        } 
     162 
     163                        $result_r = @ldap_search($ldap ,($refer_context  ? $refer_context  : $this->src_info['context']), $filter, $fields, 0); 
    133164 
    134165                        if (!$result_r) 
     
    136167                                return false; 
    137168                        } 
    138                          
     169 
    139170                        if ($other['order']) 
    140171                        { 
     
    150181                                } 
    151182                        } 
    152                          
     183 
    153184                        $result_u = ldap_get_entries($ldap, $result_r); 
    154                          
     185 
    155186                        $i = 0; 
    156187                        foreach ($result_u as $index => $result_p) 
    157188                        { 
    158                                 if ($index === 'count' or $index === 'dn' or $result_p['phpgwaccountvisible'][0] == '-1') 
     189                                if ($index === 'count' or $index === 'dn' or (!$this->external and $result_p['phpgwaccountvisible'][0] == '-1')) 
    159190                                { 
    160191                                        continue; 
    161192                                } 
    162                                  
     193 
    163194                                foreach ($trans_f as $orig => $trans) 
    164195                                { 
     
    178209                                $i++; 
    179210                        } 
    180                          
     211 
    181212                        return $return; 
    182213                } 
    183                  
     214 
    184215                /* 
    185                  
     216 
    186217                        @function translate_fields 
    187218                        @abstract Return the LDAP objectClass fields that corresponds to the 
    188219                                specified parameter fields 
    189220                        @author Raphael Derosso Pereira 
    190                          
     221 
    191222                        @param array $fields The fields in the standard ContactCenter format 
    192223                        @param array $rules The rules 
    193                  
     224 
    194225                */ 
    195226                function translate_fields ( $fields, &$restric_fields ) 
    196227                { 
    197228                        $return = array(); 
    198                          
     229 
    199230                        $i = 0; 
    200231                        foreach ($fields as $field) 
     
    204235                                        continue; 
    205236                                } 
    206                                  
     237 
    207238                                if (!is_array($this->trans_table[$field])) 
    208239                                { 
    209240                                        $reference = $this->trans_table[$field]; 
    210                                          
     241 
    211242                                        reset($restric_fields); 
    212243                                        while(list(,$field_r) = each($restric_fields)) 
    213244                                        { 
     245 
    214246                                                if ($field_r['field'] === $reference and array_key_exists($field_r['value'], $this->trans_table[$reference])) 
    215247                                                { 
     
    220252                                else 
    221253                                { 
     254 
    222255                                        if (!is_array($return[$field])) 
    223256                                        { 
     
    230263                                } 
    231264                        } 
    232                          
     265 
    233266                        if (count($return)) 
    234267                        { 
    235268                                return $return; 
    236269                        } 
    237                          
     270 
    238271                        return false; 
    239272                } 
    240                  
     273 
    241274                /* 
    242                  
     275 
    243276                        @function process_restrictions 
    244277                        @abstract Returns a LDAP filter string that corresponds to the 
    245278                                specified restriction rules 
    246279                        @author Raphael Derosso Pereira 
    247                          
     280 
    248281                        @param string $rules The restriction rules 
    249                  
     282 
    250283                */ 
    251284                function process_restrictions( $rules, &$trans_table, $join_type='&' ) 
     
    255288                                return null; 
    256289                        } 
    257                          
     290 
    258291                        foreach($rules as $rule_i => $rule) 
    259292                        { 
     
    267300                                                                $join = '|'; 
    268301                                                                break; 
    269                                                                  
     302 
    270303                                                        case 'AND': 
    271304                                                                $join = '&'; 
    272305                                                                break; 
    273                                                                  
     306 
    274307                                                        case 'NOT': 
    275308                                                                $join = '!'; 
    276309                                                                break; 
    277                                                                  
     310 
    278311                                                        default: 
    279312                                                                $join = $join_type; 
     
    281314                                                $return_t[] = $this->process_restrictions($rule['sub_branch'], $trans_table, $join); 
    282315                                                break; 
    283                                                  
     316 
    284317                                        case '=': 
    285318                                                if (array_key_exists($rule['field'], $trans_table)) 
     
    292325                                                } 
    293326                                                break; 
    294                                          
    295                                         case '!=':       
     327 
     328                                        case '!=': 
    296329                                                if (array_key_exists($rule['field'], $trans_table)) 
    297330                                                { 
     
    303336                                                } 
    304337                                                break; 
    305                                          
     338 
    306339                                        case '<=': 
    307340                                        case '<': 
     
    315348                                                } 
    316349                                                break; 
    317                                          
     350 
    318351                                        case '>': 
    319352                                        case '>=': 
     
    327360                                                } 
    328361                                                break; 
    329                                                  
     362 
    330363                                        case 'NULL': 
    331364                                                if (array_key_exists($rule['field'], $trans_table)) 
     
    338371                                                } 
    339372                                                break; 
    340                                          
     373 
    341374                                        case 'IN': 
    342375                                                if (array_key_exists($rule['field'], $trans_table)) 
     
    358391                                                        $value_1 = strtoupper(str_replace('%', '*', $rule['value'])); 
    359392                                                        $value_2 = strtolower($value_1); 
    360                                                          
     393 
    361394                                                        foreach($trans_table[$rule['field']] as $field) 
    362395                                                        { 
     
    367400                                                } 
    368401                                                break; 
    369                                                  
     402 
    370403*/                                      case 'LIKE': 
    371404                                                if (array_key_exists($rule['field'], $trans_table)) 
    372405                                                { 
    373406                                                        $value = str_replace('%', '*', $rule['value']); 
    374                                                          
     407 
    375408                                                        foreach($trans_table[$rule['field']] as $field) 
    376409                                                        { 
     
    380413                                                } 
    381414                                                break; 
    382                                                  
     415 
    383416                                        case 'NOT NULL': 
    384417                                                if (array_key_exists($rule['field'], $trans_table)) 
     
    391424                                                } 
    392425                                                break; 
    393                                          
     426 
    394427                                        case 'NOT IN': 
    395428                                                if (array_key_exists($rule['field'], $trans_table)) 
     
    411444                                                        $value_1 = strtoupper(str_replace('%', '*', $rule['value'])); 
    412445                                                        $value_2 = strtolower($value_1); 
    413                                                          
     446 
    414447                                                        foreach($trans_table[$rule['field']] as $field) 
    415448                                                        { 
     
    425458                                                { 
    426459                                                        $value = str_replace('%', '*', $rule['value']); 
    427                                                          
     460 
    428461                                                        foreach($trans_table[$rule['field']] as $field) 
    429462                                                        { 
     
    435468                                } 
    436469                        } 
    437                          
     470 
    438471                        if (count($return_t)) 
    439472                        { 
     
    453486 
    454487                /*! 
    455                  
     488 
    456489                        @function get_restrictions_without_branch 
    457490                        @abstract Returns an array containing the restrictions ignoring the 
    458491                                branches 
    459492                        @author Raphael Derosso Pereira 
    460                          
     493 
    461494                        @param array $restrictions The restrictions 
    462                  
     495 
    463496                */ 
    464497                function get_restrictions_without_branch(&$restrictions) 
     
    468501                                return null; 
    469502                        } 
    470                          
     503 
    471504                        $fields = array(); 
    472                          
     505 
    473506                        foreach ($restrictions as $restrict_data) 
    474507                        { 
     
    478511                                                $fields = array_merge($fields, $this->get_restrictions_without_branch($restrict_data['sub_branch'])); 
    479512                                                break; 
    480                                                  
     513 
    481514                                        case '=': 
    482                                         case '!=':       
     515                                        case '!=': 
    483516                                        case '<=': 
    484517                                        case '<': 
     
    495528                                                array_push($fields, $restrict_data); 
    496529                                                break; 
    497                                                  
     530 
    498531                                        default: 
    499                                                 exit('Error in '.__FILE__.' on '.__LINE__.'<br>The restriction type passed was: '.$restrict_data['type']);                                       
    500                                 } 
    501                         } 
    502                          
     532                                                exit('Error in '.__FILE__.' on '.__LINE__.'<br>The restriction type passed was: '.$restrict_data['type']); 
     533                                } 
     534                        } 
     535 
    503536                        return $fields; 
    504537                } 
    505                  
    506                  
     538 
     539 
    507540                /*********************************************************************\ 
    508541                 *                        Methods to Get Data                        * 
    509542                \*********************************************************************/ 
    510                  
    511          
     543 
     544 
    512545                /*! 
    513                  
     546 
    514547                 @function get_single_entry 
    515548                 @abstract Returns all information requested about one contact 
    516549                 @author Raphael Derosso Pereira 
    517                       
     550 
    518551                 @param integer $id_contact The contact ID 
    519552                 @param array $fields The array returned by get_fields with true 
    520553                        on the fields to be taken. 
    521                          
     554 
    522555                */ 
    523556                function get_single_entry ( $id_contact, $fields ) 
    524557                { 
    525                         if (!is_array($fields))  
    526                         { 
    527                                 if (is_object($GLOBALS['phpgw']->log))  
     558                        if (!is_array($fields)) 
     559                        { 
     560                                if (is_object($GLOBALS['phpgw']->log)) 
    528561                                { 
    529562                                        $GLOBALS['phpgw']->log->message(array( 
     
    531564                                                'line' => __LINE__, 
    532565                                                'file' => __FILE__)); 
    533                                          
     566 
    534567                                        $GLOBALS['phpgw']->log->commit(); 
    535568                                } 
    536                                 else  
     569                                else 
    537570                                { 
    538571                                        exit('Argument Error on: <br>File:'.__FILE__.'<br>Line:'.__LINE__.'<br>'); 
    539572                                } 
    540573                        } 
    541                          
     574 
    542575                        $ldap = $GLOBALS['phpgw']->common->ldapConnect($this->src_info['host'],$this->src_info['acc'],$this->src_info['pw'],true); 
    543                          
     576 
    544577                        if (!$ldap) 
    545578                        { 
    546579                                return false; 
    547580                        } 
    548                          
     581 
    549582                        $resource = ldap_read($ldap, $id_contact, 'objectClass='.$this->src_info['obj']); 
    550583                        $n_entries = ldap_count_entries($ldap, $resource); 
     
    553586                                return false; 
    554587                        } 
    555                          
     588 
    556589                        $first_entry = ldap_first_entry($ldap, $resource); 
    557590                        $contact = ldap_get_attributes($ldap,$first_entry); 
    558                         if($contact['jpegPhoto']){       
    559                                 $contact['jpegPhoto'] = ldap_get_values_len ($ldap, $first_entry, "jpegPhoto");  
     591                        if($contact['jpegPhoto']){ 
     592                                $contact['jpegPhoto'] = ldap_get_values_len ($ldap, $first_entry, "jpegPhoto"); 
    560593                        } 
    561594 
    562595//                      print_r($contact); 
    563                          
     596 
    564597                //      $contact_data = $this->fields; 
    565                          
     598 
    566599                        foreach($fields as $field => $trueness) 
    567600                        { 
     
    571604                                        continue; 
    572605                                } 
    573                                  
     606 
    574607                                switch ($field) 
    575608                                { 
     
    580613                                                $l_fields['department']    = $this->trans_table['contact.business_info.department']; 
    581614                                                $l_fields['company_notes'] = $this->trans_table['contact.company.company_notes']; 
    582                                                  
     615 
    583616                                                $contact_data['companies'] = array(); 
    584617                                                foreach($l_fields as $l_field => $l_value) 
     
    588621                                                                continue; 
    589622                                                        } 
    590                                                          
    591                                                         $contact_data['companies']['company1'][$l_field] = $contact[$l_value[0]][0]; 
    592                                                 } 
    593                                                  
     623 
     624                                                        $contact_data['companies']['company1'][$l_field] = utf8_decode($contact[$l_value[0]][0]); 
     625                                                } 
     626 
    594627                                                if (!(count($contact_data['companies']))) 
    595628                                                { 
     
    597630                                                } 
    598631                                                break; 
    599                                          
     632 
    600633                                        case 'relations': 
    601634                                                unset($l_fields); 
     
    604637                                                        unset($contact_data['relations']); 
    605638                                                } 
    606                                                  
     639 
    607640                                                $contact_data['relations'] = array(); 
    608641                                                if (!is_array($this->trans_table['contact.contact_related.names_ordered'])) 
     
    612645                                                                continue; 
    613646                                                        } 
    614                                                          
     647 
    615648                                                        $i = 1; 
    616649                                                        foreach($trans as $l_type => $l_type_fields) 
     
    620653                                                                        continue; 
    621654                                                                } 
    622                                                                  
     655 
    623656                                                                $contact_data['relations']['relation'.$i]['type'] = $l_type; 
    624                                                                 $contact_data['relations']['relation'.$i]['names_ordered'] = $contact[$l_type_fields[0]][0]; 
     657                                                                $contact_data['relations']['relation'.$i]['names_ordered'] = utf8_decode($contact[$l_type_fields[0]][0]); 
    625658                                                                $i++; 
    626659                                                        } 
    627660                                                } 
    628                                                  
     661 
    629662                                                if (!(count($contact_data['relations']))) 
    630663                                                { 
     
    632665                                                } 
    633666                                                break; 
    634                                          
     667 
    635668                                        case 'addresses': 
    636669                                                unset($l_fields); 
     
    661694                                                                        continue; 
    662695                                                                } 
    663                                                                  
     696 
    664697                                                                $i = 1; 
    665698                                                                foreach($trans as $l_type => $l_type_fields) 
     
    669702                                                                                continue; 
    670703                                                                        } 
    671                                                                          
     704 
    672705                                                                        $contact_data['addresses']['address'.$i]['type'] = $l_type; 
    673                                                                         $contact_data['addresses']['address'.$i][$l_field] = $contact[$l_type_fields[0]][0]; 
     706                                                                        $contact_data['addresses']['address'.$i][$l_field] = utf8_decode($contact[$l_type_fields[0]][0]); 
    674707                                                                        $i++; 
    675708                                                                } 
     
    677710                                                        else 
    678711                                                        { 
    679                                                                 $contact_data['addresses']['address1'][$l_field] = $contact[$l_value[0]][0]; 
    680                                                         } 
    681                                                 } 
    682                                                  
     712                                                                $contact_data['addresses']['address1'][$l_field] = utf8_decode($contact[$l_value[0]][0]); 
     713                                                        } 
     714                                                } 
     715 
    683716                                                if (!(count($contact_data['addresses']))) 
    684717                                                { 
     
    686719                                                } 
    687720                                                break; 
    688                                          
     721 
    689722                                        case 'connections': 
    690723                            $preferences = ExecMethod('contactcenter.ui_preferences.get_preferences'); 
     
    707740                                                                        continue; 
    708741                                                                } 
    709                                                                  
     742 
    710743                                                                $i = 1; 
    711744                                                                foreach($trans as $l_type => $l_type_fields) 
     
    715748                                                                                continue; 
    716749                                                                        } 
    717                                                                          
     750 
    718751                                                                        switch ($l_type) 
    719752                                                                        { 
     
    726759                                                                        } 
    727760                                                                        $contact_data['connections']['connection'.$i]['type'] = $l_type; 
    728                                                                         $contact_data['connections']['connection'.$i][$l_field] = $contact[$l_type_fields[0]][0]; 
     761                                                                        $contact_data['connections']['connection'.$i][$l_field] = utf8_decode($contact[$l_type_fields[0]][0]); 
    729762                                                                        $i++; 
    730763                                                                } 
     
    732765                                                        else 
    733766                                                        { 
    734                                                                 $contact_data['connections']['connection1'][$l_field] = $contact[$l_value[0]][0]; 
    735                                                         } 
    736                                                 } 
    737                                                  
     767                                                                $contact_data['connections']['connection1'][$l_field] = utf8_decode($contact[$l_value[0]][0]); 
     768                                                        } 
     769                                                } 
     770 
    738771                                                if (!(count($contact_data['connections']))) 
    739772                                                { 
     
    741774                                                } 
    742775                                                break; 
    743                                          
     776 
    744777                                        case 'prefix': 
    745778                                                unset($l_fields); 
     
    750783                                                        continue; 
    751784                                                } 
    752                                                  
    753                                                 $contact_data['prefix'] = $contact[$l_fields[0]][0]; 
    754                                                 break; 
    755                                                  
     785 
     786                                                $contact_data['prefix'] = utf8_decode($contact[$l_fields[0]][0]); 
     787                                                break; 
     788 
    756789                                        case 'suffix': 
    757790                                                unset($l_fields); 
     
    762795                                                        continue; 
    763796                                                } 
    764                                                  
    765                                                 $contact_data['suffix'] = $contact[$l_fields[0]][0]; 
    766                                                 break; 
    767                                                  
     797 
     798                                                $contact_data['suffix'] = utf8_decode($contact[$l_fields[0]][0]); 
     799                                                break; 
     800 
    768801                                        case 'status': 
    769802                                                unset($l_fields); 
     
    774807                                                        continue; 
    775808                                                } 
    776                                                  
    777                                                 $contact_data['status'] = $contact[$l_fields[0]][0]; 
    778                                                 break; 
    779                                                  
     809 
     810                                                $contact_data['status'] = utf8_decode($contact[$l_fields[0]][0]); 
     811                                                break; 
     812 
    780813                                                case 'photo': 
    781814                                                unset($l_fields); 
     
    786819                                                        continue; 
    787820                                                } 
    788                                                  
     821 
    789822                                                $contact_data['photo'] = $contact[$l_fields[0]][0]; 
    790                                                 break;                                                                                   
     823                                                break; 
    791824 
    792825                                        default: 
     
    798831                                                        continue; 
    799832                                                } 
    800                                                  
     833 
    801834                                                if(count($contact[$l_fields[0]]) > 1) 
    802                                                         $contact_data[$field] = $contact[$l_fields[0]]; 
     835                                                { 
     836                                                        $tmp = array(); 
     837                                                        foreach ($contact[$l_fields[0]] as $i => $j) 
     838                                                        { 
     839                                                                $tmp["$i"] = utf8_decode($j); 
     840                                                        } 
     841                                                        //$contact_data[$field] = $contact[$l_fields[0]]; 
     842                                                        $contact_data[$field] = $tmp; 
     843                                                } 
    803844                                                else 
    804                                                         $contact_data[$field] = $contact[$l_fields[0]][0]; 
    805  
    806                                                 break; 
    807                                 } 
    808                         } 
    809                          
     845                                                        $contact_data[$field] = utf8_decode($contact[$l_fields[0]][0]); 
     846 
     847                                                break; 
     848                                } 
     849                        } 
     850 
    810851                        if (!is_array($contact_data)) 
    811852                        { 
    812853                                return false; 
    813854                        } 
    814                          
     855 
    815856                        return $contact_data; 
    816857                } 
    817                  
     858 
     859                /*! 
     860 
     861                 @function get_all_entries 
     862                 @abstract Returns all information requested about a bunch of contacts, usually a page 
     863                 @author Raphael Derosso Pereira 
     864                 @author Mário César Kolling 
     865 
     866                 @param string $filter Filter (returned by generate_filter). 
     867                 @param array $fields The array returned by get_fields with true 
     868                        on the fields to be taken. 
     869 
     870                */ 
     871                function get_all_entries($filter, $fields) 
     872                { 
     873                        if (!is_array($fields)) 
     874                        { 
     875                                if (is_object($GLOBALS['phpgw']->log)) 
     876                                { 
     877                                        $GLOBALS['phpgw']->log->message(array( 
     878                                                'text' => 'F-BadcontactcenterParam, wrong get_single_entry parameters type.', 
     879                                                'line' => __LINE__, 
     880                                                'file' => __FILE__)); 
     881 
     882                                        $GLOBALS['phpgw']->log->commit(); 
     883                                } 
     884                                else 
     885                                { 
     886                                        exit('Argument Error on: <br>File:'.__FILE__.'<br>Line:'.__LINE__.'<br>'); 
     887                                } 
     888                        } 
     889 
     890                        $ldap = $GLOBALS['phpgw']->common->ldapConnect($this->src_info['host'],$this->src_info['acc'],$this->src_info['pw'],true); 
     891 
     892                        if (!$ldap) 
     893                        { 
     894                                return false; 
     895                        } 
     896 
     897                        $resource = @ldap_search($ldap, $this->src_info['dn'], $filter); 
     898                        $n_entries = @ldap_count_entries($ldap, $resource); 
     899 
     900                        ldap_sort($ldap, $resource, 'cn'); 
     901 
     902                        if ( $n_entries < 1) 
     903                        { 
     904                                return false; 
     905                        } 
     906 
     907                        $contacts = array(); 
     908 
     909                        for ($entry = ldap_first_entry($ldap, $resource); 
     910                                 $entry != false; 
     911                                 $entry = ldap_next_entry($ldap, $entry)) 
     912                        { 
     913                                $contact = ldap_get_attributes($ldap,$entry); 
     914                                if($contact['jpegPhoto']){ 
     915                                        $contact['jpegPhoto'] = ldap_get_values_len ($ldap, $entry, "jpegPhoto"); 
     916                                } 
     917 
     918                                foreach($fields as $field => $trueness) 
     919                                { 
     920                                        if (!$trueness) 
     921                                        { 
     922                                                //unset($contact_data[$field]); 
     923                                                continue; 
     924                                        } 
     925 
     926                                        switch ($field) 
     927                                        { 
     928                                                case 'companies': 
     929                                                        unset($l_fields); 
     930                                                        $l_fields['company_name']  = $this->trans_table['contact.company.company_name']; 
     931                                                        $l_fields['title']         = $this->trans_table['contact.business_info.title']; 
     932                                                        $l_fields['department']    = $this->trans_table['contact.business_info.department']; 
     933                                                        $l_fields['company_notes'] = $this->trans_table['contact.company.company_notes']; 
     934 
     935                                                        ///Relaciona o array com o atributo 'employeeNumber' do RHDS 
     936                                                        $l_fields['empNumber']     = $this->trans_table['contact.business_info.empNumber']; 
     937 
     938                                                        $contact_data['companies'] = array(); 
     939                                                        foreach($l_fields as $l_field => $l_value) 
     940                                                        { 
     941                                                                if (!( $contact[$l_value[0]][0])) 
     942                                                                { 
     943                                                                        continue; 
     944                                                                } 
     945 
     946                                                                $contact_data['companies']['company1'][$l_field] = utf8_decode($contact[$l_value[0]][0]); 
     947                                                        } 
     948 
     949                                                        if (!(count($contact_data['companies']))) 
     950                                                        { 
     951                                                                unset($contact_data['companies']); 
     952                                                        } 
     953                                                        break; 
     954 
     955                                                case 'relations': 
     956                                                        unset($l_fields); 
     957                                                        if (!$this->trans_table['contact.contact_related.names_ordered']) 
     958                                                        { 
     959                                                                unset($contact_data['relations']); 
     960                                                        } 
     961 
     962                                                        $contact_data['relations'] = array(); 
     963                                                        if (!is_array($this->trans_table['contact.contact_related.names_ordered'])) 
     964                                                        { 
     965                                                                if (!($trans = $this->trans_table[$this->trans_table['contact.contact_related.names_ordered']])) 
     966                                                                { 
     967                                                                        continue; 
     968                                                                } 
     969 
     970                                                                $i = 1; 
     971                                                                foreach($trans as $l_type => $l_type_fields) 
     972                                                                { 
     973                                                                        if (!($contact[$l_type_fields[0]][0])) 
     974                                                                        { 
     975                                                                                continue; 
     976                                                                        } 
     977 
     978                                                                        $contact_data['relations']['relation'.$i]['type'] = $l_type; 
     979                                                                        $contact_data['relations']['relation'.$i]['names_ordered'] = utf8_decode($contact[$l_type_fields[0]][0]); 
     980                                                                        $i++; 
     981                                                                } 
     982                                                        } 
     983 
     984                                                        if (!(count($contact_data['relations']))) 
     985                                                        { 
     986                                                                unset($contact_data['relations']); 
     987                                                        } 
     988                                                        break; 
     989 
     990                                                case 'addresses': 
     991                                                        unset($l_fields); 
     992                                                        $l_fields['address1'] = $this->trans_table['contact.address.address1']; 
     993                                                        $l_fields['address2'] = $this->trans_table['contact.address.address2']; 
     994                                                        $l_fields['complement'] = $this->trans_table['contact.address.complement']; 
     995                                                        $l_fields['address_other'] = $this->trans_table['contact.address.address_other']; 
     996                                                        $l_fields['postal_code'] = $this->trans_table['contact.address.postal_code']; 
     997                                                        $l_fields['po_box'] = $this->trans_table['contact.address.po_box']; 
     998                                                        $l_fields['id_city'] = $this->trans_table['contact.address.city.id_city']; 
     999                                                        $l_fields['city_name'] = $this->trans_table['contact.address.city.city_name']; 
     1000                                                        $l_fields['city_timezone'] = $this->trans_table['contact.address.city.city_timezone']; 
     1001                                                        $l_fields['city_geo_location'] = $this->trans_table['contact.address.city.city_geo_location']; 
     1002                                                        $l_fields['id_state'] = $this->trans_table['contact.address.city.state.id_state']; 
     1003                                                        $l_fields['state_name'] = $this->trans_table['contact.address.city.state.state_name']; 
     1004                                                        $l_fields['state_symbol'] = $this->trans_table['contact.address.city.state.state_symbol']; 
     1005                                                        $l_fields['id_country'] = $this->trans_table['contact.address.city.country.id_country']; 
     1006                                                        $l_fields['country_name'] = $this->trans_table['contact.address.city.country.country_name']; 
     1007                                                        $l_fields['address_is_default'] = $this->trans_table['contact.address.address_is_default']; 
     1008 
     1009                                                        $contact_data['addresses'] = array(); 
     1010                                                        foreach($l_fields as $l_field => $l_value) 
     1011                                                        { 
     1012                                                                if (!is_array($l_value)) 
     1013                                                                { 
     1014                                                                        if (!($trans = $this->trans_table[$l_value])) 
     1015                                                                        { 
     1016                                                                                continue; 
     1017                                                                        } 
     1018 
     1019                                                                        $i = 1; 
     1020                                                                        foreach($trans as $l_type => $l_type_fields) 
     1021                                                                        { 
     1022                                                                                if (!($contact[$l_type_fields[0]][0])) 
     1023                                                                                { 
     1024                                                                                        continue; 
     1025                                                                                } 
     1026 
     1027                                                                                $contact_data['addresses']['address'.$i]['type'] = $l_type; 
     1028                                                                                $contact_data['addresses']['address'.$i][$l_field] = utf8_decode($contact[$l_type_fields[0]][0]); 
     1029                                                                                $i++; 
     1030                                                                        } 
     1031                                                                } 
     1032                                                                else 
     1033                                                                { 
     1034                                                                        $contact_data['addresses']['address1'][$l_field] = utf8_decode($contact[$l_value[0]][0]); 
     1035                                                                } 
     1036                                                        } 
     1037 
     1038                                                        if (!(count($contact_data['addresses']))) 
     1039                                                        { 
     1040                                                                unset($contact_data['addresses']); 
     1041                                                        } 
     1042                                                        break; 
     1043 
     1044                                                case 'connections': 
     1045                                    $preferences = ExecMethod('contactcenter.ui_preferences.get_preferences'); 
     1046                                    if (!is_array($preferences)) 
     1047                                    { 
     1048                                                                $preferences['personCardEmail'] = 1; 
     1049                                                                $preferences['personCardPhone'] = 2; 
     1050                                                        } 
     1051                                                        unset($l_fields); 
     1052                                                        $l_fields['connection_name'] = $this->trans_table['contact.connection.connection_name']; 
     1053                                                        $l_fields['connection_value'] = $this->trans_table['contact.connection.connection_value']; 
     1054 
     1055                                                        $contact_data['connections'] = array(); 
     1056                                                        foreach($l_fields as $l_field => $l_value) 
     1057                                                        { 
     1058                                                                if (!is_array($l_value)) 
     1059                                                                { 
     1060                                                                        if (!($trans = $this->trans_table[$l_value])) 
     1061                                                                        { 
     1062                                                                                continue; 
     1063                                                                        } 
     1064 
     1065                                                                        $i = 1; 
     1066                                                                        foreach($trans as $l_type => $l_type_fields) 
     1067                                                                        { 
     1068                                                                                if (!($contact[$l_type_fields[0]][0])) 
     1069                                                                                { 
     1070                                                                                        continue; 
     1071                                                                                } 
     1072 
     1073                                                                                switch ($l_type) 
     1074                                                                                { 
     1075                                                                                        case 'email': 
     1076                                                                                        $contact_data['connections']['connection'.$i]['id_type'] = $preferences['personCardEmail']; 
     1077                                                                                        break; 
     1078 
     1079                                                                                        default: 
     1080                                                                                        $contact_data['connections']['connection'.$i]['id_type'] = $preferences['personCardPhone']; 
     1081                                                                                } 
     1082                                                                                $contact_data['connections']['connection'.$i]['type'] = $l_type; 
     1083                                                                                $contact_data['connections']['connection'.$i][$l_field] = utf8_decode($contact[$l_type_fields[0]][0]); 
     1084                                                                                $i++; 
     1085                                                                        } 
     1086                                                                } 
     1087                                                                else 
     1088                                                                { 
     1089                                                                        $contact_data['connections']['connection1'][$l_field] = utf8_decode($contact[$l_value[0]][0]); 
     1090                                                                } 
     1091                                                        } 
     1092 
     1093                                                        if (!(count($contact_data['connections']))) 
     1094                                                        { 
     1095                                                                unset($contact_data['connections']); 
     1096                                                        } 
     1097                                                        break; 
     1098 
     1099                                                case 'prefix': 
     1100                                                        unset($l_fields); 
     1101                                                        $l_fields = $this->trans_table['contact.prefixes.prefix']; 
     1102                                                        if (!$l_fields or !$contact[$l_fields[0]][0]) 
     1103                                                        { 
     1104                                                                unset($contact_data['prefix']); 
     1105                                                                continue; 
     1106                                                        } 
     1107 
     1108                                                        $contact_data['prefix'] = utf8_decode($contact[$l_fields[0]][0]); 
     1109                                                        break; 
     1110 
     1111                                                case 'suffix': 
     1112                                                        unset($l_fields); 
     1113                                                        $l_fields = $this->trans_table['contact.suffixes.suffix']; 
     1114                                                        if (!$l_fields or !$contact[$l_fields[0]][0]) 
     1115                                                        { 
     1116                                                                unset($contact_data['suffix']); 
     1117                                                                continue; 
     1118                                                        } 
     1119 
     1120                                                        $contact_data['suffix'] = utf8_decode($contact[$l_fields[0]][0]); 
     1121                                                        break; 
     1122 
     1123                                                case 'status': 
     1124                                                        unset($l_fields); 
     1125                                                        $l_fields = $this->trans_table['contact.status.status_name']; 
     1126                                                        if (!$l_fields or !$contact[$l_fields[0]][0]) 
     1127                                                        { 
     1128                                                                unset($contact_data['status']); 
     1129                                                                continue; 
     1130                                                        } 
     1131 
     1132                                                        $contact_data['status'] = utf8_decode($contact[$l_fields[0]][0]); 
     1133                                                        break; 
     1134 
     1135                                                        case 'photo': 
     1136                                                        unset($l_fields); 
     1137                                                        $l_fields = $this->trans_table['contact.photo']; 
     1138                                                        if (!$l_fields or !$contact[$l_fields[0]][0]) 
     1139                                                        { 
     1140                                                                unset($contact_data['photo']); 
     1141                                                                continue; 
     1142                                                        } 
     1143 
     1144                                                        $contact_data['photo'] = $contact[$l_fields[0]][0]; 
     1145                                                        break; 
     1146 
     1147                                                default: 
     1148                                                        unset($l_fields); 
     1149                                                        $l_fields = $this->trans_table['contact.'.$field]; 
     1150                                                        if (!$l_fields or !$contact[$l_fields[0]][0]) 
     1151                                                        { 
     1152                                                                unset($contact_data[$field]); 
     1153                                                                continue; 
     1154                                                        } 
     1155 
     1156                                                        if(count($contact[$l_fields[0]]) > 1) 
     1157                                                        { 
     1158                                                                $tmp = array(); 
     1159                                                                foreach ($contact[$l_fields[0]] as $i => $j) 
     1160                                                                { 
     1161                                                                        $tmp["$i"] = utf8_decode($j); 
     1162                                                                } 
     1163                                                                //$contact_data[$field] = $contact[$l_fields[0]]; 
     1164                                                                $contact_data[$field] = $tmp; 
     1165                                                        } 
     1166                                                        else 
     1167                                                                $contact_data[$field] = utf8_decode($contact[$l_fields[0]][0]); 
     1168 
     1169                                                        break; 
     1170 
     1171                                        } 
     1172                                } 
     1173 
     1174                                if (is_array($contact_data)) 
     1175                                { 
     1176                                        $contacts[ldap_get_dn($ldap, $entry)] = $contact_data; 
     1177                                } 
     1178 
     1179                        } 
     1180 
     1181                        return $contacts; 
     1182                } 
     1183 
    8181184                function get_multiple_entries ( $id_contacts, $fields, $other_data = false ) 
    8191185                { 
    8201186                        if (!is_array($id_contacts) or !is_array($fields) or ($other_data != false and !is_array($other_data))) 
    8211187                        { 
    822                                 if (is_object($GLOBALS['phpgw']->log))  
     1188                                if (is_object($GLOBALS['phpgw']->log)) 
    8231189                                { 
    8241190                                        $GLOBALS['phpgw']->log->message(array( 
     
    8261192                                                'line' => __LINE__, 
    8271193                                                'file' => __FILE__)); 
    828                                          
     1194 
    8291195                                        $GLOBALS['phpgw']->log->commit(); 
    8301196                                } 
     
    8331199                                } 
    8341200                        } 
    835                          
     1201 
    8361202                        $contacts = array(); 
    837          
     1203 
    8381204                        if ($other_data) 
    8391205                        { 
    8401206                                //TODO 
    8411207                        } 
    842          
    843                         foreach ($id_contacts as $id) 
    844                         { 
    845                                 $contacts[$id] = $this->get_single_entry($id,$fields); 
    846                         } 
    847                          
    848                         return $contacts; 
     1208 
     1209                        $filter = $this->generate_filter($id_contacts); 
     1210 
     1211                        //$teste = $this->get_all_entries($filter, $fields); 
     1212 
     1213                        return $this->get_all_entries($filter, $fields); 
     1214                } 
     1215 
     1216                function generate_filter($id_contacts) 
     1217                { 
     1218                        if (($size = count($id_contacts))) 
     1219                        { 
     1220                                $filter = '(&(objectClass='.$this->src_info['obj'] .  ')(|'; 
     1221                                for ($i = 0; $i < $size; $i++) 
     1222                                { 
     1223 
     1224                                        /* 
     1225                                         * Não utiliza mais a função ldap_explode, usa a expressão regular a seguir para pegar o primeiro 
     1226                                         * componente da dn 
     1227                                         */ 
     1228                                        preg_match('/^(\w*=[^,]*),.*$/', $id_contacts[$i], $cn); 
     1229 
     1230                                /* 
     1231                                 * Adicionados os str_replace para adicionar caracteres de escape em frente aos caracteres '(' e ')', 
     1232                                 * posteriormente poderá ser necessário substituir por uma expressão regular mais genérica. 
     1233                                 */ 
     1234                                        if ($cn[1]) 
     1235                                        { 
     1236                                                /* 
     1237                                                 * Esta operação resolve o problema causado pela conversão de caracteres acentuados realizada 
     1238                                                 * pela função ldap_explode_dn(). Talvez seja necessário utilizar esta tradução em outros lugares, 
     1239                                                 * neste caso é mais apropriado colocar dentro de uma função. 
     1240                                                 */ 
     1241                                                //foreach($cn as $key=>$value){ 
     1242                                        //      $cn[$key]=preg_replace("/\\\([0-9A-Fa-f]{2})/e", "''.chr(hexdec('\\1')).''", $value); 
     1243                                        //} 
     1244 
     1245                                                $filter .= '(' . str_replace(')', '\)', str_replace('(','\(',$cn[1])) . ')'; 
     1246                                        } 
     1247                                } 
     1248                                $filter .= '))'; 
     1249                        } 
     1250 
     1251                        return $filter; 
     1252 
    8491253                } 
    8501254 
     
    8761280                        return null; 
    8771281                } 
    878                  
     1282 
    8791283                function get_relations ($id_contact,$extra=false) 
    8801284                { 
    8811285                } 
    882                  
     1286 
    8831287                function get_addresses ( $id_contact,$extra=false ) 
    8841288                { 
    8851289                } 
    886                  
     1290 
    8871291                function get_connections ( $id_contact,$extra=false ) 
    8881292                { 
    8891293                } 
    890                  
     1294 
    8911295                function get_companies ( $id_contact, $extra=false ) 
    8921296                { 
    8931297                } 
    894                  
     1298 
    8951299                function get_all_prefixes (  ) 
    8961300                { 
    8971301                } 
    898                  
     1302 
    8991303                function get_all_suffixes (  ) 
    9001304                { 
    9011305                } 
    902                  
     1306 
    9031307                function get_all_status (  ) 
    9041308                { 
    9051309                } 
    906                  
     1310 
    9071311                function get_all_relations_types (  ) 
    9081312                { 
    9091313                } 
    910                  
     1314 
    9111315                function get_all_addresses_types (  ) 
    9121316                { 
    9131317                } 
    914                  
     1318 
    9151319                function get_all_connections_types (  ) 
    9161320                { 
    9171321                } 
    918                  
     1322 
    9191323                function get_vcard ( $id_contact ) 
    9201324                { 
    9211325                } 
    922                  
    923                  
    924                  
    925                  
     1326 
     1327 
     1328 
     1329 
    9261330                function get_global_tree ( $root ) 
    9271331                { 
    9281332                } 
    929          
     1333 
    9301334                function get_actual_brach (  ) 
    9311335                { 
    9321336                } 
    933          
     1337 
    9341338                function set_actual_branch ( $branch ) 
    9351339                { 
Note: See TracChangeset for help on using the changeset viewer.