diff --git a/lam/HISTORY b/lam/HISTORY index 5bb3ece6..9b633bac 100644 --- a/lam/HISTORY +++ b/lam/HISTORY @@ -1,6 +1,6 @@ August 2011 3.5.0 - New module "General information": shows internal data about accounts (e.g. creation time) - - inetOrgPerson: New attributes + - inetOrgPerson: New attributes o, employeeNumber, initials - LAM Pro: -> Automount: allow to create automount maps -> Password policy: allow to (un)lock accounts diff --git a/lam/lib/modules/inetOrgPerson.inc b/lam/lib/modules/inetOrgPerson.inc index b98159ef..aa2f2928 100644 --- a/lam/lib/modules/inetOrgPerson.inc +++ b/lam/lib/modules/inetOrgPerson.inc @@ -107,12 +107,12 @@ class inetOrgPerson extends baseModule implements passwordService { // LDAP aliases $return['LDAPaliases'] = array('commonName' => 'cn', 'surname' => 'sn', 'streetAddress' => 'street', 'fax' => 'facsimileTelephoneNumber', 'gn' => 'givenName', 'userid' => 'uid', 'rfc822Mailbox' => 'mail', - 'mobileTelephoneNumber' => 'mobile'); + 'mobileTelephoneNumber' => 'mobile', 'organizationName' => 'o'); // managed attributes $return['attributes'] = array('uid', 'cn', 'employeeType', 'givenName', 'jpegPhoto', 'mail', 'manager', 'mobile', 'title', 'telephoneNumber', 'facsimileTelephoneNumber', 'street', 'postOfficeBox', 'postalCode', 'postalAddress', 'sn', 'userPassword', 'description', 'homePhone', 'roomNumber', 'businessCategory', 'l', 'st', 'physicalDeliveryOfficeName', - 'carLicense', 'departmentNumber'); + 'carLicense', 'departmentNumber', 'o', 'employeeNumber', 'initials'); // self service search attributes $return['selfServiceSearchAttributes'] = array('uid', 'mail', 'cn', 'surname', 'givenName'); // self service field settings @@ -122,7 +122,7 @@ class inetOrgPerson extends baseModule implements passwordService { 'postalCode' => _('Postal code'), 'postOfficeBox' => _('Post office box'), 'jpegPhoto' => _('Photo'), 'homePhone' => _('Home telephone number'), 'roomNumber' => _('Room number'), 'carLicense' => _('Car license'), 'location' => _('Location'), 'state' => _('State'), 'officeName' => _('Office name'), 'businessCategory' => _('Business category'), - 'departmentNumber' => _('Department(s)')); + 'departmentNumber' => _('Department(s)'), 'initials' => _('Initials')); // profile elements $profileElements = array(); if (!$this->isBooleanConfigOptionSet('inetOrgPerson_hideStreet')) { @@ -155,6 +155,9 @@ class inetOrgPerson extends baseModule implements passwordService { if (!$this->isBooleanConfigOptionSet('inetOrgPerson_hideDepartments')) { $profileElements[] = new htmlTableExtendedInputField(_('Department(s)'), 'inetOrgPerson_departmentNumber', null, 'departmentNumber'); } + if (!$this->isBooleanConfigOptionSet('inetOrgPerson_hideO')) { + $profileElements[] = new htmlTableExtendedInputField(_('Organisation'), 'inetOrgPerson_o', null, 'o'); + } if (!$this->isBooleanConfigOptionSet('inetOrgPerson_hideJobTitle')) { $profileElements[] = new htmlTableExtendedInputField(_('Job title'), 'inetOrgPerson_title', null, 'title'); } @@ -260,6 +263,12 @@ class inetOrgPerson extends baseModule implements passwordService { $configContainerOptions->addElement(new htmlTableExtendedInputCheckbox('inetOrgPerson_hideDepartments', false, _('Department(s)'), null, false)); $configContainerOptions->addElement(new htmlOutputText(' ')); $configContainerOptions->addElement(new htmlTableExtendedInputCheckbox('inetOrgPerson_hideManager', false, _('Manager'), null, false)); + $configContainerOptions->addNewLine(); + $configContainerOptions->addElement(new htmlTableExtendedInputCheckbox('inetOrgPerson_hideO', false, _('Organisation'), null, false)); + $configContainerOptions->addElement(new htmlOutputText(' ')); + $configContainerOptions->addElement(new htmlTableExtendedInputCheckbox('inetOrgPerson_hideEmployeeNumber', false, _('Employee number'), null, false)); + $configContainerOptions->addElement(new htmlOutputText(' ')); + $configContainerOptions->addElement(new htmlTableExtendedInputCheckbox('inetOrgPerson_hideInitials', false, _('Initials'), null, false)); $configContainer->addElement($configContainerOptions, true); if (isset($_SESSION['conf_config'])) { // add password hash type if posixAccount is inactive @@ -289,6 +298,14 @@ class inetOrgPerson extends baseModule implements passwordService { 'required' => true ) ); + if (!$this->isBooleanConfigOptionSet('inetOrgPerson_hideInitials')) { + $return['upload_columns'][] = array( + 'name' => 'inetOrgPerson_initials', + 'description' => _('Initials'), + 'help' => 'initials', + 'example' => 'A.B.' + ); + } if (!$this->isBooleanConfigOptionSet('inetOrgPerson_hideDescription')) { $return['upload_columns'][] = array( 'name' => 'inetOrgPerson_description', @@ -305,6 +322,14 @@ class inetOrgPerson extends baseModule implements passwordService { 'example' => _('President') ); } + if (!$this->isBooleanConfigOptionSet('inetOrgPerson_hideEmployeeNumber')) { + $return['upload_columns'][] = array( + 'name' => 'inetOrgPerson_employeeNumber', + 'description' => _('Employee number'), + 'help' => 'employeeNumber', + 'example' => '123456' + ); + } if (!$this->isBooleanConfigOptionSet('inetOrgPerson_hideEmployeeType')) { $return['upload_columns'][] = array( 'name' => 'inetOrgPerson_type', @@ -417,6 +442,14 @@ class inetOrgPerson extends baseModule implements passwordService { 'example' => _('Administration') ); } + if (!$this->isBooleanConfigOptionSet('inetOrgPerson_hideO')) { + $return['upload_columns'][] = array( + 'name' => 'inetOrgPerson_o', + 'description' => _('Organisation'), + 'help' => 'o', + 'example' => _('YourCompany') + ); + } if (!$this->isBooleanConfigOptionSet('inetOrgPerson_hideLocation')) { $return['upload_columns'][] = array( 'name' => 'inetOrgPerson_l', @@ -514,6 +547,15 @@ class inetOrgPerson extends baseModule implements passwordService { if (!$this->isBooleanConfigOptionSet('inetOrgPerson_hideManager')) { $return['PDF_fields']['manager'] = _('Manager'); } + if (!$this->isBooleanConfigOptionSet('inetOrgPerson_hideO')) { + $return['PDF_fields']['o'] = _('Organisation'); + } + if (!$this->isBooleanConfigOptionSet('inetOrgPerson_hideEmployeeNumber')) { + $return['PDF_fields']['employeeNumber'] = _('Employee number'); + } + if (!$this->isBooleanConfigOptionSet('inetOrgPerson_hideInitials')) { + $return['PDF_fields']['initials'] = _('Initials'); + } if (isset($_SESSION['loggedIn']) && ($_SESSION['loggedIn'] === true)) { $modules = $_SESSION['config']->get_AccountModules($this->get_scope()); @@ -631,7 +673,19 @@ class inetOrgPerson extends baseModule implements passwordService { 'pwdHash' => array( "Headline" => _("Password hash type"), "Text" => _("LAM supports CRYPT, SHA, SSHA, MD5 and SMD5 to generate the hash value of passwords. SSHA and CRYPT are the most common but CRYPT does not support passwords greater than 8 letters. We do not recommend to use plain text passwords.") - ) + ), + 'o' => array( + "Headline" => _("Organisation"), + "Text" => _("The user's organisation name.") . ' ' . _('Multiple values are separated by semicolon.') + ), + 'employeeNumber' => array( + "Headline" => _("Employee number"), + "Text" => _("The user's unique employee number.") + ), + 'initials' => array( + "Headline" => _("Initials"), + "Text" => _("The initials of the user's first names.") . ' ' . _('Multiple values are separated by semicolon.') + ), ); return $return; @@ -842,7 +896,16 @@ class inetOrgPerson extends baseModule implements passwordService { unset($this->attributes['manager'][0]); } } - + if (!$this->isBooleanConfigOptionSet('inetOrgPerson_hideEmployeeNumber')) { + $this->attributes['employeeNumber'][0] = $_POST['employeeNumber']; + } + if (!$this->isBooleanConfigOptionSet('inetOrgPerson_hideO')) { + $this->attributes['o'] = preg_split('/;[ ]*/', $_POST['o']); + } + if (!$this->isBooleanConfigOptionSet('inetOrgPerson_hideInitials')) { + $this->attributes['initials'] = preg_split('/;[ ]*/', $_POST['initials']); + } + $modules = $_SESSION['config']->get_AccountModules($this->get_scope()); if (!in_array('posixAccount', $modules)) { // uid @@ -914,6 +977,11 @@ class inetOrgPerson extends baseModule implements passwordService { $lastNameElement = new htmlTableExtendedInputField(_('Last name'), 'sn', $lastName, 'sn'); $lastNameElement->setRequired(true); $fieldContainer->addElement($lastNameElement, true); + if (!$this->isBooleanConfigOptionSet('inetOrgPerson_hideInitials')) { + $initials = ''; + if (isset($this->attributes['initials'][0])) $initials = implode('; ', $this->attributes['initials']); + $fieldContainer->addElement(new htmlTableExtendedInputField(_('Initials'), 'initials', $initials, 'initials'), true); + } if (!in_array('posixAccount', $modules)) { $cn = ''; if (isset($this->attributes['cn'][0])) $cn = $this->attributes['cn'][0]; @@ -1023,6 +1091,11 @@ class inetOrgPerson extends baseModule implements passwordService { if (isset($this->attributes['carLicense'][0])) $carLicense = $this->attributes['carLicense'][0]; $fieldContainer->addElement(new htmlTableExtendedInputField(_('Car license'), 'carLicense', $carLicense, 'carLicense'), true); } + if (!$this->isBooleanConfigOptionSet('inetOrgPerson_hideEmployeeNumber')) { + $employeeNumber = ''; + if (isset($this->attributes['employeeNumber'][0])) $employeeNumber = $this->attributes['employeeNumber'][0]; + $fieldContainer->addElement(new htmlTableExtendedInputField(_('Employee number'), 'employeeNumber', $employeeNumber, 'employeeNumber'), true); + } if (!$this->isBooleanConfigOptionSet('inetOrgPerson_hideEmployeeType')) { $employeeType = ''; if (isset($this->attributes['employeeType'][0])) $employeeType = $this->attributes['employeeType'][0]; @@ -1035,9 +1108,14 @@ class inetOrgPerson extends baseModule implements passwordService { } if (!$this->isBooleanConfigOptionSet('inetOrgPerson_hideDepartments')) { $departmentNumber = ''; - if (isset($this->attributes['departmentNumber'][0])) $departmentNumber = implode(';', $this->attributes['departmentNumber']); + if (isset($this->attributes['departmentNumber'][0])) $departmentNumber = implode('; ', $this->attributes['departmentNumber']); $fieldContainer->addElement(new htmlTableExtendedInputField(_('Department(s)'), 'departmentNumber', $departmentNumber, 'departmentNumber'), true); } + if (!$this->isBooleanConfigOptionSet('inetOrgPerson_hideO')) { + $o = ''; + if (isset($this->attributes['o'][0])) $o = implode('; ', $this->attributes['o']); + $fieldContainer->addElement(new htmlTableExtendedInputField(_('Organisation'), 'o', $o, 'o'), true); + } if (!$this->isBooleanConfigOptionSet('inetOrgPerson_hideManager')) { $optionsSelected = array(); if (isset($this->attributes['manager'][0])) { @@ -1208,6 +1286,18 @@ class inetOrgPerson extends baseModule implements passwordService { if (isset($this->attributes['employeeType'][0])) $employeeType = $this->attributes['employeeType'][0]; $l = ''; if (isset($this->attributes['l'][0])) $l = $this->attributes['l'][0]; + $employeeNumber = ''; + if (isset($this->attributes['employeeNumber'][0])) { + $employeeNumber = $this->attributes['employeeNumber'][0]; + } + $o = ''; + if (isset($this->attributes['o'][0])) { + $o = implode(', ', $this->attributes['o']); + } + $initials = ''; + if (isset($this->attributes['initials'][0])) { + $initials = implode(', ', $this->attributes['initials']); + } $return = array( get_class($this) . '_description' => array('' . _('Description') . '' . $description . ''), @@ -1232,7 +1322,10 @@ class inetOrgPerson extends baseModule implements passwordService { get_class($this) . '_carLicense' => array('' . _('Car license') . '' . $carLicense . ''), get_class($this) . '_location' => array('' . _('Location') . '' . $l . ''), get_class($this) . '_state' => array('' . _('State') . '' . $st . ''), - get_class($this) . '_officeName' => array('' . _('Office name') . '' . $physicalDeliveryOfficeName . '') + get_class($this) . '_officeName' => array('' . _('Office name') . '' . $physicalDeliveryOfficeName . ''), + get_class($this) . '_o' => array('' . _('Organisation') . '' . $o . ''), + get_class($this) . '_employeeNumber' => array('' . _('Employee number') . '' . $employeeNumber . ''), + get_class($this) . '_initials' => array('' . _('Initials') . '' . $initials . ''), ); if (isset($this->attributes['departmentNumber'])) { $return[get_class($this) . '_departmentNumber'] = array('' . _('Department(s)') . '' . implode(', ', $this->attributes['departmentNumber']) . ''); @@ -1256,6 +1349,10 @@ class inetOrgPerson extends baseModule implements passwordService { $this->attributes['departmentNumber'] = array_map('trim', $departments); } } + if (!$this->isBooleanConfigOptionSet('inetOrgPerson_hideO')) { + $oList = preg_split('/;[ ]*/', $profile['inetOrgPerson_o'][0]); + $this->attributes['o'] = $oList; + } if (!$this->isBooleanConfigOptionSet('inetOrgPerson_hideEMailAddress')) { $mailList = preg_split('/;[ ]*/', $profile['inetOrgPerson_mail'][0]); $this->attributes['mail'] = $mailList; @@ -1375,6 +1472,10 @@ class inetOrgPerson extends baseModule implements passwordService { $errors[] = $errMsg; } } + // initials + if ($rawAccounts[$i][$ids['inetOrgPerson_initials']] != "") { + $partialAccounts[$i]['initials'] = preg_split('/;[ ]*/', $rawAccounts[$i][$ids['inetOrgPerson_initials']]); + } // description if ($rawAccounts[$i][$ids['inetOrgPerson_description']] != "") { $partialAccounts[$i]['description'] = $rawAccounts[$i][$ids['inetOrgPerson_description']]; @@ -1398,6 +1499,10 @@ class inetOrgPerson extends baseModule implements passwordService { $errors[] = $errMsg; } } + // employee number + if ($rawAccounts[$i][$ids['inetOrgPerson_employeeNumber']] != "") { + $partialAccounts[$i]['employeeNumber'] = $rawAccounts[$i][$ids['inetOrgPerson_employeeNumber']]; + } // employee type if ($rawAccounts[$i][$ids['inetOrgPerson_type']] != "") { if (get_preg($rawAccounts[$i][$ids['inetOrgPerson_type']], 'employeeType')) { @@ -1456,6 +1561,10 @@ class inetOrgPerson extends baseModule implements passwordService { // remove extra spaces $partialAccounts[$i]['departmentNumber'] = array_map('trim', $partialAccounts[$i]['departmentNumber']); } + // organisation + if ($rawAccounts[$i][$ids['inetOrgPerson_o']] != "") { + $partialAccounts[$i]['o'] = preg_split('/;[ ]*/', $rawAccounts[$i][$ids['inetOrgPerson_o']]); + } // location if ($rawAccounts[$i][$ids['inetOrgPerson_l']] != "") { $partialAccounts[$i]['l'] = $rawAccounts[$i][$ids['inetOrgPerson_l']]; @@ -1755,11 +1864,18 @@ class inetOrgPerson extends baseModule implements passwordService { } if (in_array('departmentNumber', $fields)) { $departmentNumber = ''; - if (isset($attributes['departmentNumber'][0])) $departmentNumber = implode(';', $attributes['departmentNumber']); + if (isset($attributes['departmentNumber'][0])) $departmentNumber = implode('; ', $attributes['departmentNumber']); $return['departmentNumber'] = new htmlTableRow(array( new htmlTableExtendedInputField(_('Department(s)'), 'inetOrgPerson_departmentNumber', $departmentNumber) )); } + if (in_array('initials', $fields)) { + $initials = ''; + if (isset($attributes['initials'][0])) $initials = implode('; ', $attributes['initials']); + $return['initials'] = new htmlTableRow(array( + new htmlTableExtendedInputField(_('Initials'), 'inetOrgPerson_initials', $initials) + )); + } return $return; } @@ -1960,12 +2076,18 @@ class inetOrgPerson extends baseModule implements passwordService { if (in_array('departmentNumber', $fields)) { $attributeNames[] = 'departmentNumber'; if (isset($_POST['inetOrgPerson_departmentNumber']) && ($_POST['inetOrgPerson_departmentNumber'] != '')) { - $attributesNew['departmentNumber'] = explode(';', $_POST['inetOrgPerson_departmentNumber']); - // remove extra spaces - $attributesNew['departmentNumber'] = array_map('trim', $attributesNew['departmentNumber']); + $attributesNew['departmentNumber'] = preg_split('/;[ ]*/', $_POST['inetOrgPerson_departmentNumber']); } elseif (isset($attributes['departmentNumber'])) unset($attributesNew['departmentNumber']); } + // initials + if (in_array('initials', $fields)) { + $attributeNames[] = 'initials'; + if (isset($_POST['inetOrgPerson_initials']) && ($_POST['inetOrgPerson_initials'] != '')) { + $attributesNew['initials'] = preg_split('/;[ ]*/', $_POST['inetOrgPerson_initials']); + } + elseif (isset($attributes['initials'])) unset($attributesNew['initials']); + } // find differences for ($i = 0; $i < sizeof($attributeNames); $i++) { $attrName = $attributeNames[$i];