source: branches/2.3/contactcenter/inc/class.bo_global_ldap_catalog.inc.php @ 5107

Revision 5107, 39.0 KB checked in by rafaelraymundo, 13 years ago (diff)

Ticket #2286 - Adicionado modulo acessivel ao Expresso.

  • Property svn:eol-style set to native
  • Property svn:executable set to *
RevLine 
[2]1<?php
2  /***************************************************************************\
3  * eGroupWare - Contacts Center                                              *
4  * http://www.egroupware.org                                                 *
5  * Written by:                                                               *
6  *  - Raphael Derosso Pereira <raphaelpereira@users.sourceforge.net>         *
7  * ------------------------------------------------------------------------- *
8  *  This program is free software; you can redistribute it and/or modify it  *
9  *  under the terms of the GNU General Public License as published by the    *
10  *  Free Software Foundation; either version 2 of the License, or (at your   *
11  *  option) any later version.                                               *
12  \***************************************************************************/
13
14        /*
15                This class is responsible for manipulating the Global LDAP Contact Manager
16        */
17        include_once('class.abo_catalog.inc.php');
[400]18       
[2]19        class bo_global_ldap_catalog extends abo_catalog
20        {
21                var $ldap;
[400]22       
[2]23                var $src_info;
[400]24               
[2]25                var $trans_table;
[284]26                // used to determine if a catalog is external
27                var $external;
[2]28                var $fields = array(
29                        'id_contact'    => true,
30                        'status'        => true,
31                        'photo'         => true,
32                        'alias'         => true,
33                        'prefix'        => true,
34                        'given_names'   => true,
35                        'family_names'  => true,
36                        'account_type'  => true,
37                        'names_ordered' => true,
38                        'suffix'        => true,
39                        'birthdate'     => true,
40                        'sex'           => true,
41                        'pgp_key'       => true,
42                        'notes'         => true,
43                        'companies'     => true,
44                        'relations'     => true,
45                        'addresses'     => true,
46                        'connections'   => true
47                );
[400]48               
[2]49                /*
[400]50               
[2]51                        @function global_ldap_catalog
52                        @abstract Constructor
53                        @author Raphael Derosso Pereira
[400]54                        @author Mário César Kolling (external catalogs)
[284]55
[2]56                        @param integer $id_source The ID of the LDAP source
[284]57                        @param string $context Ldap bind DN
58                        @param integer $external 0 = internal catalog, 1 = external catalog
[2]59                */
[284]60                function bo_global_ldap_catalog ( $id_source, $context, $external = 0 )
[2]61                {
[284]62                        $this->external = $external;
[2]63                        if (!function_exists('ldap_search'))
64                        {
65                                exit('PHP LDAP support Unavailable!');
66                        }
[400]67                       
[2]68                        $this->ldap = CreateObject('contactcenter.bo_ldap_manager');
[400]69                       
[284]70                        if ($this->external)
71                        {
72                                $all_src = $this->ldap->get_external_ldap_sources();
73                        }
74                        else
75                        {
76                                $all_src = $this->ldap->get_all_ldap_sources();
77                        }
78
[2]79                        if (!$all_src[$id_source] or !$context)
80                        {
81                                exit('Unavailable LDAP source.');
82                        }
83
84                        $this->src_info = $all_src[$id_source];
85                        $this->src_info['context'] = $context;
[284]86
87                        if ($this->external)
88                        {
89                                $this->trans_table = $this->ldap->get_external_ldap_fields_association($id_source);
90                        }
91                        else
[400]92                        {       
[284]93                                $this->trans_table = $this->ldap->get_ldap_fields_association($id_source);
94                        }
[2]95                }
[400]96               
[2]97                /*
[400]98               
[2]99                        @function find
100                        @abstract Searches the LDAP directory for the specified fields with
101                                the specified rules and retuns an array containing all the DNs
102                                that matches the rules.
103                        @author Raphael Derosso Pereira
[400]104                       
[2]105                        @param array $what The fields to be taken
106                        @param array $rules The rules to be match. See class.abo_catalog.inc.php
107                                for reference
108                        @param array $other Other parameters:
109                                $return = array(
110                                        'limit'  => (integer),
111                                        'offset' => (integer) [NOT IMPLEMENTED]
112                                )
[400]113               
[2]114                */
[3211]115                function find($what, $rules=false, $other=false, $area=false, $recursive=false)
[2]116                {
117                        $restric_fields = $this->get_restrictions_without_branch($rules);
[400]118                       
[2]119                        $trans_f = $this->translate_fields($what, $restric_fields);
[400]120                       
[2]121                        foreach($trans_f as $orig => $field_a)
122                        {
123                                foreach($field_a as $field)
124                                {
125                                        $fields[] = $field;
126                                }
127                        }
[1598]128
[2]129                        $fields = array_unique($fields);
[1598]130                       
131            //Testa se a busca foi realizada com aspas
132            $rules_search = $rules[3]['value'];
133            $rules_len = (strlen($rules_search)) -1;
134
135            if((($rules_search{1}) == "\"") && (($rules_search{$rules_len -1}) == "\"")){
136                                $rules_search = substr($rules_search,2,$rules_len-3);
137                                $filter = "(&(|(objectClass=phpgwAccount))(&(!(phpgwAccountVisible=-1)))(|(cn=* $rules_search *)(cn=$rules_search *)(cn=* $rules_search)))";
138            }
139            else{
140                                $filter = $this->process_restrictions($rules, $trans_f);
141            }
142                       
143            if ($area)
144            {
145                 $obj = CreateObject('phpgwapi.config','contactcenter');
146                 $opts = $obj->read_repository();
147                 $filter = substr($filter,0,-1) .'(' . $opts['cc_ldap_atrib'] . '=*' . $area . '*))';
148                 $opts = null;
149                 $obj = null;
150            }
151            // Find objects where 'mail' attribute is not null.
[880]152                        $filter = "(&".$filter."(mail=*))";
[1598]153
[4326]154                        $ldap = $GLOBALS['phpgw']->common->ldapConnect($this->src_info['host'], $this->src_info['acc'], $this->src_info['pw'], true);
155                        $result_r = $recursive ? ldap_search($ldap , $this->src_info['context'], $filter, $fields, 0, $this->src_info['max_results']) :
156                                                ldap_list($ldap , $this->src_info['context'], $filter, $fields, 0, $this->src_info['max_results']);
157                                               
[2]158                        if (!$result_r)
159                        {
160                                return false;
161                        }
[400]162                       
[2]163                        if ($other['order'])
164                        {
165                                $sort_f = array($other['order']);
166                                $ldap_sort_by = $this->translate_fields($sort_f, $restric_fields);
167                        }
168
169                        if ($ldap_sort_by)
170                        {
171                                if (!ldap_sort($ldap, $result_r, $ldap_sort_by[$other['order']][0]))
172                                {
173                                        return false;
174                                }
175                        }
[5107]176               
177                        if($refer_context || "ou" === strtolower(substr($this->src_info['context'], 0, 2)))
178                        {
179                                $followReferral = false;
180                        }
181                        elseif(trim($rules[4]['value']) != "inetOrgPerson")
182                        {
183                                $followReferral = true;
184                        } else{                         
185                                return false;
186                        }
187
188                        $ldap = $GLOBALS['phpgw']->common->ldapConnect($this->src_info['host'], $this->src_info['acc'], $this->src_info['pw'], $followReferral);
189                        $result_r = ldap_search($ldap ,($refer_context  ? $refer_context  : $this->src_info['context']), $filter, $fields, 0, $this->src_info['max_results']);
190       
[2]191                        $result_u = ldap_get_entries($ldap, $result_r);
[3135]192                        //      No entries found.
193                        if(!$result_u)
194                                return true;
[400]195                       
[2]196                        $i = 0;
197                        foreach ($result_u as $index => $result_p)
198                        {
[284]199                                if ($index === 'count' or $index === 'dn' or (!$this->external and $result_p['phpgwaccountvisible'][0] == '-1'))
[2]200                                {
201                                        continue;
202                                }
[400]203                               
[2]204                                foreach ($trans_f as $orig => $trans)
205                                {
206                                        $orig = substr($orig, strrpos($orig, '.')+1, strlen($orig));
207                                        foreach ($trans as $f)
208                                        {
209                                                if ($f === 'dn')
210                                                {
211                                                        $return[$i][$orig] = $result_p['dn'];
212                                                }
213                                                else if ($result_p[$f][0])
214                                                {
215                                                        $return[$i][$orig] = $result_p[$f][0];
216                                                }
217                                        }
218                                }
219                                $i++;
220                        }
[4254]221                        if($return)
222                            usort($return, array($this, "compareObjects"));
[2]223                        return $return;
224                }
[884]225                // Compare function for usort.
[1598]226                function compareObjects($a, $b) {
[884]227                        return strnatcasecmp($a['names_ordered'], $b['names_ordered']);
228                }
[400]229               
[2]230                /*
[400]231               
[2]232                        @function translate_fields
233                        @abstract Return the LDAP objectClass fields that corresponds to the
234                                specified parameter fields
235                        @author Raphael Derosso Pereira
[400]236                       
[2]237                        @param array $fields The fields in the standard ContactCenter format
238                        @param array $rules The rules
[400]239               
[2]240                */
241                function translate_fields ( $fields, &$restric_fields )
242                {
243                        $return = array();
[400]244                       
[2]245                        $i = 0;
246                        foreach ($fields as $field)
247                        {
248                                if (!array_key_exists($field,$this->trans_table) or !$this->trans_table[$field])
249                                {
250                                        continue;
251                                }
[400]252                               
[2]253                                if (!is_array($this->trans_table[$field]))
254                                {
255                                        $reference = $this->trans_table[$field];
[400]256                                       
[2]257                                        reset($restric_fields);
258                                        while(list(,$field_r) = each($restric_fields))
259                                        {
260                                                if ($field_r['field'] === $reference and array_key_exists($field_r['value'], $this->trans_table[$reference]))
261                                                {
262                                                        array_push($return[$field], $this->trans_table[$reference][$field_r['value']]);
263                                                }
264                                        }
265                                }
266                                else
267                                {
268                                        if (!is_array($return[$field]))
269                                        {
270                                                $return[$field] = $this->trans_table[$field];
271                                        }
272                                        else
273                                        {
274                                                array_push($return[$field], $this->trans_table[$field]);
275                                        }
276                                }
277                        }
[400]278                       
[2]279                        if (count($return))
280                        {
281                                return $return;
282                        }
[400]283                       
[2]284                        return false;
285                }
[400]286               
[2]287                /*
[400]288               
[2]289                        @function process_restrictions
290                        @abstract Returns a LDAP filter string that corresponds to the
291                                specified restriction rules
292                        @author Raphael Derosso Pereira
[400]293                       
[2]294                        @param string $rules The restriction rules
[400]295               
[2]296                */
297                function process_restrictions( $rules, &$trans_table, $join_type='&' )
298                {
299                        if (!is_array($rules) or !count($rules))
300                        {
301                                return null;
302                        }
[400]303                       
[2]304                        foreach($rules as $rule_i => $rule)
305                        {
306                                $t = array();
307                                switch($rule['type'])
308                                {
309                                        case 'branch':
310                                                switch(strtoupper($rule['value']))
311                                                {
312                                                        case 'OR':
313                                                                $join = '|';
314                                                                break;
[400]315                                                               
[2]316                                                        case 'AND':
317                                                                $join = '&';
318                                                                break;
[400]319                                                               
[2]320                                                        case 'NOT':
321                                                                $join = '!';
322                                                                break;
[400]323                                                               
[2]324                                                        default:
325                                                                $join = $join_type;
326                                                }
327                                                $return_t[] = $this->process_restrictions($rule['sub_branch'], $trans_table, $join);
328                                                break;
[400]329                                               
[2]330                                        case '=':
331                                                if (array_key_exists($rule['field'], $trans_table))
332                                                {
333                                                        foreach($trans_table[$rule['field']] as $field)
334                                                        {
335                                                                $t[] = '('.$field.'='.$rule['value'].')';
336                                                        }
337                                                        $return_t[] = '(|'.implode(' ',$t).')';
338                                                }
339                                                break;
[400]340                                       
341                                        case '!=':     
[2]342                                                if (array_key_exists($rule['field'], $trans_table))
343                                                {
344                                                        foreach($trans_table[$rule['field']] as $field)
345                                                        {
346                                                                $t[] = '(!('.$field.'='.$rule['value'].'))';
347                                                        }
348                                                        $return_t[] = '(&'.implode(' ',$t).')';
349                                                }
350                                                break;
[400]351                                       
[2]352                                        case '<=':
353                                        case '<':
354                                                if (array_key_exists($rule['field'], $trans_table))
355                                                {
356                                                        foreach($trans_table[$rule['field']] as $field)
357                                                        {
358                                                                $t[] = '('.$field.'<='.$rule['value'].')';
359                                                        }
360                                                        $return_t[] = '(|'.implode(' ',$t).')';
361                                                }
362                                                break;
[400]363                                       
[2]364                                        case '>':
365                                        case '>=':
366                                                if (array_key_exists($rule['field'], $trans_table))
367                                                {
368                                                        foreach($trans_table[$rule['field']] as $field)
369                                                        {
370                                                                $t[] = '('.$field.'>='.$rule['value'].')';
371                                                        }
372                                                        $return_t[] = '(|'.implode(' ',$t).')';
373                                                }
374                                                break;
[400]375                                               
[2]376                                        case 'NULL':
377                                                if (array_key_exists($rule['field'], $trans_table))
378                                                {
379                                                        foreach($trans_table[$rule['field']] as $field)
380                                                        {
381                                                                $t[] = '(!('.$field.'=*'.'))';
382                                                        }
383                                                        $return_t[] = '(&'.implode(' ',$t).')';
384                                                }
385                                                break;
[400]386                                       
[2]387                                        case 'IN':
388                                                if (array_key_exists($rule['field'], $trans_table))
389                                                {
390                                                        foreach($trans_table[$rule['field']] as $field)
391                                                        {
392                                                                foreach($rule['value'] as $value)
393                                                                {
394                                                                        $t[] = '('.$field.'='.$value.')';
395                                                                }
396                                                        }
397                                                        $return_t[] = '(|'.implode(' ',$t).')';
398                                                }
399                                                break;
400
401                                        case 'iLIKE':
402/*                                              if (array_key_exists($rule['field'], $trans_table))
403                                                {
404                                                        $value_1 = strtoupper(str_replace('%', '*', $rule['value']));
405                                                        $value_2 = strtolower($value_1);
[400]406                                                       
[2]407                                                        foreach($trans_table[$rule['field']] as $field)
408                                                        {
409                                                                $t[] = '('.$field.'='.$value_1.')';
410                                                                $t[] = '('.$field.'='.$value_2.')';
411                                                        }
412                                                        $return_t[] = '(|'.implode(' ',$t).')';
413                                                }
414                                                break;
[400]415                                               
[2]416*/                                      case 'LIKE':
417                                                if (array_key_exists($rule['field'], $trans_table))
418                                                {
419                                                        $value = str_replace('%', '*', $rule['value']);
[400]420                                                       
[2]421                                                        foreach($trans_table[$rule['field']] as $field)
422                                                        {
423                                                                $t[] = '('.$field.'='.$value.')';
424                                                        }
425                                                        $return_t[] = '(|'.implode(' ',$t).')';
426                                                }
427                                                break;
[400]428                                               
[2]429                                        case 'NOT NULL':
430                                                if (array_key_exists($rule['field'], $trans_table))
431                                                {
432                                                        foreach($trans_table[$rule['field']] as $field)
433                                                        {
434                                                                $t[] = '('.$field.'=*'.')';
435                                                        }
436                                                        $return_t[] = '(|'.implode(' ',$t).')';
437                                                }
438                                                break;
[400]439                                       
[2]440                                        case 'NOT IN':
441                                                if (array_key_exists($rule['field'], $trans_table))
442                                                {
443                                                        foreach($trans_table[$rule['field']] as $field)
444                                                        {
445                                                                foreach($rule['value'] as $value)
446                                                                {
447                                                                        $t[] = '('.$field.'='.$value.')';
448                                                                }
449                                                        }
450                                                        $return_t[] = '(!(|'.implode('',$t).'))';
451                                                }
452                                                break;
453
454                                        case 'NOT iLIKE':
455                                                if (array_key_exists($rule['field'], $trans_table))
456                                                {
457                                                        $value_1 = strtoupper(str_replace('%', '*', $rule['value']));
458                                                        $value_2 = strtolower($value_1);
[400]459                                                       
[2]460                                                        foreach($trans_table[$rule['field']] as $field)
461                                                        {
462                                                                $t[] = '('.$field.'='.$value_1.')';
463                                                                $t[] = '('.$field.'='.$value_2.')';
464                                                        }
465                                                        $return_t[] = '(!(|'.implode(' ',$t).'))';
466                                                }
467                                                break;
468
469                                        case 'NOT LIKE':
470                                                if (array_key_exists($rule['field'], $trans_table))
471                                                {
472                                                        $value = str_replace('%', '*', $rule['value']);
[400]473                                                       
[2]474                                                        foreach($trans_table[$rule['field']] as $field)
475                                                        {
476                                                                $t[] = '('.$field.'='.$value.')';
477                                                        }
478                                                        $return_t[] = '(!(|'.implode(' ',$t).'))';
479                                                }
480                                                break;
481                                }
482                        }
[400]483                       
[2]484                        if (count($return_t))
485                        {
486                                $return = '('.$join_type;
487                                foreach ($return_t as $return_p)
488                                {
489                                        $return .= $return_p;
490                                }
491                                $return .= ')';
492                        }
493                        else
494                        {
495                                $return = null;
496                        }
497                        return $return;
498                }
499
500                /*!
[400]501               
[2]502                        @function get_restrictions_without_branch
503                        @abstract Returns an array containing the restrictions ignoring the
504                                branches
505                        @author Raphael Derosso Pereira
[400]506                       
[2]507                        @param array $restrictions The restrictions
[400]508               
[2]509                */
510                function get_restrictions_without_branch(&$restrictions)
511                {
512                        if (!is_array($restrictions))
513                        {
514                                return null;
515                        }
[400]516                       
[2]517                        $fields = array();
[400]518                       
[2]519                        foreach ($restrictions as $restrict_data)
520                        {
521                                switch($restrict_data['type'])
522                                {
523                                        case 'branch':
524                                                $fields = array_merge($fields, $this->get_restrictions_without_branch($restrict_data['sub_branch']));
525                                                break;
[400]526                                               
[2]527                                        case '=':
[400]528                                        case '!=':     
[2]529                                        case '<=':
530                                        case '<':
531                                        case '>':
532                                        case '>=':
533                                        case 'NULL':
534                                        case 'IN':
535                                        case 'LIKE':
536                                        case 'iLIKE':
537                                        case 'NOT NULL':
538                                        case 'NOT IN':
539                                        case 'NOT LIKE':
540                                        case 'NOT iLIKE':
541                                                array_push($fields, $restrict_data);
542                                                break;
[400]543                                               
[2]544                                        default:
[400]545                                                exit('Error in '.__FILE__.' on '.__LINE__.'<br>The restriction type passed was: '.$restrict_data['type']);                                     
[2]546                                }
547                        }
[400]548                       
[2]549                        return $fields;
550                }
[400]551               
552               
[2]553                /*********************************************************************\
554                 *                        Methods to Get Data                        *
555                \*********************************************************************/
[400]556               
557       
[2]558                /*!
[400]559               
[2]560                 @function get_single_entry
561                 @abstract Returns all information requested about one contact
562                 @author Raphael Derosso Pereira
[400]563                     
[2]564                 @param integer $id_contact The contact ID
565                 @param array $fields The array returned by get_fields with true
566                        on the fields to be taken.
[400]567                       
[2]568                */
[1419]569                function get_single_entry ( $id_contact, $fields, $external=false )
[2]570                {
[400]571                        if (!is_array($fields))
[2]572                        {
[400]573                                if (is_object($GLOBALS['phpgw']->log))
[2]574                                {
575                                        $GLOBALS['phpgw']->log->message(array(
576                                                'text' => 'F-BadcontactcenterParam, wrong get_single_entry parameters type.',
577                                                'line' => __LINE__,
578                                                'file' => __FILE__));
[400]579                                       
[2]580                                        $GLOBALS['phpgw']->log->commit();
581                                }
[400]582                                else
[2]583                                {
584                                        exit('Argument Error on: <br>File:'.__FILE__.'<br>Line:'.__LINE__.'<br>');
585                                }
586                        }
[400]587                       
[2]588                        $ldap = $GLOBALS['phpgw']->common->ldapConnect($this->src_info['host'],$this->src_info['acc'],$this->src_info['pw'],true);
[400]589                       
[2]590                        if (!$ldap)
591                        {
592                                return false;
593                        }
[3262]594
595                        //Alteração feita especificamente para tratar problema da montagem do $id_contact
[1419]596                        if(!$external)
[3262]597                        {
598                                if($this->src_info['montaDN'] == "true")
599                                {
[1419]600                                $id_contact = preg_replace("/dc=(.*)/i",$this->src_info['dn'],$id_contact);
[3262]601                                }
602                        }
[1419]603                       
[314]604                        $resource = @ldap_read($ldap, $id_contact, 'objectClass='.$this->src_info['obj']);
605                        $n_entries = @ldap_count_entries($ldap, $resource);
[2]606                        if ( $n_entries > 1 or $n_entries < 1)
607                        {
608                                return false;
609                        }
[400]610                       
[2]611                        $first_entry = ldap_first_entry($ldap, $resource);
612                        $contact = ldap_get_attributes($ldap,$first_entry);
[400]613                        if($contact['jpegPhoto']){     
614                                $contact['jpegPhoto'] = ldap_get_values_len ($ldap, $first_entry, "jpegPhoto");
[2]615                        }
616
[1598]617//                      print_r($contact);
[400]618                       
[2]619                //      $contact_data = $this->fields;
[400]620                       
[2]621                        foreach($fields as $field => $trueness)
622                        {
623                                if (!$trueness)
624                                {
625                                        //unset($contact_data[$field]);
626                                        continue;
627                                }
[400]628                               
[2]629                                switch ($field)
630                                {
631                                        case 'companies':
632                                                unset($l_fields);
633                                                $l_fields['company_name']  = $this->trans_table['contact.company.company_name'];
634                                                $l_fields['title']         = $this->trans_table['contact.business_info.title'];
[1598]635                                                //$l_fields['department']    = $this->trans_table['contact.business_info.department'];
[2]636                                                $l_fields['company_notes'] = $this->trans_table['contact.company.company_notes'];
[1598]637
638                                                //Relaciona o array com o atributo 'ou' do RHDS; tambem verifica se a
639                                                //preferencia esta configurada para exibir o campo
640                                                if(isset($_SESSION['phpgw_info']['user']['preferences']['contactcenter']['departmentShow']) && $_SESSION['phpgw_info']['user']['preferences']['contactcenter']['departmentShow'])
641                                                {
642                                                        $l_fields['department']    = $this->trans_table['contact.business_info.department'];
643                                                }
644                                                //Relaciona o array com o atributo 'employeeNumber' do RHDS; tambem verifica se a
645                                                //preferencia esta configurada para exibir o campo
646                                                if(isset($_SESSION['phpgw_info']['user']['preferences']['contactcenter']['empNumShow']) && $_SESSION['phpgw_info']['user']['preferences']['contactcenter']['empNumShow'])
647                                                {
648                                                        $l_fields['empNumber']     = $this->trans_table['contact.business_info.empNumber'];
649                                                }
650                                                //Relaciona o array com o atributo 'mobile' do RHDS; tambem verifica se a
651                                                //preferencia esta configurada para exibir o campo
652                                                if(isset($_SESSION['phpgw_info']['user']['preferences']['contactcenter']['cellShow']) && $_SESSION['phpgw_info']['user']['preferences']['contactcenter']['cellShow'])
653                                                {
654                                                        $l_fields['celPhone']     = $this->trans_table['contact.business_info.celPhone'];
655                                                }
656
[2]657                                                $contact_data['companies'] = array();
658                                                foreach($l_fields as $l_field => $l_value)
659                                                {
660                                                        if (!( $contact[$l_value[0]][0]))
661                                                        {
662                                                                continue;
663                                                        }
[400]664                                                       
[284]665                                                        $contact_data['companies']['company1'][$l_field] = utf8_decode($contact[$l_value[0]][0]);
[2]666                                                }
[400]667                                               
[2]668                                                if (!(count($contact_data['companies'])))
669                                                {
670                                                        unset($contact_data['companies']);
671                                                }
672                                                break;
[400]673                                       
[2]674                                        case 'relations':
675                                                unset($l_fields);
676                                                if (!$this->trans_table['contact.contact_related.names_ordered'])
677                                                {
678                                                        unset($contact_data['relations']);
679                                                }
[400]680                                               
[2]681                                                $contact_data['relations'] = array();
682                                                if (!is_array($this->trans_table['contact.contact_related.names_ordered']))
683                                                {
684                                                        if (!($trans = $this->trans_table[$this->trans_table['contact.contact_related.names_ordered']]))
685                                                        {
686                                                                continue;
687                                                        }
[400]688                                                       
[2]689                                                        $i = 1;
690                                                        foreach($trans as $l_type => $l_type_fields)
691                                                        {
692                                                                if (!($contact[$l_type_fields[0]][0]))
693                                                                {
694                                                                        continue;
695                                                                }
[400]696                                                               
[2]697                                                                $contact_data['relations']['relation'.$i]['type'] = $l_type;
[284]698                                                                $contact_data['relations']['relation'.$i]['names_ordered'] = utf8_decode($contact[$l_type_fields[0]][0]);
[2]699                                                                $i++;
700                                                        }
701                                                }
[400]702                                               
[2]703                                                if (!(count($contact_data['relations'])))
704                                                {
705                                                        unset($contact_data['relations']);
706                                                }
707                                                break;
[400]708                                       
[2]709                                        case 'addresses':
710                                                unset($l_fields);
711                                                $l_fields['address1'] = $this->trans_table['contact.address.address1'];
712                                                $l_fields['address2'] = $this->trans_table['contact.address.address2'];
713                                                $l_fields['complement'] = $this->trans_table['contact.address.complement'];
714                                                $l_fields['address_other'] = $this->trans_table['contact.address.address_other'];
715                                                $l_fields['postal_code'] = $this->trans_table['contact.address.postal_code'];
716                                                $l_fields['po_box'] = $this->trans_table['contact.address.po_box'];
717                                                $l_fields['id_city'] = $this->trans_table['contact.address.city.id_city'];
718                                                $l_fields['city_name'] = $this->trans_table['contact.address.city.city_name'];
719                                                $l_fields['city_timezone'] = $this->trans_table['contact.address.city.city_timezone'];
720                                                $l_fields['city_geo_location'] = $this->trans_table['contact.address.city.city_geo_location'];
721                                                $l_fields['id_state'] = $this->trans_table['contact.address.city.state.id_state'];
722                                                $l_fields['state_name'] = $this->trans_table['contact.address.city.state.state_name'];
723                                                $l_fields['state_symbol'] = $this->trans_table['contact.address.city.state.state_symbol'];
724                                                $l_fields['id_country'] = $this->trans_table['contact.address.city.country.id_country'];
725                                                $l_fields['country_name'] = $this->trans_table['contact.address.city.country.country_name'];
726                                                $l_fields['address_is_default'] = $this->trans_table['contact.address.address_is_default'];
727
728                                                $contact_data['addresses'] = array();
729                                                foreach($l_fields as $l_field => $l_value)
730                                                {
731                                                        if (!is_array($l_value))
732                                                        {
733                                                                if (!($trans = $this->trans_table[$l_value]))
734                                                                {
735                                                                        continue;
736                                                                }
[400]737                                                               
[2]738                                                                $i = 1;
739                                                                foreach($trans as $l_type => $l_type_fields)
740                                                                {
741                                                                        if (!($contact[$l_type_fields[0]][0]))
742                                                                        {
743                                                                                continue;
744                                                                        }
[400]745                                                                       
[2]746                                                                        $contact_data['addresses']['address'.$i]['type'] = $l_type;
[284]747                                                                        $contact_data['addresses']['address'.$i][$l_field] = utf8_decode($contact[$l_type_fields[0]][0]);
[2]748                                                                        $i++;
749                                                                }
750                                                        }
751                                                        else
752                                                        {
[284]753                                                                $contact_data['addresses']['address1'][$l_field] = utf8_decode($contact[$l_value[0]][0]);
[2]754                                                        }
755                                                }
[400]756                                               
[2]757                                                if (!(count($contact_data['addresses'])))
758                                                {
759                                                        unset($contact_data['addresses']);
760                                                }
761                                                break;
[400]762                                       
[2]763                                        case 'connections':
764                            $preferences = ExecMethod('contactcenter.ui_preferences.get_preferences');
765                            if (!is_array($preferences))
766                            {
767                                                        $preferences['personCardEmail'] = 1;
768                                                        $preferences['personCardPhone'] = 2;
769                                                }
770                                                unset($l_fields);
771                                                $l_fields['connection_name'] = $this->trans_table['contact.connection.connection_name'];
772                                                $l_fields['connection_value'] = $this->trans_table['contact.connection.connection_value'];
773
774                                                $contact_data['connections'] = array();
775                                                foreach($l_fields as $l_field => $l_value)
776                                                {
777                                                        if (!is_array($l_value))
778                                                        {
779                                                                if (!($trans = $this->trans_table[$l_value]))
780                                                                {
781                                                                        continue;
782                                                                }
[400]783                                                               
[2]784                                                                $i = 1;
785                                                                foreach($trans as $l_type => $l_type_fields)
786                                                                {
787                                                                        if (!($contact[$l_type_fields[0]][0]))
788                                                                        {
789                                                                                continue;
790                                                                        }
[400]791                                                                       
[2]792                                                                        switch ($l_type)
793                                                                        {
794                                                                                case 'email':
795                                                                                $contact_data['connections']['connection'.$i]['id_type'] = $preferences['personCardEmail'];
796                                                                                break;
797
798                                                                                default:
799                                                                                $contact_data['connections']['connection'.$i]['id_type'] = $preferences['personCardPhone'];
800                                                                        }
801                                                                        $contact_data['connections']['connection'.$i]['type'] = $l_type;
[284]802                                                                        $contact_data['connections']['connection'.$i][$l_field] = utf8_decode($contact[$l_type_fields[0]][0]);
[2]803                                                                        $i++;
804                                                                }
805                                                        }
806                                                        else
807                                                        {
[284]808                                                                $contact_data['connections']['connection1'][$l_field] = utf8_decode($contact[$l_value[0]][0]);
[2]809                                                        }
810                                                }
[400]811                                               
[2]812                                                if (!(count($contact_data['connections'])))
813                                                {
814                                                        unset($contact_data['connections']);
815                                                }
816                                                break;
[400]817                                       
[2]818                                        case 'prefix':
819                                                unset($l_fields);
820                                                $l_fields = $this->trans_table['contact.prefixes.prefix'];
821                                                if (!$l_fields or !$contact[$l_fields[0]][0])
822                                                {
823                                                        unset($contact_data['prefix']);
824                                                        continue;
825                                                }
[400]826                                               
[284]827                                                $contact_data['prefix'] = utf8_decode($contact[$l_fields[0]][0]);
[2]828                                                break;
[400]829                                               
[2]830                                        case 'suffix':
831                                                unset($l_fields);
832                                                $l_fields = $this->trans_table['contact.suffixes.suffix'];
833                                                if (!$l_fields or !$contact[$l_fields[0]][0])
834                                                {
835                                                        unset($contact_data['suffix']);
836                                                        continue;
837                                                }
[400]838                                               
[284]839                                                $contact_data['suffix'] = utf8_decode($contact[$l_fields[0]][0]);
[2]840                                                break;
[400]841                                               
[2]842                                        case 'status':
843                                                unset($l_fields);
844                                                $l_fields = $this->trans_table['contact.status.status_name'];
845                                                if (!$l_fields or !$contact[$l_fields[0]][0])
846                                                {
847                                                        unset($contact_data['status']);
848                                                        continue;
849                                                }
[400]850                                               
[284]851                                                $contact_data['status'] = utf8_decode($contact[$l_fields[0]][0]);
[2]852                                                break;
[400]853                                               
[2]854                                                case 'photo':
855                                                unset($l_fields);
856                                                $l_fields = $this->trans_table['contact.photo'];
857                                                if (!$l_fields or !$contact[$l_fields[0]][0])
858                                                {
859                                                        unset($contact_data['photo']);
860                                                        continue;
861                                                }
[400]862                                               
[2]863                                                $contact_data['photo'] = $contact[$l_fields[0]][0];
[400]864                                                break;                                                                                 
[2]865
866                                        default:
867                                                unset($l_fields);
868                                                $l_fields = $this->trans_table['contact.'.$field];
869                                                if (!$l_fields or !$contact[$l_fields[0]][0])
870                                                {
871                                                        unset($contact_data[$field]);
872                                                        continue;
873                                                }
[400]874                                               
[2]875                                                if(count($contact[$l_fields[0]]) > 1)
[284]876                                                {
877                                                        $tmp = array();
878                                                        foreach ($contact[$l_fields[0]] as $i => $j)
879                                                        {
880                                                                $tmp["$i"] = utf8_decode($j);
881                                                        }
882                                                        //$contact_data[$field] = $contact[$l_fields[0]];
883                                                        $contact_data[$field] = $tmp;
884                                                }
[2]885                                                else
[284]886                                                        $contact_data[$field] = utf8_decode($contact[$l_fields[0]][0]);
[2]887
888                                                break;
889                                }
890                        }
[400]891                       
[2]892                        if (!is_array($contact_data))
893                        {
894                                return false;
895                        }
[400]896                       
[2]897                        return $contact_data;
898                }
[285]899                //SERPRO
[284]900                /*!
901
902                 @function get_all_entries
903                 @abstract Returns all information requested about a bunch of contacts, usually a page
904                 @author Raphael Derosso Pereira
[400]905                 @author Mário César Kolling
[284]906
907                 @param string $filter Filter (returned by generate_filter).
908                 @param array $fields The array returned by get_fields with true
909                        on the fields to be taken.
910
911                */
912                function get_all_entries($filter, $fields)
913                {
914                        if (!is_array($fields))
915                        {
916                                if (is_object($GLOBALS['phpgw']->log))
917                                {
918                                        $GLOBALS['phpgw']->log->message(array(
919                                                'text' => 'F-BadcontactcenterParam, wrong get_single_entry parameters type.',
920                                                'line' => __LINE__,
921                                                'file' => __FILE__));
922
923                                        $GLOBALS['phpgw']->log->commit();
924                                }
925                                else
926                                {
927                                        exit('Argument Error on: <br>File:'.__FILE__.'<br>Line:'.__LINE__.'<br>');
928                                }
929                        }
930
931                        $ldap = $GLOBALS['phpgw']->common->ldapConnect($this->src_info['host'],$this->src_info['acc'],$this->src_info['pw'],true);
932
933                        if (!$ldap)
934                        {
935                                return false;
936                        }
937
938                        $resource = @ldap_search($ldap, $this->src_info['dn'], $filter);
939                        $n_entries = @ldap_count_entries($ldap, $resource);
940
941                        ldap_sort($ldap, $resource, 'cn');
942
943                        if ( $n_entries < 1)
944                        {
945                                return false;
946                        }
947
948                        $contacts = array();
949
950                        for ($entry = ldap_first_entry($ldap, $resource);
951                                 $entry != false;
952                                 $entry = ldap_next_entry($ldap, $entry))
953                        {
954                                $contact = ldap_get_attributes($ldap,$entry);
955                                if($contact['jpegPhoto']){
956                                        $contact['jpegPhoto'] = ldap_get_values_len ($ldap, $entry, "jpegPhoto");
957                                }
958
959                                foreach($fields as $field => $trueness)
960                                {
961                                        if (!$trueness)
962                                        {
963                                                //unset($contact_data[$field]);
964                                                continue;
965                                        }
966
967                                        switch ($field)
968                                        {
969                                                case 'companies':
970                                                        unset($l_fields);
971                                                        $l_fields['company_name']  = $this->trans_table['contact.company.company_name'];
972                                                        $l_fields['title']         = $this->trans_table['contact.business_info.title'];
973                                                        $l_fields['department']    = $this->trans_table['contact.business_info.department'];
974                                                        $l_fields['company_notes'] = $this->trans_table['contact.company.company_notes'];
975
[1598]976                                                        //Relaciona o array com o atributo 'employeeNumber' do RHDS
977                                                        if(isset($_SESSION['phpgw_info']['user']['preferences']['contactcenter']['empNumberShow']) && $_SESSION['phpgw_info']['user']['preferences']['contactcenter']['empNumberShow'])
978                                                        {
979                                                                $l_fields['empNumber']     = $this->trans_table['contact.business_info.empNumber'];
980                                                        }
981
982                                                        //Relaciona o array com o atributo 'mobile' do RHDS
983                                                        $l_fields['celPhone']     = $this->trans_table['contact.business_info.celPhone'];
984
[284]985                                                        $contact_data['companies'] = array();
986                                                        foreach($l_fields as $l_field => $l_value)
987                                                        {
988                                                                if (!( $contact[$l_value[0]][0]))
989                                                                {
990                                                                        continue;
991                                                                }
992
993                                                                $contact_data['companies']['company1'][$l_field] = utf8_decode($contact[$l_value[0]][0]);
994                                                        }
995
996                                                        if (!(count($contact_data['companies'])))
997                                                        {
998                                                                unset($contact_data['companies']);
999                                                        }
1000                                                        break;
1001
1002                                                case 'relations':
1003                                                        unset($l_fields);
1004                                                        if (!$this->trans_table['contact.contact_related.names_ordered'])
1005                                                        {
1006                                                                unset($contact_data['relations']);
1007                                                        }
1008
1009                                                        $contact_data['relations'] = array();
1010                                                        if (!is_array($this->trans_table['contact.contact_related.names_ordered']))
1011                                                        {
1012                                                                if (!($trans = $this->trans_table[$this->trans_table['contact.contact_related.names_ordered']]))
1013                                                                {
1014                                                                        continue;
1015                                                                }
1016
1017                                                                $i = 1;
1018                                                                foreach($trans as $l_type => $l_type_fields)
1019                                                                {
1020                                                                        if (!($contact[$l_type_fields[0]][0]))
1021                                                                        {
1022                                                                                continue;
1023                                                                        }
1024
1025                                                                        $contact_data['relations']['relation'.$i]['type'] = $l_type;
1026                                                                        $contact_data['relations']['relation'.$i]['names_ordered'] = utf8_decode($contact[$l_type_fields[0]][0]);
1027                                                                        $i++;
1028                                                                }
1029                                                        }
1030
1031                                                        if (!(count($contact_data['relations'])))
1032                                                        {
1033                                                                unset($contact_data['relations']);
1034                                                        }
1035                                                        break;
1036
1037                                                case 'addresses':
1038                                                        unset($l_fields);
1039                                                        $l_fields['address1'] = $this->trans_table['contact.address.address1'];
1040                                                        $l_fields['address2'] = $this->trans_table['contact.address.address2'];
1041                                                        $l_fields['complement'] = $this->trans_table['contact.address.complement'];
1042                                                        $l_fields['address_other'] = $this->trans_table['contact.address.address_other'];
1043                                                        $l_fields['postal_code'] = $this->trans_table['contact.address.postal_code'];
1044                                                        $l_fields['po_box'] = $this->trans_table['contact.address.po_box'];
1045                                                        $l_fields['id_city'] = $this->trans_table['contact.address.city.id_city'];
1046                                                        $l_fields['city_name'] = $this->trans_table['contact.address.city.city_name'];
1047                                                        $l_fields['city_timezone'] = $this->trans_table['contact.address.city.city_timezone'];
1048                                                        $l_fields['city_geo_location'] = $this->trans_table['contact.address.city.city_geo_location'];
1049                                                        $l_fields['id_state'] = $this->trans_table['contact.address.city.state.id_state'];
1050                                                        $l_fields['state_name'] = $this->trans_table['contact.address.city.state.state_name'];
1051                                                        $l_fields['state_symbol'] = $this->trans_table['contact.address.city.state.state_symbol'];
1052                                                        $l_fields['id_country'] = $this->trans_table['contact.address.city.country.id_country'];
1053                                                        $l_fields['country_name'] = $this->trans_table['contact.address.city.country.country_name'];
1054                                                        $l_fields['address_is_default'] = $this->trans_table['contact.address.address_is_default'];
1055
1056                                                        $contact_data['addresses'] = array();
1057                                                        foreach($l_fields as $l_field => $l_value)
1058                                                        {
1059                                                                if (!is_array($l_value))
1060                                                                {
1061                                                                        if (!($trans = $this->trans_table[$l_value]))
1062                                                                        {
1063                                                                                continue;
1064                                                                        }
1065
1066                                                                        $i = 1;
1067                                                                        foreach($trans as $l_type => $l_type_fields)
1068                                                                        {
1069                                                                                if (!($contact[$l_type_fields[0]][0]))
1070                                                                                {
1071                                                                                        continue;
1072                                                                                }
1073
1074                                                                                $contact_data['addresses']['address'.$i]['type'] = $l_type;
1075                                                                                $contact_data['addresses']['address'.$i][$l_field] = utf8_decode($contact[$l_type_fields[0]][0]);
1076                                                                                $i++;
1077                                                                        }
1078                                                                }
1079                                                                else
1080                                                                {
1081                                                                        $contact_data['addresses']['address1'][$l_field] = utf8_decode($contact[$l_value[0]][0]);
1082                                                                }
1083                                                        }
1084
1085                                                        if (!(count($contact_data['addresses'])))
1086                                                        {
1087                                                                unset($contact_data['addresses']);
1088                                                        }
1089                                                        break;
1090
1091                                                case 'connections':
1092                                    $preferences = ExecMethod('contactcenter.ui_preferences.get_preferences');
1093                                    if (!is_array($preferences))
1094                                    {
1095                                                                $preferences['personCardEmail'] = 1;
1096                                                                $preferences['personCardPhone'] = 2;
1097                                                        }
1098                                                        unset($l_fields);
1099                                                        $l_fields['connection_name'] = $this->trans_table['contact.connection.connection_name'];
1100                                                        $l_fields['connection_value'] = $this->trans_table['contact.connection.connection_value'];
1101
1102                                                        $contact_data['connections'] = array();
1103                                                        foreach($l_fields as $l_field => $l_value)
1104                                                        {
1105                                                                if (!is_array($l_value))
1106                                                                {
1107                                                                        if (!($trans = $this->trans_table[$l_value]))
1108                                                                        {
1109                                                                                continue;
1110                                                                        }
1111
1112                                                                        $i = 1;
1113                                                                        foreach($trans as $l_type => $l_type_fields)
1114                                                                        {
1115                                                                                if (!($contact[$l_type_fields[0]][0]))
1116                                                                                {
1117                                                                                        continue;
1118                                                                                }
1119
1120                                                                                switch ($l_type)
1121                                                                                {
1122                                                                                        case 'email':
1123                                                                                        $contact_data['connections']['connection'.$i]['id_type'] = $preferences['personCardEmail'];
1124                                                                                        break;
1125
1126                                                                                        default:
1127                                                                                        $contact_data['connections']['connection'.$i]['id_type'] = $preferences['personCardPhone'];
1128                                                                                }
1129                                                                                $contact_data['connections']['connection'.$i]['type'] = $l_type;
1130                                                                                $contact_data['connections']['connection'.$i][$l_field] = utf8_decode($contact[$l_type_fields[0]][0]);
1131                                                                                $i++;
1132                                                                        }
1133                                                                }
1134                                                                else
1135                                                                {
1136                                                                        $contact_data['connections']['connection1'][$l_field] = utf8_decode($contact[$l_value[0]][0]);
1137                                                                }
1138                                                        }
1139
1140                                                        if (!(count($contact_data['connections'])))
1141                                                        {
1142                                                                unset($contact_data['connections']);
1143                                                        }
1144                                                        break;
1145
1146                                                case 'prefix':
1147                                                        unset($l_fields);
1148                                                        $l_fields = $this->trans_table['contact.prefixes.prefix'];
1149                                                        if (!$l_fields or !$contact[$l_fields[0]][0])
1150                                                        {
1151                                                                unset($contact_data['prefix']);
1152                                                                continue;
1153                                                        }
1154
1155                                                        $contact_data['prefix'] = utf8_decode($contact[$l_fields[0]][0]);
1156                                                        break;
1157
1158                                                case 'suffix':
1159                                                        unset($l_fields);
1160                                                        $l_fields = $this->trans_table['contact.suffixes.suffix'];
1161                                                        if (!$l_fields or !$contact[$l_fields[0]][0])
1162                                                        {
1163                                                                unset($contact_data['suffix']);
1164                                                                continue;
1165                                                        }
1166
1167                                                        $contact_data['suffix'] = utf8_decode($contact[$l_fields[0]][0]);
1168                                                        break;
1169
1170                                                case 'status':
1171                                                        unset($l_fields);
1172                                                        $l_fields = $this->trans_table['contact.status.status_name'];
1173                                                        if (!$l_fields or !$contact[$l_fields[0]][0])
1174                                                        {
1175                                                                unset($contact_data['status']);
1176                                                                continue;
1177                                                        }
1178
1179                                                        $contact_data['status'] = utf8_decode($contact[$l_fields[0]][0]);
1180                                                        break;
1181
1182                                                        case 'photo':
1183                                                        unset($l_fields);
1184                                                        $l_fields = $this->trans_table['contact.photo'];
1185                                                        if (!$l_fields or !$contact[$l_fields[0]][0])
1186                                                        {
1187                                                                unset($contact_data['photo']);
1188                                                                continue;
1189                                                        }
1190
1191                                                        $contact_data['photo'] = $contact[$l_fields[0]][0];
1192                                                        break;
1193
1194                                                default:
1195                                                        unset($l_fields);
1196                                                        $l_fields = $this->trans_table['contact.'.$field];
1197                                                        if (!$l_fields or !$contact[$l_fields[0]][0])
1198                                                        {
1199                                                                unset($contact_data[$field]);
1200                                                                continue;
1201                                                        }
1202
1203                                                        if(count($contact[$l_fields[0]]) > 1)
1204                                                        {
1205                                                                $tmp = array();
1206                                                                foreach ($contact[$l_fields[0]] as $i => $j)
1207                                                                {
1208                                                                        $tmp["$i"] = utf8_decode($j);
1209                                                                }
1210                                                                //$contact_data[$field] = $contact[$l_fields[0]];
1211                                                                $contact_data[$field] = $tmp;
1212                                                        }
1213                                                        else
1214                                                                $contact_data[$field] = utf8_decode($contact[$l_fields[0]][0]);
1215
1216                                                        break;
1217
1218                                        }
1219                                }
1220
1221                                if (is_array($contact_data))
1222                                {
1223                                        $contacts[ldap_get_dn($ldap, $entry)] = $contact_data;
1224                                }
1225
1226                        }
1227
1228                        return $contacts;
1229                }
[400]1230               
[1419]1231                function get_multiple_entries ( $id_contacts, $fields, $other_data = false, $external=false )
[2]1232                {
1233                        if (!is_array($id_contacts) or !is_array($fields) or ($other_data != false and !is_array($other_data)))
1234                        {
[400]1235                                if (is_object($GLOBALS['phpgw']->log))
[2]1236                                {
1237                                        $GLOBALS['phpgw']->log->message(array(
1238                                                'text' => 'F-BadcontactcenterParam, wrong get_multiple_entry parameter type.',
1239                                                'line' => __LINE__,
1240                                                'file' => __FILE__));
[400]1241                                       
[2]1242                                        $GLOBALS['phpgw']->log->commit();
1243                                }
1244                                else {
1245                                        exit('Argument Error on: <br>File:'.__FILE__.'<br>Line:'.__LINE__.'<br>');
1246                                }
1247                        }
[400]1248                         
[285]1249                        foreach ($id_contacts as $id)
1250                        {
[1419]1251                                $contacts[$id] = $this->get_single_entry($id,$fields,$external);
[285]1252                        }
[400]1253                       
[285]1254                        return $contacts;
[284]1255
[285]1256                        // SERPRO
[400]1257                                               
[285]1258                        /*$contacts = array();
[400]1259       
[2]1260                        if ($other_data)
1261                        {
1262                                //TODO
1263                        }
[284]1264
1265                        $filter = $this->generate_filter($id_contacts);
1266
1267                        //$teste = $this->get_all_entries($filter, $fields);
1268
[285]1269                        return $this->get_all_entries($filter, $fields);*/
[400]1270                       
[284]1271                }
1272
[285]1273        // CELEPAR
[284]1274                function generate_filter($id_contacts)
1275                {
1276                        if (($size = count($id_contacts)))
[2]1277                        {
[285]1278                                $contacts[$id] = $this->get_single_entry($id,$fields);
1279                        }
[400]1280                       
[285]1281                        return $contacts;
1282                }
[400]1283               
[285]1284                // SERPRO
1285                /*
1286                function generate_filter($id_contacts)
1287                {
1288                        if (($size = count($id_contacts)))
1289                        {
[284]1290                                $filter = '(&(objectClass='.$this->src_info['obj'] .  ')(|';
1291                                for ($i = 0; $i < $size; $i++)
1292                                {
1293
[400]1294                                        //
1295                                        //  Não utiliza mais a função ldap_explode, usa a expressão regular a seguir para pegar o primeiro
[285]1296                                        //  componente da dn
[400]1297                                        //
[284]1298                                        preg_match('/^(\w*=[^,]*),.*$/', $id_contacts[$i], $cn);
1299
[285]1300                                //
1301                                // Adicionados os str_replace para adicionar caracteres de escape em frente aos caracteres '(' e ')',
[400]1302                                // posteriormente poderá ser necessário substituir por uma expressão regular mais genérica.
[285]1303                                //
1304
[284]1305                                        if ($cn[1])
1306                                        {
[285]1307                                                //
[400]1308                                                // Esta operação resolve o problema causado pela conversão de caracteres acentuados realizada
1309                                                // pela função ldap_explode_dn(). Talvez seja necessário utilizar esta tradução em outros lugares,
1310                                                // neste caso é mais apropriado colocar dentro de uma função.
[285]1311                                                //
[284]1312                                                //foreach($cn as $key=>$value){
1313                                        //      $cn[$key]=preg_replace("/\\\([0-9A-Fa-f]{2})/e", "''.chr(hexdec('\\1')).''", $value);
1314                                        //}
1315
1316                                                $filter .= '(' . str_replace(')', '\)', str_replace('(','\(',$cn[1])) . ')';
1317                                        }
1318                                }
1319                                $filter .= '))';
[2]1320                        }
[284]1321
1322                        return $filter;
1323
[2]1324                }
[285]1325                */
[2]1326
1327                function get_all_entries_ids ()
1328                {
1329                        $search_fields = array('contact.id_contact', 'contact.names_ordered');
1330                        $search_rules  = array(
1331                                0 => array(
1332                                        'field' => 'contact.names_ordered',
1333                                        'type'  => 'LIKE',
1334                                        'value' => '%'
1335                                )
1336                        );
1337                        $search_other  = array('order' => 'contact.names_ordered');
1338
1339                        $result_i = $this->find($search_fields, $search_rules, $search_other);
1340
1341                        if (is_array($result_i) and count($result_i))
1342                        {
1343                                $result = array();
1344                                foreach($result_i as $result_part)
1345                                {
1346                                        $result[] = $result_part['id_contact'];
1347                                }
1348
1349                                return $result;
1350                        }
1351
1352                        return null;
1353                }
[400]1354               
[2]1355                function get_relations ($id_contact,$extra=false)
1356                {
1357                }
[400]1358               
[2]1359                function get_addresses ( $id_contact,$extra=false )
1360                {
1361                }
[400]1362               
[2]1363                function get_connections ( $id_contact,$extra=false )
1364                {
1365                }
[400]1366               
[2]1367                function get_companies ( $id_contact, $extra=false )
1368                {
1369                }
[400]1370               
[2]1371                function get_all_prefixes (  )
1372                {
1373                }
[400]1374               
[2]1375                function get_all_suffixes (  )
1376                {
1377                }
[400]1378               
[2]1379                function get_all_status (  )
1380                {
1381                }
[400]1382               
[2]1383                function get_all_relations_types (  )
1384                {
1385                }
[400]1386               
[2]1387                function get_all_addresses_types (  )
1388                {
1389                }
[400]1390               
[2]1391                function get_all_connections_types (  )
1392                {
1393                }
[400]1394               
[2]1395                function get_vcard ( $id_contact )
1396                {
1397                }
[400]1398               
1399               
1400               
1401               
[2]1402                function get_global_tree ( $root )
1403                {
1404                }
[400]1405       
[2]1406                function get_actual_brach (  )
1407                {
1408                }
[400]1409       
[2]1410                function set_actual_branch ( $branch )
1411                {
1412                }
1413        }
1414?>
Note: See TracBrowser for help on using the repository browser.