Adding question extra fields in the question form see BT#6098

skala
Julio Montoya 13 years ago
parent 9cec0d1d65
commit 73323bbd2c
  1. 19
      main/exercice/question.class.php
  2. 1
      main/exercice/question_admin.inc.php
  3. 32
      main/inc/lib/extra_field.lib.php
  4. 8
      main/inc/lib/extra_field_option.lib.php
  5. 20
      main/inc/lib/extra_field_value.lib.php

@ -147,9 +147,10 @@ abstract class Question
/**
* Reads question informations from the data base
*
* @author - Olivier Brouckaert
* @param - integer $id - question ID
* @return - boolean - true if question exists, otherwise false
* @author Olivier Brouckaert
* @param int $id - question ID
*
* @return boolean - true if question exists, otherwise false
*/
static function read($id, $course_id = null)
{
@ -1352,7 +1353,7 @@ abstract class Question
function createForm(&$form, $fck_config = 0)
{
$url = api_get_path(WEB_AJAX_PATH).'exercise.ajax.php?1=1';
echo ' <style>
echo '<style>
.media { display:none;}
</style>';
if ($this->type != MEDIA_QUESTION) {
@ -1531,6 +1532,11 @@ abstract class Question
$form->addElement('select', 'parent_id', get_lang('AttachToMedia'), $course_medias);
// Inject question extra fields!
//Extra fields
$extraFields = new ExtraField('question');
$extraFields->add_elements($form, $this->id);
$form->addElement('html', '</div>');
}
@ -1599,6 +1605,11 @@ abstract class Question
if ($this->type != MEDIA_QUESTION) {
$this->save($objExercise->id);
$field_value = new ExtraFieldValue('question');
$params = $form->exportValues();
$params['question_id'] = $this->id;
$field_value->save_field_values($params);
// modify the exercise
$objExercise->addToList($this->id);
$objExercise->update_question_positions();

@ -50,7 +50,6 @@ if (is_object($objQuestion)) {
// question form elements
$objQuestion->createForm($form);
// answer form elements
$objQuestion->createAnswersForm($form);

@ -68,8 +68,8 @@ class ExtraField extends Model
$this->table_field_values = Database::get_main_table(TABLE_MAIN_QUESTION_FIELD_VALUES);
//Used for the model
$this->table = Database::get_main_table(TABLE_MAIN_QUESTION_FIELD);
$this->handler_id = 'question_id';
$this->table = Database::get_main_table(TABLE_MAIN_QUESTION_FIELD);
$this->handler_id = 'question_id';
break;
}
$this->pageUrl = 'extra_fields.php?type='.$this->type;
@ -185,7 +185,7 @@ class ExtraField extends Model
}
}
$extra_fields = self::get_all();
$extra = ExtraField::set_extra_fields_in_form(
$extra = ExtraField::set_extra_fields_in_form(
$form,
$extra_data,
$this->type.'_field',
@ -228,9 +228,12 @@ class ExtraField extends Model
case ExtraField::FIELD_TYPE_RADIO:
$extra_data['extra_'.$field['field_variable']]['extra_'.$field['field_variable']] = $field_value;
break;
/*case ExtraField::FIELD_TYPE_DATETIME:
break;*/
default:
$extra_data['extra_'.$field['field_variable']] = $field_value;
break;
}
}
}
@ -521,15 +524,16 @@ class ExtraField extends Model
}
$options = array();
foreach ($field_details['options'] as $option_id => $option_details) {
if ($get_lang_variables) {
$options[$option_details['option_value']] = get_lang(
$option_details['option_display_text']
);
} else {
$options[$option_details['option_value']] = $option_details['option_display_text'];
if (!empty($field_details['options'])) {
foreach ($field_details['options'] as $option_id => $option_details) {
if ($get_lang_variables) {
$options[$option_details['option_value']] = get_lang($option_details['option_display_text']);
} else {
$options[$option_details['option_value']] = $option_details['option_display_text'];
}
}
}
if ($get_lang_variables) {
$field_details['field_display_text'] = get_lang($field_details['field_display_text']);
}
@ -577,7 +581,9 @@ class ExtraField extends Model
1900
);
$defaults['extra_'.$field_details['field_variable']] = date('Y-m-d 12:00:00');
$form->setDefaults($defaults);
if (!isset($form->_defaultValues['extra_'.$field_details['field_variable']])) {
$form->setDefaults($defaults);
}
if (!$admin_permissions) {
if ($field_details['field_visible'] == 0) {
$form->freeze('extra_'.$field_details['field_variable']);
@ -597,7 +603,9 @@ class ExtraField extends Model
1900
);
$defaults['extra_'.$field_details['field_variable']] = date('Y-m-d 12:00:00');
$form->setDefaults($defaults);
if (!isset($form->_defaultValues['extra_'.$field_details['field_variable']])) {
$form->setDefaults($defaults);
}
if (!$admin_permissions) {
if ($field_details['field_visible'] == 0) {
$form->freeze('extra_'.$field_details['field_variable']);

@ -26,7 +26,10 @@ class ExtraFieldOption extends Model
break;
case 'session':
$this->table = Database::get_main_table(TABLE_MAIN_SESSION_FIELD_OPTIONS);
break;
break;
case 'question':
$this->table = Database::get_main_table(TABLE_MAIN_QUESTION_FIELD_OPTIONS);
break;
}
}
/**
@ -46,7 +49,8 @@ class ExtraFieldOption extends Model
* @assert (-1) == 0
* @assert (0) == 0
*/
public function get_count_by_field_id($field_id) {
public function get_count_by_field_id($field_id)
{
if (empty($field_id)) {
return false;
}

@ -15,16 +15,19 @@ class ExtraFieldValue extends Model
public $type = null;
public $columns = array('id', 'field_id', 'field_value', 'tms');
public $handler_id = null;//session_id, course_code, user_id
/**
* Formats the necessary elements for the given datatype
* @param string The type of data to which this extra field applies (user, course, session, ...)
* @return void (or false if unmanaged datatype)
* @assert (-1) === false
*/
public function __construct($type) {
public function __construct($type)
{
$this->type = $type;
$extra_field = new ExtraField($this->type);
$this->handler_id = $extra_field->handler_id;
switch ($this->type) {
case 'course':
$this->table = Database::get_main_table(TABLE_MAIN_COURSE_FIELD_VALUES);
@ -38,6 +41,10 @@ class ExtraFieldValue extends Model
$this->table = Database::get_main_table(TABLE_MAIN_SESSION_FIELD_VALUES);
$this->table_handler_field = Database::get_main_table(TABLE_MAIN_SESSION_FIELD);
break;
case 'question':
$this->table = Database::get_main_table(TABLE_MAIN_QUESTION_FIELD_VALUES);
$this->table_handler_field = Database::get_main_table(TABLE_MAIN_QUESTION_FIELD);
break;
default:
//unmanaged datatype, return false to let the caller know it
// didn't work
@ -45,23 +52,27 @@ class ExtraFieldValue extends Model
}
$this->columns[] = $this->handler_id;
}
/**
* Gets the number of values stored in the table (all fields together)
* for this type of resource
* @return integer Number of rows in the table
* @assert () !== false
*/
public function get_count() {
public function get_count()
{
$row = Database::select('count(*) as count', $this->table, array(), 'first');
return $row['count'];
}
/**
* Saves a series of records given as parameter into the coresponding table
* @param array Structured parameter for the insertion into the *_field_values table
* @return mixed false on empty params, void otherwise
* @assert (array()) === false
*/
public function save_field_values($params) {
public function save_field_values($params)
{
$extra_field = new ExtraField($this->type);
if (empty($params[$this->handler_id])) {
return false;
@ -254,6 +265,7 @@ class ExtraFieldValue extends Model
return false;
}
}
/**
* Gets the ID from the item (course, session, etc) for which
* the given field is defined with the given value
@ -280,6 +292,7 @@ class ExtraFieldValue extends Model
return false;
}
}
/**
* Get all values for a specific field id
* @param int Field ID
@ -322,6 +335,7 @@ class ExtraFieldValue extends Model
$sql = "DELETE FROM {$this->table} WHERE {$this->handler_id} = '$item_id' AND field_id = '".$field_id."' ";
Database::query($sql);
}
/**
* Not yet implemented - Compares the field values of two items
* @param int Item 1

Loading…
Cancel
Save