From 4f03fd2fd35e7ff91c79b48075accccaf4e169e1 Mon Sep 17 00:00:00 2001 From: Julio Montoya Date: Tue, 8 Feb 2011 19:46:51 +0100 Subject: [PATCH] Partial fix when removing adding the new type of question \"Unique answer with unknown\" --- main/exercice/question.class.php | 2 - main/exercice/question_admin.inc.php | 15 +- main/exercice/question_list_admin.inc.php | 4 +- .../unique_answer_no_option.class.php | 219 ++++++++++-------- 4 files changed, 133 insertions(+), 107 deletions(-) diff --git a/main/exercice/question.class.php b/main/exercice/question.class.php index bf49e6d115..e0a62f9254 100755 --- a/main/exercice/question.class.php +++ b/main/exercice/question.class.php @@ -1121,12 +1121,10 @@ abstract class Question * @param Exercise $objExercise the Exercise instance */ function processCreation ($form, $objExercise) { - $this -> updateTitle($form->getSubmitValue('questionName')); $this -> updateDescription($form->getSubmitValue('questionDescription')); $this -> updateLevel($form->getSubmitValue('questionLevel')); $this -> save($objExercise -> id); - // 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 85226f3ea8..b792e7513e 100755 --- a/main/exercice/question_admin.inc.php +++ b/main/exercice/question_admin.inc.php @@ -22,7 +22,7 @@ if(!defined('ALLOWED_TO_INCLUDE')) { // INIT QUESTION if(isset($_GET['editQuestion'])) { $objQuestion = Question::read ($_GET['editQuestion']); - $action = api_get_self()."?".api_get_cidreq()."&modifyQuestion=".$modifyQuestion."&editQuestion=".$objQuestion->id; + $action = api_get_self()."?".api_get_cidreq()."&myid=1&modifyQuestion=".$modifyQuestion."&editQuestion=".$objQuestion->id; if (isset($exerciseId) && !empty($exerciseId)) { $TBL_LP_ITEM = Database::get_course_table(TABLE_LP_ITEM); @@ -33,7 +33,6 @@ if(isset($_GET['editQuestion'])) { //Display::display_warning_message(get_lang('EditingScoreCauseProblemsToExercisesInLP')); } } - } else { $objQuestion = Question :: getInstance($_REQUEST['answerType']); $action = api_get_self()."?".api_get_cidreq()."&modifyQuestion=".$modifyQuestion."&newQuestion=".$newQuestion; @@ -60,12 +59,12 @@ if(is_object($objQuestion)) { // form title $form->addElement('header', '', $text.': '.$form_title_extra); - + // question form elements - $objQuestion -> createForm ($form,array('Height'=>150)); + $objQuestion->createForm ($form,array('Height'=>150)); // answer form elements - $objQuestion -> createAnswersForm ($form); + $objQuestion->createAnswersForm ($form); // this variable $show_quiz_edition comes from admin.php blocks the exercise/quiz modifications if (!$show_quiz_edition) { @@ -79,13 +78,13 @@ if(is_object($objQuestion)) { //$renderer->setElementTemplate('
{label}
{element}
','submitQuestion'); // FORM VALIDATION - if(isset($_POST['submitQuestion']) && $form->validate()) { + if (isset($_POST['submitQuestion']) && $form->validate()) { // question - $objQuestion -> processCreation($form,$objExercise); + $objQuestion->processCreation($form,$objExercise); // answers - $objQuestion -> processAnswersCreation($form,$nb_answers); + $objQuestion->processAnswersCreation($form,$nb_answers); // TODO: maybe here is the better place to index this tool, including answers text diff --git a/main/exercice/question_list_admin.inc.php b/main/exercice/question_list_admin.inc.php index 5fbefb61e8..72d8e5894b 100755 --- a/main/exercice/question_list_admin.inc.php +++ b/main/exercice/question_list_admin.inc.php @@ -163,6 +163,8 @@ Question :: display_type_menu ($objExercise->feedbacktype); echo '
'; echo '
'; $token = Security::get_token(); +//deletes a session when using don't know question type (ugly fix) +unset($_SESSION['less_answer']); if ($nbrQuestions) { $my_exercise = new Exercise(); @@ -237,4 +239,4 @@ if(!$i) { - + \ No newline at end of file diff --git a/main/exercice/unique_answer_no_option.class.php b/main/exercice/unique_answer_no_option.class.php index 48848c42ec..8360893b76 100755 --- a/main/exercice/unique_answer_no_option.class.php +++ b/main/exercice/unique_answer_no_option.class.php @@ -48,9 +48,8 @@ class UniqueAnswerNoOption extends Question { $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'] : 3; // The previous default value was 2. See task #1759. - $nb_answers += (isset($_POST['lessAnswers']) ? -1 : (isset($_POST['moreAnswers']) ? 1 : 0)); - + $nb_answers = isset($_POST['nb_answers']) ? (int) $_POST['nb_answers'] : 3; // The previous default value was 2. See task #1759. + $nb_answers += (isset($_POST['lessAnswers']) ? -1 : (isset($_POST['moreAnswers']) ? 1 : 0)); /* Types of Feedback @@ -65,7 +64,7 @@ class UniqueAnswerNoOption extends Question { if ($obj_ex->selectFeedbackType()==0) { $comment_title = ''.get_lang('Comment').''; } elseif ($obj_ex->selectFeedbackType()==1) { - $editor_config['Width'] = '250'; + $editor_config['Width'] = '250'; $editor_config['Height'] = '110'; $comment_title = ''.get_lang('Comment').''; $feedback_title = ''.get_lang('Scenario').''; @@ -99,14 +98,15 @@ class UniqueAnswerNoOption extends Question { $defaults = array(); $correct = 0; - if(!empty($this -> id)) { + + if (!empty($this -> id)) { $answer = new Answer($this -> id); $answer -> read(); - if(count($answer->nbrAnswers)>0 && !$form->isSubmitted()) { - $nb_answers = $answer->nbrAnswers; + if (count($answer->nbrAnswers)>0 && !$form->isSubmitted()) { + $nb_answers = $answer->nbrAnswers; } } - $form -> addElement('hidden', 'nb_answers'); + //Feedback SELECT //Not needed right now @@ -138,50 +138,79 @@ class UniqueAnswerNoOption extends Question { }*/ $temp_scenario = array(); - + if ($nb_answers < 1) { $nb_answers = 1; Display::display_normal_message(get_lang('YouHaveToCreateAtLeastOneAnswer')); - } - - for($i = 1 ; $i <= $nb_answers ; ++$i) { - $form -> addElement ('html', ''); - if (is_object($answer)) { - if ($answer -> correct[$i]) { - $correct = $i; - } - $answer_result = $answer -> answer[$i]; - $weight_result = float_format($answer -> weighting[$i], 1); - if ($nb_answers == $i) { - $weight_result = '0'; + } + if ($_GET['editQuestion']) { + + //fixing $nb_answers + $new_list = array(); + $count = 1; + if (isset($_POST['lessAnswers'])) { + if (!isset($_SESSION['less_answer'])) { + $_SESSION['less_answer'] = $this -> id; + $nb_answers--; } - - $defaults['answer['.$i.']'] = $answer_result; - $defaults['comment['.$i.']'] = $answer -> comment[$i]; - $defaults['weighting['.$i.']'] = $weight_result; - - $item_list=explode('@@',$answer -> destination[$i]); - - $try = $item_list[0]; - $lp = $item_list[1]; - $list_dest = $item_list[2]; - $url = $item_list[3]; - - if ($try==0) - $try_result=0; - else - $try_result=1; - - if ($url==0) - $url_result=''; - else - $url_result=$url; - - $temp_scenario['url'.$i] = $url_result; - $temp_scenario['try'.$i] = $try_result; - $temp_scenario['lp'.$i] = $lp; - $temp_scenario['destination'.$i]= $list_dest; - + } + for ($k = 1 ; $k <= $nb_answers; ++$k) { + if ($answer->position[$k] != '666') { + $new_list[$count] = $count; + $count++; + } + } + } else { + for ($k = 1 ; $k <= $nb_answers; ++$k) { + $new_list[$k] = $k; + } + } + + $i = 1; + //for ($k = 1 ; $k <= $real_nb_answers; $k++) { + foreach ($new_list as $key) { + $i = $key; + $form -> addElement ('html', ''); + + if (is_object($answer)) { + if($answer->position[$i] == 666) { + //we set nothing + } else { + if ($answer->correct[$i]) { + $correct = $i; + } + $answer_result = $answer->answer[$i]; + $weight_result = float_format($answer->weighting[$i], 1); + if ($nb_answers == $i) { + $weight_result = '0'; + } + + $defaults['answer['.$i.']'] = $answer_result; + $defaults['comment['.$i.']'] = $answer->comment[$i]; + $defaults['weighting['.$i.']'] = $weight_result; + + $item_list=explode('@@',$answer -> destination[$i]); + + $try = $item_list[0]; + $lp = $item_list[1]; + $list_dest = $item_list[2]; + $url = $item_list[3]; + + if ($try==0) + $try_result=0; + else + $try_result=1; + + if ($url==0) + $url_result=''; + else + $url_result=$url; + + $temp_scenario['url'.$i] = $url_result; + $temp_scenario['try'.$i] = $try_result; + $temp_scenario['lp'.$i] = $lp; + $temp_scenario['destination'.$i]= $list_dest; + } /*$pre_list_destination=explode(';',$list_dest); $list_destination=array(); @@ -192,37 +221,20 @@ class UniqueAnswerNoOption extends Question { $defaults['destination'.$i]=$list_destination; */ //$defaults['destination'.$i] = $list_destination; - } else { - - /* if ($nb_answers == $i) { - $defaults['answer['.$i.']'] = get_lang('DontKnow'); - $defaults['weighting['.$i.']'] = 0; - - $temp_scenario['destination'.$i] = array('0'); - $temp_scenario['lp'.$i] = array('0'); - - } else { - - - $temp_scenario['destination'.$i] = array('0'); - $temp_scenario['lp'.$i] = array('0'); - //$defaults['scenario'] - }*/ } - - - - + $defaults['scenario']=$temp_scenario; $renderer = & $form->defaultRenderer(); $renderer->setElementTemplate('{error}
{element}'); $renderer->setElementTemplate('{error}
{element}','html'); $answer_number=$form->addElement('text', null,null,'value="'.$i.'"'); $answer_number->freeze(); - + + // $form->addElement('hidden', 'position['.$i.']', $answer->position[$i]); + $form->addElement('radio', 'correct', null, null, $i, 'class="checkbox" style="margin-left: 0em;"'); $form->addElement('html_editor', 'answer['.$i.']', null, 'style="vertical-align:middle"', $editor_config); - $form->addRule('answer['.$i.']', get_lang('ThisFieldIsRequired'), 'required'); + //$form->addRule('answer['.$i.']', get_lang('ThisFieldIsRequired'), 'required'); if ($obj_ex->selectFeedbackType() == EXERCISE_FEEDBACK_TYPE_END) { // feedback @@ -245,27 +257,35 @@ class UniqueAnswerNoOption extends Question { //$form->addElement('select', 'destination'.$i, get_lang('SelectQuestion').' : ',$select_question,'multiple'); $form->addElement('text', 'weighting['.$i.']', null, 'style="vertical-align:middle;margin-left: 0em;" size="5" value="0"'); - $form->addElement('html', ''); + $form->addElement('html', ''); + + $i++; + } + + + if (empty($this -> id)) { + $form->addElement('hidden', 'new_question', 1); } - //Adding the "I don't know" question answer - if(empty($this -> id)) { + //if (empty($this -> id)) { $i = 666; $form -> addElement ('html', ''); $defaults['answer['.$i.']'] = get_lang('DontKnow'); - $defaults['weighting['.$i.']'] = 0; - + $defaults['weighting['.$i.']'] = 0; $defaults['scenario']=$temp_scenario; $renderer = & $form->defaultRenderer(); $renderer->setElementTemplate('{error}
{element}'); $renderer->setElementTemplate('{error}
{element}','html'); $answer_number=$form->addElement('text', null,null,'value="-"'); $answer_number->freeze(); + + $form->addElement('hidden', 'position['.$i.']', '666'); $form->addElement('radio', 'correct', null, null, $i, 'class="checkbox" style="margin-left: 0em;"'); - $form->addElement('html_editor', 'answer['.$i.']', null, 'style="vertical-align:middle"', $editor_config); + $form->addElement('html_editor', 'answer['.$i.']', null, 'style="vertical-align:middle"', $editor_config); + $form->addRule('answer['.$i.']', get_lang('ThisFieldIsRequired'), 'required'); @@ -291,7 +311,7 @@ class UniqueAnswerNoOption extends Question { $form->addElement('text', 'weighting['.$i.']', null, 'style="vertical-align:middle;margin-left: 0em;" size="5" value="0" readonly="readonly" '); $form->addElement ('html', ''); - } + //} $form -> addElement ('html', ''); @@ -328,16 +348,19 @@ class UniqueAnswerNoOption extends Question { if (!empty($this -> id)) { $form -> setDefaults($defaults); } else { - //if ($this -> isContent == 1) { - $form -> setDefaults($defaults); - //} - } - $form->setConstants(array('nb_answers' => $nb_answers)); + $form -> setDefaults($defaults); + } + + $form->addElement('hidden', 'nb_answers'); + + + $form->setConstants(array('nb_answers' => $nb_answers)); + } /** - * abstract function which creates the form to create / edit the answers of the question + * Function which creates the form to create / edit the answers of the question * @param the formvalidator instance * @param the answers number to display */ @@ -347,23 +370,28 @@ class UniqueAnswerNoOption extends Question { $correct = $form -> getSubmitValue('correct'); $objAnswer = new Answer($this->id); $nb_answers = $form -> getSubmitValue('nb_answers'); - - - for ($i=1 ; $i <= $nb_answers ; $i++) { + $minus = 1; + if ($form -> getSubmitValue('new_question')) { + $minus = 0; + } + + for ($i=1 ; $i <= $nb_answers - $minus; $i++) { + $position = trim($form -> getSubmitValue('position['.$i.']')); $answer = trim($form -> getSubmitValue('answer['.$i.']')); $comment = trim($form -> getSubmitValue('comment['.$i.']')); $weighting = trim($form -> getSubmitValue('weighting['.$i.']')); - - $scenario= $form -> getSubmitValue('scenario'); - + $scenario = $form -> getSubmitValue('scenario'); + + +// //$list_destination = $form -> getSubmitValue('destination'.$i); //$destination_str = $form -> getSubmitValue('destination'.$i); - $try = $scenario['try'.$i]; - $lp= $scenario['lp'.$i]; - $destination = $scenario['destination'.$i]; - $url = trim($scenario['url'.$i]); + $try = $scenario['try'.$i]; + $lp = $scenario['lp'.$i]; + $destination = $scenario['destination'.$i]; + $url = trim($scenario['url'.$i]); /* How we are going to parse the destination value @@ -387,7 +415,7 @@ class UniqueAnswerNoOption extends Question { $goodAnswer= ($correct == $i) ? true : false; - if($goodAnswer) { + if ($goodAnswer) { $nbrGoodAnswers++; $weighting = abs($weighting); if($weighting > 0) { @@ -434,5 +462,4 @@ class UniqueAnswerNoOption extends Question { } } -endif; -?> +endif; \ No newline at end of file