From a6be13d37ae6b681cf6b200f20a237454d490f9a Mon Sep 17 00:00:00 2001 From: Miles Lott Date: Thu, 5 Jul 2001 07:41:08 +0000 Subject: [PATCH] This should complete the remerge of contacts class to api --- addressbook/inc/class.contacts.inc.php | 5 - addressbook/inc/class.contacts_ldap.inc.php | 867 ------------------ addressbook/inc/class.contacts_shared.inc.php | 343 ------- addressbook/inc/class.contacts_sql.inc.php | 680 -------------- 4 files changed, 1895 deletions(-) delete mode 100644 addressbook/inc/class.contacts.inc.php delete mode 100644 addressbook/inc/class.contacts_ldap.inc.php delete mode 100644 addressbook/inc/class.contacts_shared.inc.php delete mode 100644 addressbook/inc/class.contacts_sql.inc.php diff --git a/addressbook/inc/class.contacts.inc.php b/addressbook/inc/class.contacts.inc.php deleted file mode 100644 index 9ec76a1c89..0000000000 --- a/addressbook/inc/class.contacts.inc.php +++ /dev/null @@ -1,5 +0,0 @@ - diff --git a/addressbook/inc/class.contacts_ldap.inc.php b/addressbook/inc/class.contacts_ldap.inc.php deleted file mode 100644 index 959e24fc4e..0000000000 --- a/addressbook/inc/class.contacts_ldap.inc.php +++ /dev/null @@ -1,867 +0,0 @@ - * - * View and manipulate contact records using LDAP * - * -------------------------------------------------------------------------* - * This library is part of the phpGroupWare API * - * http://www.phpgroupware.org/api * - * ------------------------------------------------------------------------ * - * This library is free software; you can redistribute it and/or modify it * - * under the terms of the GNU Lesser General Public License as published by * - * the Free Software Foundation; either version 2.1 of the License, * - * or any later version. * - * This library is distributed in the hope that it will be useful, but * - * WITHOUT ANY WARRANTY; without even the implied warranty of * - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. * - * See the GNU Lesser General Public License for more details. * - * You should have received a copy of the GNU Lesser General Public License * - * along with this library; if not, write to the Free Software Foundation, * - * Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * - \**************************************************************************/ - - /* $Id$ */ - - /*! - @class contacts - @abstract Contact List System - @discussion Author: jengo/Milosch
- This class provides a contact database scheme.
- It attempts to be based on the vcard 2.1 standard, with mods as needed to make for more reasonable sql storage.
- The LDAP schema used here may require installation of schema files available in the phpgwapi/doc/ldap dir. - Please see the README file there. - Syntax: CreateObject('phpgwapi.contacts');
- Example1: $contacts = CreateObject('phpgwapi.contacts'); - */ - class contacts_ - { - var $db; - var $ldap; - var $nextid; - var $std_table=''; - var $ext_table='phpgw_addressbook_extra'; - - var $account_id; - var $stock_contact_fields; // This is an array of almost the fields in the phpgw_addressbook table - var $non_contact_fields; // Here are the rest: d,owner,access,lid,tid,cat_id - var $email_types; // VCard email type array - var $total_records; // This will contain numrows for data retrieved - var $grants; // This holds all of the users that have granted access to there entrys - - function contacts_() - { - global $phpgw, $phpgw_info; - - $this->db = $phpgw->db; - $this->ldap = $phpgw->common->ldapConnect( - $phpgw_info['server']['ldap_contact_host'], - $phpgw_info['server']['ldap_contact_dn'], - $phpgw_info['server']['ldap_contact_pw'] - ); - $this->account_id = $phpgw_info['user']['account_id']; - $this->grants = $phpgw->acl->get_grants('addressbook'); - - // The left side are the array elements used throughout phpgw, right side are the ldap attributes - $this->stock_contact_fields = array( - 'fn' => 'cn', // 'prefix given middle family suffix' - 'n_given' => 'givenname', // firstname - 'n_family' => 'sn', // lastname - 'n_middle' => 'phpgwmiddlename', - 'n_prefix' => 'phpgwprefix', - 'n_suffix' => 'phpgwsuffix', - 'sound' => 'phpgwaudio', - 'bday' => 'phpgwbirthday', - 'note' => 'description', - 'tz' => 'phpgwtz', - 'geo' => 'phpgwgeo', - 'url' => 'phpgwurl', - 'pubkey' => 'phpgwpublickey', - - 'org_name' => 'o', // company - 'org_unit' => 'ou', // division - 'title' => 'title', - - 'adr_one_street' => 'street', - 'adr_one_locality' => 'l', - 'adr_one_region' => 'st', - 'adr_one_postalcode' => 'postalcode', - 'adr_one_countryname' => 'co', - 'adr_one_type' => 'phpgwadronetype', // address is domestic/intl/postal/parcel/work/home - 'label' => 'phpgwaddresslabel', // address label - - 'adr_two_street' => 'phpgwadrtwostreet', - 'adr_two_locality' => 'phpgwadrtwolocality', - 'adr_two_region' => 'phpgwadrtworegion', - 'adr_two_postalcode' => 'phpgwadrtwopostalcode', - 'adr_two_countryname' => 'phpgwadrtwocountryname', - 'adr_two_type' => 'phpgwadrtwotype', // address is domestic/intl/postal/parcel/work/home - - 'tel_work' => 'telephonenumber', - 'tel_home' => 'homephone', - 'tel_voice' => 'phpgwvoicetelephonenumber', - 'tel_fax' => 'facsimiletelephonenumber', - 'tel_msg' => 'phpgwmsgtelephonenumber', - 'tel_cell' => 'phpgwcelltelephonenumber', - 'tel_pager' => 'phpgwpagertelephonenumber', - 'tel_bbs' => 'phpgwbbstelephonenumber', - 'tel_modem' => 'phpgwmodemtelephonenumber', - 'tel_car' => 'phpgwmobiletelephonenumber', - 'tel_isdn' => 'phpgwisdnphonenumber', - 'tel_video' => 'phpgwvideophonenumber', - 'tel_prefer' => 'phpgwpreferphone', // home, work, voice, etc - 'email' => 'mail', - 'email_type' => 'phpgwmailtype', //'INTERNET','CompuServe',etc... - 'email_home' => 'phpgwmailhome', - 'email_home_type' => 'phpgwmailhometype' //'INTERNET','CompuServe',etc... - ); - - $this->non_contact_fields = array( - 'id' => 'uidnumber', - 'lid' => 'uid', - 'tid' => 'phpgwcontacttypeid', - 'cat_id' => 'phpgwcontactcatid', - 'access' => 'phpgwcontactaccess', - 'owner' => 'phpgwcontactowner' - ); - - /* Used to flag an address as being: - domestic OR international(default) - parcel(default) - postal(default) - work(default) OR home - */ - $this->adr_types = array( - 'dom' => lang('Domestic'), - 'intl' => lang('International'), - 'parcel' => lang('Parcel'), - 'postal' => lang('Postal') - ); - - // Used to set preferphone field - $this->tel_types = array( - 'work' => 'work', - 'home' => 'home', - 'voice' => 'voice', - 'fax' => 'fax', - 'msg' => 'msg', - 'cell' => 'cell', - 'pager' => 'pager', - 'bbs' => 'bbs', - 'modem' => 'modem', - 'car' => 'car', - 'isdn' => 'isdn', - 'video' => 'video' - ); - - // Used to set mail_type fields - $this->email_types = array( - 'INTERNET' => 'INTERNET', - 'CompuServe' => 'CompuServe', - 'AOL' => 'AOL', - 'Prodigy' => 'Prodigy', - 'eWorld' => 'eWorld', - 'AppleLink' => 'AppleLink', - 'AppleTalk' => 'AppleTalk', - 'PowerShare' => 'PowerShare', - 'IBMMail' => 'IBMMail', - 'ATTMail' => 'ATTMail', - 'MCIMail' => 'MCIMail', - 'X.400' => 'X.400', - 'TLX' => 'TLX' - ); - } - - // send this the id and whatever fields you want to see - function read_single_entry($id,$fields = '') - { - global $phpgw_info; - if (!$fields || empty($fields)) { $fields = $this->stock_contact_fields; } - list($stock_fields,$stock_fieldnames,$extra_fields) = - $this->split_stock_and_extras($fields); - - if (count($stock_fieldnames)) - { - $t_fields = "," . implode(",",$stock_fieldnames); - if ($t_fields == ",") - { - unset($t_fields); - } - } - - $sri = ldap_search($this->ldap, $phpgw_info['server']['ldap_contact_context'], 'uidnumber='.$id); - $ldap_fields = ldap_get_entries($this->ldap, $sri); - - $return_fields[0]['id'] = $ldap_fields[0]['uidnumber'][0]; - $return_fields[0]['lid'] = $ldap_fields[0]['uid'][0]; - $return_fields[0]['tid'] = $ldap_fields[0]['phpgwcontacttypeid'][0]; - $return_fields[0]['owner'] = $ldap_fields[0]['phpgwcontactowner'][0]; - $return_fields[0]['access'] = $ldap_fields[0]['phpgwcontactaccess'][0]; - $return_fields[0]['cat_id'] = $ldap_fields[0]['phpgwcontactcatid'][0]; - if (gettype($stock_fieldnames) == 'array') - { - while(list($name,$value)=each($stock_fieldnames)) - { - $return_fields[0][$name] = $ldap_fields[0][$value][0]; - } - } - - // Setup address type fields - if ($return_fields[0]['adr_one_type']) - { - $one_type = $return_fields[0]['adr_one_type']; - reset($this->adr_types); - while (list($name,$val) = each($this->adr_types)) - { - eval("if (strstr(\$one_type,\$name)) { \$return_fields[0][\"one_\$name\"] = \"on\"; }"); - } - } - if ($return_fields[0]["adr_two_type"]) - { - $two_type = $return_fields[0]['adr_two_type']; - reset($this->adr_types); - while (list($name,$val) = each($this->adr_types)) - { - eval("if (strstr(\$two_type,\$name)) { \$return_fields[0][\"two_\$name\"] = \"on\"; }"); - } - } - - $this->db->query("select contact_name,contact_value from $this->ext_table where contact_id='" . $id . "'",__LINE__,__FILE__); - while ($this->db->next_record()) - { - // If its not in the list to be returned, don't return it. - // This is still quicker then 5(+) separate queries - if ($extra_fields[$this->db->f('contact_name')]) - { - $return_fields[0][$this->db->f('contact_name')] = $this->db->f('contact_value'); - } - } - return $return_fields; - } - - function read_last_entry($fields = '') - { - global $phpgw_info; - - if (!$fields || empty($fields)) { $fields = $this->stock_contact_fields; } - list($stock_fields,$stock_fieldnames,$extra_fields) = - $this->split_stock_and_extras($fields); - - if (count($stock_fieldnames)) - { - $t_fields = "," . implode(",",$stock_fieldnames); - if ($t_fields == ",") - { - unset($t_fields); - } - } - - $id = $this->nextid; - if ($id == -1) { $id = 1; } - - $sri = ldap_search($this->ldap, $phpgw_info['server']['ldap_contact_context'], 'uidnumber='.$id); - $ldap_fields = ldap_get_entries($this->ldap, $sri); - - $return_fields[0]['id'] = $ldap_fields[0]['uidnumber'][0]; - $return_fields[0]['lid'] = $ldap_fields[0]['uid'][0]; - $return_fields[0]['tid'] = $ldap_fields[0]['phpgwcontacttypeid'][0]; - $return_fields[0]['owner'] = $ldap_fields[0]['phpgwcontactowner'][0]; - $return_fields[0]['access'] = $ldap_fields[0]['phpgwcontactaccess'][0]; - $return_fields[0]['cat_id'] = $ldap_fields[0]['phpgwcontactcatid'][0]; - - if (gettype($stock_fieldnames) == 'array') - { - while(list($name,$value)=each($stock_fieldnames)) - { - $return_fields[0][$name] = $ldap_fields[0][$value][0]; - } - } - - // Setup address type fields - if ($return_fields[0]['adr_one_type']) - { - $one_type = $return_fields[0]['adr_one_type']; - reset($this->adr_types); - while (list($name,$val) = each($this->adr_types)) - { - eval("if (strstr(\$one_type,\$name)) { \$return_fields[0][\"one_\$name\"] = \"on\"; }"); - } - } - if ($return_fields[0]['adr_two_type']) - { - $two_type = $return_fields[0]['adr_two_type']; - reset($this->adr_types); - while (list($name,$val) = each($this->adr_types)) - { - eval("if (strstr(\$two_type,\$name)) { \$return_fields[0][\"two_\$name\"] = \"on\"; }"); - } - } - - $this->db->query("select contact_name,contact_value from $this->ext_table where contact_id='" . $id . "'",__LINE__,__FILE__); - while ($this->db->next_record()) - { - // If its not in the list to be returned, don't return it. - // This is still quicker then 5(+) separate queries - if ($extra_fields[$this->db->f('contact_name')]) - { - $return_fields[0][$this->db->f('contact_name')] = $this->db->f('contact_value'); - } - } - return $return_fields; - } - - // send this the range, query, sort, order and whatever fields you want to see - // 'rights' and 'access' are unused at this time - function read($start=0,$limit=0,$fields="",$query="",$filter="",$sort="",$order="") - { - global $phpgw,$phpgw_info; - - if (!$fields || empty($fields)) { $fields = $this->stock_contact_fields; } - $DEBUG = 0; - - list($stock_fields,$stock_fieldnames,$extra_fields) = $this->split_stock_and_extras($fields); - - $filterfields = array(); - // turn filter's a=b,c=d OR a=b into an array - if ($filter) - { - if ($DEBUG) { echo "DEBUG - Inbound filter is: #".$filter."#"; } - $filterarray = split(',',$filter); - if ($filterarray[1]) - { - $i=0; - for ($i=0;$iDEBUG - Filter strings: #".$this->non_contact_fields[$name]."# => #".$value."#"; } - $filterfields[$this->non_contact_fields[$name]] = $value; - } - } - } - else - { - list($name,$value) = split('=',$filter); - if ($DEBUG) - { - echo "
DEBUG - Filter strings: #".$this->non_contact_fields[$name]."# => #".$value."#"; - } - $filterfields = array($this->non_contact_fields[$name] => $value); - } - } - else - { - $filterfields += array('phpgwcontacttypeid' => 'n'); - if ($DEBUG) { echo "
DEBUG - Filter strings: #phpgwtypeid=n#"; } - } - - if (is_array($this->grants)) - { - $filterfields += array('phpgwcontactaccess' => 'public'); - $grants = $this->grants; - while (list($user) = each($grants)) - { - if ($DEBUG) { echo "
DEBUG - Grant from owner: ".$user; } - $filterfields += array('phpgwcontactowner' => $user); - } - } - //if ($DEBUG) { - // while(list($name,$value) = each($filterfields)) { - // echo "
DEBUG - Filter strings: #".$name.",".$value."#"; - // } - //} - - if (!$sort) { $sort = "ASC"; } - - if (!$order) - { - $order = "n_family"; - } - - if ($DEBUG && $order) - { - echo "
DEBUG - ORDER by $order"; - } - - if ($query) - { - $ldap_fields = array(); - $total = 0; - // Query each field seperately instead of using ldap OR search. - // It seems PHP cannot do this correctly. - reset($stock_fieldnames); - while (list($name,$value) = each($stock_fieldnames) ) - { - $lquery = $value.'=*'.$query.'*'; - //echo $lquery; exit; - $sri = ldap_search($this->ldap, $phpgw_info['server']['ldap_contact_context'], $lquery); - // append the results - $ldap_fields += ldap_get_entries($this->ldap, $sri); - // add the # rows to our total - $total = $total + ldap_count_entries($this->ldap, $sri); - } - - if ($filterfields) - { - $ldap_fields = $this->filter_ldap($ldap_fields,$filterfields,$DEBUG); - } - - //echo '
first total="'.$total.'"'; - // Now, remove duplicate rows - //if (floor(phpversion()) == 4) { - // $tmp = array_unique($ldap_fields); - // $ldap_fields = $tmp; - // } else { - $ldap_fields = $this->asortbyindex($ldap_fields,'uidnumber'); - @reset($ldap_fields); - if (count($ldap_fields) > 0) - { - for ($a = 0; $a < count($ldap_fields); $a++) - { - if ($ldap_fields[$a]) - { - //echo '
comparing "'.$ldap_fields[$a]['uidnumber'][0] - // .'" to "'.$ldap_fields[$a - 1]['uidnumber'][0].'"'; - if (($ldap_fields[$a]['uidnumber'][0] <> $ldap_fields[$a - 1]['uidnumber'][0])) - { - $uniquearray[$a] = $ldap_fields[$a]; - } - else - { - //echo '
deleting "'.$ldap_fields[$a -1 ]['uidnumber'][0]; - } - } - } - $ldap_fields = $uniquearray; - } - // } // end version check - - $this->total_records = count($ldap_fields); - //echo '
total="'.$this->total_records.'"'; - } - else - { - $sri = ldap_search($this->ldap, $phpgw_info['server']['ldap_contact_context'], 'phpgwcontactowner=*'); - $ldap_fields = ldap_get_entries($this->ldap, $sri); - $this->total_records = ldap_count_entries($this->ldap, $sri); - - if ($filterfields) - { - $ldap_fields = $this->filter_ldap($ldap_fields,$filterfields,$DEBUG); - } - } - - // Use shared sorting routines, based on sort and order - if ($sort == 'ASC') - { - $ldap_fields = $this->asortbyindex($ldap_fields, $this->stock_contact_fields[$order]); - } - else - { - $ldap_fields = $this->arsortbyindex($ldap_fields, $this->stock_contact_fields[$order]); - } - - // This logic allows you to limit rows, or not. - // The export feature, for example, does not limit rows. - // This way, it can retrieve all rows at once. - if ($start && $limit) - { - $limit = $start + $limit; - } - elseif ($start && !$limit) - { - $limit = $start; - } - elseif(!$start && !$limit) - { - $limit = $this->total_records; - } - else - { #(!$start && $limit) { - $start = 0; - $limit = $limit; - } - //echo '('.$start.','.$limit.')'; - - @reset($ldap_fields); - $j=0; - for ($i=$start;$i<$limit;$i++) - { - if ($i<$this->total_records && $ldap_fields[$i]['uid'][0]) - { - //echo '
j:'.$j; - //echo '
i:'.$i; - // unique id, lid for group/account records, - // type id (g/u) for groups/accounts, and - // id of owner/parent for the record - $return_fields[$j]['id'] = $ldap_fields[$i]['uidnumber'][0]; - $return_fields[$j]['lid'] = $ldap_fields[$i]['uid'][0]; - $return_fields[$j]['tid'] = $ldap_fields[$i]['phpgwcontacttypeid'][0]; - $return_fields[$j]['owner'] = $ldap_fields[$i]['phpgwcontactowner'][0]; - $return_fields[$j]['access'] = $ldap_fields[$i]['phpgwcontactaccess'][0]; - $return_fields[$j]['cat_id'] = $ldap_fields[$i]['phpgwcontactcatId'][0]; - //echo '
uidnumber: "'.$ldap_fields[$i]['uidnumber'][0].'"'; - //echo '
tid: "'.$ldap_fields[$i]['phpgwcontacttypeid'][0].'"'; - //echo '
owner: "'.$ldap_fields[$i]['phpgwcontactowner'][0].'"'; - //echo '
access: "'.$ldap_fields[$i]['phpgwcontactaccess'][0].'"'; - //echo '
catid: "'.$ldap_fields[$i]['phpgwcontactcatid'][0].'"'; - - if (gettype($stock_fieldnames) == 'array') - { - reset($stock_fieldnames); - while (list($f_name,$f_value) = each($stock_fieldnames)) - { - $return_fields[$j][$f_name] = $ldap_fields[$i][$f_value][0]; - } - reset($stock_fieldnames); - } - $this->db->query("SELECT contact_name,contact_value FROM $this->ext_table WHERE contact_id='" - . $ldap_fields[$i]['id'] . "'",__LINE__,__FILE__); - while ($this->db->next_record()) - { - // If its not in the list to be returned, don't return it. - // This is still quicker then 5(+) separate queries - if ($extra_fields[$this->db->f('contact_name')]) - { - $return_fields[$j][$this->db->f('contact_name')] = $this->db->f('contact_value'); - } - } - $j++; - } - } - return $return_fields; - } - - function add($owner,$fields,$access='private',$cat_id='0',$tid='n') - { - global $phpgw,$phpgw_info; - - if (!$phpgw_info['server']['ldap_contact_context']) - { - return False; - } - - list($stock_fields,$stock_fieldnames,$extra_fields) = $this->split_stock_and_extras($fields); - - $free = 0; - $this->nextid = $phpgw->common->last_id('contacts'); - // Loop until we find a free id - while (!$free) - { - $ldap_fields = ''; - $sri = ldap_search($this->ldap, $phpgw_info['server']['ldap_contact_context'], 'uidnumber='.$this->nextid); - $ldap_fields = ldap_get_entries($this->ldap, $sri); - if ($ldap_fields[0]['dn'][0]) - { - $this->nextid = $phpgw->common->next_id('contacts'); - } - else - { - $free = True; - } - } - - $ldap_fields = ''; - if (gettype($stock_fieldnames) == 'array') - { - while(list($name,$value)=each($stock_fieldnames)) - { - if ($stock_fields[$name] != '') - { - $ldap_fields[$value] = $stock_fields[$name]; - } - } - } - - $time = gettimeofday(); - $ldap_fields['uid'] = time().$time['usec'].':'.$ldap_fields['givenname']; - - $dn = 'uid=' . $ldap_fields['uid'].',' . $phpgw_info['server']['ldap_contact_context']; - $ldap_fields['phpgwcontacttypeid'] = $tid; - $ldap_fields['phpgwcontactowner'] = $owner; - $ldap_fields['phpgwcontactaccess'] = $access; - $ldap_fields['phpgwcontactcatid'] = $cat_id; - $ldap_fields['uidnumber'] = $this->nextid; - //$ldap_fields['objectclass'][0] = 'person'; - $ldap_fields['objectclass'][0] = 'organizationalPerson'; - $ldap_fields['objectclass'][1] = 'inetOrgPerson'; - $ldap_fields['objectclass'][2] = 'phpgwContact'; -/* - @reset($ldap_fields); - while (list($name,$value) = each($ldap_fields) ) { - if ($value) - { - echo '
fieldname ="'.$name.'", value ="'.$value.'"'; - } - } - exit; -*/ - $err = ldap_add($this->ldap, $dn, $ldap_fields); - - //$this->db->unlock(); - if (count($extra_fields)) - { - while (list($name,$value) = each($extra_fields)) - { - $this->db->query("insert into $this->ext_table values ('".$this->nextid."','" . $this->account_id . "','" - . addslashes($name) . "','" . addslashes($value) . "')",__LINE__,__FILE__); - } - } - } - - function field_exists($id,$field_name) - { - $this->db->query("select count(*) from $this->ext_table where contact_id='$id' and contact_name='" - . addslashes($field_name) . "'",__LINE__,__FILE__); - $this->db->next_record(); - return $this->db->f(0); - } - - function add_single_extra_field($id,$owner,$field_name,$field_value) - { - $this->db->query("insert into $this->ext_table values ($id,'$owner','" . addslashes($field_name) - . "','" . addslashes($field_value) . "')",__LINE__,__FILE__); - } - - function delete_single_extra_field($id,$field_name) - { - $this->db->query("delete from $this->ext_table where contact_id='$id' and contact_name='" - . addslashes($field_name) . "'",__LINE__,__FILE__); - } - - function update($id,$owner,$fields,$access='private',$cat_id='0',$tid='n') - { - global $phpgw_info; - $nonfields = $this->non_contact_fields; - - if (!$phpgw_info['server']['ldap_contact_context']) - { - return False; - } - - // First make sure that id number exists - $sri = ldap_search($this->ldap, $phpgw_info['server']['ldap_contact_context'], 'uidnumber='.$id); - $ldap_fields = ldap_get_entries($this->ldap, $sri); - - if ($ldap_fields[0]['dn']) - { - $dn = $ldap_fields[0]['dn']; - list($stock_fields,$stock_fieldnames,$extra_fields) = $this->split_stock_and_extras($fields); - if (gettype($stock_fieldnames) == 'array') - { - // Check each value, add our extra attributes if they are missing, and - // otherwise fix the entry while we can. - // - // Verify uidnumber - $stock_fields['id'] = $id; - if (empty($ldap_fields[0]['uidnumber'])) - { - $err = ldap_modify($this->ldap,$dn,array('uidnumber' => $stock_fields['uidnumber'])); - } - elseif (!$ldap_fields[0]['uidnumber']) - { - $err = ldap_mod_add($this->ldap,$dn,array('uidnumber' => $stock_fields['uidnumber'])); - } - - // Verify uid - $uids = split(',',$dn); - $stock_fields['lid'] = $uids[0]; - if (empty($ldap_fields[0]['uid'])) - { - $err = ldap_modify($this->ldap,$dn,array('uid' => $stock_fields['lid'])); - } - elseif (!$ldap_fields[0]['uid']) - { - $err = ldap_mod_add($this->ldap,$dn,array('uid' => $stock_fields['lid'])); - } - - // Verify objectclasses are there - if (empty($ldap_fields[0]['objectclass'])) - { - //$stock_fields['objectclass'][0] = 'person'; - $stock_fields['objectclass'][0] = 'organizationalPerson'; - $stock_fields['objectclass'][1] = 'inetOrgPerson'; - $stock_fields['objectclass'][2] = 'phpgwContact'; - $err = ldap_modify($this->ldap,$dn,array('objectclass' => $stock_fields['objectclass'])); - } - elseif (!$ldap_fields[0]['objectclass']) - { - //$stock_fields['objectclass'][0] = 'person'; - $stock_fields['objectclass'][0] = 'organizationalPerson'; - $stock_fields['objectclass'][1] = 'inetOrgPerson'; - $stock_fields['objectclass'][2] = 'phpgwContact'; - $err = ldap_mod_add($this->ldap,$dn,array('objectclass' => $stock_fields['objectclass'])); - } - - // Verify owner - $stock_fields['owner'] = $owner; - if (empty($ldap_fields[0]['phpgwcontactowner'])) - { - $err = ldap_modify($this->ldap,$dn,array('phpgwcontactowner' => $stock_fields['owner'])); - } - elseif (!$ldap_fields[0]['phpgwcontactowner']) - { - $err = ldap_mod_add($this->ldap,$dn,array('phpgwcontactowner' => $stock_fields['owner'])); - } - - // Verify access - $stock_fields['access'] = $access; - if (empty($ldap_fields[0]['phpgwcontactaccess'])) - { - $err = ldap_modify($this->ldap,$dn,array('phpgwcontactaccess' => $stock_fields['access'])); - } - elseif (!$ldap_fields[0]['phpgwcontactaccess']) - { - $err = ldap_mod_add($this->ldap,$dn,array('phpgwcontactaccess' => $stock_fields['access'])); - } - - // Verify cat_id - $stock_fields['cat_id'] = $cat_id; - if (empty($ldap_fields[0]['phpgwcontactcatid'])) - { - $err = ldap_modify($this->ldap,$dn,array('phpgwcontactcatid' => $stock_fields['cat_id'])); - } - elseif (!$ldap_fields[0]['phpgwcontactcatid']) - { - $err = ldap_mod_add($this->ldap,$dn,array('phpgwcontactcatid' => $stock_fields['cat_id'])); - } - - // Verify tid - $stock_fields['tid'] = $tid; - if (empty($ldap_fields[0]['phpgwcontacttypeid'])) - { - $err = ldap_modify($this->ldap,$dn,array('phpgwcontacttypeid' => $stock_fields['tid'])); - } - elseif (!$ldap_fields[0]['phpgwcontacttypeid']) - { - $err = ldap_mod_add($this->ldap,$dn,array('phpgwcontacttypeid' => $stock_fields['tid'])); - } - - // OK, just mod the data already - $allfields = $stock_fieldnames + $nonfields; - while ( list($fname,$fvalue) = each($allfields) ) - { - //if ($ldap_fields[0][$fvalue]) - if ($ldap_fields[0][$fvalue] && $stock_fields[$fname] && $ldap_fields[0][$fvalue][0] != $stock_fields[$fname] ) - { - //echo "
".$fname." => ".$fvalue." was there"; - $err = ldap_modify($this->ldap,$dn,array($fvalue => $stock_fields[$fname])); - } - //elseif (!$ldap_fields[0][$fvalue]) - elseif (!$ldap_fields[0][$fvalue] && $stock_fields[$fname]) - { - //echo "
".$fname." not there - '".$fvalue."'"; - $err = ldap_mod_add($this->ldap,$dn,array($fvalue => $stock_fields[$fname])); - } - elseif ($ldap_fields[0][$fvalue] && !$stock_fields[$fname]) - { - //echo "
".$fname." gone... deleting - '".$fvalue."'"; - // NOTE: we use the ldap_fields because we need to send the - // _ORIGINAL_ contents as the value. see: - // http://www.php.net/manual/en/function.ldap-mod-del.php - $err = ldap_mod_del($this->ldap,$dn,array($fvalue => $ldap_fields[0][$fvalue][0])); - } - // Else we have nothing to do. - } - } - - while (list($x_name,$x_value) = each($extra_fields)) - { - if ($this->field_exists($id,$x_name)) - { - if (! $x_value) - { - $this->delete_single_extra_field($id,$x_name); - } - else - { - $this->db->query("update $this->ext_table set contact_value='" . addslashes($x_value) - . "',contact_owner='$owner' where contact_name='" . addslashes($x_name) - . "' and contact_id='$id'",__LINE__,__FILE__); - } - } - else - { - $this->add_single_extra_field($id,$owner,$x_name,$x_value); - } - } - } - else - { - return False; - } - } - - // Used by admin to change ownership on account delete - function change_owner($old_owner='',$new_owner='') - { - if (!($new_owner && $old_owner)) - { - return False; - } - - $sri = ldap_search($this->ldap, $phpgw_info['server']['ldap_contact_context'], 'phpgwcontactowner='.$old_owner); - $ldap_fields = ldap_get_entries($this->ldap, $sri); - - $entry = ""; - while (list($null,$entry) = each($ldap_fields)) - { - $err = ldap_modify($this->ldap,$dn,array('phpgwcontactowner' => $new_owner)); - } - - $this->db->query("update $this->ext_table set contact_owner='$new_owner' WHERE contact_owner=$owner",__LINE__,__FILE__); - return; - } - - // This is where the real work of delete() is done, shared class file contains calling function - function delete_($id) - { - global $phpgw_info; - - if (!$phpgw_info['server']['ldap_contact_context']) { - return False; - } - - $sri = ldap_search($this->ldap, $phpgw_info['server']['ldap_contact_context'], 'uidnumber='.$id); - $ldap_fields = ldap_get_entries($this->ldap, $sri); - - if ($ldap_fields[0]['dn']) - { - $err = ldap_delete($this->ldap,$ldap_fields[0]['dn']); - - $this->db->query("delete from $this->ext_table where contact_id='$id' and contact_owner='" - . $this->account_id . "'",__LINE__,__FILE__); - } - else - { - return False; - } - } - - // This is for the admin script deleteaccount.php - function delete_all($owner=0) - { - global $phpgw_info; - - if (!$phpgw_info['server']['ldap_contact_context']) - { - return False; - } - - if ($owner) - { - $sri = ldap_search($this->ldap, $phpgw_info['server']['ldap_contact_context'], 'phpgwcontactowner='.$owner); - $ldap_fields = ldap_get_entries($this->ldap, $sri); - - $entry = ''; - while (list($null,$entry) = each($ldap_fields)) - { - $err = ldap_delete($this->ldap,$entry['dn']); - } - - $this->db->query("DELETE FROM $this->ext_table WHERE contact_owner=$owner",__LINE__,__FILE__); - } - return; - } - } -?> diff --git a/addressbook/inc/class.contacts_shared.inc.php b/addressbook/inc/class.contacts_shared.inc.php deleted file mode 100644 index fe0804ec20..0000000000 --- a/addressbook/inc/class.contacts_shared.inc.php +++ /dev/null @@ -1,343 +0,0 @@ - * - * View and manipulate contact records * - * Copyright (C) 2001 Joseph Engo * - * -------------------------------------------------------------------------* - * This library is part of the phpGroupWare API * - * http://www.phpgroupware.org/api * - * ------------------------------------------------------------------------ * - * This library is free software; you can redistribute it and/or modify it * - * under the terms of the GNU Lesser General Public License as published by * - * the Free Software Foundation; either version 2.1 of the License, * - * or any later version. * - * This library is distributed in the hope that it will be useful, but * - * WITHOUT ANY WARRANTY; without even the implied warranty of * - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. * - * See the GNU Lesser General Public License for more details. * - * You should have received a copy of the GNU Lesser General Public License * - * along with this library; if not, write to the Free Software Foundation, * - * Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * - \**************************************************************************/ - - /* $Id$ */ - - class contacts extends contacts_ - { - function check_perms($has, $needed) - { - return (!!($has & $needed) == True); - } - - function split_stock_and_extras($fields) - { - while (list($field,$value) = each($fields)) - { - // Depending on how the array was build, this is needed. - // Yet, I can't figure out why .... - if (gettype($value) == "integer") - { - $value = $field; - } - if ($this->stock_contact_fields[$field]) - { - $stock_fields[$field] = $value; - $stock_fieldnames[$field] = $this->stock_contact_fields[$field]; - } - else - { - $extra_fields[$field] = $value; - } - } - return array($stock_fields,$stock_fieldnames,$extra_fields); - } - - function loop_addslashes($fields) - { - $absf = $this->stock_contact_fields; - while ($t = each($absf)) { - $ta[] = addslashes($fields[$t[0]]); - } - reset($absf); // Is this needed ? - return $ta; - } - - // This will take an array or integer - function delete($id) - { - if (gettype($id) == "array") { - while (list($null,$t_id) = each($id)) { - $this->delete_($t_id); - } - } else { - $this->delete_($id); - } - } - - function asc_sort($a,$b) - { - echo "
A:'".$a."' B:'".$b; - if($a[1]==$b[1]) return 0; - return ($a[1]>$b[1])?1:-1; - } - - function desc_sort($a,$b) - { - echo "
A:'".$a."' B:'".$b; - if($a[1]==$b[1]) return 0; - return ($a[1]<$b[1])?1:-1; - } - - /** - ** comesafter ($s1, $s2) - ** - ** Returns 1 if $s1 comes after $s2 alphabetically, 0 if not. - **/ - function comesafter ($s1, $s2) - { - /** - ** We don't want to overstep the bounds of one of the strings and segfault, - ** so let's see which one is shorter. - **/ - $order = 1; - - if ( (strlen($s1) == 0) ) - { - return 0; - } - - if ( (strlen($s2) == 0) ) - { - return 1; - } - - if (strlen ($s1) > strlen ($s2)) - { - $temp = $s1; - $s1 = $s2; - $s2 = $temp; - $order = 0; - } - - for ($index = 0; $index < strlen ($s1); $index++) - { - /* $s1 comes after $s2 */ - if (strtolower($s1[$index]) > strtolower($s2[$index])) { return ($order); } - - /* $s1 comes before $s2 */ - if (strtolower($s1[$index]) < strtolower($s2[$index])) { return (1 - $order); } - } - /* Special case in which $s1 is a substring of $s2 */ - - return ($order); - } - - /* - * asortbyindex ($sortarray, $index) - * - * Sort a multi-dimensional array by a second-degree index. For instance, the 0th index - * of the Ith member of both the group and user arrays is a string identifier. In the - * case of a user array this is the username; with the group array it is the group name. - * asortby - */ - function asortbyindex ($sortarray, $index) - { - $lastindex = count($sortarray) - 2; - for ($subindex = 0; $subindex < $lastindex; $subindex++) - { - $lastiteration = $lastindex - $subindex; - for ($iteration = 0; $iteration < $lastiteration; $iteration++) - { - $nextchar = 0; - if ($this->comesafter($sortarray[$iteration][$index], $sortarray[$iteration + 1][$index])) - { - $temp = $sortarray[$iteration]; - $sortarray[$iteration] = $sortarray[$iteration + 1]; - $sortarray[$iteration + 1] = $temp; - } - } - } - return ($sortarray); - } - - function arsortbyindex ($sortarray, $index) - { - $lastindex = count($sortarray) - 1; - for ($subindex = $lastindex; $subindex > 0; $subindex--) - { - $lastiteration = $lastindex - $subindex; - for ($iteration = $lastiteration; $iteration > 0; $iteration--) - { - $nextchar = 0; - if ($this->comesafter($sortarray[$iteration][$index], $sortarray[$iteration - 1][$index])) - { - $temp = $sortarray[$iteration]; - $sortarray[$iteration] = $sortarray[$iteration - 1]; - $sortarray[$iteration - 1] = $temp; - } - } - } - return ($sortarray); - } - - function filter_ldap ($ldap_fields,$filterfields,$DEBUG=0) - { - $match = 0; - if($DEBUG) { echo "
"; } - for($i=0;$i"; } - $new_ldap[] = $ldap_fields[$i]; - } - else - { - if($DEBUG) { echo $ldap_fields[$i]["uidnumber"][0].' did not match all.'."
"; } - } - } - } - if($DEBUG) - { - if($match) - { - echo '
'.$match.' total matches.'."\n"; - } - else - { - echo '
No matches :('."\n"; - } - } - $this->total_records = count($new_ldap); - - return $new_ldap; - } - - function formatted_address($id = '',$fields = '',$business = True) - { - global $phpgw,$phpgw_info; - - $font = $phpgw_info['theme']['font']; - - $t = CreateObject('phpgwapi.Template',$phpgw->common->get_tpl_dir('addressbook')); - - $s = CreateObject('phpgwapi.sbox'); - - $address = $this->read_single_entry($id,$fields); - - if ($address[0]['title']) - { - $title = $address[0]['title'] . ' '; - } - - if ($business) - { - $street = $address[0]['adr_one_street']; - $city = $address[0]['adr_one_locality']; - $zip = $address[0]['adr_one_postalcode']; - $state = $address[0]['adr_one_region']; - $country = $address[0]['adr_one_countryname']; - } - else - { - $street = $address[0]['adr_two_street']; - $city = $address[0]['adr_two_locality']; - $zip = $address[0]['adr_two_postalcode']; - $state = $address[0]['adr_two_region']; - $country = $address[0]['adr_two_countryname']; - } - - if (! $country) - { - $country = $phpgw_info['user']['preferences']['common']['country']; - } - - // echo PHPGW_SERVER_ROOT . SEP . 'addressbook' . SEP . 'templates' . SEP . 'default' . SEP . 'format_' . strtolower($country) . '.tpl'; - - if (file_exists(PHPGW_SERVER_ROOT . SEP . 'addressbook' . SEP . 'templates' . SEP .'default' . SEP . 'format_' . strtolower($country) . '.tpl')) - { - $a = $t->set_file(array('address_format' => 'format_' . strtolower($country) . '.tpl')); - } - else - { - $a = $t->set_file(array('address_format' => 'format_us.tpl')); - } - - $a .= $t->set_var('font',$font); - $a .= $t->set_var('title',$title); - $a .= $t->set_var('firstname',$address[0]['n_given']); - $a .= $t->set_var('lastname',$address[0]['n_family']); - $a .= $t->set_var('company',$address[0]['org_name']); - $a .= $t->set_var('department',$address[0]['org_unit']); - $a .= $t->set_var('street',$street); - $a .= $t->set_var('city',$city); - $a .= $t->set_var('zip',$zip); - $a .= $t->set_var('state',$state); - - $countryname = $s->get_full_name($country); - $a .= $t->set_var('country',lang($countryname)); - - $a .= $t->fp('out','address_format'); - return $a; - } - } -?> diff --git a/addressbook/inc/class.contacts_sql.inc.php b/addressbook/inc/class.contacts_sql.inc.php deleted file mode 100644 index cb9d8041d9..0000000000 --- a/addressbook/inc/class.contacts_sql.inc.php +++ /dev/null @@ -1,680 +0,0 @@ - * -* View and manipulate contact records using SQL * -* Copyright (C) 2001 Joseph Engo * -* -------------------------------------------------------------------------* -* This library is part of the phpGroupWare API * -* http://www.phpgroupware.org/api * -* ------------------------------------------------------------------------ * -* This library is free software; you can redistribute it and/or modify it * -* under the terms of the GNU Lesser General Public License as published by * -* the Free Software Foundation; either version 2.1 of the License, * -* or any later version. * -* This library is distributed in the hope that it will be useful, but * -* WITHOUT ANY WARRANTY; without even the implied warranty of * -* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. * -* See the GNU Lesser General Public License for more details. * -* You should have received a copy of the GNU Lesser General Public License * -* along with this library; if not, write to the Free Software Foundation, * -* Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * -\**************************************************************************/ - -/* $Id$ */ - - /*! - @class acl - @abstract Contact List System - @discussion Author: jengo/Milosch
- This class provides a contact database scheme.
- It attempts to be based on the vcard 2.1 standard, with mods as needed to make for more reasonable sql storage.
- Syntax: CreateObject('phpgwapi.contacts');
- Example1: $contacts = CreateObject('phpgwapi.contacts'); - */ - class contacts_ - { - var $db; - var $std_table='phpgw_addressbook'; - var $ext_table='phpgw_addressbook_extra'; - - var $account_id; - var $stock_contact_fields; // This is an array of almost the fields in the phpgw_addressbook table, except id,owner,lid,tid,access,cat_id - var $non_contact_fields; // Here are the rest - var $email_types; // VCard email type array - var $total_records; // This will contain numrows for data retrieved - var $grants; // This holds all of the users that have granted access to there entrys - - function contacts_($useacl=True) - { - global $phpgw, $phpgw_info; - - $this->db = $phpgw->db; - if($useacl) - { - $this->grants = $phpgw->acl->get_grants('addressbook'); - } - $this->account_id = $phpgw_info['user']['account_id']; - - // The left side are the array elements used throughout phpgw, right side are the db field names. - $this->stock_contact_fields = array( - 'fn' => 'fn', // 'prefix given middle family suffix' - 'n_given' => 'n_given', // firstname - 'n_family' => 'n_family', // lastname - 'n_middle' => 'n_middle', - 'n_prefix' => 'n_prefix', - 'n_suffix' => 'n_suffix', - 'sound' => 'sound', - 'bday' => 'bday', - 'note' => 'note', - 'tz' => 'tz', - 'geo' => 'geo', - 'url' => 'url', - 'pubkey' => 'pubkey', - - 'org_name' => 'org_name', // company - 'org_unit' => 'org_unit', // division - 'title' => 'title', - - 'adr_one_street' => 'adr_one_street', - 'adr_one_locality' => 'adr_one_locality', - 'adr_one_region' => 'adr_one_region', - 'adr_one_postalcode' => 'adr_one_postalcode', - 'adr_one_countryname' => 'adr_one_countryname', - 'adr_one_type' => 'adr_one_type', // address is domestic/intl/postal/parcel/work/home - 'label' => 'label', // address label - - 'adr_two_street' => 'adr_two_street', - 'adr_two_locality' => 'adr_two_locality', - 'adr_two_region' => 'adr_two_region', - 'adr_two_postalcode' => 'adr_two_postalcode', - 'adr_two_countryname' => 'adr_two_countryname', - 'adr_two_type' => 'adr_two_type', // address is domestic/intl/postal/parcel/work/home - - 'tel_work' => 'tel_work', - 'tel_home' => 'tel_home', - 'tel_voice' => 'tel_voice', - 'tel_fax' => 'tel_fax', - 'tel_msg' => 'tel_msg', - 'tel_cell' => 'tel_cell', - 'tel_pager' => 'tel_pager', - 'tel_bbs' => 'tel_bbs', - 'tel_modem' => 'tel_modem', - 'tel_car' => 'tel_car', - 'tel_isdn' => 'tel_isdn', - 'tel_video' => 'tel_video', - 'tel_prefer' => 'tel_prefer', // home, work, voice, etc - 'email' => 'email', - 'email_type' => 'email_type', //'INTERNET','CompuServe',etc... - 'email_home' => 'email_home', - 'email_home_type' => 'email_home_type' //'INTERNET','CompuServe',etc... - ); - - $this->non_contact_fields = array( - 'id' => 'id', - 'lid' => 'lid', - 'tid' => 'tid', - 'cat_id' => 'cat_id', - 'access' => 'access', - 'owner' => 'owner' - ); - - /* Used to flag an address as being: - domestic OR international(default) - parcel(default) - postal(default) - */ - $this->adr_types = array( - 'dom' => lang('Domestic'), - 'intl' => lang('International'), - 'parcel' => lang('Parcel'), - 'postal' => lang('Postal') - ); - - // Used to set preferred number field - $this->tel_types = array( - 'work' => 'work', - 'home' => 'home', - 'voice' => 'voice', - 'fax' => 'fax', - 'msg' => 'msg', - 'cell' => 'cell', - 'pager' => 'pager', - 'bbs' => 'bbs', - 'modem' => 'modem', - 'car' => 'car', - 'isdn' => 'isdn', - 'video' => 'video' - ); - - // Used to set email_type fields - $this->email_types = array( - 'INTERNET' => 'INTERNET', - 'CompuServe' => 'CompuServe', - 'AOL' => 'AOL', - 'Prodigy' => 'Prodigy', - 'eWorld' => 'eWorld', - 'AppleLink' => 'AppleLink', - 'AppleTalk' => 'AppleTalk', - 'PowerShare' => 'PowerShare', - 'IBMMail' => 'IBMMail', - 'ATTMail' => 'ATTMail', - 'MCIMail' => 'MCIMail', - 'X.400' => 'X.400', - 'TLX' => 'TLX' - ); - } - - // send this the id and whatever fields you want to see - function read_single_entry($id,$fields="") - { - if (!$fields || empty($fields)) { $fields = $this->stock_contact_fields; } - list($stock_fields,$stock_fieldnames,$extra_fields) = - $this->split_stock_and_extras($fields); - - if (count($stock_fieldnames)) - { - $t_fields = "," . implode(",",$stock_fieldnames); - if ($t_fields == ",") - { - unset($t_fields); - } - } - - $this->db2 = $this->db; - - $this->db->query("SELECT id,lid,tid,owner,access,cat_id $t_fields FROM $this->std_table WHERE id='$id'"); - $this->db->next_record(); - - $return_fields[0]['id'] = $this->db->f('id'); // unique id - $return_fields[0]['lid'] = $this->db->f('lid'); // lid for group/account records - $return_fields[0]['tid'] = $this->db->f('tid'); // type id (g/u) for groups/accounts - $return_fields[0]['owner'] = $this->db->f('owner'); // id of owner/parent for the record - $return_fields[0]['access'] = $this->db->f('access'); // public/private - $return_fields[0]['cat_id'] = $this->db->f('cat_id'); - - if (gettype($stock_fieldnames) == 'array') - { - while (list($f_name) = each($stock_fieldnames)) - { - $return_fields[0][$f_name] = $this->db->f($f_name); - } - } - - // Setup address type fields - if ($this->db->f('adr_one_type')) - { - $one_type = $this->db->f('adr_one_type'); - reset($this->adr_types); - while (list($name,$val) = each($this->adr_types)) - { - eval("if (strstr(\$one_type,\$name)) { \$return_fields[0][\"one_\$name\"] = \"on\"; }"); - } - } - if ($this->db->f('adr_two_type')) - { - $two_type = $this->db->f('adr_two_type'); - reset($this->adr_types); - while (list($name,$val) = each($this->adr_types)) - { - eval("if (strstr(\$two_type,\$name)) { \$return_fields[0][\"two_\$name\"] = \"on\"; }"); - } - } - - $this->db2->query("SELECT contact_name,contact_value FROM $this->ext_table where contact_id='" . $this->db->f('id') . "'",__LINE__,__FILE__); - while ($this->db2->next_record()) - { - // If its not in the list to be returned, don't return it. - // This is still quicker then 5(+) separate queries - if ($extra_fields[$this->db2->f('contact_name')]) - { - $return_fields[0][$this->db2->f('contact_name')] = $this->db2->f('contact_value'); - } - } - return $return_fields; - } - - function read_last_entry($fields='') - { - if (!$fields || empty($fields)) { $fields = $this->stock_contact_fields; } - list($stock_fields,$stock_fieldnames,$extra_fields) = - $this->split_stock_and_extras($fields); - - if (count($stock_fieldnames)) - { - $t_fields = "," . implode(",",$stock_fieldnames); - if ($t_fields == ",") - { - unset($t_fields); - } - } - - $this->db2 = $this->db; - - $this->db->query('SELECT max(id) FROM '.$this->std_table,__LINE__,__FILE__); - $this->db->next_record(); - - $id = $this->db->f(0); - - $this->db->query("SELECT id,lid,tid,owner,access,cat_id $t_fields FROM $this->std_table WHERE id='$id'",__LINE__,__FILE__); - $this->db->next_record(); - - $return_fields[0]['id'] = $this->db->f('id'); - $return_fields[0]['lid'] = $this->db->f('lid'); - $return_fields[0]['tid'] = $this->db->f('tid'); - $return_fields[0]['owner'] = $this->db->f('owner'); - $return_fields[0]['access'] = $this->db->f('access'); // public/private - $return_fields[0]['cat_id'] = $this->db->f('cat_id'); - - if (gettype($stock_fieldnames) == 'array') - { - while (list($f_name) = each($stock_fieldnames)) - { - $return_fields[0][$f_name] = $this->db->f($f_name); - } - } - - // Setup address type fields - if ($this->db->f('adr_one_type')) - { - $one_type = $this->db->f('adr_one_type'); - reset($this->adr_types); - while (list($name,$val) = each($this->adr_types)) - { - eval("if (strstr(\$one_type,\$name)) { \$return_fields[0][\"one_\$name\"] = \"on\"; }"); - } - } - if ($this->db->f('adr_two_type')) - { - $two_type = $this->db->f('adr_two_type'); - reset($this->adr_types); - while (list($name,$val) = each($this->adr_types)) - { - eval("if (strstr(\$two_type,\$name)) { \$return_fields[0][\"two_\$name\"] = \"on\"; }"); - } - } - - $this->db2->query("SELECT contact_name,contact_value FROM $this->ext_table WHERE contact_id='" . $this->db->f('id') . "'",__LINE__,__FILE__); - while ($this->db2->next_record()) - { - // If its not in the list to be returned, don't return it. - // This is still quicker then 5(+) separate queries - if ($extra_fields[$this->db2->f('contact_name')]) - { - $return_fields[0][$this->db2->f('contact_name')] = $this->db2->f('contact_value'); - } - } - return $return_fields; - } - - /* send this the range, query, sort, order and whatever fields you want to see */ - function read($start=0,$limit=0,$fields="",$query="",$filter="",$sort="",$order="") - { - global $phpgw,$phpgw_info; - - if (!$fields || empty($fields)) { $fields = $this->stock_contact_fields; } - $DEBUG = 0; - - list($stock_fields,$stock_fieldnames,$extra_fields) = $this->split_stock_and_extras($fields); - if (count($stock_fieldnames)) - { - $t_fields = ',' . implode(',',$stock_fieldnames); - if ($t_fields == ',') - { - unset($t_fields); - } - } - - /* turn filter's a=b,c=d OR a=b into an array */ - if ($filter) - { - $check_stock = $this->stock_contact_fields + $this->non_contact_fields; - - if ($DEBUG) { echo "DEBUG - Inbound filter is: #".$filter."#"; } - $filterarray = split(',',$filter); - if ($filterarray[1]) - { - $i=0; - for ($i=0;$iDEBUG - Filter intermediate strings 1: #".$name."# => #".$value."#"; } - $filterfields[$name] = $value; - } - } - } - else - { - list($name,$value) = split('=',$filter); - if ($DEBUG) - { - echo '
DEBUG - Filter intermediate strings 1: #'.$name.'# => #'.$value.'#'; - } - $filterfields = array($name => $value); - } - - /* now check each element of the array and convert into SQL for queries below */ - $i=0; - reset($filterfields); - while (list($name,$value) = each($filterfields)) - { - if ($DEBUG) { echo '
DEBUG - Filter intermediate strings 2: #'.$name.'# => #'.$value.'#'; } - $isstd=0; - if ($name && empty($value)) - { - if ($DEBUG) { echo '
DEBUG - filter field "'.$name.'" is empty (NULL)'; } - while (list($fname,$fvalue)=each($check_stock)) - { - if ($fvalue==$name) - { - $filterlist .= $name.' is NULL,'; - if ($DEBUG) { echo '
DEBUG - filter field "'.$name.'" is a stock field'; } - break; - } - } - } - elseif($name && $value) - { - reset($check_stock); - while (list($fname,$fvalue)=each($check_stock)) - { - if ($fvalue==$name) - { - if ($name == 'cat_id') - { - $filterlist .= "(" . $name . " LIKE '%," . $value . ",%' OR " . $name."='".$value."');"; - } - elseif (gettype($value) == "integer") - { - $filterlist .= $name."=".$value.";"; - } - else - { - $filterlist .= $name."='".$value."';"; - } - break; - } - } - } - $i++; - } - $filterlist = substr($filterlist,0,-1); - $filterlist = ereg_replace(";"," AND ",$filterlist); - - if ($DEBUG) - { - echo "
DEBUG - Filter output string: #".$filterlist."#"; - } - - if ($filterlist) - { - $filtermethod = '('.$filterlist.') '; - $fwhere = ' WHERE '; $fand = ' AND '; - } - } - else - { - $filtermethod = " AND (tid='n' OR tid is null)"; - } - - if (!$filtermethod) - { - if($phpgw_info['user']['account_id']) - { - $fwhere .= " (owner=" . $phpgw_info['user']['account_id']; - $fand .= " (owner=" . $phpgw_info['user']['account_id']; - } - } - else - { - if($phpgw_info['user']['account_id']) - { - $fwhere .= $filtermethod . " AND (owner=" . $phpgw_info['user']['account_id']; - $fand .= $filtermethod . " AND (owner=" . $phpgw_info['user']['account_id']; - } - else - { - $filtermethod = substr($filtermethod,0,-2); - $fwhere .= $filtermethod; - $fand .= $filtermethod; - } - } - - if (is_array($this->grants)) - { - $grants = $this->grants; - while (list($user) = each($grants)) - { - $public_user_list[] = $user; - } - reset($public_user_list); - $fwhere .= " OR (access='public' AND owner in(" . implode(',',$public_user_list) . "))) "; - $fand .= " OR (access='public' AND owner in(" . implode(',',$public_user_list) . "))) "; - } - else - { - $fwhere .= ') '; $fand .= ') '; - } - - if ($DEBUG && $filtermethod) - { - echo "
DEBUG - Filtering with: #" . $filtermethod . "#"; - } - - if (!$sort) { $sort = "ASC"; } - - if ($order) - { - $ordermethod = "order by $order $sort "; - } - else - { - $ordermethod = "order by n_family,n_given,email $sort"; - } - - if ($DEBUG && $ordermethod) - { - echo "
DEBUG - $ordermethod"; - } - - $filtermethod = ""; - - if ($query) - { - $sql = "SELECT * FROM $this->std_table WHERE (bday LIKE '%$query%' OR n_family LIKE '" - . "%$query%' OR n_given LIKE '%$query%' OR email LIKE '%$query%' OR " - . "adr_one_street LIKE '%$query%' OR adr_one_locality LIKE '%$query%' OR adr_one_region LIKE '%$query%' OR " - . "adr_one_postalcode LIKE '%$query%' OR adr_one_countryname LIKE '%$query%' OR " - . "adr_two_street LIKE '%$query%' OR adr_two_locality LIKE '%$query%' OR adr_two_region LIKE '%$query%' OR " - . "adr_two_postalcode LIKE '%$query%' OR adr_two_countryname LIKE '%$query%' OR " - . "org_name LIKE '%$query%' OR org_unit LIKE '%$query%') " . $fand . $filtermethod . $ordermethod; - } - else - { - $sql = "SELECT id,lid,tid,owner,access,cat_id $t_fields FROM $this->std_table " . $fwhere - . $filtermethod . " " . $ordermethod; - } - - if ($DEBUG) { echo "
$sql"; } - - $this->db2 = $this->db; - $this->db2->query($sql,__LINE__,__FILE__); - - $this->total_records = $this->db2->num_rows(); - - if ($start && $limit) - { - $this->db->limit_query($sql,array($start,$limit),__LINE__,__FILE__); - } - elseif (!$limit) - { - $this->db->query($sql,__LINE__,__FILE__); - } - else - { - $this->db->limit_query($sql,$start,__LINE__,__FILE__); - } - - $i=0; - while ($this->db->next_record()) - { - $return_fields[$i]['id'] = $this->db->f('id'); - $return_fields[$i]['lid'] = $this->db->f('lid'); - $return_fields[$i]['tid'] = $this->db->f('tid'); - $return_fields[$i]['owner'] = $this->db->f('owner'); - $return_fields[$i]['access'] = $this->db->f('access'); - $return_fields[$i]['cat_id'] = $this->db->f('cat_id'); - - if (gettype($stock_fieldnames) == 'array') - { - while (list($f_name) = each($stock_fieldnames)) - { - $return_fields[$i][$f_name] = $this->db->f($f_name); - } - reset($stock_fieldnames); - } - $this->db2->query("SELECT contact_name,contact_value FROM $this->ext_table WHERE contact_id='" - . $this->db->f('id') . "'" .$filterextra,__LINE__,__FILE__); - while ($this->db2->next_record()) - { - if ($extra_fields[$this->db2->f('contact_name')]) - { - $return_fields[$i][$this->db2->f('contact_name')] = $this->db2->f('contact_value'); - } - } - $i++; - } - return $return_fields; - } - - function add($owner,$fields,$access='',$cat_id='',$tid='n') - { - list($stock_fields,$stock_fieldnames,$extra_fields) = $this->split_stock_and_extras($fields); - - if ($fields['lid']) - { - $lid[0] = 'lid,'; - $lid[1] = $fields['lid']."','"; - } - $this->db->query("INSERT INTO $this->std_table (owner,access,cat_id,tid,".$lid[0] - . implode(",",$this->stock_contact_fields) - . ") VALUES ('$owner','$access','$cat_id','$tid','".$lid[1] - . implode("','",$this->loop_addslashes($stock_fields)) . "')",__LINE__,__FILE__); - - $this->db->query("SELECT max(id) FROM $this->std_table ",__LINE__,__FILE__); - $this->db->next_record(); - $id = $this->db->f(0); - - if (count($extra_fields)) - { - while (list($name,$value) = each($extra_fields)) - { - $this->db->query("INSERT INTO $this->ext_table VALUES ('$id','" . $this->account_id . "','" - . addslashes($name) . "','" . addslashes($value) . "')",__LINE__,__FILE__); - } - } - } - - function field_exists($id,$field_name) - { - $this->db->query("SELECT COUNT(*) FROM $this->ext_table WHERE contact_id='$id' AND contact_name='" - . addslashes($field_name) . "'",__LINE__,__FILE__); - $this->db->next_record(); - return $this->db->f(0); - } - - function add_single_extra_field($id,$owner,$field_name,$field_value) - { - $this->db->query("INSERT INTO $this->ext_table VALUES ($id,'$owner','" . addslashes($field_name) - . "','" . addslashes($field_value) . "')",__LINE__,__FILE__); - } - - function delete_single_extra_field($id,$field_name) - { - $this->db->query("DELETE FROM $this->ext_table WHERE contact_id='$id' AND contact_name='" - . addslashes($field_name) . "'",__LINE__,__FILE__); - } - - function update($id,$owner,$fields,$access='',$cat_id='',$tid='n') - { - // First make sure that id number exists - $this->db->query("SELECT COUNT(*) FROM $this->std_table WHERE id='$id'",__LINE__,__FILE__); - $this->db->next_record(); - if (!$this->db->f(0)) - { - return False; - } - - list($stock_fields,$stock_fieldnames,$extra_fields) = $this->split_stock_and_extras($fields); - if (count($stock_fields)) - { - while (list($stock_fieldname) = each($stock_fieldnames)) - { - $ta[] = $stock_fieldname . "='" . addslashes($stock_fields[$stock_fieldname]) . "'"; - } - $fields_s = "," . implode(",",$ta); - if ($field_s == ",") - { - unset($field_s); - } - $this->db->query("UPDATE $this->std_table SET access='$access',cat_id='$cat_id', tid='$tid' $fields_s WHERE " - . "id='$id'",__LINE__,__FILE__); - } - - while (list($x_name,$x_value) = @each($extra_fields)) - { - if ($this->field_exists($id,$x_name)) - { - if (!$x_value) - { - $this->delete_single_extra_field($id,$x_name); - } - else - { - $this->db->query("UPDATE $this->ext_table SET contact_value='" . addslashes($x_value) - . "',contact_owner='$owner' WHERE contact_name='" . addslashes($x_name) - . "' AND contact_id='$id'",__LINE__,__FILE__); - } - } - else - { - $this->add_single_extra_field($id,$owner,$x_name,$x_value); - } - } - } - - // Used by admin to change ownership on account delete - function change_owner($old_owner='',$new_owner='') - { - if (!($new_owner && $old_owner)) - { - return False; - } - - $this->db->query("UPDATE $this->std_table SET owner='$new_owner' WHERE owner=$old_owner",__LINE__,__FILE__); - $this->db->query("UPDATE $this->ext_table SET contact_owner='$new_owner' WHERE contact_owner=$old_owner",__LINE__,__FILE__); - - return; - } - - // This is where the real work of delete() is done, shared class file contains calling function - function delete_($id) - { - $this->db->query("DELETE FROM $this->std_table WHERE id='$id'",__LINE__,__FILE__); - $this->db->query("DELETE FROM $this->ext_table WHERE contact_id='$id'",__LINE__,__FILE__); - } - - // This is for the admin script deleteaccount.php - function delete_all($owner=0) - { - if ($owner) - { - $this->db->query("DELETE FROM $this->std_table WHERE owner=$owner",__LINE__,__FILE__); - $this->db->query("DELETE FROM $this->ext_table WHERE contact_owner=$owner",__LINE__,__FILE__); - } - return; - } - } -?>