added config and profiles
This commit is contained in:
parent
68a80b58a8
commit
476565f934
|
@ -0,0 +1,253 @@
|
||||||
|
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<title>Module HowTo - Configuration options</title>
|
||||||
|
<link rel="stylesheet" type="text/css" href="style/layout.css">
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<div style="text-align: center;">
|
||||||
|
<h1>Module HowTo - Configuration options<br>
|
||||||
|
</h1>
|
||||||
|
<div style="text-align: left;"><br>
|
||||||
|
There might be situations where you want to give the user the
|
||||||
|
possibility to make general settings which are not useful to place on
|
||||||
|
the account detail pages or profile editor.<br>
|
||||||
|
Therefore LAM allows the modules to define their own configuration
|
||||||
|
options. E.g. the <span style="font-style: italic;">posixAccount</span>
|
||||||
|
module uses this to define the ranges for the UIDs.<br>
|
||||||
|
LAM will display your configuration options only if the user also
|
||||||
|
selected your module.<br>
|
||||||
|
</div>
|
||||||
|
<div style="text-align: left;"><br>
|
||||||
|
<h2>1. Defining configuration options<br>
|
||||||
|
</h2>
|
||||||
|
First you have to define what options you want to offer the user. LAM
|
||||||
|
will display all options in one fieldset for each module. Please notice
|
||||||
|
that there will be no separation on account types if you module is
|
||||||
|
suitable for different account types.<br>
|
||||||
|
<br>
|
||||||
|
The configuration options are specified with <span
|
||||||
|
style="font-weight: bold;">get_configOptions()</span>
|
||||||
|
or <span style="font-weight: bold;">meta['config_options']</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;">posixGroup</span> module offers
|
||||||
|
three configuration options. The min/maximum values for GIDs and the
|
||||||
|
password hash type.<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>
|
||||||
|
// configuration options<br>
|
||||||
|
$return[<span
|
||||||
|
style="color: rgb(255, 0, 0);">'config_options'</span>][<span
|
||||||
|
style="color: rgb(255, 0, 0);">'group'</span>] = array(<br>
|
||||||
|
array(<br>
|
||||||
|
|
||||||
|
0 => array('kind' => 'text', 'text' => '<b>' .
|
||||||
|
_('Minimum GID number') . " *: </b>"),<br>
|
||||||
|
|
||||||
|
1 => array('kind' => 'input', 'name' =>
|
||||||
|
'posixGroup_minGID', 'type' => 'text', 'size' => '10',
|
||||||
|
'maxlength' => '255'),<br>
|
||||||
|
|
||||||
|
2 => array('kind' => 'text', 'value' => '&nbsp;'),<br>
|
||||||
|
|
||||||
|
3 => array('kind' => 'text', 'text' => '<b>' .
|
||||||
|
_('Maximum GID number') . " *: </b>"),<br>
|
||||||
|
|
||||||
|
4 => array('kind' => 'input', 'name' =>
|
||||||
|
'posixGroup_maxGID', 'type' => 'text', 'size' => '10',
|
||||||
|
'maxlength' => '255'),<br>
|
||||||
|
|
||||||
|
5 => array('kind' => 'help', 'value' => 'minMaxGID')),<br>
|
||||||
|
array(<br>
|
||||||
|
|
||||||
|
0 => array('kind' => 'text', 'text' => '<b>' .
|
||||||
|
_("Password hash type") . ': &nbsp;</b>'),<br>
|
||||||
|
|
||||||
|
1 => array('kind' => 'select', 'name' =>
|
||||||
|
'posixGroup_pwdHash', 'size' => '1',<br>
|
||||||
|
|
||||||
|
'options' => array("CRYPT", "SHA", "SSHA", "MD5", "SMD5",
|
||||||
|
"PLAIN"), 'options_selected' => array('SSHA')),<br>
|
||||||
|
|
||||||
|
2 => array('kind' => 'text', 'value' => '&nbsp;'),<br>
|
||||||
|
|
||||||
|
3 => array('kind' => 'text', 'value' => '&nbsp;'),<br>
|
||||||
|
|
||||||
|
4 => array('kind' => 'text', 'value' => '&nbsp;'),<br>
|
||||||
|
|
||||||
|
5 => array('kind' => 'help', 'value' => 'pwdHash'))<br>
|
||||||
|
);<br>
|
||||||
|
[...]<br>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
<br>
|
||||||
|
The min/maximum GID numbers are defined with simple text boxes. The
|
||||||
|
password hash is selected with a drop down box and SSHA as default
|
||||||
|
value.<br>
|
||||||
|
You should make sure that the column count (here: 6) is the same for
|
||||||
|
each row. Otherwise the configuration page might be badly rendered by
|
||||||
|
the browser.<br>
|
||||||
|
<br>
|
||||||
|
<h2>2. Checking user input</h2>
|
||||||
|
Probably you also want to check if the input data is syntactically
|
||||||
|
correct.<br>
|
||||||
|
The <span style="font-style: italic;">baseModule</span> already
|
||||||
|
provides different checks which can be activated with <span
|
||||||
|
style="font-style: italic;">meta data</span>. However you can also do
|
||||||
|
the checking in the module.<br>
|
||||||
|
Implementing the function <span style="font-weight: bold;">check_configOptions()</span>
|
||||||
|
in your module will allow you to do the checks yourself. Basic checks
|
||||||
|
can be defined with <span style="font-weight: bold;">meta['config_checks']</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;">posixGroup</span> module only
|
||||||
|
needs to check if the GID numbers are correct. The password hash type
|
||||||
|
needs not to be checked as it is a selection.<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>
|
||||||
|
// configuration checks<br>
|
||||||
|
$return[<span
|
||||||
|
style="color: rgb(255, 0, 0);">'config_checks'</span>][<span
|
||||||
|
style="color: rgb(255, 0, 0);">'group'</span>]['posixGroup_minGID'] =
|
||||||
|
array (<br>
|
||||||
|
'type' =>
|
||||||
|
'ext_preg',<br>
|
||||||
|
'regex' =>
|
||||||
|
'digit',<br>
|
||||||
|
'required'
|
||||||
|
=> true,<br>
|
||||||
|
|
||||||
|
'required_message' => $this->messages['gidNumber'][5],<br>
|
||||||
|
|
||||||
|
'error_message' => $this->messages['gidNumber'][5]);<br>
|
||||||
|
$return[<span
|
||||||
|
style="color: rgb(255, 0, 0);">'config_checks'</span>][<span
|
||||||
|
style="color: rgb(255, 0, 0);">'group'</span>]['posixGroup_maxGID'] =
|
||||||
|
array (<br>
|
||||||
|
'type' =>
|
||||||
|
'ext_preg',<br>
|
||||||
|
'regex' =>
|
||||||
|
'digit',<br>
|
||||||
|
'required'
|
||||||
|
=> true,<br>
|
||||||
|
|
||||||
|
'required_message' => $this->messages['gidNumber'][6],<br>
|
||||||
|
|
||||||
|
'error_message' => $this->messages['gidNumber'][6]);<br>
|
||||||
|
$return[<span
|
||||||
|
style="color: rgb(255, 0, 0);">'config_checks'</span>][<span
|
||||||
|
style="color: rgb(255, 0, 0);">'group'</span>]['cmpGID'] = array (<br>
|
||||||
|
'type' =>
|
||||||
|
'int_greater',<br>
|
||||||
|
'cmp_name1'
|
||||||
|
=> 'posixGroup_maxGID',<br>
|
||||||
|
'cmp_name2'
|
||||||
|
=> 'posixGroup_minGID',<br>
|
||||||
|
|
||||||
|
'error_message' => $this->messages['gidNumber'][7]);<br>
|
||||||
|
[...]<br>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
<br>
|
||||||
|
The type <span style="font-weight: bold;">"ext_preg"</span> means that
|
||||||
|
the <span style="font-style: italic;">baseModule</span> will use the <span
|
||||||
|
style="font-style: italic;">get_preg()</span> function in <span
|
||||||
|
style="font-style: italic;">lib/account.inc</span> for the syntax
|
||||||
|
check. This function already contains regular expressions for the most
|
||||||
|
common cases.<br>
|
||||||
|
To check if the minimum GID is smaller than the maximum GID we define a
|
||||||
|
check for the nonexistant option "cmpGID" and define it as optional.
|
||||||
|
This will do the comparison check.<br>
|
||||||
|
<br>
|
||||||
|
<br>
|
||||||
|
<h2>3. Descriptions</h2>
|
||||||
|
What is still missing is a descriptive title for the fieldset in the
|
||||||
|
configuration editor and a description for each configuration option
|
||||||
|
which is displayed when the user saves the settings.<br>
|
||||||
|
<br>
|
||||||
|
These descriptions are defined with <span style="font-weight: bold;">get_configDescriptions()</span>
|
||||||
|
or <span style="font-weight: bold;">meta['config_descriptions']</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;">posixGroup</span> module will
|
||||||
|
set a title for the fieldset and a description for the three
|
||||||
|
configuration options.<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>
|
||||||
|
// configuration descriptions<br>
|
||||||
|
$return[<span
|
||||||
|
style="color: rgb(255, 0, 0);">'config_descriptions'</span>] = array(<br>
|
||||||
|
'legend' =>
|
||||||
|
_("GID ranges for Unix groups"),<br>
|
||||||
|
'descriptions'
|
||||||
|
=> array(<br>
|
||||||
|
|
||||||
|
'posixGroup_minGID' => _("Minimum GID number for Unix groups"),<br>
|
||||||
|
|
||||||
|
'posixGroup_maxGID' => _("Maximum GID number for Unix groups"),<br>
|
||||||
|
|
||||||
|
'posixGroup_pwdHash' => _("Password hash type for Unix
|
||||||
|
groups"),<br>
|
||||||
|
)<br>
|
||||||
|
);<br>
|
||||||
|
[...]<br>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
<br>
|
||||||
|
This will set the fieldset title to "GID ranges for Unix groups" and
|
||||||
|
the descriptions for the settings list.<br>
|
||||||
|
<span style="font-weight: bold;"></span>
|
||||||
|
<h2><span style="font-weight: bold;"></span></h2>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</body>
|
||||||
|
</html>
|
|
@ -43,11 +43,11 @@ This part covers additional functionality of the modules which are only
|
||||||
needed by a minority of modules. The examples are taken from different
|
needed by a minority of modules. The examples are taken from different
|
||||||
existing modules.<br>
|
existing modules.<br>
|
||||||
<br>
|
<br>
|
||||||
<h3>1. Account profiles</h3>
|
<h3><a href="mod_profiles.htm">1. Account profiles</a></h3>
|
||||||
<br>
|
|
||||||
<h3>2. Configuration options</h3>
|
|
||||||
<br>
|
<br>
|
||||||
|
<h3><a href="mod_config.htm">2. Configuration options</a></h3>
|
||||||
<br>
|
<br>
|
||||||
|
<h3>3. Advanced upload options</h3>
|
||||||
<br>
|
<br>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
@ -31,8 +31,7 @@ address.<br>
|
||||||
border="0" cellpadding="2" cellspacing="2">
|
border="0" cellpadding="2" cellspacing="2">
|
||||||
<tbody>
|
<tbody>
|
||||||
<tr>
|
<tr>
|
||||||
<td style="vertical-align: top;">
|
<td style="vertical-align: top;"> /**<br>
|
||||||
/**<br>
|
|
||||||
* Returns meta data that is interpreted by parent
|
* Returns meta data that is interpreted by parent
|
||||||
class<br>
|
class<br>
|
||||||
*<br>
|
*<br>
|
||||||
|
|
|
@ -0,0 +1,162 @@
|
||||||
|
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<title>Module HowTo - Account profiles</title>
|
||||||
|
<link rel="stylesheet" type="text/css" href="style/layout.css">
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<div style="text-align: center;">
|
||||||
|
<h1>Module HowTo - Account profiles<br>
|
||||||
|
</h1>
|
||||||
|
<div style="text-align: left;"><br>
|
||||||
|
Account profiles make it easy to set default values for new accounts
|
||||||
|
and even to reset an existing account to default values.<br>
|
||||||
|
Your module should provide the possibility to define default values for
|
||||||
|
all attributes which do not differ for each account.<br>
|
||||||
|
</div>
|
||||||
|
<div style="text-align: left;"><br>
|
||||||
|
<h2>1. Defining possible profile options<br>
|
||||||
|
</h2>
|
||||||
|
The first step to account profiles is defining the attributes for which
|
||||||
|
the user can set default values. You will also have to define the type
|
||||||
|
(text, checkbox, ...) of the profile options.<br>
|
||||||
|
The profile editor then will display a fieldset for each module
|
||||||
|
containing its profile options.<br>
|
||||||
|
<br>
|
||||||
|
The profile options are specified with <span style="font-weight: bold;">get_profileOptions()</span>
|
||||||
|
or <span style="font-weight: bold;">meta['profile_options']</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 has only two attributes which may be set to a default value: job
|
||||||
|
title and employee type.<br>
|
||||||
|
The other attributes are account specific and not useful as profile
|
||||||
|
options.<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>
|
||||||
|
// profile elements<br>
|
||||||
|
$return[<span
|
||||||
|
style="color: rgb(255, 0, 0);">'profile_options'</span>] = array(<br>
|
||||||
|
array(<br>
|
||||||
|
|
||||||
|
0 => array('kind' => 'text', 'text' =>
|
||||||
|
_('Job title') . ":"),<br>
|
||||||
|
|
||||||
|
1 => array('kind' => 'input', 'name' =>
|
||||||
|
'inetOrgPerson_title', 'type' => 'text', 'size' => '30',
|
||||||
|
'maxlength' => '255'),<br>
|
||||||
|
|
||||||
|
2 => array('kind' => 'help', 'value' =>
|
||||||
|
'title')),<br>
|
||||||
|
array(<br>
|
||||||
|
|
||||||
|
0 => array('kind' => 'text', 'text' =>
|
||||||
|
_('Employee type') . ":"),<br>
|
||||||
|
|
||||||
|
1 => array('kind' => 'input', 'name' =>
|
||||||
|
'inetOrgPerson_employeeType', 'type' => 'text', 'size' => '30',
|
||||||
|
'maxlength' => '255'),<br>
|
||||||
|
|
||||||
|
2 => array('kind' => 'help', 'value' =>
|
||||||
|
'employeeType'))<br>
|
||||||
|
);<br>
|
||||||
|
[...]<br>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
<br>
|
||||||
|
This defines two text boxes in the profile editor, one for the job
|
||||||
|
title and one for the employee type.<br>
|
||||||
|
Your profile options should also provide a help link if the description
|
||||||
|
of the input element might be not enough.<br>
|
||||||
|
<br>
|
||||||
|
<br>
|
||||||
|
<h2>2. Checking user input</h2>
|
||||||
|
Probably you also want to check if the input data is syntactically
|
||||||
|
correct.<br>
|
||||||
|
The <span style="font-style: italic;">baseModule</span> already
|
||||||
|
provides different checks which can be activated with <span
|
||||||
|
style="font-style: italic;">meta data</span>. However you can also do
|
||||||
|
the checking in the module.<br>
|
||||||
|
Implementing the function <span style="font-weight: bold;">check_profileOptions()</span>
|
||||||
|
in your module will allow you to do the checks yourself. Basic checks
|
||||||
|
can be defined with <span style="font-weight: bold;">meta['profile_checks']</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 only
|
||||||
|
needs some regular expression checks on the input. This can be done by
|
||||||
|
the <span style="font-style: italic;">baseModule</span>.<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>
|
||||||
|
// profile checks<br>
|
||||||
|
$return[<span
|
||||||
|
style="color: rgb(255, 0, 0);">'profile_checks'</span>][<span
|
||||||
|
style="color: rgb(255, 0, 0);">'inetOrgPerson_title'</span>] = array(<br>
|
||||||
|
'type' =>
|
||||||
|
'ext_preg',<br>
|
||||||
|
'regex' =>
|
||||||
|
'title',<br>
|
||||||
|
|
||||||
|
'error_message' => $this->messages['title'][0]);<br>
|
||||||
|
$return[<span
|
||||||
|
style="color: rgb(255, 0, 0);">'profile_checks'</span>][<span
|
||||||
|
style="color: rgb(255, 0, 0);">'inetOrgPerson_employeeType'</span>] =
|
||||||
|
array(<br>
|
||||||
|
'type' =>
|
||||||
|
'ext_preg',<br>
|
||||||
|
'regex' =>
|
||||||
|
'employeeType',<br>
|
||||||
|
|
||||||
|
'error_message' => $this->messages['employeeType'][0]);<br>
|
||||||
|
[...]<br>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
<br>
|
||||||
|
The type <span style="font-weight: bold;">"ext_preg"</span> means that
|
||||||
|
the <span style="font-style: italic;">baseModule</span> will use the <span
|
||||||
|
style="font-style: italic;">get_preg()</span> function in <span
|
||||||
|
style="font-style: italic;">lib/account.inc</span> for the syntax
|
||||||
|
check. This function already contains regular expressions for the most
|
||||||
|
common cases.<br>
|
||||||
|
<br>
|
||||||
|
<br>
|
||||||
|
<h2>3. Loading an account profile</h2>
|
||||||
|
<br>
|
||||||
|
TODO<br>
|
||||||
|
<span style="font-weight: bold;"></span>
|
||||||
|
<h2><span style="font-weight: bold;"></span></h2>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</body>
|
||||||
|
</html>
|
Loading…
Reference in New Issue