diff --git a/lam/lib/modules/inetOrgPerson.inc b/lam/lib/modules/inetOrgPerson.inc index a14b3f07..ad6ef555 100644 --- a/lam/lib/modules/inetOrgPerson.inc +++ b/lam/lib/modules/inetOrgPerson.inc @@ -141,7 +141,7 @@ class inetOrgPerson extends baseModule { $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'); + 'carLicense', 'departmentNumber'); if (isset($_SESSION['loggedIn']) && ($_SESSION['loggedIn'] === true) && $this->supportUnixHosts()) { $return['attributes'][] = 'host'; } @@ -153,13 +153,18 @@ class inetOrgPerson extends baseModule { 'faxNumber' => _('Fax number'), 'street' => _('Street'), 'postalAddress' => _('Postal address'), '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')); + 'location' => _('Location'), 'state' => _('State'), 'officeName' => _('Office name'), 'businessCategory' => _('Business category'), + 'departmentNumber' => _('Department(s)')); // profile elements $return['profile_options'] = array( array( array('kind' => 'text', 'text' => _('Location') . ":"), array('kind' => 'input', 'name' => 'inetOrgPerson_l', 'type' => 'text', 'size' => '30', 'maxlength' => '255'), array('kind' => 'help', 'value' => 'l')), + array( + array('kind' => 'text', 'text' => _('Department(s)') . ":"), + array('kind' => 'input', 'name' => 'inetOrgPerson_departmentNumber', 'type' => 'text', 'size' => '30', 'maxlength' => '255'), + array('kind' => 'help', 'value' => 'departmentNumber')), array( array('kind' => 'text', 'text' => _('State') . ":"), array('kind' => 'input', 'name' => 'inetOrgPerson_st', 'type' => 'text', 'size' => '30', 'maxlength' => '255'), @@ -295,6 +300,12 @@ class inetOrgPerson extends baseModule { 'example' => 'A 2.24' ), array( + 'name' => 'inetOrgPerson_departmentNumber', + 'description' => _('Department(s)'), + 'help' => 'departmentNumber', + 'example' => _('Administration') + ), + array( 'name' => 'inetOrgPerson_l', 'description' => _('Location'), 'help' => 'l', @@ -374,7 +385,8 @@ class inetOrgPerson extends baseModule { 'location', 'state', 'carLicense', - 'officeName' + 'officeName', + 'departmentNumber' ); if (isset($_SESSION['loggedIn']) && ($_SESSION['loggedIn'] === true)) { $modules = $_SESSION['config']->get_AccountModules($this->get_scope()); @@ -489,6 +501,10 @@ class inetOrgPerson extends baseModule { 'physicalDeliveryOfficeName' => array( "Headline" => _("Office name"), "Text" => _("The office name of the user (e.g. YourCompany, Human Resources).") + ), + 'departmentNumber' => array( + "Headline" => _("Department(s)"), + "Text" => _("Here you can enter the user's department(s). Multiple entries are separated by semicolons.") ) ) ); @@ -610,6 +626,16 @@ class inetOrgPerson extends baseModule { $this->attributes['st'][0] = $_POST['st']; $this->attributes['carLicense'][0] = $_POST['carLicense']; $this->attributes['physicalDeliveryOfficeName'][0] = $_POST['physicalDeliveryOfficeName']; + if (isset($_POST['departmentNumber'])) { + $this->attributes['departmentNumber'] = explode(';', $_POST['departmentNumber']); + // remove extra spaces + $this->attributes['departmentNumber'] = array_map('trim', $this->attributes['departmentNumber']); + } + else { + if (isset($this->attributes['departmentNumber'])) { + unset($this->attributes['departmentNumber']); + } + } if ($_POST['manager'] != '-') { $this->attributes['manager'][0] = $_POST['manager']; } @@ -826,6 +852,13 @@ class inetOrgPerson extends baseModule { array('kind' => 'input', 'name' => 'roomNumber', 'type' => 'text', 'size' => '30', 'maxlength' => '255', 'value' => $roomNumber), array('kind' => 'help', 'value' => 'roomNumber')); + $departmentNumber = ''; + if (isset($this->attributes['departmentNumber'][0])) $departmentNumber = implode(';', $this->attributes['departmentNumber']); + $return[] = array( + array('kind' => 'text', 'text' => _('Department(s)')), + array('kind' => 'input', 'name' => 'departmentNumber', 'type' => 'text', 'size' => '30', + 'maxlength' => '255', 'value' => $departmentNumber), + array('kind' => 'help', 'value' => 'departmentNumber')); $return[] = array(array('kind' => 'text', 'td' => array('colspan' => 3))); @@ -1041,7 +1074,7 @@ class inetOrgPerson extends baseModule { * @return array list of possible PDF entries */ function get_pdfEntries() { - return array( + $return = array( get_class($this) . '_description' => array('' . _('Description') . '' . $this->attributes['description'][0] . ''), get_class($this) . '_host' => array('' . _('Unix workstations') . '' . $this->attributes['host'][0] . ''), get_class($this) . '_title' => array('' . _('Job title') . '' . $this->attributes['title'][0] . ''), @@ -1065,7 +1098,28 @@ class inetOrgPerson extends baseModule { get_class($this) . '_carLicense' => array('' . _('Car license') . '' . $this->attributes['carLicense'][0] . ''), get_class($this) . '_location' => array('' . _('Location') . '' . $this->attributes['l'][0] . ''), get_class($this) . '_state' => array('' . _('State') . '' . $this->attributes['st'][0] . ''), - get_class($this) . '_officeName' => array('' . _('Office name') . '' . $this->attributes['physicalDeliveryOfficeName'][0] . '')); + get_class($this) . '_officeName' => array('' . _('Office name') . '' . $this->attributes['physicalDeliveryOfficeName'][0] . '') + ); + if (isset($this->attributes['departmentNumber'])) { + $return[get_class($this) . '_departmentNumber'] = array('' . _('Department(s)') . '' . implode(', ', $this->attributes['departmentNumber']) . ''); + } + return $return; + } + + /** + * Loads the values of an account profile into internal variables. + * + * @param array $profile hash array with profile values (identifier => value) + */ + function load_profile($profile) { + // profile mappings in meta data + parent::load_profile($profile); + // departments + if (isset($profile['inetOrgPerson_departmentNumber'][0]) && $profile['inetOrgPerson_departmentNumber'][0] != '') { + $departments = explode(';', $profile['inetOrgPerson_departmentNumber'][0]); + // remove extra spaces and set attributes + $this->attributes['departmentNumber'] = array_map('trim', $departments); + } } /** @@ -1175,6 +1229,12 @@ class inetOrgPerson extends baseModule { if ($rawAccounts[$i][$ids['inetOrgPerson_roomNumber']] != "") { $partialAccounts[$i]['roomNumber'] = $rawAccounts[$i][$ids['inetOrgPerson_roomNumber']]; } + // departments + if ($rawAccounts[$i][$ids['inetOrgPerson_departmentNumber']] != "") { + $partialAccounts[$i]['departmentNumber'] = explode(';', $rawAccounts[$i][$ids['inetOrgPerson_departmentNumber']]); + // remove extra spaces + $partialAccounts[$i]['departmentNumber'] = array_map('trim', $partialAccounts[$i]['departmentNumber']); + } // location if ($rawAccounts[$i][$ids['inetOrgPerson_l']] != "") { $partialAccounts[$i]['l'] = $rawAccounts[$i][$ids['inetOrgPerson_l']]; @@ -1505,6 +1565,14 @@ class inetOrgPerson extends baseModule { ); } } + if (in_array('departmentNumber', $fields)) { + $departmentNumber = ''; + if (isset($attributes['departmentNumber'][0])) $departmentNumber = implode(';', $attributes['departmentNumber']); + $return['departmentNumber'] = array( + array('kind' => 'text', 'text' => _('Department(s)')), + array('kind' => 'input', 'name' => 'inetOrgPerson_departmentNumber', 'type' => 'text', 'size' => '30', + 'maxlength' => '255', 'value' => $departmentNumber)); + } return $return; } @@ -1693,6 +1761,16 @@ class inetOrgPerson extends baseModule { } } } + // departments + 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']); + } + elseif (isset($attributes['departmentNumber'])) unset($attributesNew['departmentNumber']); + } // find differences for ($i = 0; $i < sizeof($attributeNames); $i++) { $attrName = $attributeNames[$i]; @@ -1705,6 +1783,12 @@ class inetOrgPerson extends baseModule { break; } } + for ($a = 0; $a < sizeof($attributesNew[$attrName]); $a++) { + if (!in_array($attributesNew[$attrName][$a], $attributes[$attrName])) { + $return['mod'][$attrName] = $attributesNew[$attrName]; + break; + } + } } } return $return;