diff --git a/main/exercice/question.class.php b/main/exercice/question.class.php index d066c11445..71b27fe281 100644 --- a/main/exercice/question.class.php +++ b/main/exercice/question.class.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 ' '; 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', ''); } @@ -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(); diff --git a/main/exercice/question_admin.inc.php b/main/exercice/question_admin.inc.php index ff7bd959ad..cb95720610 100644 --- a/main/exercice/question_admin.inc.php +++ b/main/exercice/question_admin.inc.php @@ -50,7 +50,6 @@ if (is_object($objQuestion)) { // question form elements $objQuestion->createForm($form); - // answer form elements $objQuestion->createAnswersForm($form); diff --git a/main/inc/lib/extra_field.lib.php b/main/inc/lib/extra_field.lib.php index 0174cdbcfa..12becb231f 100644 --- a/main/inc/lib/extra_field.lib.php +++ b/main/inc/lib/extra_field.lib.php @@ -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']); diff --git a/main/inc/lib/extra_field_option.lib.php b/main/inc/lib/extra_field_option.lib.php index f8ca036277..ce6ab9e278 100644 --- a/main/inc/lib/extra_field_option.lib.php +++ b/main/inc/lib/extra_field_option.lib.php @@ -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; } diff --git a/main/inc/lib/extra_field_value.lib.php b/main/inc/lib/extra_field_value.lib.php index 05d71a704b..4b0422e575 100644 --- a/main/inc/lib/extra_field_value.lib.php +++ b/main/inc/lib/extra_field_value.lib.php @@ -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