source: trunk/contactcenter/inc/class.bo_global_ldap_catalog.inc.php @ 4544

Revision 4544, 40.8 KB checked in by airton, 13 years ago (diff)

Ticket #1954 - Implementação de busca avançada no contactcenter

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