* * sponsored by Thyamad - http://www.thyamad.com * ------------------------------------------------------------------------- * * This program is free software; you can redistribute it and/or modify it * * under the terms of the GNU General Public License as published by the * * Free Software Foundation; either version 2 of the License, or (at your * * option) any later version. * \***************************************************************************/ /* This is a special class that handles requests to a catalog that is actually * a catalog group. So this class actually performs all the requests in its * catalog childs. */ include_once('class.abo_catalog.inc.php'); class bo_catalog_group_catalog extends abo_catalog { var $external; var $fields = array( 'id_contact' => true, 'status' => true, 'photo' => true, 'alias' => true, 'prefix' => true, 'given_names' => true, 'family_names' => true, 'names_ordered' => true, 'suffix' => true, 'birthdate' => true, 'sex' => true, 'pgp_key' => true, 'notes' => true, /* Array fields */ 'companies' => true, 'relations' => true, 'addresses' => true, 'connections' => true ); /*! @function bo_people_catalog @abstract Constructor @author Raphael Derosso Pereira */ function bo_catalog_group_catalog(& $bo_contactcenter, & $catalog, $external = 0 ) { $this->bo_contactcenter = & $bo_contactcenter; $this->catalog = & $catalog; $this->external = $external; } /*! @function find @abstract Returns all the IDs of the entries found in all child catalogues that corresponds to the specified rules. @author Raphael Derosso Pereira @param SEE class bo_contactcenter for usage */ function find($what, $rules, $other, $recursive=false) { if ($ldap_info = $this->catalog['ldap']) { $meta_catalog =& CreateObject('contactcenter.bo_global_ldap_catalog',$ldap_info['id_source'], $ldap_info['context'], $this->external); return $meta_catalog->find($what, $rules, $other, $recursive); } $results = array(); reset($this->catalog); while(list(, $new_catalog) = each($this->catalog['sub_branch'])) { //print_r($new_catalog); //echo 'Setting catalog: '.$new_catalog['name'].'
'; $new_catalog = $this->bo_contactcenter->set_catalog($new_catalog); //if($new_catalog) echo 'Setado corretamente!

'; else echo 'Erro ao setar

'; if ($new_catalog['type'] === 'empty') { continue; } $temp_res = $this->bo_contactcenter->catalog->find($what, $rules, $other, $recursive); if (is_array($temp_res) and count($temp_res)) { foreach ($temp_res as $id => $value) { $result[$id] = $value; } } } //$this->bo_contactcenter->set_catalog($this->catalog); return $result; } /*! @function get_single_entry @abstract Returns all information requested about one contact @author Raphael Derosso Pereira @param integer $id_contact The contact ID @param array $fields The array returned by get_fields whith true on the fields to be taken. */ function get_single_entry ( $id_contact, $fields ) { if (!is_array($fields)) { if (is_object($GLOBALS['phpgw']->log)) { $GLOBALS['phpgw']->log->message(array( 'text' => 'F-BadcontactcenterParam, wrong get_single_entry parameters type.', 'line' => __LINE__, 'file' => __FILE__)); $GLOBALS['phpgw']->log->commit(); } else { exit('Argument Error on:
File:'.__FILE__.'
Line:'.__LINE__.'
'); } } $contact_array = $this->get_multiple_entries(array($id_contact), $fields); if (!count($contact_array)) { return false; } if($contact_array[0]) $contact_data = $contact_array[0]; else $contact_data = $contact_array[$id_contact]; if (!is_array($contact_data)) { return false; } return $contact_data; } /*! @function get_multiple_entries @abstract Returns multiple Contacts data into one array @author Raphael Derosso Pereira @param array $id_contacts The Contacts IDs @param array $fields The Contacts fields to be retrieved @param array $other_data Other informations. The format is: $other_data = array( 'offset' => , 'limit' => , 'sort' => , 'order_by' => ); */ function get_multiple_entries ( $id_contacts, $fields, $other_data = false ) { if (!is_array($id_contacts) or !is_array($fields) or ($other_data != false and !is_array($other_data))) { if (is_object($GLOBALS['phpgw']->log)) { $GLOBALS['phpgw']->log->message(array( 'text' => 'F-BadcontactcenterParam, wrong get_multiple_entry parameter type.', 'line' => __LINE__, 'file' => __FILE__)); $GLOBALS['phpgw']->log->commit(); } else { exit('Argument Error on:
File:'.__FILE__.'
Line:'.__LINE__.'
'); } } $contacts = array(); if ($other_data) { //TODO } /* First check if this is a LDAP Catalog Group. In this case, just leave the * subtree search for the LDAP server */ if ($ldap_info = $this->catalog['ldap']) { $meta_catalog = CreateObject('contactcenter.bo_global_ldap_catalog', $ldap_info['id_source'], $ldap_info['context'], $this->external); return $meta_catalog->get_multiple_entries($id_contacts, $fields, $other_data); } /* Search for the catalog of the first entry and try to get all ids from that * catalog. Repeat to the ones not found until there's none missing or no more * catalogs. */ $contacts = array(); reset($this->catalog); while (list($level,$branch) = each($this->catalog['sub_branch'])) { $this->bo_contactcenter->set_catalog($branch); $contacts += $this->bo_contactcenter->catalog->get_multiple_entries($id_contacts, $fields, $other_data); reset($contacts); while (list($id) = each($contacts)) { if ($id_contacts[$id]) { unset($id_contacts[$id]); } } if (!count($id_contacts)) { break; } } $this->bo_contactcenter->set_catalog($this->catalog); return $contacts; } function get_all_entries_ids () { // TODO! return null; } /*********************************************************************\ * Methods to get general fields * \*********************************************************************/ /*********************************************************************\ * Methods to Include Data * \*********************************************************************/ /*********************************************************************\ * Methods to Alter Data * \*********************************************************************/ /*********************************************************************\ * Methods to Remove Data * \*********************************************************************/ } ?>