[svn r14811] Added select and select multiple fields management

skala
Yannick Warnier 18 years ago
parent b1e63e2872
commit 1cc674c668
  1. 6
      main/admin/user_fields.php
  2. 9
      main/admin/user_fields_add.php
  3. 35
      main/auth/profile.php
  4. 97
      main/inc/lib/usermanager.lib.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'));

@ -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 ();

@ -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]);

@ -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']; if($rowufv['field_value'] != $fvalues)
$resu = api_sql_query($sqlu,__FILE__,__LINE__); {
return($resu?true:false); $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']; if($rowufv['field_value'] != $fvalues)
error_log('UM::update_extra_field_value: '.$sqlu); {
$resu = api_sql_query($sqlu,__FILE__,__LINE__); $sqlu = "UPDATE $t_ufv SET field_value = '$fvalues', tms = FROM_UNIXTIME($tms) WHERE id = ".$rowufv['id'];
return($resu?true:false); //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)"; "VALUES ($user_id,".$rowuf['id'].",'$fvalues',FROM_UNIXTIME($tms))";
error_log('UM::update_extra_field_value: '.$sqli); //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;
} }

Loading…
Cancel
Save