diff --git a/phpgwapi/inc/class.contacts_ldap.inc.php b/phpgwapi/inc/class.contacts_ldap.inc.php index 6b127c0807..f46b158792 100644 --- a/phpgwapi/inc/class.contacts_ldap.inc.php +++ b/phpgwapi/inc/class.contacts_ldap.inc.php @@ -35,19 +35,113 @@ */ class contacts_ { - var $db; - var $ldap; - var $nextid; - var $std_table=''; - var $ext_table='phpgw_addressbook_extra'; + var $db = ''; + var $ldap = ''; + var $nextid = ''; + var $std_table = ''; + var $ext_table = 'phpgw_addressbook_extra'; var $account_id; - var $stock_contact_fields; - var $non_contact_fields; - var $email_types; + var $adr_types; var $total_records; var $grants; + /* The left side are the array elements used throughout phpgw, right side are the ldap attributes */ + var $stock_contact_fields = array( + 'fn' => 'cn', + 'n_given' => 'givenname', + 'n_family' => 'sn', + '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', + 'org_unit' => 'ou', + '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', + 'label' => 'phpgwaddresslabel', + + 'adr_two_street' => 'phpgwadrtwostreet', + 'adr_two_locality' => 'phpgwadrtwolocality', + 'adr_two_region' => 'phpgwadrtworegion', + 'adr_two_postalcode' => 'phpgwadrtwopostalcode', + 'adr_two_countryname' => 'phpgwadrtwocountryname', + 'adr_two_type' => 'phpgwadrtwotype', + + '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', + 'email' => 'mail', + 'email_type' => 'phpgwmailtype', + 'email_home' => 'phpgwmailhome', + 'email_home_type' => 'phpgwmailhometype' + ); + + var $non_contact_fields = array( + 'id' => 'uidnumber', + 'lid' => 'uid', + 'tid' => 'phpgwcontacttypeid', + 'cat_id' => 'phpgwcontactcatid', + 'access' => 'phpgwcontactaccess', + 'owner' => 'phpgwcontactowner' + ); + + /* Used to set preferphone field */ + var $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 */ + var $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' + ); + function contacts_() { $this->db = $GLOBALS['phpgw']->db; @@ -59,69 +153,6 @@ $this->account_id = $GLOBALS['phpgw_info']['user']['account_id']; $this->grants = $GLOBALS['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', - 'n_given' => 'givenname', - 'n_family' => 'sn', - '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', - 'org_unit' => 'ou', - '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', - 'label' => 'phpgwaddresslabel', - - 'adr_two_street' => 'phpgwadrtwostreet', - 'adr_two_locality' => 'phpgwadrtwolocality', - 'adr_two_region' => 'phpgwadrtworegion', - 'adr_two_postalcode' => 'phpgwadrtwopostalcode', - 'adr_two_countryname' => 'phpgwadrtwocountryname', - 'adr_two_type' => 'phpgwadrtwotype', - - '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', - 'email' => 'mail', - 'email_type' => 'phpgwmailtype', - 'email_home' => 'phpgwmailhome', - 'email_home_type' => 'phpgwmailhometype' - ); - - $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) @@ -134,39 +165,6 @@ '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 */ @@ -381,53 +379,30 @@ { $ldap_fields = array(); $total = 0; - /* - Query each field seperately instead of using ldap OR search. - This should be changed to use ldap and/or syntax - */ - reset($stock_fieldnames); - while (list($name,$value) = each($stock_fieldnames) ) + + reset($this->stock_contact_fields); + $lquery = '(&(|'; /* $lquery = '(|'; */ + while (list($name,$value) = each($this->stock_contact_fields) ) { - $lquery = $value.'=*'.$query.'*'; - /* echo $lquery; exit; */ - $sri = ldap_search($this->ldap, $GLOBALS['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); + $lquery .= '(' . $value . '=*' . $query . '*)'; } + $lquery .= ')(phpgwcontactowner=*))'; /* $lquery .= ')'; */ + /* echo $lquery; exit; */ + + $sri = ldap_search($this->ldap, $GLOBALS['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); + /* _debug_array($ldap_fields);exit; */ if ($filterfields) { $ldap_fields = $this->filter_ldap($ldap_fields,$filterfields,$DEBUG); } - /* Now, remove duplicate rows */ - $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; - } - $this->total_records = count($ldap_fields); /* echo '
total="'.$this->total_records.'"'; */ } @@ -516,6 +491,13 @@ function add($owner,$fields,$access='private',$cat_id='0',$tid='n') { + $tid = $fields['tid'] ? trim($fields['tid']) : $tid; + unset($fields['tid']); + if(empty($tid)) + { + $tid = 'n'; + } + if (!$GLOBALS['phpgw_info']['server']['ldap_contact_context']) { return False; @@ -567,6 +549,7 @@ $ldap_fields['objectclass'][1] = 'inetOrgPerson'; $ldap_fields['objectclass'][2] = 'phpgwContact'; + _debug_array($ldap_fields); $err = ldap_add($this->ldap, $dn, $ldap_fields); if (count($extra_fields))