[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
$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'));

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

@ -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
@ -271,7 +271,7 @@ if (is_profile_editable() && api_get_setting('profile', 'password') == 'true')
}
// EXTRA FIELDS
$extra = UserManager::get_extra_fields();
$extra = UserManager::get_extra_fields(0,50,5,'ASC');
foreach($extra as $id => $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','','','<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;
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]);

@ -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
Copyright (c) 2004-2008 Dokeos S.A.
Copyright (c) 2004-2008 Dokeos SPRL
Copyright (c) 2003 Ghent University (UGent)
Copyright (c) 2001 Universite catholique de Louvain (UCL)
Copyright (c) various contributors
@ -36,6 +36,8 @@ define('USER_FIELD_TYPE_TEXTAREA',2);
define('USER_FIELD_TYPE_RADIO',3);
define('USER_FIELD_TYPE_SELECT',4);
define('USER_FIELD_TYPE_SELECT_MULTIPLE',5);
define('USER_FIELD_TYPE_DATE',6);
define('USER_FIELD_TYPE_DATETIME',7);
class UserManager
{
@ -109,7 +111,6 @@ class UserManager
expiration_date = '".Database::escape_string($expiration_date)."',
hr_dept_id = '".Database::escape_string($hr_dept_id)."',
active = '".Database::escape_string($active)."'";
error_log($sql);
$result = api_sql_query($sql);
if ($result)
{
@ -722,7 +723,22 @@ class UserManager
$t_ufo = Database::get_main_table(TABLE_MAIN_USER_FIELD_OPTIONS);
$t_ufv = Database::get_main_table(TABLE_MAIN_USER_FIELD_VALUES);
$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'";
$resuf = api_sql_query($sqluf,__FILE__,__LINE__);
if(Database::num_rows($resuf)==1)
@ -736,12 +752,13 @@ class UserManager
case 5:
$sqluo = "SELECT * FROM $t_ufo WHERE field_id = ".$rowuf['id'];
$resuo = api_sql_query($sqluo,__FILE__,__LINE__);
$values = split(';',$fvalues);
if(Database::num_rows($resuo)>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;
}

Loading…
Cancel
Save