<!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>