2004-11-14 15:09:19 +00:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">  
						 
					
						
							
								
									
										
										
										
											2007-10-28 13:53:06 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								< html > < head > < title > Module HowTo - Account profiles< / title >  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2010-10-24 13:52:51 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  < link  rel = "stylesheet"  type = "text/css"  href = "style/layout.css" > < link  rel = "shortcut icon"  type = "image/x-icon"  href = "images/favicon.ico" > < / head > < body > 
							 
						 
					
						
							
								
									
										
										
										
											2004-11-14 15:09:19 +00:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								< 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 >  
						 
					
						
							
								
									
										
										
										
											2007-10-28 13:53:06 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								< span  style = "font-weight: bold; text-decoration: underline;" > Example:< / span > < br  style = "font-weight: bold; text-decoration: underline;" >  
						 
					
						
							
								
									
										
										
										
											2004-11-14 15:09:19 +00:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								< 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 >  
						 
					
						
							
								
									
										
										
										
											2007-10-28 13:53:06 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								< table  style = "width: 100%; text-align: left;"  class = "mod-code"  border = "0"  cellpadding = "2"  cellspacing = "2" >  
						 
					
						
							
								
									
										
										
										
											2004-11-14 15:09:19 +00:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								  < 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 >  
						 
					
						
							
								
									
										
										
										
											2007-10-28 13:53:06 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								              $return[< span  style = "color: rgb(255, 0, 0);" > 'profile_options'< / span > ] = array(< br >  
						 
					
						
							
								
									
										
										
										
											2010-10-24 13:52:51 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                     new 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								htmlTableExtendedInputField(_('Job title'), 'inetOrgPerson_title',
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								null, 'title'),< br > 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                     new htmlTableExtendedInputField(_('Employee type'), 'inetOrgPerson_employeeType', null, 'employeeType')< br >  
						 
					
						
							
								
									
										
										
										
											2004-11-14 15:09:19 +00:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								              );< 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 > 
							 
						 
					
						
							
								
									
										
										
										
											2010-10-24 13:52:51 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								Your profile options should also provide a help link because the description
							 
						 
					
						
							
								
									
										
										
										
											2004-11-14 15:09:19 +00:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								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
							 
						 
					
						
							
								
									
										
										
										
											2007-10-28 13:53:06 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								provides different checks which can be activated with < span  style = "font-style: italic;" > meta data< / span > . However you can also do
							 
						 
					
						
							
								
									
										
										
										
											2004-11-14 15:09:19 +00:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								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 >  
						 
					
						
							
								
									
										
										
										
											2007-10-28 13:53:06 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								< span  style = "font-weight: bold; text-decoration: underline;" > Example:< / span > < br  style = "font-weight: bold; text-decoration: underline;" >  
						 
					
						
							
								
									
										
										
										
											2004-11-14 15:09:19 +00:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								< 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 >  
						 
					
						
							
								
									
										
										
										
											2007-10-28 13:53:06 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								< table  style = "width: 100%; text-align: left;"  class = "mod-code"  border = "0"  cellpadding = "2"  cellspacing = "2" >  
						 
					
						
							
								
									
										
										
										
											2004-11-14 15:09:19 +00:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								  < 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 >  
						 
					
						
							
								
									
										
										
										
											2007-10-28 13:53:06 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								              $return[< span  style = "color: rgb(255, 0, 0);" > 'profile_checks'< / span > ][< span  style = "color: rgb(255, 0, 0);" > 'inetOrgPerson_title'< / span > ] = array(< br >  
						 
					
						
							
								
									
										
										
										
											2004-11-14 15:09:19 +00:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								                     'type' =>  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								'ext_preg',< br > 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                     'regex' =>  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								'title',< br > 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                   
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  'error_message' =>  $this-> messages['title'][0]);< br >  
						 
					
						
							
								
									
										
										
										
											2007-10-28 13:53:06 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								              $return[< span  style = "color: rgb(255, 0, 0);" > 'profile_checks'< / span > ][< span  style = "color: rgb(255, 0, 0);" > 'inetOrgPerson_employeeType'< / span > ] = 
						 
					
						
							
								
									
										
										
										
											2004-11-14 15:09:19 +00:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								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
							 
						 
					
						
							
								
									
										
										
										
											2007-10-28 13:53:06 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								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
							 
						 
					
						
							
								
									
										
										
										
											2004-11-14 15:09:19 +00:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								check. This function already contains regular expressions for the most
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								common cases.< br > 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								< br >  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								< br >  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								< h2 > 3. Loading an account profile< / h2 >  
						 
					
						
							
								
									
										
										
										
											2005-01-07 10:51:56 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								When an account profile is loaded the modules have to check what values
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								they need for their internal data structures.< br > 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								The < span  style = "font-style: italic;" > baseModule< / span >  already
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								provides the possibility to store profile values directly as LDAP
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								attributes in < span  style = "font-style: italic;" > $this-> attributes< / span > .
							 
						 
					
						
							
								
									
										
										
										
											2007-10-28 13:53:06 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								This is done by defining profile-attribute mappings in < span  style = "font-weight: bold;" > meta['profile_mappings']< / span > .< br > 
							 
						 
					
						
							
								
									
										
										
										
											2005-01-07 10:51:56 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								If you have other values than LDAP attributes or need some post
							 
						 
					
						
							
								
									
										
										
										
											2007-10-28 13:53:06 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								processing you can implement the function < span  style = "font-weight: bold;" > load_profile()< / span >  in your module.< br > 
							 
						 
					
						
							
								
									
										
										
										
											2005-01-07 10:51:56 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								< br >  
						 
					
						
							
								
									
										
										
										
											2007-10-28 13:53:06 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								< span  style = "font-weight: bold; text-decoration: underline;" > Example:< / span > < br  style = "font-weight: bold; text-decoration: underline;" >  
						 
					
						
							
								
									
										
										
										
											2005-01-07 10:51:56 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								< br >  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								The < span  style = "font-style: italic;" > inetLocalMailRecipient< / span > 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								module only
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								needs a static mapping. This can be done by
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								the < span  style = "font-style: italic;" > baseModule< / span > .< br > 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								< br >  
						 
					
						
							
								
									
										
										
										
											2007-10-28 13:53:06 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								< table  style = "width: 100%; text-align: left;"  class = "mod-code"  border = "0"  cellpadding = "2"  cellspacing = "2" >  
						 
					
						
							
								
									
										
										
										
											2005-01-07 10:51:56 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  < 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 mappings< br >  
						 
					
						
							
								
									
										
										
										
											2007-10-28 13:53:06 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								              $return[< span  style = "color: rgb(255, 0, 0);" > 'profile_mappings'< / span > ] = array(< br >  
						 
					
						
							
								
									
										
										
										
											2005-01-07 10:51:56 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                   
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  'inetLocalMailRecipient_host' =>  'mailHost'< br >  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								              );< br >  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								               [...]< br >  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      < / td > 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    < / tr > 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  < / tbody > 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								< / table >  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								< br >  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								In this example the profile option "inetLocalMailRecipient_host" is
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								stored as LDAP attribute "mailHost".< br > 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								< br >  
						 
					
						
							
								
									
										
										
										
											2004-11-14 15:09:19 +00:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								< br >  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								< span  style = "font-weight: bold;" > < / span >  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								< h2 > < span  style = "font-weight: bold;" > < / span > < / h2 >  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								< / div >  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								< / div >  
						 
					
						
							
								
									
										
										
										
											2007-10-28 13:53:06 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								< / body > < / html >