diff --git a/main/admin/user_fields.php b/main/admin/user_fields.php
index c6c5e788ae..77e4d07c6e 100644
--- a/main/admin/user_fields.php
+++ b/main/admin/user_fields.php
@@ -136,7 +136,11 @@ if(1)
// Create a sortable table with user-data
$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_header(0, '', false);
$table->set_header(1, get_lang('FieldLabel'));
diff --git a/main/admin/user_fields_add.php b/main/admin/user_fields_add.php
index ed585ff823..9c6e7daf5d 100644
--- a/main/admin/user_fields_add.php
+++ b/main/admin/user_fields_add.php
@@ -65,7 +65,7 @@ $types = array();
$types[USER_FIELD_TYPE_TEXT] = get_lang('FieldTypeText');
$types[USER_FIELD_TYPE_TEXTAREA] = get_lang('FieldTypeTextarea');
//$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_DATE] = get_lang('FieldTypeDate');
$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','trim');
$form->addRule('fieldtitle', get_lang('ThisFieldIsRequired'), 'required');
+// Field options
+$form->addElement('text','fieldoptions',get_lang('FieldOptions'));
+$form->applyFilter('fieldoptions','trim');
// Field default value
$form->addElement('text','fielddefaultvalue',get_lang('FieldDefaultValue'));
+$form->applyFilter('fielddefaultvalue','trim');
// Set default values
$defaults = array();
@@ -95,8 +99,9 @@ if( $form->validate())
$fieldtype = $field['fieldtype'];
$fieldtitle = $field['fieldtitle'];
$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();
header('Location: user_fields.php?action=show_message&message='.urlencode(get_lang('FieldAdded')));
exit ();
diff --git a/main/auth/profile.php b/main/auth/profile.php
index f73e57572f..d586c85094 100644
--- a/main/auth/profile.php
+++ b/main/auth/profile.php
@@ -1,4 +1,4 @@
- $field_details)
{
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]);
break;
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','','','
');
+ }
+ $group[] =& HTML_QuickForm::createElement('radio','password_auto',get_lang('Password'),get_lang('AutoGeneratePassword').'
',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;
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;
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;
case USER_FIELD_TYPE_DATE:
$form->addElement('datepickerdate', 'extra_'.$field_details[1], $field_details[3]);
diff --git a/main/inc/lib/usermanager.lib.php b/main/inc/lib/usermanager.lib.php
index 3561e37e10..ceec82a2df 100644
--- a/main/inc/lib/usermanager.lib.php
+++ b/main/inc/lib/usermanager.lib.php
@@ -1,9 +1,9 @@
-0)
{
$check = false;
while($rowuo = Database::fetch_array($resuo))
{
- if($rowuo['field_value'] == $fvalue)
+ if(in_array($rowuo['option_value'],$values))
{
$check = true;
break;
@@ -778,25 +795,33 @@ class UserManager
$n--;
}
$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)
{
//we need to update the current record
$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
{
$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__);
return($resi?true:false);
}
@@ -850,7 +875,7 @@ class UserManager
$fields[$rowf['id']][8][$rowo['id']] = array(
0=>$rowo['id'],
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']
);
}
@@ -876,12 +901,14 @@ class UserManager
* @param int Field's type
* @param string Field's language var name
* @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
*/
- function create_extra_field($fieldvarname, $fieldtype, $fieldtitle, $fielddefault)
+ function create_extra_field($fieldvarname, $fieldtype, $fieldtitle, $fielddefault, $fieldoptions='')
{
// 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
if (! UserManager::is_extra_field_available($fieldvarname))
@@ -911,7 +938,39 @@ class UserManager
else
{
//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;
}