True // call from addressbook.uivcard.in to import a vcard ); function boaddressbook($session=True) { $this->so = CreateObject('addressbook.soaddressbook'); $this->rights = $this->so->rights; $this->grants = $this->so->grants; $this->contact_type = $this->so->contact_type; $this->comm_descr = $this->so->comm_descr; $this->comm_type = $this->so->comm_type; $this->addr_type = $this->so->addr_type; $this->note_type = $this->so->note_type; $this->tab_main_persons = $this->so->tab_main_persons; $this->tab_main_organizations = $this->so->tab_main_organizations; $this->bday_internformat = "Y-m-d"; // use ISO 8601 for internal bday represantation if($session) { $this->read_sessiondata(); $this->use_session = True; } $this->_set_session_data(); } //used function save_sessiondata($data) { if ($this->use_session) { if($this->debug) { echo '
Save:'; _debug_array($data); } $GLOBALS['phpgw']->session->appsession('session_data','addressbook',$data); } } //used function read_sessiondata() { $data = $GLOBALS['phpgw']->session->appsession('session_data','addressbook'); if($this->debug) { echo '
Read:'; _debug_array($data); } $this->start = $data['start']; $this->limit = $data['limit']; $this->query = $data['query']; $this->sort = $data['sort']; $this->order = $data['order']; $this->filter = $data['filter']; $this->cat_id = $data['cat_id']; $this->qfield = $data['qfield']; if($this->debug) { echo '
read_sessiondata();'; $this->_debug_sqsof(); } } function _set_session_data() { /* _debug_array($GLOBALS['HTTP_POST_VARS']); */ /* Might change this to '' at the end---> */ $_start = get_var('start',Array('GET','POST')); $_query = get_var('query',Array('GET','POST')); $_qfield = get_var('qfield',Array('GET','POST')); $_sort = get_var('sort',Array('GET','POST')); $_order = get_var('order',Array('GET','POST')); $_filter = get_var('filter',Array('GET','POST')); $_cat_id = get_var('cat_id',Array('GET','POST')); $_fcat_id = get_var('fcat_id',Array('GET','POST')); if(!empty($_start) || ($_start == '0') || ($_start == 0)) { if($this->debug) { echo '
overriding $start: "' . $this->start . '" now "' . $_start . '"'; } $this->start = $_start; } if($_limit) { $this->limit = $_limit; } if((empty($_query) && !empty($this->query)) || !empty($_query)) { if($this->debug) { echo '
overriding $query: "' . $this->query . '" now "' . urldecode(addslashes($_query)) . '"'; } if($this->query != urldecode(addslashes($_query))) { $this->start = 0; } $this->query = $_query; } if(isset($_fcat_id) && $_fcat_id!='') { if($this->debug) { echo '
overriding $cat_id: "' . $this->cat_id . '" now "' . $_fcat_id . '"'; } if($this->cat_id != $_fcat_id) { $this->start = 0; } $this->cat_id = $_fcat_id; } if(isset($_sort) && !empty($_sort)) { if($this->debug) { echo '
overriding $sort: "' . $this->sort . '" now "' . $_sort . '"'; } $this->sort = $_sort; } if(isset($_order) && !empty($_order)) { if($this->debug) { echo '
overriding $order: "' . $this->order . '" now "' . $_order . '"'; } $this->order = $_order; } if(isset($_filter) && !empty($_filter)) { if($this->debug) { echo '
overriding $filter: "' . $this->filter . '" now "' . $_filter . '"'; } if($this->filter != $_filter) { $this->start = 0; } $this->filter = $_filter; } if(isset($_qfield) && !empty($_qfield)) { $this->qfield = $_qfield; } if($this->debug) { $this->_debug_sqsof(); } } /*************************************************************\ * Person Functions Section * \*************************************************************/ /** * Call to add_person function in soaddressbook object * * @param array $fields The array with all data of the person * @return integer The person_id of the new person */ function add_person($fields) { return $this->so->add_person($fields); } /** * Get the principal person data for the psrson_id what you want * * @param integer $person_id The person id what you want to find * @param bolean $get_org Flag for get or not org_data for this person * @return array The array with all data from person, this also * separate the cats and extra tab */ function get_principal_persons_data($person_id, $get_org=True) { $entry = $this->so->get_principal_persons_data($person_id, $get_org); $entry[0]['tab_cats']['my_cats'] = explode(",", $entry[0]['cat_id']); $entry[0]['tab_extra']['per_suffix'] = $entry[0]['per_suffix']; $entry[0]['tab_extra']['per_sound'] = $entry[0]['per_sound']; $entry[0]['tab_extra']['per_pubkey'] = $entry[0]['per_pubkey']; unset($entry[0]['cat_id']); unset($entry[0]['per_suffix']); unset($entry[0]['per_sound']); unset($entry[0]['per_pubkey']); return $entry[0]; } /** * Get the organizations for the person what you want * * @param integer $person_i The person id what you want to find * @return array The array with all organizations for this person, * this also return in this array the preferred organization */ function get_orgs_person_data($person_id) { $entry = $this->so->get_organizations_by_person($person_id); if($entry) { foreach($entry as $k => $v) { if ($v['my_preferred'] == 'Y') { $entry['preferred_org'] = $v['my_org_id']; } $entry['my_orgs'][$k] = $v['my_org_id']; } } return $entry; } /** * Get the the person data what you want * * @param array $fields The fields that you can see from person * @param integer $limit Limit of records that you want * @param integer $ofset Ofset of record that you want start * @param string $orderby The field which you want order * @param string $sort ASC | DESC depending what you want * @param mixed $criteria All criterias what you want * @param mixed $criteria_token same like $criteria but builded
with sql_criteria class, more powerfull * @return array with records */ function get_persons($fields, $start='', $limit='', $orderby='', $sort='', $criteria='', $token_criteria='') { $entries = $this->so->get_persons($fields, $start, $limit, $orderby, $sort, $criteria, $token_criteria); if(is_array($entries)) { foreach($entries as $data) { $persons[$data['contact_id']] = $data; } } else { $persons = array(); } $this->total = $this->so->contacts->total_records; return $persons; } /** * Edit the person data what you want * * @param integer $person_id The person what you want to edit * @param array $fields The fields that you want * @return */ function edit_person($person_id, $fields) { $old_orgs= $fields['old_my_orgs']['my_orgs']; $new_orgs = $fields['tab_orgs']['my_orgs']; $fields['edit_orgs'] = $this->diff_arrays($old_orgs, $new_orgs); $old_comm = $fields['old_comm']; $new_comm = $fields['tab_comms']['comm_data']; $fields['edit_comms'] = $this->diff_arrays($old_comm, $new_comm, 'keys'); $old_others = $fields['old_others']; $new_others = $fields['others_data']; $fields['edit_others'] = $this->diff_arrays($old_others, $new_others, 'keys'); return $this->so->edit_person($person_id, $fields); } //used function get_count_persons($criteria='') { return $this->so->get_count_persons($criteria); } /*************************************************************\ * Organization Functions Section * \*************************************************************/ /** * Call to add_org function in soaddressbook object * * @param array $fields The array with all data of the org * @return integer The org_id of the new org */ function add_org($fields) { return $this->so->add_org($fields); } /** * Get the principal organization data for the org_id what you want * * @param integer $org_id The organization id what you want to find * @return array The array with all data from person, this also * separate the cats and extra tab */ function get_principal_organizations_data($org_id) { $entry = $this->so->get_principal_organizations_data($org_id); $entry[0]['tab_cats']['my_cats'] = explode(",", $entry[0]['cat_id']); unset($entry[0]['cat_id']); return $entry[0]; } /** * Get the persons for the organization what you want * * @param integer $org_id The org id what you want to find * @return array The array with all persons for this organization */ function get_person_orgs_data($org_id) { $entry = $this->so->get_people_by_organizations($org_id); if($entry) { foreach($entry as $k => $v) { $entry['my_person'][$k] = $v['my_person_id']; } } return $entry; } /** * Retrieve all organizations data which you specify, this can use * limit and order. * * @param array $fields The fields that you can see from person * @param integer $limit Limit of records that you want * @param integer $ofset Ofset of record that you want start * @param string $orderby The field which you want order * @param string $sort ASC | DESC depending what you want * @param array $criteria All criterias what you want * @param mixed $criteria_token same like $criteria but builded
with sql_criteria class, more powerfull * @return array with records */ function get_orgs($fields, $start='', $limit='', $orderby='', $sort='', $criteria='', $token_criteria='') { $entries = $this->so->get_orgs($fields, $start, $limit, $orderby, $sort, $criteria, $token_criteria); if(is_array($entries)) { foreach($entries as $data) { $orgs[$data['contact_id']] = $data; } } else { $orgs = array(); } $this->total = $this->so->contacts->total_records; return $orgs; } /** * Edit the org data what you want * * @param integer $org_id The org what you want to edit * @param array $fields The fields that you want * @return */ function edit_org($org_id, $fields) { $old_person= $fields['old_my_person']['my_person']; $new_person = $fields['tab_persons']['my_person']; $fields['edit_persons'] = $this->diff_arrays($old_person, $new_person); $old_comm = $fields['old_comm']; $new_comm = $fields['tab_comms']['comm_data']; $fields['edit_comms'] = $this->diff_arrays($old_comm, $new_comm, 'keys'); $old_others = $fields['old_others']; $new_others = $fields['others_data']; $fields['edit_others'] = $this->diff_arrays($old_others, $new_others, 'keys'); return $this->so->edit_org($org_id, $fields); } //used function get_count_orgs($criteria='') { return $this->so->get_count_orgs($criteria); } /*************************************************************\ * Retrive Contact Data Functions Section * \*************************************************************/ /** * Get the others fields data for this contact * * @param integer $contact_id The contact id what you want to find * @return array The array with all others data for this contact */ function get_others_contact_data($contact_id) { return $this->so->get_others_contact_data($contact_id); } /** * Get the addresses data for this contact * * @param integer $contact_id The contact id what you want to find * @return array The array with all addresses data for this contact */ function get_addr_contact_data($contact_id, $criteria='') { return $this->so->get_addr_contact_data($contact_id, $criteria); } /** * Get the communications media data for this contact * * @param integer $contact_id The contact id what you want to find * @return array The array with all communications media for this contact */ function get_comm_contact_data($contacts, $fields_comms='', $simple=False) { $data = $this->so->get_comm_contact_data($contacts, $fields_comms); if($simple==True) { return $data; } if(is_array($data)) { foreach($data as $key => $value) { $comm_data[$value['comm_contact_id']][$value['comm_description']] = $value['comm_data']; if($value['comm_preferred']=='Y') { $comm_data[$value['comm_contact_id']]['preferred'] = $value['comm_description']; } } } else { $comm_data = array(); } return $comm_data; } //used function get_sub_cats($cat_to_find) { return $this->so->get_sub_cats($cat_to_find); } //used function get_persons_by_cat($cats) { return $this->so->get_persons_by_cat($cats); } //used function get_type_contact($contact_id) { return $this->so->get_type_contact($contact_id); } /*************************************************************\ * Others Contacts Actions Functions Section * \*************************************************************/ //used function delete($contact_id, $contact_type) { return $this->so->delete($contact_id, $contact_type); } //used function copy_contact($contact_id) { return $this->so->copy_contact($contact_id); } /** * Criteria for index primordially * * return string criteria for search. */ function criteria_contacts($access, $category, $field, $pattern, $show_fields) { if ($pattern) { switch ($field) { case 'person': $fields = array ( 'per_full_name', 'per_prefix', 'per_suffix', 'per_initials' ); break; case 'org': $fields = array ('org_name' ); break; case 'comms': $fields['comm_media'] = array(); foreach ( $this->comm_descr as $data ) { $fields['comm_media'][] = $data ['comm_description']; } break; case 'location': $fields = array ( 'addr_add1', 'addr_add2', 'addr_add3', 'addr_city', 'addr_state', 'addr_postal_code', 'addr_country' ); break; case 'other': $fields = array ('other_value'); break; case 'note': $fields = array ('note_text'); break; default : $fields = array (); } } return $this->so->criteria_contacts($GLOBALS['phpgw_info']['user']['account_id'], $access, $category, $fields, $pattern, $show_fields ); } /** * Delete the specified communication media. * * @param integer|array $id Key of the comm media what you want */ function delete_specified_comm($id) { return $this->so->delete_specified_comm($id); } /** * Delete the specified address. * * @param integer|array $id Key of the address what you want */ function delete_specified_location($id) { return $this->so->delete_specified_location($id); } /** * Delete the specified others field. * * @param integer|array $id Key of the other field what you want */ function delete_specified_other($id) { return $this->so->delete_specified_other($id); } /** * Delete the specified note. * * @param integer|array $id Key of the note what you want */ function delete_specified_note($id) { return $this->so->delete_specified_note($id); } function get_insert_others($contact_id, $fields) { return $this->so->add_others($fields, $contact_id); } function get_update_others($contact_id, $fields) { unset($fields['key_other_id']); return $this->so->edit_other($contact_id, $fields); } function get_insert_comm($contact_id, $fields) { return $this->so->add_communication_media($fields, $contact_id); } function get_update_comm($contact_id, $fields) { unset($fields['key_comm_id']); return $this->so->edit_comms($contact_id, $fields); } function get_insert_addr($contact_id, $fields) { return $this->so->add_location($fields, $contact_id); } function get_update_addr($contact_id, $fields) { unset($fields['key_addr_id']); return $this->so->edit_location($contact_id, $fields); } /*************************************************************\ * Search Functions Section * \*************************************************************/ //used function search_contact_type_id($id) { return $this->so->search_contact_type_id($id); } /** * Search location id in location catalog * * @param integer $id The location id to find * @return string The description of id */ function search_location_type_id($id) { return $this->so->search_location_type_id($id); } /*************************************************************\ * Check ACL Functions Section * \*************************************************************/ /** * Check if the contact has add permissions. * * @param integer $contact_id The contact_id which you want to check * @param integer $owner_id The owner_id of the contact which you want to check */ function check_add($contact_id, $owner_id='') { return $this->so->check_add($contact_id, $owner_id); } /** * Check if the contact has edit permissions. * * @param integer $contact_id The contact_id which you want to check * @param integer $owner_id The owner_id of the contact which you want to check */ function check_edit($contact_id, $owner_id='') { return $this->so->check_edit($contact_id, $owner_id); } /** * Check if the contact has read permissions. * * @param integer $contact_id The contact_id which you want to check * @param integer $owner_id The owner_id of the contact which you want to check */ function check_read($contact_id, $owner_id='') { return $this->so->check_read($contact_id, $owner_id); } /** * Check if the contact has delete permissions. * * @param integer $contact_id The contact_id which you want to check * @param integer $owner_id The owner_id of the contact which you want to check */ function check_delete($contact_id, $owner_id='') { return $this->so->check_delete($contact_id, $owner_id); } /*************************************************************\ * Others Functions Section * \*************************************************************/ //used function add_vcard() { if(!is_array($_FILES['uploadedfile']) || ($_FILES['uploadedfile']['error'] != UPLOAD_ERR_OK)) { Header('Location: ' . $GLOBALS['phpgw']->link('/index.php','menuaction=addressbook.uivcard.in&action=GetFile')); } else { $uploadedfile = $_FILES['uploadedfile']['tmp_name']; $uploaddir = $GLOBALS['phpgw_info']['server']['temp_dir'] . SEP; srand((double)microtime()*1000000); $random_number = rand(100000000,999999999); $newfilename = md5($_FILES['uploadedfile'] . $_FILES['uploadedfile']['name'] . time() . $_SERVER['REMOTE_ADDR'] . $random_number ); move_uploaded_file($uploadedfile, $uploaddir . $newfilename); $ftp = fopen($uploaddir . $newfilename . '.info','w'); fputs($ftp,$_FILES['uploadedfile']['type'] . "\n" . $_FILES['uploadedfile']['name']."\n"); fclose($ftp); $filename = $uploaddir . $newfilename; $vcard = CreateObject('phpgwapi.vcard'); $entry = $vcard->in_file($filename); /* _debug_array($entry);exit; */ $entry['owner'] = $GLOBALS['phpgw_info']['user']['account_id']; $entry['access'] = 'private'; /* _debug_array($entry);exit; */ $ab_id = $this->so->contact_import($entry); /* Delete the temp file. */ unlink($filename); unlink($filename . '.info'); Header('Location: ' . $GLOBALS['phpgw']->link('/index.php','menuaction=addressbook.uiaddressbook.view_person&ab_id=' . $ab_id)); exit(); } } //used function add_email($name, $email) { return $this->so->add_contact_with_email($name, $email); } /*************************************************************\ * Preferences Functions Section * \*************************************************************/ //used function save_preferences($prefs,$other,$qfields,$fcat_id) { $GLOBALS['phpgw']->preferences->read_repository(); if (is_array($prefs)) { /* _debug_array($prefs);exit; */ while (list($pref,$x) = each($qfields)) { /* echo '
checking: ' . $pref . '=' . $prefs[$pref]; */ if ($prefs[$pref] == 'on') { $GLOBALS['phpgw']->preferences->add('addressbook',$pref,'addressbook_on'); } else { $GLOBALS['phpgw']->preferences->delete('addressbook',$pref); } } } if(is_array($other)) { $GLOBALS['phpgw']->preferences->delete('addressbook','mainscreen_showbirthdays'); if ($other['mainscreen_showbirthdays']) { $GLOBALS['phpgw']->preferences->add('addressbook','mainscreen_showbirthdays',True); } $GLOBALS['phpgw']->preferences->delete('addressbook','default_filter'); if ($other['default_filter']) { $GLOBALS['phpgw']->preferences->add('addressbook','default_filter',$other['default_filter']); } $GLOBALS['phpgw']->preferences->delete('addressbook','autosave_category'); if ($other['autosave_category']) { $GLOBALS['phpgw']->preferences->add('addressbook','autosave_category',True); } } $GLOBALS['phpgw']->preferences->delete('addressbook','default_category'); $GLOBALS['phpgw']->preferences->add('addressbook','default_category',$fcat_id); $GLOBALS['phpgw']->preferences->save_repository(True); /* _debug_array($prefs);exit; */ Header('Location: ' . $GLOBALS['phpgw']->link('/preferences/index.php')); } //used function get_preferences_for_organizations() { return $this->so->read_preferences($this->tab_main_organizations); } //used function get_preferences_for_persons() { return $this->so->read_preferences($this->tab_main_persons); } //used function get_generic_preferences() { return false; } /*************************************************************\ * Misc Functions Section * \*************************************************************/ //used function get_columns_to_display($contact_type) { return $this->so->read_preferences($contact_type); } //used function display_name($column) { $newcol = $this->so->display_name($column); return $newcol!='*'?$newcol:$column; } //used function execute_queries($queries) { return $this->so->execute_queries($queries); } //used function diff_arrays($old_array=array(), $new_array=array(), $type='values') { if(!is_array($old_array)) { $old_array = array(); } if(!is_array($new_array)) { $new_array = array(); } if($type=='values') { $result['delete'] = array_diff($old_array, $new_array); $result['insert'] = array_diff($new_array, $old_array); $result['edit'] = array_intersect($old_array, $new_array); } elseif($type=='keys') { $bc_old_array = $old_array; $bc_new_array = $new_array; $delete = array_diff(array_keys($old_array), array_keys($new_array)); $insert = array_diff(array_keys($new_array), array_keys($old_array)); $edit = array_intersect(array_keys($old_array), array_keys($new_array)); foreach($delete as $key) { $result['delete'][$key] = $bc_old_array[$key]; } foreach($insert as $key) { $result['insert'][$key] = $bc_new_array[$key]; } foreach($edit as $key) { $result['edit'][$key] = $bc_new_array[$key]; } } return $result; } function _debug_sqsof() { $data = array( 'start' => $this->start, 'limit' => $this->limit, 'query' => $this->query, 'sort' => $this->sort, 'order' => $this->order, 'filter' => $this->filter, 'cat_id' => $this->cat_id, 'qfield' => $this->qfield ); echo '
BO:'; _debug_array($data); } //used function can_delete($contact_id, $owner='') { if ($this->so->contacts->check_perms($this->grants[$owner],PHPGW_ACL_DELETE) || $owner == $GLOBALS['phpgw_info']['user']['account_id']) { return True; } else { return False; } } //used function can_delete_hooks($hook_response) { $negative_apps=false; foreach($hook_response as $application => $response) { if(is_array($response)) { if(!$response['can_delete']) { $negative_apps[$application]=$response['reason']; } } } if(!$negative_apps) { return true; } $this->negative_responses=$negative_apps; } } ?>