254 lines
		
	
	
		
			12 KiB
		
	
	
	
		
			HTML
		
	
	
	
		
		
			
		
	
	
			254 lines
		
	
	
		
			12 KiB
		
	
	
	
		
			HTML
		
	
	
	
|  | <!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> |