diff --git a/lam/docs/manual-sources/howto.xml b/lam/docs/manual-sources/howto.xml
index db56c326..7d66edf1 100644
--- a/lam/docs/manual-sources/howto.xml
+++ b/lam/docs/manual-sources/howto.xml
@@ -6792,7 +6792,7 @@ OK (10 msec)
-
+
@@ -6815,6 +6815,12 @@ OK (10 msec)
+
+ Description
+
+
+
+
Email address
@@ -6875,6 +6881,12 @@ OK (10 msec)
+
+ Organisational unit
+
+
+
+
Photo
@@ -6937,6 +6949,12 @@ OK (10 msec)
format
+
+ User name
+
+
+
+
Web site
diff --git a/lam/lib/baseType.inc b/lam/lib/baseType.inc
index 361dd3a3..80e3493e 100644
--- a/lam/lib/baseType.inc
+++ b/lam/lib/baseType.inc
@@ -135,12 +135,19 @@ class baseType {
* @return array sorted list of possible suffixes for this type.
*/
public function getSuffixList() {
- $suffix = $_SESSION["config"]->get_Suffix(get_class($this));
+ if (isset($_SESSION["config"])) {
+ $suffix = $_SESSION["config"]->get_Suffix(get_class($this));
+ $connection = $_SESSION["ldap"]->server();
+ }
+ else {
+ $suffix = $_SESSION['selfServiceProfile']->LDAPSuffix;
+ $connection = $_SESSION['ldapHandle'];
+ }
$ret = array();
$filter = "(|(objectClass=organizationalunit)(objectClass=country)(objectClass=organization)(objectClass=krbRealmContainer)(objectClass=container))";
- $sr = @ldap_search($_SESSION["ldap"]->server(), escapeDN($suffix),$filter , array('dn', 'objectClass'), 0, 0, 0, LDAP_DEREF_NEVER);
+ $sr = @ldap_search($connection, escapeDN($suffix),$filter , array('dn', 'objectClass'), 0, 0, 0, LDAP_DEREF_NEVER);
if ($sr) {
- $units = ldap_get_entries($_SESSION["ldap"]->server(), $sr);
+ $units = ldap_get_entries($connection, $sr);
cleanLDAPResult($units);
// extract Dns
$count = sizeof($units);
diff --git a/lam/lib/modules/inetOrgPerson.inc b/lam/lib/modules/inetOrgPerson.inc
index 97117498..945fe144 100644
--- a/lam/lib/modules/inetOrgPerson.inc
+++ b/lam/lib/modules/inetOrgPerson.inc
@@ -160,11 +160,12 @@ class inetOrgPerson extends baseModule implements passwordService {
'homePhone' => _('Home telephone number'), 'roomNumber' => _('Room number'), 'carLicense' => _('Car license'),
'location' => _('Location'), 'state' => _('State'), 'officeName' => _('Office name'), 'businessCategory' => _('Business category'),
'departmentNumber' => _('Department'), 'initials' => _('Initials'), 'title' => _('Job title'), 'labeledURI' => _('Web site'),
- 'userCertificate' => _('User certificates'));
+ 'userCertificate' => _('User certificates'), 'ou' => _('Organisational unit'), 'description' => _('Description'), 'uid' => _('User name'));
// possible self service read-only fields
$return['selfServiceReadOnlyFields'] = array('firstName', 'lastName', 'mail', 'telephoneNumber', 'mobile', 'faxNumber', 'street',
'postalAddress', 'registeredAddress', 'postalCode', 'postOfficeBox', 'jpegPhoto', 'homePhone', 'roomNumber', 'carLicense',
- 'location', 'state', 'officeName', 'businessCategory', 'departmentNumber', 'initials', 'title', 'labeledURI', 'userCertificate');
+ 'location', 'state', 'officeName', 'businessCategory', 'departmentNumber', 'initials', 'title', 'labeledURI', 'userCertificate',
+ 'ou', 'description', 'uid');
// profile elements
$profileElements = array();
if (!$this->isBooleanConfigOptionSet('inetOrgPerson_hideInitials')) {
@@ -2721,6 +2722,61 @@ class inetOrgPerson extends baseModule implements passwordService {
$userCertificatesRow = new htmlTableRow($userCertificatesCells);
$return['userCertificate'] = $userCertificatesRow;
}
+ // ou
+ if (in_array('ou', $fields)) {
+ $ou = '';
+ if (isset($attributes['ou'][0])) $ou = $attributes['ou'][0];
+ if (in_array('ou', $readOnlyFields)) {
+ $ouField = new htmlOutputText(getAbstractDN($ou));
+ }
+ else {
+ $userObj = new user();
+ $ouList = $userObj->getSuffixList();
+ if (!empty($attributes['ou'][0]) && !in_array($attributes['ou'][0], $ouList)) {
+ $ouList[] = $attributes['ou'][0];
+ usort($ouList, 'compareDN');
+ }
+ $ouSelectionList = array('' => '');
+ foreach ($ouList as $singleOU) {
+ $ouSelectionList[getAbstractDN($singleOU)] = $singleOU;
+ }
+ $ouSelectionListSelected = array();
+ if (!empty($attributes['ou'][0])) {
+ $ouSelectionListSelected[] = $attributes['ou'][0];
+ }
+ $ouField = new htmlSelect('inetOrgPerson_ou', $ouSelectionList, $ouSelectionListSelected);
+ $ouField->setHasDescriptiveElements(true);
+ $ouField->setRightToLeftTextDirection(true);
+ $ouField->setSortElements(false);
+ }
+ $return['ou'] = new htmlTableRow(array(
+ new htmlOutputText($this->getSelfServiceLabel('ou', _('Organisational unit'))), $ouField
+ ));
+ }
+ // description
+ if (in_array('description', $fields)) {
+ $description = '';
+ if (isset($attributes['description'][0])) $description = $attributes['description'][0];
+ $descriptionField = new htmlInputField('inetOrgPerson_description', $description);
+ if (in_array('description', $readOnlyFields)) {
+ $descriptionField = new htmlOutputText($description);
+ }
+ $return['description'] = new htmlTableRow(array(
+ new htmlOutputText($this->getSelfServiceLabel('description', _('Description'))), $descriptionField
+ ));
+ }
+ // uid
+ if (in_array('uid', $fields)) {
+ $uid = '';
+ if (isset($attributes['uid'][0])) $uid = $attributes['uid'][0];
+ $uidField = new htmlInputField('inetOrgPerson_uid', $uid);
+ if (in_array('uid', $readOnlyFields)) {
+ $uidField = new htmlOutputText($uid);
+ }
+ $return['uid'] = new htmlTableRow(array(
+ new htmlOutputText($this->getSelfServiceLabel('uid', _('User name'))), $uidField
+ ));
+ }
return $return;
}
@@ -3084,6 +3140,31 @@ class inetOrgPerson extends baseModule implements passwordService {
unset($attributesNew[$userCertificatesAttrName]);
}
}
+ // description
+ if (in_array('description', $fields) && !in_array('description', $readOnlyFields)) {
+ $attributeNames[] = 'description';
+ if (!empty($_POST['inetOrgPerson_description'])) {
+ $attributesNew['description'][0] = $_POST['inetOrgPerson_description'];
+ }
+ elseif (isset($attributes['description'])) unset($attributesNew['description']);
+ }
+ // ou
+ if (in_array('ou', $fields) && !in_array('ou', $readOnlyFields)) {
+ $attributeNames[] = 'ou';
+ if (!empty($_POST['inetOrgPerson_ou'])) {
+ $attributesNew['ou'][0] = $_POST['inetOrgPerson_ou'];
+ }
+ elseif (isset($attributes['ou'])) unset($attributesNew['ou']);
+ }
+ // uid
+ if (in_array('uid', $fields) && !in_array('uid', $readOnlyFields)) {
+ $attributeNames[] = 'uid';
+ if (isset($_POST['inetOrgPerson_uid']) && ($_POST['inetOrgPerson_uid'] != '')) {
+ if (!get_preg($_POST['inetOrgPerson_uid'], 'username')) $return['messages'][] = $this->messages['uid'][0];
+ else $attributesNew['uid'][0] = $_POST['inetOrgPerson_uid'];
+ }
+ elseif (isset($attributes['uid'])) unset($attributesNew['uid']);
+ }
// find differences
for ($i = 0; $i < sizeof($attributeNames); $i++) {
$attrName = $attributeNames[$i];