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; }