source: branches/2.2/contactcenter/inc/class.bo_global_ldap_catalog.inc.php @ 3262

Revision 3262, 39.3 KB checked in by rafaelraymundo, 14 years ago (diff)

Ticket #1319 - Possibilidade de erro na pesquisa do ContacCenter?

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