diff --git a/include/class_objects.inc b/include/class_objects.inc index 48fea29e12fe298182b5c1f1fe495550ea0ab079..e6f78dfbdfaafac6a0482befd30a87dd7f00b3c0 100644 --- a/include/class_objects.inc +++ b/include/class_objects.inc @@ -411,7 +411,19 @@ class objects $infos =& static::infos($type); if (!isset($infos['searchAttributes'])) { - $infos['searchAttributes'] = array_unique(array($infos['mainAttr'], $infos['nameAttr'])); + $searchAttrs = array(); + $searchAttrs[$infos['mainAttr']] = $infos['aclCategory'].'/'.$infos['mainTab']; + $searchAttrs[$infos['nameAttr']] = $infos['aclCategory'].'/'.$infos['mainTab']; + foreach ($config->data['TABS'][$infos['tabGroup']] as $tab) { + if (!plugin_available($tab['CLASS'])) { + continue; + } + $attrs = pluglist::pluginInfos($tab['CLASS'])['plSearchAttrs']; + foreach ($attrs as $attr) { + $searchAttrs[$attr] = $infos['aclCategory'].'/'.$tab['CLASS']; + } + } + $infos['searchAttributes'] = $searchAttrs; } return $infos['searchAttributes']; diff --git a/include/management/class_management.inc b/include/management/class_management.inc index 306e37b615a18e2b4ceae961e629f2b1c366f9cb..c89a2750d7fe7a69df7a05d3f9875de532869448 100644 --- a/include/management/class_management.inc +++ b/include/management/class_management.inc @@ -421,11 +421,6 @@ class management return $this->getHeader().$display; } - // Update filter - if ($this->filter) { - $this->filter->update(); - } - // Update list $this->listing->update(); diff --git a/include/management/class_managementFilter.inc b/include/management/class_managementFilter.inc index 25bb7a5c597d03d1741a132658ff9caff61575e8..8cee6004382486e41677b3780e065ec693c4d371 100644 --- a/include/management/class_managementFilter.inc +++ b/include/management/class_managementFilter.inc @@ -61,7 +61,6 @@ class managementFilter 'filters' => array(), 'infos' => objects::infos($type), ); - $this->searchAttributes = array_unique(array_merge($this->searchAttributes, objects::getSearchedAttributes($type))); } $this->filterElements = array( @@ -79,8 +78,10 @@ class managementFilter $this->filterElements[] = $element; } - function update() + function update($base) { + global $ui; + if (isset($_POST['FILTER_PID']) && ($_POST['FILTER_PID'] == $this->pid)) { // Load post values and adapt filter, base and scope accordingly foreach ($this->types as $key => &$data) { @@ -98,6 +99,18 @@ class managementFilter $element->update(); } } + + foreach ($this->parent->objectTypes as $type) { + $attrs = objects::getSearchedAttributes($type); + + $this->searchAttributes[$type] = array(); + foreach ($attrs as $attr => $acl) { + $rights = $ui->get_permissions($base, $acl); + if (strpos($rights, 'r') !== FALSE) { + $this->searchAttributes[$type][] = $attr; + } + } + } } /*! @@ -110,8 +123,16 @@ class managementFilter $smarty->assign('SCOPE', $this->scope); $smarty->assign('FILTER_PID', $this->pid); $smarty->assign('SEARCH', $this->search); - $smarty->assign('SEARCHDESC', sprintf(_('Searches in %s'), implode(', ', $this->searchAttributes))); $smarty->assign('TYPES', $this->types); + + $searchAttrs = array(); + foreach ($this->searchAttributes as $type => $attrs) { + foreach ($attrs as $attr) { + $searchAttrs[] = strtolower($type).'/'.$attr; + } + } + $smarty->assign('SEARCHDESC', sprintf(_('Searches in %s'), implode(', ', $searchAttrs))); + $parentClass = get_class($this->parent); if (!$parentClass::$skipTemplates) { $smarty->assign('TEMPLATES', $this->showTemplates); @@ -168,7 +189,7 @@ class managementFilter if (preg_match('/^\(.+\)$/', $this->search)) { $elementFilters[] = $this->search; } else { - $elementFilters[] = '(|('.implode('=*'.$this->search.'*)(', objects::getSearchedAttributes($type)).'=*'.$this->search.'*))'; + $elementFilters[] = '(|('.implode('=*'.$this->search.'*)(', $this->searchAttributes[$type]).'=*'.$this->search.'*))'; } } diff --git a/include/management/class_managementListing.inc b/include/management/class_managementListing.inc index 15f8b036de126cdf2a7328a83a23fdb7a6c17252..cd7ce66d185ce6b5b6d5a8ede5fc9b4d5dee1ef2 100644 --- a/include/management/class_managementListing.inc +++ b/include/management/class_managementListing.inc @@ -282,6 +282,9 @@ class managementListing $this->updateBase(); } + // Update filter + $this->parent->filter->update($this->base); + // Update filter and refresh entries $attrs = $this->parent->neededAttrs; foreach ($this->columns as $column) { diff --git a/plugins/admin/aclrole/class_aclRole.inc b/plugins/admin/aclrole/class_aclRole.inc index d1c738d262de1812f74a049e6cdcf35bd1d95295..ad7d038b02f08c1c4b2f9ed0b33b424741ee70b8 100644 --- a/plugins/admin/aclrole/class_aclRole.inc +++ b/plugins/admin/aclrole/class_aclRole.inc @@ -81,6 +81,7 @@ class aclRole extends simplePlugin 'ou' => get_ou('aclRoleRDN'), 'icon' => 'geticon.php?context=categories&icon=acl&size=16', )), + 'plSearchAttrs' => array('description'), 'plProvidedAcls' => parent::generatePlProvidedAcls(static::getAttributesInfo()) ); diff --git a/plugins/admin/departments/class_country.inc b/plugins/admin/departments/class_country.inc index 69b4a20975a04c4e87f4c149a44d1481c7956595..1da697f29c85bf395ebe49c2e731c636ad4c18bc 100644 --- a/plugins/admin/departments/class_country.inc +++ b/plugins/admin/departments/class_country.inc @@ -41,6 +41,7 @@ class country extends department 'plForeignKeys' => array( 'manager' => array('user','dn','manager=%oldvalue%','*') ), + 'plSearchAttrs' => array('description'), 'plProvidedAcls' => parent::generatePlProvidedAcls(static::getAttributesInfo()) ); diff --git a/plugins/admin/departments/class_dcObject.inc b/plugins/admin/departments/class_dcObject.inc index 66cb59723a461fe518ac472991861154a32d46a4..aad3f77df7554f4a46571ed0b8764be1c480a389 100644 --- a/plugins/admin/departments/class_dcObject.inc +++ b/plugins/admin/departments/class_dcObject.inc @@ -40,6 +40,7 @@ class dcObject extends department 'plForeignKeys' => array( 'manager' => array('user','dn','manager=%oldvalue%','*') ), + 'plSearchAttrs' => array('description'), 'plProvidedAcls' => parent::generatePlProvidedAcls(static::getAttributesInfo()) ); diff --git a/plugins/admin/departments/class_department.inc b/plugins/admin/departments/class_department.inc index 09f87b9dcc5b9cccd30e4c35a80f3e62ba00c8c4..a98ebdf13a20c64ca2d6577b479578c3ba387c6a 100644 --- a/plugins/admin/departments/class_department.inc +++ b/plugins/admin/departments/class_department.inc @@ -46,6 +46,7 @@ class department extends simplePlugin 'plForeignKeys' => array( 'manager' => array('user','dn','manager=%oldvalue%','*') ), + 'plSearchAttrs' => array('description'), 'plProvidedAcls' => parent::generatePlProvidedAcls(static::getAttributesInfo()) ); diff --git a/plugins/admin/departments/class_domain.inc b/plugins/admin/departments/class_domain.inc index 7a01aa2eac93fd3831dcd5c2289100dc457121b6..d5ef9224995500a9bea9b5d5b013f9680294ed76 100644 --- a/plugins/admin/departments/class_domain.inc +++ b/plugins/admin/departments/class_domain.inc @@ -40,6 +40,7 @@ class domain extends department 'plForeignKeys' => array( 'manager' => array('user','dn','manager=%oldvalue%','*') ), + 'plSearchAttrs' => array('description'), 'plProvidedAcls' => parent::generatePlProvidedAcls(static::getAttributesInfo()) ); diff --git a/plugins/admin/departments/class_locality.inc b/plugins/admin/departments/class_locality.inc index 99483b64c3b48243f6c67bc099b12501008600b1..badd41c807fd8aad495de439c5cb11ff4a9a926c 100644 --- a/plugins/admin/departments/class_locality.inc +++ b/plugins/admin/departments/class_locality.inc @@ -41,6 +41,7 @@ class locality extends department 'plForeignKeys' => array( 'manager' => array('user','dn','manager=%oldvalue%','*') ), + 'plSearchAttrs' => array('description'), 'plProvidedAcls' => parent::generatePlProvidedAcls(static::getAttributesInfo()) ); diff --git a/plugins/admin/departments/class_organization.inc b/plugins/admin/departments/class_organization.inc index ff0dac558b1a49d258818a5a87b12ef04f9d2c48..179c7821770345689dfb9fef07b64e7098ff3a56 100644 --- a/plugins/admin/departments/class_organization.inc +++ b/plugins/admin/departments/class_organization.inc @@ -41,6 +41,7 @@ class organization extends department 'plForeignKeys' => array( 'manager' => array('user','dn','manager=%oldvalue%','*') ), + 'plSearchAttrs' => array('description'), 'plProvidedAcls' => parent::generatePlProvidedAcls(static::getAttributesInfo()) ); diff --git a/plugins/admin/groups/class_ogroup.inc b/plugins/admin/groups/class_ogroup.inc index 0116de0d5f3953d9037ad59ea9f68ef6c2953b24..f47940d8216414bf779c3bec61b9ae270fe84501 100644 --- a/plugins/admin/groups/class_ogroup.inc +++ b/plugins/admin/groups/class_ogroup.inc @@ -196,6 +196,7 @@ class ogroup extends simplePlugin array('user','dn','owner=%oldvalue%','*') ) ), + 'plSearchAttrs' => array('description'), 'plProvidedAcls' => parent::generatePlProvidedAcls(static::getAttributesInfo()) ); diff --git a/plugins/admin/groups/class_roleGeneric.inc b/plugins/admin/groups/class_roleGeneric.inc index 10826f81e4d8ae4e9ff611b94b6a32ee6e1503c8..76475a66f7f673b1486afefafa82ab0cf339a804 100644 --- a/plugins/admin/groups/class_roleGeneric.inc +++ b/plugins/admin/groups/class_roleGeneric.inc @@ -66,6 +66,7 @@ class roleGeneric extends simplePlugin 'plForeignKeys' => array( 'roleOccupant' => array('user','dn','roleOccupant=%oldvalue%','*') ), + 'plSearchAttrs' => array('description'), 'plProvidedAcls' => parent::generatePlProvidedAcls(static::getAttributesInfo()) ); diff --git a/plugins/personal/generic/class_user.inc b/plugins/personal/generic/class_user.inc index 4e4ec17045c2a0cfe0edbc7b71f698ab11471409..2267766a8c73b986bdb8028efe5cf4dd2874188a 100644 --- a/plugins/personal/generic/class_user.inc +++ b/plugins/personal/generic/class_user.inc @@ -291,6 +291,7 @@ class user extends simplePlugin 'plForeignKeys' => array( 'manager' => array('user','dn','manager=%oldvalue%','*') ), + 'plSearchAttrs' => array('uid','description'), 'plProvidedAcls' => array_merge( parent::generatePlProvidedAcls(static::getAttributesInfo()),