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

Revision 2, 23.5 KB checked in by niltonneto, 17 years ago (diff)

Removida todas as tags usadas pelo CVS ($Id, $Source).
Primeira versão no CVS externo.

  • 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               
27                var $fields = array(
28                        'id_contact'    => true,
29                        'status'        => true,
30                        'photo'         => true,
31                        'alias'         => true,
32                        'prefix'        => true,
33                        'given_names'   => true,
34                        'family_names'  => true,
35                        'account_type'  => true,
36                        'names_ordered' => true,
37                        'suffix'        => true,
38                        'birthdate'     => true,
39                        'sex'           => true,
40                        'pgp_key'       => true,
41                        'notes'         => true,
42                       
43                        /* Array fields */
44                        'companies'     => true,
45                        'relations'     => true,
46                        'addresses'     => true,
47                        'connections'   => true
48                );
49               
50                /*
51               
52                        @function global_ldap_catalog
53                        @abstract Constructor
54                        @author Raphael Derosso Pereira
55                       
56                        @param integer $id_source The ID of the LDAP source
57                       
58                */
59                function bo_global_ldap_catalog ( $id_source, $context )
60                {
61                        if (!function_exists('ldap_search'))
62                        {
63                                exit('PHP LDAP support Unavailable!');
64                        }
65                       
66                        $this->ldap = CreateObject('contactcenter.bo_ldap_manager');
67                       
68                        $all_src = $this->ldap->get_all_ldap_sources();
69
70                        if (!$all_src[$id_source] or !$context)
71                        {
72                                exit('Unavailable LDAP source.');
73                        }
74
75                        $this->src_info = $all_src[$id_source];
76                        $this->src_info['context'] = $context;
77                        $this->trans_table = $this->ldap->get_ldap_fields_association($id_source);
78                }
79               
80                /*
81               
82                        @function find
83                        @abstract Searches the LDAP directory for the specified fields with
84                                the specified rules and retuns an array containing all the DNs
85                                that matches the rules.
86                        @author Raphael Derosso Pereira
87                       
88                        @param array $what The fields to be taken
89                        @param array $rules The rules to be match. See class.abo_catalog.inc.php
90                                for reference
91                        @param array $other Other parameters:
92                                $return = array(
93                                        'limit'  => (integer),
94                                        'offset' => (integer) [NOT IMPLEMENTED]
95                                )
96               
97                */
98                function find($what, $rules=false, $other=false)
99                {
100                        $restric_fields = $this->get_restrictions_without_branch($rules);
101                       
102                        $trans_f = $this->translate_fields($what, $restric_fields);
103                       
104                        foreach($trans_f as $orig => $field_a)
105                        {
106                                foreach($field_a as $field)
107                                {
108                                        $fields[] = $field;
109                                }
110                        }
111                       
112                        $fields = array_unique($fields);
113                       
114                        $filter = $this->process_restrictions($rules, $trans_f);
115
116                        if(strstr($this->src_info['context'], "ldap://")) {
117                                $refer_context  = str_replace("??base","",preg_replace('!^(ldap://[^/]+)/(.*$)!', '\\2', $this->src_info['context']));
118                                $host   = preg_replace('!^(ldap://[^/]+)/.*$!', '\\1', $this->src_info['context']);                             
119                                $this->src_info['host'] = $host;
120                                $this->src_info['acc'] = '';
121                                $this->src_info['pw']  = '';                           
122                        }                       
123
124                        $ldap = $GLOBALS['phpgw']->common->ldapConnect($this->src_info['host'], $this->src_info['acc'], $this->src_info['pw'], true);
125                       
126                        if (!$ldap)
127                        {
128                                return false;
129                        }
130                       
131                        $fields[]  ='phpgwAccountVisible';
132                        $result_r = @ldap_search($ldap ,($refer_context  ? $refer_context  : $this->src_info['context']), $filter, $fields);
133
134                        if (!$result_r)
135                        {
136                                return false;
137                        }
138                       
139                        if ($other['order'])
140                        {
141                                $sort_f = array($other['order']);
142                                $ldap_sort_by = $this->translate_fields($sort_f, $restric_fields);
143                        }
144
145                        if ($ldap_sort_by)
146                        {
147                                if (!ldap_sort($ldap, $result_r, $ldap_sort_by[$other['order']][0]))
148                                {
149                                        return false;
150                                }
151                        }
152                       
153                        $result_u = ldap_get_entries($ldap, $result_r);
154                       
155                        $i = 0;
156                        foreach ($result_u as $index => $result_p)
157                        {
158                                if ($index === 'count' or $index === 'dn' or $result_p['phpgwaccountvisible'][0] == '-1')
159                                {
160                                        continue;
161                                }
162                               
163                                foreach ($trans_f as $orig => $trans)
164                                {
165                                        $orig = substr($orig, strrpos($orig, '.')+1, strlen($orig));
166                                        foreach ($trans as $f)
167                                        {
168                                                if ($f === 'dn')
169                                                {
170                                                        $return[$i][$orig] = $result_p['dn'];
171                                                }
172                                                else if ($result_p[$f][0])
173                                                {
174                                                        $return[$i][$orig] = $result_p[$f][0];
175                                                }
176                                        }
177                                }
178                                $i++;
179                        }
180                       
181                        return $return;
182                }
183               
184                /*
185               
186                        @function translate_fields
187                        @abstract Return the LDAP objectClass fields that corresponds to the
188                                specified parameter fields
189                        @author Raphael Derosso Pereira
190                       
191                        @param array $fields The fields in the standard ContactCenter format
192                        @param array $rules The rules
193               
194                */
195                function translate_fields ( $fields, &$restric_fields )
196                {
197                        $return = array();
198                       
199                        $i = 0;
200                        foreach ($fields as $field)
201                        {
202                                if (!array_key_exists($field,$this->trans_table) or !$this->trans_table[$field])
203                                {
204                                        continue;
205                                }
206                               
207                                if (!is_array($this->trans_table[$field]))
208                                {
209                                        $reference = $this->trans_table[$field];
210                                       
211                                        reset($restric_fields);
212                                        while(list(,$field_r) = each($restric_fields))
213                                        {
214                                                if ($field_r['field'] === $reference and array_key_exists($field_r['value'], $this->trans_table[$reference]))
215                                                {
216                                                        array_push($return[$field], $this->trans_table[$reference][$field_r['value']]);
217                                                }
218                                        }
219                                }
220                                else
221                                {
222                                        if (!is_array($return[$field]))
223                                        {
224                                                $return[$field] = $this->trans_table[$field];
225                                        }
226                                        else
227                                        {
228                                                array_push($return[$field], $this->trans_table[$field]);
229                                        }
230                                }
231                        }
232                       
233                        if (count($return))
234                        {
235                                return $return;
236                        }
237                       
238                        return false;
239                }
240               
241                /*
242               
243                        @function process_restrictions
244                        @abstract Returns a LDAP filter string that corresponds to the
245                                specified restriction rules
246                        @author Raphael Derosso Pereira
247                       
248                        @param string $rules The restriction rules
249               
250                */
251                function process_restrictions( $rules, &$trans_table, $join_type='&' )
252                {
253                        if (!is_array($rules) or !count($rules))
254                        {
255                                return null;
256                        }
257                       
258                        foreach($rules as $rule_i => $rule)
259                        {
260                                $t = array();
261                                switch($rule['type'])
262                                {
263                                        case 'branch':
264                                                switch(strtoupper($rule['value']))
265                                                {
266                                                        case 'OR':
267                                                                $join = '|';
268                                                                break;
269                                                               
270                                                        case 'AND':
271                                                                $join = '&';
272                                                                break;
273                                                               
274                                                        case 'NOT':
275                                                                $join = '!';
276                                                                break;
277                                                               
278                                                        default:
279                                                                $join = $join_type;
280                                                }
281                                                $return_t[] = $this->process_restrictions($rule['sub_branch'], $trans_table, $join);
282                                                break;
283                                               
284                                        case '=':
285                                                if (array_key_exists($rule['field'], $trans_table))
286                                                {
287                                                        foreach($trans_table[$rule['field']] as $field)
288                                                        {
289                                                                $t[] = '('.$field.'='.$rule['value'].')';
290                                                        }
291                                                        $return_t[] = '(|'.implode(' ',$t).')';
292                                                }
293                                                break;
294                                       
295                                        case '!=':     
296                                                if (array_key_exists($rule['field'], $trans_table))
297                                                {
298                                                        foreach($trans_table[$rule['field']] as $field)
299                                                        {
300                                                                $t[] = '(!('.$field.'='.$rule['value'].'))';
301                                                        }
302                                                        $return_t[] = '(&'.implode(' ',$t).')';
303                                                }
304                                                break;
305                                       
306                                        case '<=':
307                                        case '<':
308                                                if (array_key_exists($rule['field'], $trans_table))
309                                                {
310                                                        foreach($trans_table[$rule['field']] as $field)
311                                                        {
312                                                                $t[] = '('.$field.'<='.$rule['value'].')';
313                                                        }
314                                                        $return_t[] = '(|'.implode(' ',$t).')';
315                                                }
316                                                break;
317                                       
318                                        case '>':
319                                        case '>=':
320                                                if (array_key_exists($rule['field'], $trans_table))
321                                                {
322                                                        foreach($trans_table[$rule['field']] as $field)
323                                                        {
324                                                                $t[] = '('.$field.'>='.$rule['value'].')';
325                                                        }
326                                                        $return_t[] = '(|'.implode(' ',$t).')';
327                                                }
328                                                break;
329                                               
330                                        case 'NULL':
331                                                if (array_key_exists($rule['field'], $trans_table))
332                                                {
333                                                        foreach($trans_table[$rule['field']] as $field)
334                                                        {
335                                                                $t[] = '(!('.$field.'=*'.'))';
336                                                        }
337                                                        $return_t[] = '(&'.implode(' ',$t).')';
338                                                }
339                                                break;
340                                       
341                                        case 'IN':
342                                                if (array_key_exists($rule['field'], $trans_table))
343                                                {
344                                                        foreach($trans_table[$rule['field']] as $field)
345                                                        {
346                                                                foreach($rule['value'] as $value)
347                                                                {
348                                                                        $t[] = '('.$field.'='.$value.')';
349                                                                }
350                                                        }
351                                                        $return_t[] = '(|'.implode(' ',$t).')';
352                                                }
353                                                break;
354
355                                        case 'iLIKE':
356/*                                              if (array_key_exists($rule['field'], $trans_table))
357                                                {
358                                                        $value_1 = strtoupper(str_replace('%', '*', $rule['value']));
359                                                        $value_2 = strtolower($value_1);
360                                                       
361                                                        foreach($trans_table[$rule['field']] as $field)
362                                                        {
363                                                                $t[] = '('.$field.'='.$value_1.')';
364                                                                $t[] = '('.$field.'='.$value_2.')';
365                                                        }
366                                                        $return_t[] = '(|'.implode(' ',$t).')';
367                                                }
368                                                break;
369                                               
370*/                                      case 'LIKE':
371                                                if (array_key_exists($rule['field'], $trans_table))
372                                                {
373                                                        $value = str_replace('%', '*', $rule['value']);
374                                                       
375                                                        foreach($trans_table[$rule['field']] as $field)
376                                                        {
377                                                                $t[] = '('.$field.'='.$value.')';
378                                                        }
379                                                        $return_t[] = '(|'.implode(' ',$t).')';
380                                                }
381                                                break;
382                                               
383                                        case 'NOT NULL':
384                                                if (array_key_exists($rule['field'], $trans_table))
385                                                {
386                                                        foreach($trans_table[$rule['field']] as $field)
387                                                        {
388                                                                $t[] = '('.$field.'=*'.')';
389                                                        }
390                                                        $return_t[] = '(|'.implode(' ',$t).')';
391                                                }
392                                                break;
393                                       
394                                        case 'NOT IN':
395                                                if (array_key_exists($rule['field'], $trans_table))
396                                                {
397                                                        foreach($trans_table[$rule['field']] as $field)
398                                                        {
399                                                                foreach($rule['value'] as $value)
400                                                                {
401                                                                        $t[] = '('.$field.'='.$value.')';
402                                                                }
403                                                        }
404                                                        $return_t[] = '(!(|'.implode('',$t).'))';
405                                                }
406                                                break;
407
408                                        case 'NOT iLIKE':
409                                                if (array_key_exists($rule['field'], $trans_table))
410                                                {
411                                                        $value_1 = strtoupper(str_replace('%', '*', $rule['value']));
412                                                        $value_2 = strtolower($value_1);
413                                                       
414                                                        foreach($trans_table[$rule['field']] as $field)
415                                                        {
416                                                                $t[] = '('.$field.'='.$value_1.')';
417                                                                $t[] = '('.$field.'='.$value_2.')';
418                                                        }
419                                                        $return_t[] = '(!(|'.implode(' ',$t).'))';
420                                                }
421                                                break;
422
423                                        case 'NOT LIKE':
424                                                if (array_key_exists($rule['field'], $trans_table))
425                                                {
426                                                        $value = str_replace('%', '*', $rule['value']);
427                                                       
428                                                        foreach($trans_table[$rule['field']] as $field)
429                                                        {
430                                                                $t[] = '('.$field.'='.$value.')';
431                                                        }
432                                                        $return_t[] = '(!(|'.implode(' ',$t).'))';
433                                                }
434                                                break;
435                                }
436                        }
437                       
438                        if (count($return_t))
439                        {
440                                $return = '('.$join_type;
441                                foreach ($return_t as $return_p)
442                                {
443                                        $return .= $return_p;
444                                }
445                                $return .= ')';
446                        }
447                        else
448                        {
449                                $return = null;
450                        }
451                        return $return;
452                }
453
454                /*!
455               
456                        @function get_restrictions_without_branch
457                        @abstract Returns an array containing the restrictions ignoring the
458                                branches
459                        @author Raphael Derosso Pereira
460                       
461                        @param array $restrictions The restrictions
462               
463                */
464                function get_restrictions_without_branch(&$restrictions)
465                {
466                        if (!is_array($restrictions))
467                        {
468                                return null;
469                        }
470                       
471                        $fields = array();
472                       
473                        foreach ($restrictions as $restrict_data)
474                        {
475                                switch($restrict_data['type'])
476                                {
477                                        case 'branch':
478                                                $fields = array_merge($fields, $this->get_restrictions_without_branch($restrict_data['sub_branch']));
479                                                break;
480                                               
481                                        case '=':
482                                        case '!=':     
483                                        case '<=':
484                                        case '<':
485                                        case '>':
486                                        case '>=':
487                                        case 'NULL':
488                                        case 'IN':
489                                        case 'LIKE':
490                                        case 'iLIKE':
491                                        case 'NOT NULL':
492                                        case 'NOT IN':
493                                        case 'NOT LIKE':
494                                        case 'NOT iLIKE':
495                                                array_push($fields, $restrict_data);
496                                                break;
497                                               
498                                        default:
499                                                exit('Error in '.__FILE__.' on '.__LINE__.'<br>The restriction type passed was: '.$restrict_data['type']);                                     
500                                }
501                        }
502                       
503                        return $fields;
504                }
505               
506               
507                /*********************************************************************\
508                 *                        Methods to Get Data                        *
509                \*********************************************************************/
510               
511       
512                /*!
513               
514                 @function get_single_entry
515                 @abstract Returns all information requested about one contact
516                 @author Raphael Derosso Pereira
517                     
518                 @param integer $id_contact The contact ID
519                 @param array $fields The array returned by get_fields with true
520                        on the fields to be taken.
521                       
522                */
523                function get_single_entry ( $id_contact, $fields )
524                {
525                        if (!is_array($fields))
526                        {
527                                if (is_object($GLOBALS['phpgw']->log))
528                                {
529                                        $GLOBALS['phpgw']->log->message(array(
530                                                'text' => 'F-BadcontactcenterParam, wrong get_single_entry parameters type.',
531                                                'line' => __LINE__,
532                                                'file' => __FILE__));
533                                       
534                                        $GLOBALS['phpgw']->log->commit();
535                                }
536                                else
537                                {
538                                        exit('Argument Error on: <br>File:'.__FILE__.'<br>Line:'.__LINE__.'<br>');
539                                }
540                        }
541                       
542                        $ldap = $GLOBALS['phpgw']->common->ldapConnect($this->src_info['host'],$this->src_info['acc'],$this->src_info['pw'],true);
543                       
544                        if (!$ldap)
545                        {
546                                return false;
547                        }
548                       
549                        $resource = ldap_read($ldap, $id_contact, 'objectClass='.$this->src_info['obj']);
550                        $n_entries = ldap_count_entries($ldap, $resource);
551                        if ( $n_entries > 1 or $n_entries < 1)
552                        {
553                                return false;
554                        }
555                       
556                        $first_entry = ldap_first_entry($ldap, $resource);
557                        $contact = ldap_get_attributes($ldap,$first_entry);
558                        if($contact['jpegPhoto']){     
559                                $contact['jpegPhoto'] = ldap_get_values_len ($ldap, $first_entry, "jpegPhoto");
560                        }
561
562//                      print_r($contact);
563                       
564                //      $contact_data = $this->fields;
565                       
566                        foreach($fields as $field => $trueness)
567                        {
568                                if (!$trueness)
569                                {
570                                        //unset($contact_data[$field]);
571                                        continue;
572                                }
573                               
574                                switch ($field)
575                                {
576                                        case 'companies':
577                                                unset($l_fields);
578                                                $l_fields['company_name']  = $this->trans_table['contact.company.company_name'];
579                                                $l_fields['title']         = $this->trans_table['contact.business_info.title'];
580                                                $l_fields['department']    = $this->trans_table['contact.business_info.department'];
581                                                $l_fields['company_notes'] = $this->trans_table['contact.company.company_notes'];
582                                               
583                                                $contact_data['companies'] = array();
584                                                foreach($l_fields as $l_field => $l_value)
585                                                {
586                                                        if (!( $contact[$l_value[0]][0]))
587                                                        {
588                                                                continue;
589                                                        }
590                                                       
591                                                        $contact_data['companies']['company1'][$l_field] = $contact[$l_value[0]][0];
592                                                }
593                                               
594                                                if (!(count($contact_data['companies'])))
595                                                {
596                                                        unset($contact_data['companies']);
597                                                }
598                                                break;
599                                       
600                                        case 'relations':
601                                                unset($l_fields);
602                                                if (!$this->trans_table['contact.contact_related.names_ordered'])
603                                                {
604                                                        unset($contact_data['relations']);
605                                                }
606                                               
607                                                $contact_data['relations'] = array();
608                                                if (!is_array($this->trans_table['contact.contact_related.names_ordered']))
609                                                {
610                                                        if (!($trans = $this->trans_table[$this->trans_table['contact.contact_related.names_ordered']]))
611                                                        {
612                                                                continue;
613                                                        }
614                                                       
615                                                        $i = 1;
616                                                        foreach($trans as $l_type => $l_type_fields)
617                                                        {
618                                                                if (!($contact[$l_type_fields[0]][0]))
619                                                                {
620                                                                        continue;
621                                                                }
622                                                               
623                                                                $contact_data['relations']['relation'.$i]['type'] = $l_type;
624                                                                $contact_data['relations']['relation'.$i]['names_ordered'] = $contact[$l_type_fields[0]][0];
625                                                                $i++;
626                                                        }
627                                                }
628                                               
629                                                if (!(count($contact_data['relations'])))
630                                                {
631                                                        unset($contact_data['relations']);
632                                                }
633                                                break;
634                                       
635                                        case 'addresses':
636                                                unset($l_fields);
637                                                $l_fields['address1'] = $this->trans_table['contact.address.address1'];
638                                                $l_fields['address2'] = $this->trans_table['contact.address.address2'];
639                                                $l_fields['complement'] = $this->trans_table['contact.address.complement'];
640                                                $l_fields['address_other'] = $this->trans_table['contact.address.address_other'];
641                                                $l_fields['postal_code'] = $this->trans_table['contact.address.postal_code'];
642                                                $l_fields['po_box'] = $this->trans_table['contact.address.po_box'];
643                                                $l_fields['id_city'] = $this->trans_table['contact.address.city.id_city'];
644                                                $l_fields['city_name'] = $this->trans_table['contact.address.city.city_name'];
645                                                $l_fields['city_timezone'] = $this->trans_table['contact.address.city.city_timezone'];
646                                                $l_fields['city_geo_location'] = $this->trans_table['contact.address.city.city_geo_location'];
647                                                $l_fields['id_state'] = $this->trans_table['contact.address.city.state.id_state'];
648                                                $l_fields['state_name'] = $this->trans_table['contact.address.city.state.state_name'];
649                                                $l_fields['state_symbol'] = $this->trans_table['contact.address.city.state.state_symbol'];
650                                                $l_fields['id_country'] = $this->trans_table['contact.address.city.country.id_country'];
651                                                $l_fields['country_name'] = $this->trans_table['contact.address.city.country.country_name'];
652                                                $l_fields['address_is_default'] = $this->trans_table['contact.address.address_is_default'];
653
654                                                $contact_data['addresses'] = array();
655                                                foreach($l_fields as $l_field => $l_value)
656                                                {
657                                                        if (!is_array($l_value))
658                                                        {
659                                                                if (!($trans = $this->trans_table[$l_value]))
660                                                                {
661                                                                        continue;
662                                                                }
663                                                               
664                                                                $i = 1;
665                                                                foreach($trans as $l_type => $l_type_fields)
666                                                                {
667                                                                        if (!($contact[$l_type_fields[0]][0]))
668                                                                        {
669                                                                                continue;
670                                                                        }
671                                                                       
672                                                                        $contact_data['addresses']['address'.$i]['type'] = $l_type;
673                                                                        $contact_data['addresses']['address'.$i][$l_field] = $contact[$l_type_fields[0]][0];
674                                                                        $i++;
675                                                                }
676                                                        }
677                                                        else
678                                                        {
679                                                                $contact_data['addresses']['address1'][$l_field] = $contact[$l_value[0]][0];
680                                                        }
681                                                }
682                                               
683                                                if (!(count($contact_data['addresses'])))
684                                                {
685                                                        unset($contact_data['addresses']);
686                                                }
687                                                break;
688                                       
689                                        case 'connections':
690                            $preferences = ExecMethod('contactcenter.ui_preferences.get_preferences');
691                            if (!is_array($preferences))
692                            {
693                                                        $preferences['personCardEmail'] = 1;
694                                                        $preferences['personCardPhone'] = 2;
695                                                }
696                                                unset($l_fields);
697                                                $l_fields['connection_name'] = $this->trans_table['contact.connection.connection_name'];
698                                                $l_fields['connection_value'] = $this->trans_table['contact.connection.connection_value'];
699
700                                                $contact_data['connections'] = array();
701                                                foreach($l_fields as $l_field => $l_value)
702                                                {
703                                                        if (!is_array($l_value))
704                                                        {
705                                                                if (!($trans = $this->trans_table[$l_value]))
706                                                                {
707                                                                        continue;
708                                                                }
709                                                               
710                                                                $i = 1;
711                                                                foreach($trans as $l_type => $l_type_fields)
712                                                                {
713                                                                        if (!($contact[$l_type_fields[0]][0]))
714                                                                        {
715                                                                                continue;
716                                                                        }
717                                                                       
718                                                                        switch ($l_type)
719                                                                        {
720                                                                                case 'email':
721                                                                                $contact_data['connections']['connection'.$i]['id_type'] = $preferences['personCardEmail'];
722                                                                                break;
723
724                                                                                default:
725                                                                                $contact_data['connections']['connection'.$i]['id_type'] = $preferences['personCardPhone'];
726                                                                        }
727                                                                        $contact_data['connections']['connection'.$i]['type'] = $l_type;
728                                                                        $contact_data['connections']['connection'.$i][$l_field] = $contact[$l_type_fields[0]][0];
729                                                                        $i++;
730                                                                }
731                                                        }
732                                                        else
733                                                        {
734                                                                $contact_data['connections']['connection1'][$l_field] = $contact[$l_value[0]][0];
735                                                        }
736                                                }
737                                               
738                                                if (!(count($contact_data['connections'])))
739                                                {
740                                                        unset($contact_data['connections']);
741                                                }
742                                                break;
743                                       
744                                        case 'prefix':
745                                                unset($l_fields);
746                                                $l_fields = $this->trans_table['contact.prefixes.prefix'];
747                                                if (!$l_fields or !$contact[$l_fields[0]][0])
748                                                {
749                                                        unset($contact_data['prefix']);
750                                                        continue;
751                                                }
752                                               
753                                                $contact_data['prefix'] = $contact[$l_fields[0]][0];
754                                                break;
755                                               
756                                        case 'suffix':
757                                                unset($l_fields);
758                                                $l_fields = $this->trans_table['contact.suffixes.suffix'];
759                                                if (!$l_fields or !$contact[$l_fields[0]][0])
760                                                {
761                                                        unset($contact_data['suffix']);
762                                                        continue;
763                                                }
764                                               
765                                                $contact_data['suffix'] = $contact[$l_fields[0]][0];
766                                                break;
767                                               
768                                        case 'status':
769                                                unset($l_fields);
770                                                $l_fields = $this->trans_table['contact.status.status_name'];
771                                                if (!$l_fields or !$contact[$l_fields[0]][0])
772                                                {
773                                                        unset($contact_data['status']);
774                                                        continue;
775                                                }
776                                               
777                                                $contact_data['status'] = $contact[$l_fields[0]][0];
778                                                break;
779                                               
780                                                case 'photo':
781                                                unset($l_fields);
782                                                $l_fields = $this->trans_table['contact.photo'];
783                                                if (!$l_fields or !$contact[$l_fields[0]][0])
784                                                {
785                                                        unset($contact_data['photo']);
786                                                        continue;
787                                                }
788                                               
789                                                $contact_data['photo'] = $contact[$l_fields[0]][0];
790                                                break;                                                                                 
791
792                                        default:
793                                                unset($l_fields);
794                                                $l_fields = $this->trans_table['contact.'.$field];
795                                                if (!$l_fields or !$contact[$l_fields[0]][0])
796                                                {
797                                                        unset($contact_data[$field]);
798                                                        continue;
799                                                }
800                                               
801                                                if(count($contact[$l_fields[0]]) > 1)
802                                                        $contact_data[$field] = $contact[$l_fields[0]];
803                                                else
804                                                        $contact_data[$field] = $contact[$l_fields[0]][0];
805
806                                                break;
807                                }
808                        }
809                       
810                        if (!is_array($contact_data))
811                        {
812                                return false;
813                        }
814                       
815                        return $contact_data;
816                }
817               
818                function get_multiple_entries ( $id_contacts, $fields, $other_data = false )
819                {
820                        if (!is_array($id_contacts) or !is_array($fields) or ($other_data != false and !is_array($other_data)))
821                        {
822                                if (is_object($GLOBALS['phpgw']->log))
823                                {
824                                        $GLOBALS['phpgw']->log->message(array(
825                                                'text' => 'F-BadcontactcenterParam, wrong get_multiple_entry parameter type.',
826                                                'line' => __LINE__,
827                                                'file' => __FILE__));
828                                       
829                                        $GLOBALS['phpgw']->log->commit();
830                                }
831                                else {
832                                        exit('Argument Error on: <br>File:'.__FILE__.'<br>Line:'.__LINE__.'<br>');
833                                }
834                        }
835                       
836                        $contacts = array();
837       
838                        if ($other_data)
839                        {
840                                //TODO
841                        }
842       
843                        foreach ($id_contacts as $id)
844                        {
845                                $contacts[$id] = $this->get_single_entry($id,$fields);
846                        }
847                       
848                        return $contacts;
849                }
850
851                function get_all_entries_ids ()
852                {
853                        $search_fields = array('contact.id_contact', 'contact.names_ordered');
854                        $search_rules  = array(
855                                0 => array(
856                                        'field' => 'contact.names_ordered',
857                                        'type'  => 'LIKE',
858                                        'value' => '%'
859                                )
860                        );
861                        $search_other  = array('order' => 'contact.names_ordered');
862
863                        $result_i = $this->find($search_fields, $search_rules, $search_other);
864
865                        if (is_array($result_i) and count($result_i))
866                        {
867                                $result = array();
868                                foreach($result_i as $result_part)
869                                {
870                                        $result[] = $result_part['id_contact'];
871                                }
872
873                                return $result;
874                        }
875
876                        return null;
877                }
878               
879                function get_relations ($id_contact,$extra=false)
880                {
881                }
882               
883                function get_addresses ( $id_contact,$extra=false )
884                {
885                }
886               
887                function get_connections ( $id_contact,$extra=false )
888                {
889                }
890               
891                function get_companies ( $id_contact, $extra=false )
892                {
893                }
894               
895                function get_all_prefixes (  )
896                {
897                }
898               
899                function get_all_suffixes (  )
900                {
901                }
902               
903                function get_all_status (  )
904                {
905                }
906               
907                function get_all_relations_types (  )
908                {
909                }
910               
911                function get_all_addresses_types (  )
912                {
913                }
914               
915                function get_all_connections_types (  )
916                {
917                }
918               
919                function get_vcard ( $id_contact )
920                {
921                }
922               
923               
924               
925               
926                function get_global_tree ( $root )
927                {
928                }
929       
930                function get_actual_brach (  )
931                {
932                }
933       
934                function set_actual_branch ( $branch )
935                {
936                }
937        }
938?>
Note: See TracBrowser for help on using the repository browser.