forked from extern/egroupware
fixed and enhanced cat-filter:
- cats with children were not working, because: + sql applied two filters (one in UI and one in SO, UI is removed now) + ldap did not handle it at all - new cat-filter 'None', which returns all contacts without a category
This commit is contained in:
parent
f4e79928f6
commit
816e11629a
@ -644,7 +644,6 @@ class so_ldap
|
||||
}
|
||||
}
|
||||
$colFilter = $this->_colFilter($filter);
|
||||
|
||||
$ldapFilter = "(&$objectFilter$searchFilter$colFilter)";
|
||||
|
||||
if (!($rows = $this->_searchLDAP($searchDN, $ldapFilter, $this->all_attributes, $addressbookType)))
|
||||
@ -703,7 +702,7 @@ class so_ldap
|
||||
$filters = '';
|
||||
foreach($filter as $key => $value)
|
||||
{
|
||||
if (!$value) continue;
|
||||
if ($key != 'cat_id' && !$value) continue;
|
||||
|
||||
switch((string) $key)
|
||||
{
|
||||
@ -712,12 +711,26 @@ class so_ldap
|
||||
break;
|
||||
|
||||
case 'cat_id':
|
||||
if((int)$value)
|
||||
if (is_null($value))
|
||||
{
|
||||
$filters .= '(!(category=*))';
|
||||
}
|
||||
elseif((int)$value)
|
||||
{
|
||||
if (!is_object($GLOBALS['egw']->categories))
|
||||
{
|
||||
$GLOBALS['egw']->categories = CreateObject('phpgwapi.categories');
|
||||
}
|
||||
$cats = $GLOBALS['egw']->categories->return_all_children((int)$value);
|
||||
if (count($cats) > 1) $filters .= '(|';
|
||||
foreach($cats as $cat)
|
||||
{
|
||||
$catName = $GLOBALS['egw']->translation->convert(
|
||||
ExecMethod('phpgwapi.categories.id2name',$value),$this->charset,'utf-8');
|
||||
$GLOBALS['egw']->categories->id2name($cat),$this->charset,'utf-8');
|
||||
$filters .= '(category='.ldap::quote($catName).')';
|
||||
}
|
||||
if (count($cats) > 1) $filters .= ')';
|
||||
}
|
||||
break;
|
||||
|
||||
default:
|
||||
|
@ -136,6 +136,7 @@ class uicontacts extends bocontacts
|
||||
'never_hide' => True, // I never hide the nextmatch-line if less then maxmatch entrie
|
||||
'start' => 0, // IO position in list
|
||||
'cat_id' => 0, // IO category, if not 'no_cat' => True
|
||||
'options-cat_id' => array(lang('none')),
|
||||
'search' => '', // IO search pattern
|
||||
'order' => 'n_family', // IO name of the column to sort after (optional for the sortheaders)
|
||||
'sort' => 'ASC', // IO direction of the sort: 'ASC' or 'DESC'
|
||||
@ -448,15 +449,13 @@ class uicontacts extends bocontacts
|
||||
$GLOBALS['egw']->preferences->save_repository(false,'user',false);
|
||||
}
|
||||
}
|
||||
if (isset($query['col_filter']['cat_id'])) unset($query['col_filter']['cat_id']);
|
||||
if ($query['cat_id'])
|
||||
if ((string)$query['cat_id'] != '')
|
||||
{
|
||||
if (!is_object($GLOBALS['egw']->categories))
|
||||
{
|
||||
$GLOBALS['egw']->categories =& CreateObject('phpgwapi.categories');
|
||||
$query['col_filter']['cat_id'] = $query['cat_id'] ? $query['cat_id'] : null;
|
||||
}
|
||||
$cats = $GLOBALS['egw']->categories->return_all_children((int)$query['cat_id']);
|
||||
$query['col_filter']['cat_id'] = count($cats) > 1 ? $cats : $query['cat_id'];
|
||||
else
|
||||
{
|
||||
unset($query['col_filter']['cat_id']);
|
||||
}
|
||||
if ($query['filter'] !== '') // not all addressbooks
|
||||
{
|
||||
@ -651,6 +650,10 @@ class uicontacts extends bocontacts
|
||||
}
|
||||
if ($query['cat_id'])
|
||||
{
|
||||
if (!is_object($GLOBALS['egw']->categories))
|
||||
{
|
||||
$GLOBALS['egw']->categories =& CreateObject('phpgwapi.categories');
|
||||
}
|
||||
$GLOBALS['egw_info']['flags']['app_header'] .= ': '.lang('Category').' '.$GLOBALS['egw']->categories->id2name($query['cat_id']);
|
||||
}
|
||||
if ($query['searchletter'])
|
||||
|
Loading…
Reference in New Issue
Block a user