From 8efae39e6aec6af361a73eed9482dc0688f65c6d Mon Sep 17 00:00:00 2001 From: Roland Gruber Date: Sun, 21 Nov 2010 14:43:09 +0000 Subject: [PATCH] cache possible managers --- lam/lib/modules/inetOrgPerson.inc | 38 +++++++++++++++++++++---------- 1 file changed, 26 insertions(+), 12 deletions(-) diff --git a/lam/lib/modules/inetOrgPerson.inc b/lam/lib/modules/inetOrgPerson.inc index 81dae2de..8928e203 100644 --- a/lam/lib/modules/inetOrgPerson.inc +++ b/lam/lib/modules/inetOrgPerson.inc @@ -37,6 +37,9 @@ $Id$ */ class inetOrgPerson extends baseModule implements passwordService { + /** caches the list of possible managers */ + private $cachedManagers = null; + /** * This function fills the message array. **/ @@ -937,17 +940,6 @@ class inetOrgPerson extends baseModule implements passwordService { $fieldContainer->addElement(new htmlTableExtendedInputField(_('Department(s)'), 'departmentNumber', $departmentNumber, 'departmentNumber'), true); } if (!$this->isBooleanConfigOptionSet('inetOrgPerson_hideManager')) { - // get list of existing users for manager attribute - $dnUsers = searchLDAPByAttribute(null, null, 'inetOrgPerson', array('dn'), array('user')); - for ($i = 0; $i < sizeof($dnUsers); $i++) { - $dnUsers[$i] = $dnUsers[$i]['dn']; - } - usort($dnUsers, array($_SESSION['ldap'], 'cmp_array')); - array_unshift($dnUsers, '-'); - $options = array(); - for ($i = 0; $i < sizeof($dnUsers); $i++) { - $options[getAbstractDN($dnUsers[$i])] = $dnUsers[$i]; - } $optionsSelected = array(); if (isset($this->attributes['manager'][0])) { $optionsSelected[] = $this->attributes['manager'][0]; @@ -955,7 +947,7 @@ class inetOrgPerson extends baseModule implements passwordService { else { $optionsSelected[] = '-'; } - $managerElement = new htmlTableExtendedSelect('manager', $options, $optionsSelected, _('Manager'), 'manager'); + $managerElement = new htmlTableExtendedSelect('manager', $this->getManagers(), $optionsSelected, _('Manager'), 'manager'); $managerElement->setHasDescriptiveElements(true); $managerElement->setRightToLeftTextDirection(true); $managerElement->setSortElements(false); @@ -1788,6 +1780,28 @@ class inetOrgPerson extends baseModule implements passwordService { $this->attributes['userPassword'][0] = pwd_hash($password, true, $this->moduleSettings['posixAccount_pwdHash'][0]); return array(); } + + /** + * Returns a list of possible managers. + * + * @return array list of format array(abstract DN => DN) + */ + private function getManagers() { + if ($this->cachedManagers != null) { + return $this->cachedManagers; + } + $dnUsers = searchLDAPByAttribute(null, null, 'inetOrgPerson', array('dn'), array('user')); + for ($i = 0; $i < sizeof($dnUsers); $i++) { + $dnUsers[$i] = $dnUsers[$i]['dn']; + } + usort($dnUsers, array($_SESSION['ldap'], 'cmp_array')); + array_unshift($dnUsers, '-'); + $this->cachedManagers = array(); + for ($i = 0; $i < sizeof($dnUsers); $i++) { + $this->cachedManagers[getAbstractDN($dnUsers[$i])] = $dnUsers[$i]; + } + return $this->cachedManagers; + } }