Explorar el Código

[svn r14811] Added select and select multiple fields management

Yannick Warnier hace 17 años
padre
commit
1cc674c668

+ 5 - 1
main/admin/user_fields.php

@@ -136,7 +136,11 @@ if(1)
 
 
 	// Create a sortable table with user-data
 	// Create a sortable table with user-data
 	$parameters['sec_token'] = Security::get_token();
 	$parameters['sec_token'] = Security::get_token();
-	$table = new SortableTable('extra_fields', 'get_number_of_extra_fields', 'get_extra_fields',5);
+	$column_show = array(1,1,1,1,1,1,1,1,0);
+	$column_order = array(0,1,2,3,4,5,6,7,8);
+	$extra_fields = get_extra_fields(0,50,5,'ASC');
+ 
+	$table = new SortableTableFromArrayConfig($extra_fields, 5, 50, '', $column_show, $column_order, 'ASC');
 	$table->set_additional_parameters($parameters);
 	$table->set_additional_parameters($parameters);
 	$table->set_header(0, '', false);
 	$table->set_header(0, '', false);
 	$table->set_header(1, get_lang('FieldLabel'));
 	$table->set_header(1, get_lang('FieldLabel'));

+ 7 - 2
main/admin/user_fields_add.php

@@ -65,7 +65,7 @@ $types = array();
 $types[USER_FIELD_TYPE_TEXT]  = get_lang('FieldTypeText');
 $types[USER_FIELD_TYPE_TEXT]  = get_lang('FieldTypeText');
 $types[USER_FIELD_TYPE_TEXTAREA] = get_lang('FieldTypeTextarea');
 $types[USER_FIELD_TYPE_TEXTAREA] = get_lang('FieldTypeTextarea');
 //$types[USER_FIELD_TYPE_RADIO] = get_lang('FieldTypeRadio');
 //$types[USER_FIELD_TYPE_RADIO] = get_lang('FieldTypeRadio');
-//$types[USER_FIELD_TYPE_SELECT] = get_lang('FieldTypeSelect');
+$types[USER_FIELD_TYPE_SELECT] = get_lang('FieldTypeSelect');
 //$types[USER_FIELD_TYPE_SELECT_MULTIPLE] = get_lang('FieldTypeSelectMultiple');
 //$types[USER_FIELD_TYPE_SELECT_MULTIPLE] = get_lang('FieldTypeSelectMultiple');
 $types[USER_FIELD_TYPE_DATE] = get_lang('FieldTypeDate');
 $types[USER_FIELD_TYPE_DATE] = get_lang('FieldTypeDate');
 $types[USER_FIELD_TYPE_DATETIME] = get_lang('FieldTypeDatetime');
 $types[USER_FIELD_TYPE_DATETIME] = get_lang('FieldTypeDatetime');
@@ -76,8 +76,12 @@ $form->addElement('text','fieldtitle',get_lang('FieldTitle'));
 $form->applyFilter('fieldtitle','html_filter');
 $form->applyFilter('fieldtitle','html_filter');
 $form->applyFilter('fieldtitle','trim');
 $form->applyFilter('fieldtitle','trim');
 $form->addRule('fieldtitle', get_lang('ThisFieldIsRequired'), 'required');
 $form->addRule('fieldtitle', get_lang('ThisFieldIsRequired'), 'required');
+// Field options
+$form->addElement('text','fieldoptions',get_lang('FieldOptions'));
+$form->applyFilter('fieldoptions','trim');
 // Field default value
 // Field default value
 $form->addElement('text','fielddefaultvalue',get_lang('FieldDefaultValue'));
 $form->addElement('text','fielddefaultvalue',get_lang('FieldDefaultValue'));
+$form->applyFilter('fielddefaultvalue','trim');
 
 
 // Set default values
 // Set default values
 $defaults = array();
 $defaults = array();
@@ -95,8 +99,9 @@ if( $form->validate())
 		$fieldtype = $field['fieldtype'];
 		$fieldtype = $field['fieldtype'];
 		$fieldtitle = $field['fieldtitle'];
 		$fieldtitle = $field['fieldtitle'];
 		$fielddefault = $field['fielddefaultvalue'];
 		$fielddefault = $field['fielddefaultvalue'];
+		$fieldoptions = $field['fieldoptions']; //comma-separated list of options
 	
 	
-		$field_id = UserManager::create_extra_field($fieldlabel,$fieldtype,$fieldtitle,$fielddefault);
+		$field_id = UserManager::create_extra_field($fieldlabel,$fieldtype,$fieldtitle,$fielddefault,$fieldoptions);
 		Security::clear_token();
 		Security::clear_token();
 		header('Location: user_fields.php?action=show_message&message='.urlencode(get_lang('FieldAdded')));
 		header('Location: user_fields.php?action=show_message&message='.urlencode(get_lang('FieldAdded')));
 		exit ();
 		exit ();

+ 33 - 2
main/auth/profile.php

@@ -1,4 +1,4 @@
-<?php // $Id: profile.php 14807 2008-04-09 15:29:12Z yannoo $
+<?php // $Id: profile.php 14811 2008-04-09 18:50:44Z yannoo $
 /*
 /*
 ==============================================================================
 ==============================================================================
 	Dokeos - elearning and course management software
 	Dokeos - elearning and course management software
@@ -271,7 +271,7 @@ if (is_profile_editable() && api_get_setting('profile', 'password') == 'true')
 }
 }
 
 
 // EXTRA FIELDS
 // EXTRA FIELDS
-$extra = UserManager::get_extra_fields();
+$extra = UserManager::get_extra_fields(0,50,5,'ASC');
 foreach($extra as $id => $field_details)
 foreach($extra as $id => $field_details)
 {
 {
 	if($field_details[6] == 0)
 	if($field_details[6] == 0)
@@ -294,10 +294,41 @@ foreach($extra as $id => $field_details)
 			if ($field_details[7] == 0)	$form->freeze('extra_'.$field_details[1]);
 			if ($field_details[7] == 0)	$form->freeze('extra_'.$field_details[1]);
 			break;
 			break;
 		case USER_FIELD_TYPE_RADIO:
 		case USER_FIELD_TYPE_RADIO:
+			/*
+			$group = array();
+			$auth_sources = 0; //make available wider as we need it in case of form reset (see below)
+			if(count($extAuthSource) > 0)
+			{
+				$group[] =& HTML_QuickForm::createElement('radio','password_auto',null,get_lang('ExternalAuthentication').' ',2);
+				$auth_sources = array();
+				foreach($extAuthSource as $key => $info)
+				{
+					$auth_sources[$key] = $key;
+				}
+				$group[] =& HTML_QuickForm::createElement('select','auth_source',null,$auth_sources);
+				$group[] =& HTML_QuickForm::createElement('static','','','<br />');
+			}
+			$group[] =& HTML_QuickForm::createElement('radio','password_auto',get_lang('Password'),get_lang('AutoGeneratePassword').'<br />',1);
+			$group[] =& HTML_QuickForm::createElement('radio', 'password_auto','id="radio_user_password"',null,0);
+			$group[] =& HTML_QuickForm::createElement('password', 'password',null,'onkeydown=password_switch_radio_button(document.user_add,"password[password_auto]")');
+			$form->addGroup($group, 'password', get_lang('Password'), '');
+			*/
 			break;
 			break;
 		case USER_FIELD_TYPE_SELECT:
 		case USER_FIELD_TYPE_SELECT:
+			$options = array();
+			foreach($field_details[8] as $option_id => $option_details)
+			{
+				$options[$option_details[1]] = $option_details[2];
+			}
+			$form->addElement('select','extra_'.$field_details[1],$field_details[3],$options,'');			
 			break;
 			break;
 		case USER_FIELD_TYPE_SELECT_MULTIPLE:
 		case USER_FIELD_TYPE_SELECT_MULTIPLE:
+			$options = array();
+			foreach($field_details[8] as $option_id => $option_details)
+			{
+				$options[$option_details[1]] = $option_details[2];
+			}
+			$form->addElement('select','extra_'.$field_details[1],$field_details[3],$options,array('multiple' => 'multiple'));
 			break;
 			break;
 		case USER_FIELD_TYPE_DATE:
 		case USER_FIELD_TYPE_DATE:
 			$form->addElement('datepickerdate', 'extra_'.$field_details[1], $field_details[3]);
 			$form->addElement('datepickerdate', 'extra_'.$field_details[1], $field_details[3]);

+ 78 - 19
main/inc/lib/usermanager.lib.php

@@ -1,9 +1,9 @@
-<?php // $Id: usermanager.lib.php 14797 2008-04-08 23:17:58Z yannoo $
+<?php // $Id: usermanager.lib.php 14811 2008-04-09 18:50:44Z yannoo $
 /*
 /*
 ==============================================================================
 ==============================================================================
 	Dokeos - elearning and course management software
 	Dokeos - elearning and course management software
 
 
-	Copyright (c) 2004-2008 Dokeos S.A.
+	Copyright (c) 2004-2008 Dokeos SPRL
 	Copyright (c) 2003 Ghent University (UGent)
 	Copyright (c) 2003 Ghent University (UGent)
 	Copyright (c) 2001 Universite catholique de Louvain (UCL)
 	Copyright (c) 2001 Universite catholique de Louvain (UCL)
 	Copyright (c) various contributors
 	Copyright (c) various contributors
@@ -36,6 +36,8 @@ define('USER_FIELD_TYPE_TEXTAREA',2);
 define('USER_FIELD_TYPE_RADIO',3);
 define('USER_FIELD_TYPE_RADIO',3);
 define('USER_FIELD_TYPE_SELECT',4);
 define('USER_FIELD_TYPE_SELECT',4);
 define('USER_FIELD_TYPE_SELECT_MULTIPLE',5);
 define('USER_FIELD_TYPE_SELECT_MULTIPLE',5);
+define('USER_FIELD_TYPE_DATE',6);
+define('USER_FIELD_TYPE_DATETIME',7);
 
 
 class UserManager
 class UserManager
 {
 {
@@ -109,7 +111,6 @@ class UserManager
 				                    expiration_date = '".Database::escape_string($expiration_date)."',
 				                    expiration_date = '".Database::escape_string($expiration_date)."',
 									hr_dept_id = '".Database::escape_string($hr_dept_id)."',
 									hr_dept_id = '".Database::escape_string($hr_dept_id)."',
 									active = '".Database::escape_string($active)."'";
 									active = '".Database::escape_string($active)."'";
-		error_log($sql);
 		$result = api_sql_query($sql);
 		$result = api_sql_query($sql);
 		if ($result)
 		if ($result)
 		{
 		{
@@ -722,7 +723,22 @@ class UserManager
 		$t_ufo = Database::get_main_table(TABLE_MAIN_USER_FIELD_OPTIONS);
 		$t_ufo = Database::get_main_table(TABLE_MAIN_USER_FIELD_OPTIONS);
 		$t_ufv = Database::get_main_table(TABLE_MAIN_USER_FIELD_VALUES);
 		$t_ufv = Database::get_main_table(TABLE_MAIN_USER_FIELD_VALUES);
 		$fname = Database::escape_string($fname);
 		$fname = Database::escape_string($fname);
-		$fvalue = Database::escape_string($fvalue);
+		$fvalues = '';
+		if(is_array($fvalue))
+		{
+			foreach($fvalue as $val)
+			{
+				$fvalues .= Database::escape_string($val).';';
+			}
+			if(!empty($fvalues))
+			{
+				$fvalues = substr($fvalues,0,-1);
+			}
+		}
+		else
+		{
+			$fvalues = Database::escape_string($fvalue);
+		}
 		$sqluf = "SELECT * FROM $t_uf WHERE field_variable='$fname'";
 		$sqluf = "SELECT * FROM $t_uf WHERE field_variable='$fname'";
 		$resuf = api_sql_query($sqluf,__FILE__,__LINE__);
 		$resuf = api_sql_query($sqluf,__FILE__,__LINE__);
 		if(Database::num_rows($resuf)==1)
 		if(Database::num_rows($resuf)==1)
@@ -736,12 +752,13 @@ class UserManager
 				case 5:
 				case 5:
 					$sqluo = "SELECT * FROM $t_ufo WHERE field_id = ".$rowuf['id'];
 					$sqluo = "SELECT * FROM $t_ufo WHERE field_id = ".$rowuf['id'];
 					$resuo = api_sql_query($sqluo,__FILE__,__LINE__);
 					$resuo = api_sql_query($sqluo,__FILE__,__LINE__);
+					$values = split(';',$fvalues);
 					if(Database::num_rows($resuo)>0)
 					if(Database::num_rows($resuo)>0)
 					{
 					{
 						$check = false;
 						$check = false;
 						while($rowuo = Database::fetch_array($resuo))
 						while($rowuo = Database::fetch_array($resuo))
 						{
 						{
-							if($rowuo['field_value'] == $fvalue)
+							if(in_array($rowuo['option_value'],$values))
 							{
 							{
 								$check = true;
 								$check = true;
 								break;
 								break;
@@ -778,25 +795,33 @@ class UserManager
 						$n--;
 						$n--;
 					}
 					}
 					$rowufv = Database::fetch_array($resufv);
 					$rowufv = Database::fetch_array($resufv);
-					$sqlu = "UPDATE $t_ufv SET field_value = '$fvalue', tms = $tms WHERE id = ".$rowufv['id'];
-					$resu = api_sql_query($sqlu,__FILE__,__LINE__);
-					return($resu?true:false);					
-				}		
+					if($rowufv['field_value'] != $fvalues)
+					{ 
+						$sqlu = "UPDATE $t_ufv SET field_value = '$fvalues', tms = FROM_UNIXTIME($tms) WHERE id = ".$rowufv['id'];
+						$resu = api_sql_query($sqlu,__FILE__,__LINE__);
+						return($resu?true:false);					
+					}
+					return true;
+				}
 			}
 			}
 			elseif($n==1)
 			elseif($n==1)
 			{
 			{
 				//we need to update the current record
 				//we need to update the current record
 				$rowufv = Database::fetch_array($resufv);
 				$rowufv = Database::fetch_array($resufv);
-				$sqlu = "UPDATE $t_ufv SET field_value = '$fvalue', tms = $tms WHERE id = ".$rowufv['id'];
-				error_log('UM::update_extra_field_value: '.$sqlu);
-				$resu = api_sql_query($sqlu,__FILE__,__LINE__);
-				return($resu?true:false);
+				if($rowufv['field_value'] != $fvalues)
+				{
+					$sqlu = "UPDATE $t_ufv SET field_value = '$fvalues', tms = FROM_UNIXTIME($tms) WHERE id = ".$rowufv['id'];
+					//error_log('UM::update_extra_field_value: '.$sqlu);
+					$resu = api_sql_query($sqlu,__FILE__,__LINE__);
+					return($resu?true:false);
+				}
+				return true;
 			}
 			}
 			else
 			else
 			{
 			{
 				$sqli = "INSERT INTO $t_ufv (user_id,field_id,field_value,tms) " .
 				$sqli = "INSERT INTO $t_ufv (user_id,field_id,field_value,tms) " .
-					"VALUES ($user_id,".$rowuf['id'].",'$fvalue',$tms)";
-				error_log('UM::update_extra_field_value: '.$sqli);
+					"VALUES ($user_id,".$rowuf['id'].",'$fvalues',FROM_UNIXTIME($tms))";
+				//error_log('UM::update_extra_field_value: '.$sqli);
 				$resi = api_sql_query($sqli,__FILE__,__LINE__);
 				$resi = api_sql_query($sqli,__FILE__,__LINE__);
 				return($resi?true:false);
 				return($resi?true:false);
 			}
 			}
@@ -850,7 +875,7 @@ class UserManager
 						$fields[$rowf['id']][8][$rowo['id']] = array(
 						$fields[$rowf['id']][8][$rowo['id']] = array(
 							0=>$rowo['id'],
 							0=>$rowo['id'],
 							1=>$rowo['option_value'],
 							1=>$rowo['option_value'],
-							2=>$rowo['option_display_text'],
+							2=>(empty($rowo['option_display_text'])?'':get_lang($rowo['option_display_text'])),
 							3=>$rowo['option_order']
 							3=>$rowo['option_order']
 						);
 						);
 					}	
 					}	
@@ -876,12 +901,14 @@ class UserManager
 	  * @param	int		Field's type
 	  * @param	int		Field's type
 	  * @param	string	Field's language var name
 	  * @param	string	Field's language var name
 	  * @param	string	Field's default value
 	  * @param	string	Field's default value
+	  * @param	string	Optional comma-separated list of options to provide for select and radio
 	  * @return int     new user id - if the new user creation succeeds, false otherwise
 	  * @return int     new user id - if the new user creation succeeds, false otherwise
 	  */
 	  */
-	function create_extra_field($fieldvarname, $fieldtype, $fieldtitle, $fielddefault)
+	function create_extra_field($fieldvarname, $fieldtype, $fieldtitle, $fielddefault, $fieldoptions='')
 	{		
 	{		
 		// database table definition
 		// database table definition
-		$table_field 	= Database::get_main_table(TABLE_MAIN_USER_FIELD);
+		$table_field 		= Database::get_main_table(TABLE_MAIN_USER_FIELD);
+		$table_field_options= Database::get_main_table(TABLE_MAIN_USER_FIELD_OPTIONS);
 		
 		
 		// First check wether the login already exists
 		// First check wether the login already exists
 		if (! UserManager::is_extra_field_available($fieldvarname))
 		if (! UserManager::is_extra_field_available($fieldvarname))
@@ -911,7 +938,39 @@ class UserManager
 		else
 		else
 		{
 		{
 			//echo "false - failed" ;
 			//echo "false - failed" ;
-			$return=false;
+			return false;
+		}
+		if(!empty($fieldoptions) && in_array($fieldtype,array(USER_FIELD_TYPE_RADIO,USER_FIELD_TYPE_SELECT,USER_FIELD_TYPE_SELECT_MULTIPLE)))
+		{
+			$list = split(';',$fieldoptions);
+			foreach($list as $option)
+			{
+				$option = Database::escape_string($option);
+				$sql = "SELECT * FROM $table_field_options WHERE field_id = $return AND option_value = '".$option."'";
+				$res = api_sql_query($sql,__FILE__,__LINE__);
+				if(Database::num_rows($res)>0)
+				{
+					//the option already exists, do nothing
+				}
+				else
+				{
+					$sql = "SELECT MAX(option_order) FROM $table_field_options WHERE field_id = $return";
+					$res = api_sql_query($sql,__FILE__,__LINE__);
+					$max = 1;
+					if(Database::num_rows($res)>0)
+					{
+						$row = Database::fetch_array($res);
+						$max = $row[0]+1;
+					}
+					$time = time();
+					$sql = "INSERT INTO $table_field_options (field_id,option_value,option_display_text,option_order,tms) VALUES ($return,'$option','$option',$max,FROM_UNIXTIME($time))";
+					$res = api_sql_query($sql,__FILE__,__LINE__);
+					if($res === false)
+					{
+						$return = false;
+					}
+				}
+			}
 		}
 		}
 		return $return;
 		return $return;
 	}
 	}