diff --git a/phpgwapi/inc/class.contacts_ldap.inc.php b/phpgwapi/inc/class.contacts_ldap.inc.php
index 0dee861fa2..4909d7d3c0 100644
--- a/phpgwapi/inc/class.contacts_ldap.inc.php
+++ b/phpgwapi/inc/class.contacts_ldap.inc.php
@@ -193,7 +193,9 @@
$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];
+ // create from the multiple cat_id's in ldap a comma-separated value as in sql
+ unset($ldap_fields[0]['phpgwcontactcatid']['count']);
+ $return_fields[0]['cat_id'] = implode(',',$ldap_fields[0]['phpgwcontactcatid']);
$return_fields[0]['rights'] = (int)$this->grants[$return_fields[0]['owner']];
if(@is_array($stock_fieldnames))
{
@@ -270,7 +272,9 @@
$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];
+ // create from the multiple cat_id's in ldap a comma-separated value as in sql
+ unset($ldap_fields[0]['phpgwcontactcatid']['count']);
+ $return_fields[0]['cat_id'] = implode(',',$ldap_fields[0]['phpgwcontactcatid']);
$return_fields[0]['rights'] = (int)$this->grants[$return_fields[0]['owner']];
if(@is_array($stock_fieldnames))
@@ -371,14 +375,25 @@
or maybe not like this - i am not sure what i am doing :)
*/
- if(@is_array($this->grants))
+ if(@is_array($this->grants) && strpos($filter,'owner')===false )
{
- $filterfields['phpgwcontactowner'] = array();
+ $filterfields['phpgwcontactowner'] = $filterfields['priv'] = array();
+
+ // to not show private entries we add an additional filter access==public or owner==users with private grants
+ // please note: private grants are not yet supported by the addressbook UI and the SQL backend
+ $filterfields['priv'][]=array('phpgwcontactaccess' => 'public');
+
if($DEBUG) { echo '
DEBUG - My user id is: ' . $this->account_id; }
foreach($this->grants as $user => $right)
{
if($DEBUG) { echo '
DEBUG - Grant from owner: ' . $user; }
$filterfields['phpgwcontactowner'][] = array('phpgwcontactowner' => $user);
+
+ // add users we have a private grants from
+ if ($right & EGW_ACL_PRIVATE)
+ {
+ $filterfields['priv'][]=array('phpgwcontactowner' => $user);
+ }
}
}
/*
@@ -442,7 +457,7 @@
$myfilter = $this->makefilter($filterfields,'','',$DEBUG);
}
$myfilter = $GLOBALS['egw']->translation->convert($myfilter,$GLOBALS['egw']->translation->system_charset,'utf-8');
-
+echo "
ldap_search($this->ldap,'".$GLOBALS['egw_info']['server']['ldap_contact_context']."','$myfilter')
\n"; $sri = ldap_search($this->ldap, $GLOBALS['egw_info']['server']['ldap_contact_context'], $myfilter); $ldap_fields = ldap_get_entries($this->ldap, $sri); @@ -500,7 +515,9 @@ $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]; + // create from the multiple cat_id's in ldap a comma-separated value as in sql + unset($ldap_fields[$i]['phpgwcontactcatid']['count']); + $return_fields[$j]['cat_id'] = implode(',',$ldap_fields[$i]['phpgwcontactcatid']); $return_fields[$j]['rights'] = (int)$this->grants[$return_fields[$j]['owner']]; if(@is_array($stock_fieldnames)) @@ -586,14 +603,7 @@ /* This was most likely created from acl grants in read() above */ foreach($y as $a => $b) { - if ($a == 'phpgwcontactowner' && $b != $GLOBALS['egw_info']['user']['account_id']) - { - $tmp .= '(&('. $a. '='. $b. ')(phpgwContactAccess=public))'; - } - else - { - $tmp .= '(' . $a . '=' . $b . ')'; - } + $tmp .= '(' . $a . '=' . $b . ')'; } } else @@ -620,12 +630,24 @@ } $cats = $GLOBALS['egw']->categories->return_all_children((int)$value); - $aquery .= '(|'; - foreach($cats as $cat) + /* new code to find cats stored as multiple values only (!) + if (count($cats) > 1) { - $aquery .= '(' . $name . '=*,' . $cat . ',*)(' . $name . '=' . $cat . ')'; + $aquery .= '(|('.$name.'='.implode(')('.$name.'=',$cats).'))'; } - $aquery .= ')'; + else + { + $aquery .= '('.$name.'='.(int)$cats[0].')'; + } + */ + // old code finds cats stored as multiple values or as comma-separated fields with leading and training comma (old format) + // but generates a more complex query, so I think it should be removed in the next release by the new code + $aquery .= '(|'; + foreach($cats as $cat) + { + $aquery .= '(' . $name . '=*,' . $cat . ',*)(' . $name . '=' . $cat . ')'; + } + $aquery .= ')'; } elseif ($value == "!''") // query for not empty { @@ -683,6 +705,11 @@ $fields[$extra] = $$extra; } } + // store cat_id in ldap as multiple values (php array) and not as comma separated value + if (isset($fields['cat_id']) && count(explode(',',$fields['cat_id'])) > 1) + { + $fields['cat_id'] = explode(',',$fields['cat_id']); + } if(empty($fields['tid'])) { $fields['tid'] = 'n'; @@ -853,6 +880,11 @@ $stock_fields[$extra] = $fields[$extra]; } } + // store cat_id in ldap as multiple values (php array) and not as comma separated value + if (isset($fields['cat_id']) && count(explode(',',$fields['cat_id'])) > 1) + { + $fields['cat_id'] = explode(',',$fields['cat_id']); + } $nonfields = $this->non_contact_fields; if(!$GLOBALS['egw_info']['server']['ldap_contact_context'])