From 101e1cc2de08e8b8d034fb30e036c9078aa41be2 Mon Sep 17 00:00:00 2001 From: Julio Montoya Date: Wed, 14 Nov 2012 23:31:50 +0100 Subject: [PATCH] Adding medias and attaching to a question see BT#5714 --- main/exercice/media_question.class.php | 13 ++-- main/exercice/question.class.php | 83 +++++++++++++++++++------- main/exercice/question_admin.inc.php | 5 +- 3 files changed, 68 insertions(+), 33 deletions(-) diff --git a/main/exercice/media_question.class.php b/main/exercice/media_question.class.php index d3e0d4fe58..bced74efa1 100644 --- a/main/exercice/media_question.class.php +++ b/main/exercice/media_question.class.php @@ -11,18 +11,17 @@ class MediaQuestion extends Question { function processAnswersCreation($form) { $params = $form->getSubmitValues(); - $this->save($params); + $this->save_media($params); } - function save($params) { + function save_media($params) { $table_question = Database::get_course_table(TABLE_QUIZ_QUESTION); $new_params = array( - 'c_id' => api_get_course_int_id(), - 'question' => $params['questionName'], + 'c_id' => api_get_course_int_id(), + 'question' => $params['questionName'], 'parent_id' => 0, - 'type' => MEDIA_QUESTION - ); - + 'type' => MEDIA_QUESTION + ); Database::insert($table_question, $new_params); } diff --git a/main/exercice/question.class.php b/main/exercice/question.class.php index c707bc7d6a..7fa04170ef 100644 --- a/main/exercice/question.class.php +++ b/main/exercice/question.class.php @@ -59,11 +59,11 @@ abstract class Question public $picture; public $exerciseList; // array with the list of exercises which this question is in public $category_list; + public $parent_id; private $isContent; public $course; static $typePicture = 'new_question.png'; - static $explanationLangVar = ''; - + static $explanationLangVar = ''; public $question_table_class = 'table table-striped'; static $questionTypes = array( @@ -100,6 +100,7 @@ abstract class Question $this->extra=''; // This variable is used when loading an exercise like an scenario with an special hotspot: final_overlap, final_missing, final_excess $this->exerciseList=array(); $this->course = api_get_course_info(); + $this->parent_id = 0; } public function getIsContent() { @@ -135,14 +136,14 @@ abstract class Question $TBL_QUESTIONS = Database::get_course_table(TABLE_QUIZ_QUESTION); $TBL_EXERCICE_QUESTION = Database::get_course_table(TABLE_QUIZ_TEST_QUESTION); - $sql = "SELECT question,description,ponderation,position,type,picture,level,extra FROM $TBL_QUESTIONS WHERE c_id = $course_id AND id = $id "; + $sql = "SELECT question,description,ponderation,position,type,picture,level, extra, parent_id FROM $TBL_QUESTIONS WHERE c_id = $course_id AND id = $id "; $result = Database::query($sql); // if the question has been found if ($object = Database::fetch_object($result)) { - $objQuestion = Question::getInstance($object->type); + $objQuestion = Question::getInstance($object->type); if (!empty($objQuestion)) { $objQuestion->id = $id; @@ -155,6 +156,7 @@ abstract class Question $objQuestion->level = (int) $object->level; $objQuestion->extra = $object->extra; $objQuestion->course = $course_info; + $objQuestion->parent_id = $object->parent_id; $objQuestion->category_list = Testcategory::getCategoryForQuestion($id); $sql = "SELECT exercice_id FROM $TBL_EXERCICE_QUESTION WHERE c_id = $course_id AND question_id = $id"; @@ -292,6 +294,11 @@ abstract class Question function updateTitle($title) { $this->question=$title; } + + function updateParentId($id) { + $this->parent_id = intval($id); + } + /** * changes the question description @@ -313,7 +320,6 @@ abstract class Question $this->weighting=$weighting; } - /** * @author - Hubert Borderiou 12-10-2011 * @param - array of category $in_category @@ -347,10 +353,10 @@ abstract class Question * @param - int $in_positive * @author - Julio Montoya - Adding multiple cat support */ - function saveCategories($category_list) { - if (empty($category_list)) { - $this->deleteCategory(); - } else { + function saveCategories($category_list) { + + if (!empty($category_list)) { + $this->deleteCategory(); $TBL_QUESTION_REL_CATEGORY = Database::get_course_table(TABLE_QUIZ_QUESTION_REL_CATEGORY); // update or add category for a question @@ -579,7 +585,6 @@ abstract class Question return @unlink($picturePath.'/'.$picture)?true:false; } - return false; } @@ -697,8 +702,8 @@ abstract class Question $level = $this->level; $extra = $this->extra; $c_id = $this->course['real_id']; - $category = $this->category; - + $category_list = $this->category_list; + // question already exists if (!empty($id)) { $sql="UPDATE $TBL_QUESTIONS SET @@ -709,11 +714,12 @@ abstract class Question type ='".Database::escape_string($type)."', picture ='".Database::escape_string($picture)."', extra ='".Database::escape_string($extra)."', - level ='".Database::escape_string($level)."' - WHERE c_id = $c_id AND id='".Database::escape_string($id)."'"; - Database::query($sql); + level ='".Database::escape_string($level)."', + parent_id = ".$this->parent_id." + WHERE c_id = $c_id AND id='".Database::escape_string($id)."'"; - $this->saveCategories($category); + Database::query($sql); + $this->saveCategories($category_list); if (!empty($exerciseId)) { api_item_property_update($this->course, TOOL_QUIZ, $id,'QuizQuestionUpdated',api_get_user_id()); @@ -739,7 +745,7 @@ abstract class Question $current_position = Database::result($result,0,0); $this->updatePosition($current_position+1); $position = $this->position; - $sql = "INSERT INTO $TBL_QUESTIONS (c_id, question, description, ponderation, position, type, picture, extra, level) VALUES ( + $sql = "INSERT INTO $TBL_QUESTIONS (c_id, question, description, ponderation, position, type, picture, extra, level, parent_id) VALUES ( $c_id, '".Database::escape_string($question)."', '".Database::escape_string($description)."', @@ -748,7 +754,8 @@ abstract class Question '".Database::escape_string($type)."', '".Database::escape_string($picture)."', '".Database::escape_string($extra)."', - '".Database::escape_string($level)."' + '".Database::escape_string($level)."', + '".$this->parent_id."' )"; Database::query($sql); @@ -1233,6 +1240,10 @@ abstract class Question // Categories $category_list = Testcategory::getCategoriesIdAndName(); $form->addElement('select', 'questionCategory', get_lang('Category'), $category_list, array('multiple' => 'multiple')); + + //Medias + $course_medias = Question::prepare_course_media_select(api_get_course_int_id()); + $form->addElement('select', 'parent_id', get_lang('AttachToMedia'), $course_medias); // hidden values $form->addElement('hidden', 'myid', intval($_REQUEST['myid'])); @@ -1268,6 +1279,7 @@ abstract class Question $defaults['questionDescription'] = $this->description; $defaults['questionLevel'] = $this->level; $defaults['questionCategory'] = $this->category_list; + $defaults['parent_id'] = $this->parent_id; //Came from he question pool if (isset($_GET['fromExercise'])) { @@ -1290,14 +1302,20 @@ abstract class Question * @param Exercise $objExercise the Exercise instance */ function processCreation ($form, $objExercise) { + + $this->updateParentId($form->getSubmitValue('parent_id')); $this->updateTitle($form->getSubmitValue('questionName')); $this->updateDescription($form->getSubmitValue('questionDescription')); $this->updateLevel($form->getSubmitValue('questionLevel')); $this->updateCategory($form->getSubmitValue('questionCategory')); - $this->save($objExercise->id); - // modify the exercise - $objExercise->addToList($this->id); - $objExercise->update_question_positions(); + //For parent_id != 0 + if ($objExercise->parent_id != 0) { + $this->save($objExercise->id); + + // modify the exercise + $objExercise->addToList($this->id); + $objExercise->update_question_positions(); + } } /** @@ -1514,6 +1532,25 @@ abstract class Question eval('$img = '.$tabQuestionList[$type][1].'::$typePicture;'); eval('$explanation = get_lang('.$tabQuestionList[$type][1].'::$explanationLangVar);'); return array($img, $explanation); - } + } + + static function get_course_medias($course_id) { + $table_question = Database::get_course_table(TABLE_QUIZ_QUESTION); + $result = Database::select('*', $table_question, array('where'=>array('c_id = ? AND parent_id = 0 AND type = ?' =>array($course_id, MEDIA_QUESTION)), 'order'=>'question')); + return $result; + } + + static function prepare_course_media_select($course_id) { + $medias = self::get_course_medias($course_id); + $media_list = array(); + $media_list[0] = get_lang('NoMedia'); + + if (!empty($medias)) { + foreach($medias as $media) { + $media_list[$media['id']] = empty($media['question']) ? get_lang('Untitled') : $media['question']; + } + } + return $media_list; + } } endif; diff --git a/main/exercice/question_admin.inc.php b/main/exercice/question_admin.inc.php index 0d6862af91..91a634adec 100644 --- a/main/exercice/question_admin.inc.php +++ b/main/exercice/question_admin.inc.php @@ -21,7 +21,7 @@ $course_id = api_get_course_int_id(); // INIT QUESTION if (isset($_GET['editQuestion'])) { - $objQuestion = Question::read ($_GET['editQuestion']); + $objQuestion = Question::read ($_GET['editQuestion']); $action = api_get_self()."?".api_get_cidreq()."&myid=1&modifyQuestion=".$modifyQuestion."&editQuestion=".$objQuestion->id; if (isset($exerciseId) && !empty($exerciseId)) { @@ -89,8 +89,7 @@ if (is_object($objQuestion)) { // TODO: maybe here is the better place to index this tool, including answers text // redirect - if ($objQuestion -> type != HOT_SPOT && $objQuestion -> type != HOT_SPOT_DELINEATION) { - + if ($objQuestion -> type != HOT_SPOT && $objQuestion -> type != HOT_SPOT_DELINEATION) { if(isset($_GET['editQuestion'])) { echo ''; } else {