1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268
|
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head><title>Module HowTo - Self service</title>
<link rel="stylesheet" type="text/css" href="style/layout.css">
<link rel="shortcut icon" type="image/x-icon" href="images/favicon.ico"></head><body>
<div style="text-align: center;">
<h1>Module HowTo - Self service<br>
</h1>
<div style="text-align: left;"><br>
Self service is a LAM Pro feature. It allows your users to manage their own data (e.g. telephone numbers).<br>
<br>
</div>
<div style="text-align: left;">First you need to implement the function <span style="font-weight: bold;">getSelfServiceFields()</span> or use <span style="font-weight: bold;">meta['selfServiceFieldSettings']</span>. Each field
has an ID and a descriptive name that will be displayed on the self
service page.<br>
Your input fields may also be defined as read-only in the self service
profile editor. If your fields supports read-only then use
canSelfServiceFieldBeReadOnly() or <span style="font-weight: bold;">meta['selfServiceReadOnlyFields']</span>.<br>
<br>
<span style="font-weight: bold; text-decoration: underline;">Example:</span><br style="font-weight: bold; text-decoration: underline;">
<br>
The <span style="font-style: italic;">inetOrgPerson</span> module
provides lots of possible input fields for the self service.<br>
<br>
<table style="width: 100%; text-align: left;" class="mod-code" border="0" cellpadding="2" cellspacing="2">
<tbody>
<tr>
<td style="vertical-align: top;"> /**<br>
* Returns meta data that is interpreted by parent
class<br>
*<br>
* @return array array with meta data<br>
*/<br>
<span style="font-weight: bold;"> function</span>
get_metaData() {<br>
$return = array();<br>
$return['selfServiceFieldSettings'] =
array('firstName' => _('First name'), 'lastName' => _('Last
name'),<br>
'mail' =>
_('Email address'), 'telephoneNumber' => _('Telephone number'),
'mobile' => _('Mobile number'),<br>
'faxNumber'
=> _('Fax number'), 'street' => _('Street'), 'postalAddress'
=> _('Postal address'), 'registeredAddress' => _('Registered
address'),<br>
'postalCode'
=> _('Postal code'), 'postOfficeBox' => _('Post office box'),
'jpegPhoto' => _('Photo'),<br>
'homePhone'
=> _('Home telephone number'), 'roomNumber' => _('Room number'),
'carLicense' => _('Car license'),<br>
'location'
=> _('Location'), 'state' => _('State'), 'officeName' =>
_('Office name'), 'businessCategory' => _('Business category'),<br>
'departmentNumber' => _('Department'), 'initials' =>
_('Initials'), 'title' => _('Job title'), 'labeledURI' => _('Web
site'),<br>
'userCertificate' => _('User certificates'));<br>
// possible self service read-only fields<br>
$return['selfServiceReadOnlyFields'] = array('firstName',
'lastName', 'mail', 'telephoneNumber', 'mobile', 'faxNumber', 'street',<br>
'postalAddress', 'registeredAddress', 'postalCode',
'postOfficeBox', 'jpegPhoto', 'homePhone', 'roomNumber', 'carLicense',<br>
'location',
'state', 'officeName', 'businessCategory', 'departmentNumber',
'initials', 'title', 'labeledURI', 'userCertificate');<br>
[...]<br>
</td>
</tr>
</tbody>
</table>
<br>
<br>
In very rare cases you need to specify self service search attributes.
These are used to identify the user inside LDAP. Common examples are
"uid" or "mail".<br>
<br>
<span style="font-weight: bold; text-decoration: underline;">Example:</span><br style="font-weight: bold; text-decoration: underline;">
<br>
The <span style="font-style: italic;">inetOrgPerson</span> module specifies several search attributes.<br>
<br>
<table style="width: 100%; text-align: left;" class="mod-code" border="0" cellpadding="2" cellspacing="2">
<tbody>
<tr>
<td style="vertical-align: top;"> /**<br>
* Returns meta data that is interpreted by parent
class<br>
*<br>
* @return array array with meta data<br>
*/<br>
<span style="font-weight: bold;"> function</span>
get_metaData() {<br>
$return = array();<br> // self service search attributes<br>
$return['selfServiceSearchAttributes'] = array('uid', 'mail',
'cn', 'surname', 'givenName', 'employeeNumber');<br>
[...]<br>
</td>
</tr>
</tbody>
</table>
<br>
<br>
The HTML code for the user page is generated with the function <span style="font-weight: bold;">getSelfServiceOptions()</span>. It returns one table row for each input field.<br>
Please note that some fields may be defined as read-only
($readOnlyFields). If $passwordChangeOnly is set then no input fields
other than the bind password should be displayed (you will not get any
attribute values).<br>
<br>
<span style="font-weight: bold; text-decoration: underline;">Example:</span><br style="font-weight: bold; text-decoration: underline;">
<br>
The <span style="font-style: italic;">windowsUser</span> module uses
the addSimpleSelfServiceTextField() function from baseModule to print
the text field. You may also build the table row yourself if the input
field is more complex.<br>
<br>
<table style="width: 100%; text-align: left;" class="mod-code" border="0" cellpadding="2" cellspacing="2">
<tbody>
<tr>
<td style="vertical-align: top;"> /**<br>
* Returns the meta HTML code for each input field.<br>
* format: array(<field1> => array(<META HTML>), ...)<br>
* It is not possible to display help links.<br>
*<br>
* @param array $fields list of active fields<br>
* @param array $attributes attributes of LDAP account<br>
* @param boolean $passwordChangeOnly indicates
that the user is only allowed to change his password and no LDAP
content is readable<br>
* @param array $readOnlyFields list of read-only fields<br>
* @return array list of meta HTML elements (field name => htmlTableRow)<br>
*/<br>
function getSelfServiceOptions($fields, $attributes, $passwordChangeOnly, $readOnlyFields) {<br>
$return = array();<br>
if ($passwordChangeOnly) {<br>
return
$return; // only password fields as long no LDAP content can be read<br>
}<br>
$this->addSimpleSelfServiceTextField($return,
'physicalDeliveryOfficeName', _('Office name'), $fields, $attributes,
$readOnlyFields);<br>
[...]<br>
</td>
</tr>
</tbody>
</table>
<br>
<br>
Of course, the user input should also be validated before making any LDAP changes. This is done in <span style="font-weight: bold;">checkSelfServiceOptions()</span>.<br>
The return value includes any error messages to display and also all LDAP operations.<br>
Please note that some fields may be defined as read-only
($readOnlyFields). If $passwordChangeOnly is set then no input fields
other than the bind
password should be displayed (you will not get any attribute values).<br>
<br>
<span style="font-weight: bold; text-decoration: underline;">Example:</span><br style="font-weight: bold; text-decoration: underline;">
<br>
The <span style="font-style: italic;">inetOrgPerson</span> module has a field for the user's first name.<br>
<br>
<table style="width: 100%; text-align: left;" class="mod-code" border="0" cellpadding="2" cellspacing="2">
<tbody>
<tr>
<td style="vertical-align: top;"> /**<br>
* Checks if all input values are correct and returns the LDAP attributes which should be changed.<br>
* <br>Return values:<br>
* <br>messages: array of parameters to create status messages<br>
* <br>add: array of attributes to add<br>
* <br>del: array of attributes to remove<br>
* <br>mod: array of attributes to modify<br>
* <br>info: array of values with
informational value (e.g. to be used later by pre/postModify actions)<br>
* <br>
* Calling this method does not require the existence of an enclosing {@link accountContainer}.<br>
*<br>
* @param string $fields input fields<br>
* @param array $attributes LDAP attributes<br>
* @param boolean $passwordChangeOnly indicates
that the user is only allowed to change his password and no LDAP
content is readable<br>
* @param array $readOnlyFields list of read-only fields<br>
* @return array messages and attributes
(array('messages' => array(), 'add' => array('mail' =>
array('test@test.com')), 'del' => array(), 'mod' => array(),
'info' => array()))<br>
*/<br>
function checkSelfServiceOptions($fields, $attributes, $passwordChangeOnly, $readOnlyFields) {<br>
$return = array('messages' =>
array(), 'add' => array(), 'del' => array(), 'mod' => array(),
'info' => array());<br>
if ($passwordChangeOnly) {<br>
return $return; // skip processing if only a password change is done<br>
}<br>
$attributeNames = array(); // list of attributes which should be checked for modification<br>
$attributesNew = $attributes;<br>
// first name<br>
if (in_array('firstName', $fields) && !in_array('firstName', $readOnlyFields)) {<br>
$attributeNames[] = 'givenName';<br>
if
(isset($_POST['inetOrgPerson_firstName']) &&
($_POST['inetOrgPerson_firstName'] != '')) {<br>
if (!get_preg($_POST['inetOrgPerson_firstName'],
'realname')) $return['messages'][] = $this->messages['givenName'][0];<br>
else $attributesNew['givenName'][0] =
$_POST['inetOrgPerson_firstName'];<br>
}<br>
elseif
(isset($attributes['givenName'])) unset($attributesNew['givenName']);<br>
}<br>
[...]<br>
</td></tr></tbody>
</table>
<br>
<br>
The self service also supports configuration settings for each module. See <span style="font-weight: bold;">getSelfServiceSettings() </span>or <span style="font-weight: bold;">meta['selfServiceSettings'] </span>to specify the options.<br>
You can validate the input with <span style="font-weight: bold;">checkSelfServiceSettings()</span>.<br>
Self service configuration settings are displayed on a separate tab in the self service profile editor.<br>
<br>
<span style="font-weight: bold;"></span>
<h2><span style="font-weight: bold;"></span></h2>
</div>
</div>
</body></html>
|