From 44391c0bd986970e7865803dc6dc142f9e6f08c0 Mon Sep 17 00:00:00 2001 From: Julio Montoya Date: Fri, 31 May 2013 20:31:17 +0200 Subject: [PATCH 1/4] Improving edit question speed --- main/exercice/unique_answer.class.php | 61 ++++++++++++--------- main/exercice/unique_answer_image.class.php | 20 ------- 2 files changed, 34 insertions(+), 47 deletions(-) diff --git a/main/exercice/unique_answer.class.php b/main/exercice/unique_answer.class.php index 81cf31b53e..1ca5a4eab7 100644 --- a/main/exercice/unique_answer.class.php +++ b/main/exercice/unique_answer.class.php @@ -44,22 +44,16 @@ class UniqueAnswer extends Question */ public function createAnswersForm($form) { + // Getting the exercise list $obj_ex = $this->exercise; $editor_config = array('ToolbarSet' => 'TestProposedAnswer', 'Width' => '100%', 'Height' => '125'); //this line define how many question by default appear when creating a choice question - $nb_answers = isset($_POST['nb_answers']) ? (int)$_POST['nb_answers'] : 4; // The previous default value was 2. See task #1759. + // The previous default value was 2. See task #1759. + $nb_answers = isset($_POST['nb_answers']) ? (int)$_POST['nb_answers'] : 4; $nb_answers += (isset($_POST['lessAnswers']) ? -1 : (isset($_POST['moreAnswers']) ? 1 : 0)); - - /* - Types of Feedback - $feedback_option[0]=get_lang('Feedback'); - $feedback_option[1]=get_lang('DirectFeedback'); - $feedback_option[2]=get_lang('NoFeedback'); - */ - $feedback_title = ''; $comment_title = ''; @@ -73,6 +67,8 @@ class UniqueAnswer extends Question $feedback_title = ''.get_lang('Scenario').''; } + + $html = ''); if (isset($answer) && is_object($answer)) { @@ -223,6 +204,9 @@ class UniqueAnswer extends Question $form->addRule('answer['.$i.']', get_lang('ThisFieldIsRequired'), 'required'); if ($obj_ex->selectFeedbackType() == EXERCISE_FEEDBACK_TYPE_END) { + + + // feedback $form->addElement( 'html_editor', @@ -232,6 +216,29 @@ class UniqueAnswer extends Question $editor_config ); } elseif ($obj_ex->selectFeedbackType() == EXERCISE_FEEDBACK_TYPE_DIRECT) { + + // Feedback SELECT + + $question_list = $obj_ex->selectQuestionList(); + $select_question = array(); + $select_question[0] = get_lang('SelectTargetQuestion'); + // @todo improve this loop if you have 5000 questions it will blow! + if (is_array($question_list)) { + foreach ($question_list as $key => $questionid) { + //To avoid warning messages + if (!is_numeric($questionid)) { + continue; + } + $question = Question::read($questionid); + + if ($question) { + $select_question[$questionid] = 'Q'.$key.' :'.Text::cut($question->selectTitle(), 20); + } + } + } + + $select_question[-1] = get_lang('ExitTest'); + $form->addElement( 'html_editor', 'comment['.$i.']', diff --git a/main/exercice/unique_answer_image.class.php b/main/exercice/unique_answer_image.class.php index 18b961935d..05e68c54a5 100644 --- a/main/exercice/unique_answer_image.class.php +++ b/main/exercice/unique_answer_image.class.php @@ -97,26 +97,6 @@ class UniqueAnswerImage extends UniqueAnswer } $form->addElement('hidden', 'nb_answers'); - //Feedback SELECT - $question_list = $obj_ex->selectQuestionList(); - $select_question = array(); - $select_question[0] = get_lang('SelectTargetQuestion'); - - if (is_array($question_list)) { - foreach ($question_list as $key => $questionid) { - //To avoid warning messages - if (!is_numeric($questionid)) { - continue; - } - $question = Question::read($questionid); - - if ($question) { - $select_question[$questionid] = 'Q'.$key.' :'.Text::cut($question->selectTitle(), 20); - } - } - } - $select_question[-1] = get_lang('ExitTest'); - $list = new LearnpathList(api_get_user_id()); $flat_list = $list->get_flat_list(); $select_lp_id = array(); From 0a07bd106111eb44b7ddce3225a52801a30acbda Mon Sep 17 00:00:00 2001 From: Julio Montoya Date: Fri, 31 May 2013 20:40:16 +0200 Subject: [PATCH 2/4] Do not load the question list when editing a exercise (speed improvements) --- main/exercice/admin.php | 19 +++++-------------- 1 file changed, 5 insertions(+), 14 deletions(-) diff --git a/main/exercice/admin.php b/main/exercice/admin.php index 7066d4d326..87db8dc6cc 100644 --- a/main/exercice/admin.php +++ b/main/exercice/admin.php @@ -84,6 +84,8 @@ if ($_SERVER['REQUEST_METHOD'] == 'POST') { } } + + // get vars from GET if (empty($exerciseId)) { $exerciseId = isset($_GET['exerciseId'])?intval($_GET['exerciseId']):'0'; @@ -181,7 +183,7 @@ if (!is_object($objExercise)) { // creation of a new exercise if wrong or not specified exercise ID if ($exerciseId) { - $objExercise->read($exerciseId); + $objExercise->read($exerciseId, false); } // saves the object into the session Session::write('objExercise', $objExercise); @@ -194,8 +196,7 @@ if (!isset($fromExercise) or !$fromExercise) { $modifyExercise = 'yes'; } } - -$nbrQuestions = $objExercise->selectNbrQuestions(); +$nbrQuestions = $objExercise->getQuestionCount(); // Initializes the Question object if ($editQuestion || $newQuestion || $modifyQuestion || $modifyAnswers) { @@ -563,6 +564,7 @@ if ($inATest) { } } + if (isset($_GET['message'])) { if (in_array($_GET['message'], array('ExerciseStored', 'ItemUpdated', 'ItemAdded'))) { Display::display_confirmation_message(get_lang($_GET['message'])); @@ -581,17 +583,6 @@ if ($newQuestion || $editQuestion) { // Create/Edit question. require 'question_admin.inc.php'; } -/* -$q = new \Entity\CQuizQuestion(); -$q->setQuestion('test'); -$q->setCId(1); -$q->setPonderation(1); -$q->setPosition(1); -$q->setType(1); -$q->setLevel(1); -$q->setParentId(1); -$app['orm.em']->persist($q); -$app['orm.em']->flush();*/ if (isset($_GET['hotspotadmin'])) { if (!is_object($objQuestion)) { From 74a4b33d2d5e02cecbedb7309157308eb86f1d6f Mon Sep 17 00:00:00 2001 From: Julio Montoya Date: Fri, 31 May 2013 20:40:33 +0200 Subject: [PATCH 3/4] Minor - format code --- main/exercice/question.class.php | 8 ++++++++ main/exercice/question_admin.inc.php | 1 + 2 files changed, 9 insertions(+) diff --git a/main/exercice/question.class.php b/main/exercice/question.class.php index e06588a09b..0e67dd3a99 100644 --- a/main/exercice/question.class.php +++ b/main/exercice/question.class.php @@ -1457,6 +1457,7 @@ abstract class Question '; $form->addElement('html', $js); } + // question name $form->addElement('text', 'questionName', get_lang('Question'), array('class' => 'span6')); $form->addRule('questionName', get_lang('GiveQuestion'), 'required'); @@ -1485,6 +1486,7 @@ abstract class Question $form->addElement('hidden', 'myid', $my_id); if ($this->type != MEDIA_QUESTION) { + if ($this->exercise->fastExerciseEdition == false) { // Advanced parameters $form->addElement('advanced_settings', ''.get_lang('AdvancedParameters').''); @@ -1496,11 +1498,13 @@ abstract class Question $form->addElement('select', 'questionLevel', get_lang('Difficulty'), $select_level); // Media question. + $course_medias = Question::prepare_course_media_select(api_get_course_int_id()); $form->addElement('select', 'parent_id', get_lang('AttachToMedia'), $course_medias, array('id' => 'parent_id')); // Categories. $categoryJS = null; + if (!empty($this->category_list)) { $trigger = ''; foreach ($this->category_list as $category_id) { @@ -1523,6 +1527,8 @@ abstract class Question array('id' => 'category_id') ); + + // Extra fields. (Injecting question extra fields!) $extraFields = new ExtraField('question'); $extraFields->addElements($form, $this->id); @@ -1532,6 +1538,7 @@ abstract class Question } } + // @todo why we need this condition?? if ($this->setDefaultQuestionValues) { switch ($answerType) { @@ -1580,6 +1587,7 @@ abstract class Question if ($this->setDefaultValues) { $form->setDefaults($defaults); } + } /** diff --git a/main/exercice/question_admin.inc.php b/main/exercice/question_admin.inc.php index c67e471017..2e3e07b42d 100644 --- a/main/exercice/question_admin.inc.php +++ b/main/exercice/question_admin.inc.php @@ -59,6 +59,7 @@ if (is_object($objQuestion)) { $form->freeze(); } + // Form validation //$result = $objQuestion->allQuestionWithMediaHaveTheSameCategory($exerciseId, 100); From 69d6c42ca16c89ae8e4a64a8f5a2cd37c204efb6 Mon Sep 17 00:00:00 2001 From: Julio Montoya Date: Fri, 31 May 2013 20:46:39 +0200 Subject: [PATCH 4/4] Fixing wrong constant name --- main/exercice/exercise.class.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/main/exercice/exercise.class.php b/main/exercice/exercise.class.php index 0ce7ac3842..ab9c8633ba 100644 --- a/main/exercice/exercise.class.php +++ b/main/exercice/exercise.class.php @@ -1339,7 +1339,7 @@ class Exercise } else { // dont reduce the number of random question if we use random by category option, or if // random all questions - if ($this->isRandom() && $this->isRandomByCat() == EXERCISE_RANDOM_DISABLED) { + if ($this->isRandom() && $this->isRandomByCat() == EXERCISE_CATEGORY_RANDOM_DISABLED) { if (count($this->questionList) >= $this->random && $this->random > 0) { $this->random -= 1; $this->save();
@@ -102,27 +98,10 @@ class UniqueAnswer extends Question $nb_answers = $answer->nbrAnswers; } } - $form->addElement('hidden', 'nb_answers'); - // Feedback SELECT - $question_list = $obj_ex->selectQuestionList(); - $select_question = array(); - $select_question[0] = get_lang('SelectTargetQuestion'); + $form->addElement('hidden', 'nb_answers'); - if (is_array($question_list)) { - foreach ($question_list as $key => $questionid) { - //To avoid warning messages - if (!is_numeric($questionid)) { - continue; - } - $question = Question::read($questionid); - if ($question) { - $select_question[$questionid] = 'Q'.$key.' :'.Text::cut($question->selectTitle(), 20); - } - } - } - $select_question[-1] = get_lang('ExitTest'); $list = new LearnpathList(api_get_user_id()); $flat_list = $list->get_flat_list(); @@ -140,6 +119,8 @@ class UniqueAnswer extends Question Display::display_normal_message(get_lang('YouHaveToCreateAtLeastOneAnswer')); } + + for ($i = 1; $i <= $nb_answers; ++$i) { $form->addElement('html', '