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;
- }
- }
-?>