From fd041dd92798ba4cb0cffe732daa69a8e20c8a17 Mon Sep 17 00:00:00 2001 From: Julio Montoya Date: Mon, 19 Aug 2013 11:53:06 +0200 Subject: [PATCH] Partial merge with mine --- main/exercice/answer.class.php | 2 +- main/exercice/exercise.class.php | 924 +++++++++++++++++++++- main/exercice/question_list_admin.inc.php | 2 +- main/exercice/testcategory.class.php | 5 +- 4 files changed, 909 insertions(+), 24 deletions(-) diff --git a/main/exercice/answer.class.php b/main/exercice/answer.class.php index f655b5739c..0bdda2df01 100644 --- a/main/exercice/answer.class.php +++ b/main/exercice/answer.class.php @@ -106,7 +106,7 @@ class Answer } /** - * Reads answer informations from the data base + * Reads answer from the data base * * @author - Olivier Brouckaert */ diff --git a/main/exercice/exercise.class.php b/main/exercice/exercise.class.php index a96a5df88b..7300c650d4 100644 --- a/main/exercice/exercise.class.php +++ b/main/exercice/exercise.class.php @@ -1650,7 +1650,8 @@ class Exercise ); if (api_get_setting('enable_quiz_scenario') == 'true') { - //Can't convert a question from one feedback to another if there is more than 1 question already added + /* Can't convert a question from one feedback to another if there + is more than 1 question already added */ if ($this->selectNbrQuestions() == 0) { $radios_feedback[] = $form->createElement( 'radio', @@ -1706,7 +1707,6 @@ class Exercise '2', array('id' => 'result_disabled_2', 'onclick' => 'check_results_disabled()') ); - //$radios_results_disabled[] = $form->createElement('radio', 'results_disabled', null, get_lang('ExamModeWithFinalScoreShowOnlyFinalScoreWithCategoriesIfAvailable'), '3', array('id'=>'result_disabled_3','onclick' => 'check_results_disabled()')); $form->addGroup($radios_results_disabled, null, get_lang('ShowResultsToStudents'), ''); } else { @@ -1903,12 +1903,6 @@ class Exercise array('id' => 'randomQuestions') ); - // Random answers. - $radios_random_answers = array( - $form->createElement('radio', 'randomAnswers', null, get_lang('Yes'), '1'), - $form->createElement('radio', 'randomAnswers', null, get_lang('No'), '0') - ); - $form->addGroup($radios_random_answers, null, get_lang('RandomAnswers'), ''); $form->addElement('html', ''); @@ -1921,16 +1915,6 @@ class Exercise $form->addElement('html', ''); - // Random by category. - /* - $form->addElement('html', '
 
'); - $radiocat = array( - $form->createElement('radio', 'randomByCat', null, get_lang('YesWithCategoriesShuffled'), '1'), - $form->createElement('radio', 'randomByCat', null, get_lang('YesWithCategoriesSorted'), '2'), - $form->createElement('radio', 'randomByCat', null, get_lang('No'), '0') - ); - $form->addGroup($radiocat, null, get_lang('RandomQuestionByCategory'), ''); - $form->addElement('html', '
 
');*/ // Category name. $radio_display_cat_name = array( @@ -1939,8 +1923,14 @@ class Exercise ); $form->addGroup($radio_display_cat_name, null, get_lang('QuestionDisplayCategoryName'), ''); - // Hide question title + // Random answers. + $radios_random_answers = array( + $form->createElement('radio', 'randomAnswers', null, get_lang('Yes'), '1'), + $form->createElement('radio', 'randomAnswers', null, get_lang('No'), '0') + ); + $form->addGroup($radios_random_answers, null, get_lang('RandomAnswers'), ''); + // Hide question title. $group = array( $form->createElement('radio', 'hide_question_title', null, get_lang('Yes'), '1'), $form->createElement('radio', 'hide_question_title', null, get_lang('No'), '0') @@ -6368,7 +6358,7 @@ class Exercise // Shows the question + possible answers $showTitle = $this->getHideQuestionTitle() == 1 ? false : true; - echo ExerciseLib::showQuestion($question_obj, false, $origin, $i, $showTitle, false, $user_choice, false, null, false, $this->getModelType(), $this->categoryMinusOne); + echo $this->showQuestion($question_obj, false, $origin, $i, $showTitle, false, $user_choice, false, null, false, $this->getModelType(), $this->categoryMinusOne); // Button save and continue switch ($this->type) { @@ -6756,7 +6746,901 @@ class Exercise $categoriesInExercise = Database::store_result($result, 'ASSOC'); } return $categoriesInExercise; + } + + /** + * Shows a question + * @param Question $objQuestionTmp + * @param bool $only_questions if true only show the questions, no exercise title + * @param bool $origin origin i.e = learnpath + * @param string $current_item current item from the list of questions + * @param bool $show_title + * @param bool $freeze + * @param array $user_choice + * @param bool $show_comment + * @param null $exercise_feedback + * @param bool $show_answers + * @param null $modelType + * @param bool $categoryMinusOne + * @return bool|null|string + */ + public function showQuestion( + Question $objQuestionTmp, + $only_questions = false, + $origin = false, + $current_item = '', + $show_title = true, + $freeze = false, + $user_choice = array(), + $show_comment = false, + $exercise_feedback = null, + $show_answers = false, + $modelType = null, + $categoryMinusOne = true + ) { + // Text direction for the current language + //$is_ltr_text_direction = api_get_text_direction() != 'rtl'; + // Change false to true in the following line to enable answer hinting + $debug_mark_answer = $show_answers; //api_is_allowed_to_edit() && false; + // Reads question information + if (!$objQuestionTmp) { + // Question not found + return false; + } + + $html = null; + + $questionId = $objQuestionTmp->id; + + if ($exercise_feedback != EXERCISE_FEEDBACK_TYPE_END) { + $show_comment = false; + } + + $answerType = $objQuestionTmp->selectType(); + $pictureName = $objQuestionTmp->selectPicture(); + + $s = null; + $form = new FormValidator('question'); + $renderer = $form->defaultRenderer(); + $form_template = '{content}'; + $renderer->setFormTemplate($form_template); + + if ($answerType != HOT_SPOT && $answerType != HOT_SPOT_DELINEATION) { + // Question is not a hotspot + if (!$only_questions) { + $questionDescription = $objQuestionTmp->selectDescription(); + if ($show_title) { + $categoryName = Testcategory::getCategoryNamesForQuestion($objQuestionTmp->id, null, true, $categoryMinusOne); + $html .= $categoryName; + $html .= Display::div($current_item.'. '.$objQuestionTmp->selectTitle(), array('class' => 'question_title')); + if (!empty($questionDescription)) { + $html .= Display::div($questionDescription, array('class' => 'question_description')); + } + } else { + $html .= '
'; + $html .= '
'; + $html .= '
'; + $html .= Display::div($current_item, array('class' => 'question_no_title')); + $html .= '
'; + $html .= '
'; + $html .= '
'; + if (!empty($questionDescription)) { + $html .= Display::div($questionDescription, array('class' => 'question_description')); + } + $html .= '
'; + $html .= '
'; + } + } + + if (in_array($answerType, array(FREE_ANSWER, ORAL_EXPRESSION)) && $freeze) { + return null; + } + + $html .= '
'; + // construction of the Answer object (also gets all answers details) + $objAnswerTmp = new Answer($questionId, null, $this); + + $nbrAnswers = $objAnswerTmp->selectNbrAnswers(); + $course_id = api_get_course_int_id(); + $quiz_question_options = Question::readQuestionOption($questionId, $course_id); + + // For "matching" type here, we need something a little bit special + // because the match between the suggestions and the answers cannot be + // done easily (suggestions and answers are in the same table), so we + // have to go through answers first (elems with "correct" value to 0). + $select_items = array(); + //This will contain the number of answers on the left side. We call them + // suggestions here, for the sake of comprehensions, while the ones + // on the right side are called answers + $num_suggestions = 0; + + if ($answerType == MATCHING || $answerType == DRAGGABLE) { + if ($answerType == DRAGGABLE) { + $s .= '
+
    '; + } else { + $s .= '
    '; + $s .= ''; + } + + $j = 1; //iterate through answers + $letter = 'A'; //mark letters for each answer + $answer_matching = array(); + $capital_letter = array(); + //for ($answerId=1; $answerId <= $nbrAnswers; $answerId++) { + foreach ($objAnswerTmp->answer as $answerId => $answer_item) { + $answerCorrect = $objAnswerTmp->isCorrect($answerId); + $answer = $objAnswerTmp->selectAnswer($answerId); + if ($answerCorrect == 0) { + // options (A, B, C, ...) that will be put into the list-box + // have the "correct" field set to 0 because they are answer + $capital_letter[$j] = $letter; + //$answer_matching[$j]=$objAnswerTmp->selectAnswerByAutoId($numAnswer); + $answer_matching[$j] = array('id' => $answerId, 'answer' => $answer); + $j++; + $letter++; + } + } + + $i = 1; + + $select_items[0]['id'] = 0; + $select_items[0]['letter'] = '--'; + $select_items[0]['answer'] = ''; + + foreach ($answer_matching as $id => $value) { + $select_items[$i]['id'] = $value['id']; + $select_items[$i]['letter'] = $capital_letter[$id]; + $select_items[$i]['answer'] = $value['answer']; + $i++; + } + $num_suggestions = ($nbrAnswers - $j) + 1; + } elseif ($answerType == FREE_ANSWER) { + $content = isset($user_choice[0]) && !empty($user_choice[0]['answer']) ? $user_choice[0]['answer'] : null; + $toolBar = 'TestFreeAnswer'; + if ($modelType == EXERCISE_MODEL_TYPE_COMMITTEE) { + $toolBar = 'TestFreeAnswerStrict'; + } + $form->addElement('html_editor', "choice[".$questionId."]", null, array('id' => "choice[".$questionId."]"), array('ToolbarSet' => $toolBar)); + $form->setDefaults(array("choice[".$questionId."]" => $content)); + $s .= $form->return_form(); + } elseif ($answerType == ORAL_EXPRESSION) { + // Add nanogong + if (api_get_setting('enable_nanogong') == 'true') { + + //@todo pass this as a parameter + global $exercise_stat_info, $exerciseId; + + if (!empty($exercise_stat_info)) { + $params = array( + 'exercise_id' => $exercise_stat_info['exe_exo_id'], + 'exe_id' => $exercise_stat_info['exe_id'], + 'question_id' => $questionId + ); + } else { + $params = array( + 'exercise_id' => $exerciseId, + 'exe_id' => 'temp_exe', + 'question_id' => $questionId + ); + } + + $nano = new Nanogong($params); + $s .= $nano->show_button(); + } + + $form->addElement('html_editor', "choice[".$questionId."]", null, array('id' => "choice[".$questionId."]"), array('ToolbarSet' => 'TestFreeAnswer')); + //$form->setDefaults(array("choice[".$questionId."]" => $content)); + $s .= $form->return_form(); + } + + // Now navigate through the possible answers, using the max number of + // answers for the question as a limiter + $lines_count = 1; // a counter for matching-type answers + + if ($answerType == MULTIPLE_ANSWER_TRUE_FALSE || $answerType == MULTIPLE_ANSWER_COMBINATION_TRUE_FALSE) { + $header = Display::tag('th', get_lang('Options')); + foreach ($objQuestionTmp->options as $item) { + $header .= Display::tag('th', $item); + } + if ($show_comment) { + $header .= Display::tag('th', get_lang('Feedback')); + } + $s .= '
    '; + $s .= Display::tag('tr', $header, array('style' => 'text-align:left;')); + } + + if ($show_comment) { + if (in_array($answerType, array(MULTIPLE_ANSWER, MULTIPLE_ANSWER_COMBINATION, UNIQUE_ANSWER, UNIQUE_ANSWER_NO_OPTION, GLOBAL_MULTIPLE_ANSWER))) { + $header = Display::tag('th', get_lang('Options')); + if ($exercise_feedback == EXERCISE_FEEDBACK_TYPE_END) { + $header .= Display::tag('th', get_lang('Feedback')); + } + $s .= '
    '; + $s.= Display::tag('tr', $header, array('style' => 'text-align:left;')); + } + } + + $matching_correct_answer = 0; + $user_choice_array = array(); + if (!empty($user_choice)) { + foreach ($user_choice as $item) { + $user_choice_array[] = $item['answer']; + } + } + + foreach ($objAnswerTmp->answer as $answerId => $answer_item) { + $answer = $objAnswerTmp->selectAnswer($answerId); + $answerCorrect = $objAnswerTmp->isCorrect($answerId); + $comment = $objAnswerTmp->selectComment($answerId); + + //$numAnswer = $objAnswerTmp->selectAutoId($answerId); + $numAnswer = $answerId; + + $attributes = array(); + // Unique answer + if (in_array($answerType, array(UNIQUE_ANSWER, UNIQUE_ANSWER_IMAGE, UNIQUE_ANSWER_NO_OPTION))) { + + $input_id = 'choice-'.$questionId.'-'.$answerId; + if (isset($user_choice[0]['answer']) && $user_choice[0]['answer'] == $numAnswer) { + $attributes = array('id' => $input_id, 'checked' => 1, 'selected' => 1); + } else { + $attributes = array('id' => $input_id); + } + + if ($debug_mark_answer) { + if ($answerCorrect) { + $attributes['checked'] = 1; + $attributes['selected'] = 1; + } + } + + $answer = Security::remove_XSS($answer); + $s .= Display::input('hidden', 'choice2['.$questionId.']', '0'); + + $answer_input = null; + if ($answerType == UNIQUE_ANSWER_IMAGE) { + $attributes['style'] = 'display:none'; + $answer_input .= '
    '; + } + + $answer_input .= ''; + + if ($answerType == UNIQUE_ANSWER_IMAGE) { + $answer_input .= "
    "; + } + + if ($show_comment) { + $s .= ''; + $s .= ''; + $s .= ''; + } else { + $s .= $answer_input; + } + + } elseif (in_array($answerType, array(MULTIPLE_ANSWER, MULTIPLE_ANSWER_TRUE_FALSE, GLOBAL_MULTIPLE_ANSWER))) { + $input_id = 'choice-'.$questionId.'-'.$answerId; + $answer = Security::remove_XSS($answer); + + if (in_array($numAnswer, $user_choice_array)) { + $attributes = array('id' => $input_id, 'checked' => 1, 'selected' => 1); + } else { + $attributes = array('id' => $input_id); + } + + if ($debug_mark_answer) { + if ($answerCorrect) { + $attributes['checked'] = 1; + $attributes['selected'] = 1; + } + } + + if ($answerType == MULTIPLE_ANSWER || $answerType == GLOBAL_MULTIPLE_ANSWER) { + $s .= ''; + + $answer_input = ''; + + if ($show_comment) { + $s .= ''; + $s .= ''; + $s .=''; + } else { + $s .= $answer_input; + } + } elseif ($answerType == MULTIPLE_ANSWER_TRUE_FALSE) { + + $my_choice = array(); + if (!empty($user_choice_array)) { + foreach ($user_choice_array as $item) { + $item = explode(':', $item); + $my_choice[$item[0]] = $item[1]; + } + } + + $s .=''; + $s .= Display::tag('td', $answer); + + if (!empty($quiz_question_options)) { + foreach ($quiz_question_options as $id => $item) { + $id = $item['iid']; + if (isset($my_choice[$numAnswer]) && $id == $my_choice[$numAnswer]) { + $attributes = array('checked' => 1, 'selected' => 1); + } else { + $attributes = array(); + } + + if ($debug_mark_answer) { + if ($id == $answerCorrect) { + $attributes['checked'] = 1; + $attributes['selected'] = 1; + } + } + $s .= Display::tag('td', Display::input('radio', 'choice['.$questionId.']['.$numAnswer.']', $id, $attributes), array('style' => '')); + } + } + + if ($show_comment) { + $s .= ''; + } + $s.=''; + } + + } elseif ($answerType == MULTIPLE_ANSWER_COMBINATION) { + + // multiple answers + $input_id = 'choice-'.$questionId.'-'.$answerId; + + if (in_array($numAnswer, $user_choice_array)) { + $attributes = array('id' => $input_id, 'checked' => 1, 'selected' => 1); + } else { + $attributes = array('id' => $input_id); + } + + if ($debug_mark_answer) { + if ($answerCorrect) { + $attributes['checked'] = 1; + $attributes['selected'] = 1; + } + } + + $answer = Security::remove_XSS($answer); + $answer_input = ''; + $answer_input .= ''; + + if ($show_comment) { + $s.= ''; + $s .= ''; + $s .= ''; + $s.= ''; + } else { + $s.= $answer_input; + } + } elseif ($answerType == MULTIPLE_ANSWER_COMBINATION_TRUE_FALSE) { + $s .= ''; + + $my_choice = array(); + if (!empty($user_choice_array)) { + foreach ($user_choice_array as $item) { + $item = explode(':', $item); + $my_choice[$item[0]] = $item[1]; + } + } + $answer = Security::remove_XSS($answer); + $s .=''; + $s .= Display::tag('td', $answer); + + foreach ($objQuestionTmp->options as $key => $item) { + if (isset($my_choice[$numAnswer]) && $key == $my_choice[$numAnswer]) { + $attributes = array('checked' => 1, 'selected' => 1); + } else { + $attributes = array(); + } + + if ($debug_mark_answer) { + if ($key == $answerCorrect) { + $attributes['checked'] = 1; + $attributes['selected'] = 1; + } + } + $s .= Display::tag('td', Display::input('radio', 'choice['.$questionId.']['.$numAnswer.']', $key, $attributes)); + } + + if ($show_comment) { + $s .= ''; + } + $s.=''; + } elseif ($answerType == FILL_IN_BLANKS) { + list($answer) = explode('::', $answer); + + //Correct answer + api_preg_match_all('/\[[^]]+\]/', $answer, $correct_answer_list); + + //Student's answezr + if (isset($user_choice[0]['answer'])) { + api_preg_match_all('/\[[^]]+\]/', $user_choice[0]['answer'], $student_answer_list); + $student_answer_list = $student_answer_list[0]; + } + + //If debug + if ($debug_mark_answer) { + $student_answer_list = $correct_answer_list[0]; + } + + if (!empty($correct_answer_list) && !empty($student_answer_list)) { + $correct_answer_list = $correct_answer_list[0]; + $i = 0; + foreach ($correct_answer_list as $correct_item) { + $value = null; + if (isset($student_answer_list[$i]) && !empty($student_answer_list[$i])) { + + //Cleaning student answer list + $value = strip_tags($student_answer_list[$i]); + $value = api_substr($value, 1, api_strlen($value) - 2); + $value = explode('/', $value); + if (!empty($value[0])) { + $value = str_replace(' ', '', trim($value[0])); + } + $correct_item = preg_quote($correct_item); + $correct_item = api_preg_replace('|/|', '\/', $correct_item); // to prevent error if there is a / in the text to find + $answer = api_preg_replace('/'.$correct_item.'/', Display::input('text', "choice[$questionId][]", $value), $answer, 1); + } + $i++; + } + } else { + $answer = api_preg_replace('/\[[^]]+\]/', Display::input('text', "choice[$questionId][]", '', $attributes), $answer); + } + $s .= $answer; + } elseif ($answerType == MATCHING) { + // matching type, showing suggestions and answers + // TODO: replace $answerId by $numAnswer + + if ($lines_count == 1) { + $s .= $objAnswerTmp->getJs(); + } + if ($answerCorrect != 0) { + // only show elements to be answered (not the contents of + // the select boxes, who are correct = 0) + $s .= ''; + + // middle part (matches selects) + + $s .= ''; + + $s.=''; + $s .= ''; + $lines_count++; + //if the left side of the "matching" has been completely + // shown but the right side still has values to show... + if (($lines_count - 1) == $num_suggestions) { + // if it remains answers to shown at the right side + while (isset($select_items[$lines_count])) { + $s .= ' + + + "; + $lines_count++; + } // end while() + } // end if() + $matching_correct_answer++; + } + } elseif ($answerType == DRAGGABLE) { + // matching type, showing suggestions and answers + // TODO: replace $answerId by $numAnswer + + if ($answerCorrect != 0) { + // only show elements to be answered (not the contents of + // the select boxes, who are correct = 0) + $s .= '
    '; + $s .= $answer_input; + $s .= ''; + $s .= $comment; + $s .= '
    '; + $s .= $answer_input; + $s .= ''; + $s .= $comment; + $s .= '
    '; + $s .= $comment; + $s .= '
    '; + $s.= $answer_input; + $s .= ''; + $s .= $comment; + $s .= '
    '; + $s .= $comment; + $s .= '
    '; + $parsed_answer = $answer; + $windowId = $questionId.'_'.$lines_count; + //left part questions + $s .= '
    + '.$lines_count.'. '.$parsed_answer.' +
    +
      '; + $s .= '
    '; + + $s .= '
    '; + + if (isset($select_items[$lines_count])) { + $s.= '
    + '.$select_items[$lines_count]['letter'].'. '.$select_items[$lines_count]['answer'].' +
    '; + } else { + $s.=' '; + } + + $s .= '
    '; + $s.=''.$select_items[$lines_count]['letter'].'.'; + $s .= $select_items[$lines_count]['answer']; + $s.="
    '; + $parsed_answer = $answer; + $windowId = $questionId.'_'.$numAnswer; //67_293 - 67_294 + + //left part questions + $s .= '
  • '; + $s .= '
    + '.$parsed_answer.' +
    '; + + $s .= '
    '; + $s .= ''; + + if (!empty($answerCorrect) && !empty($selectedValue)) { + $s.= ''; + } + + + if (isset($select_items[$lines_count])) { + $s.= '
    + '.$select_items[$lines_count]['letter'].'. '.$select_items[$lines_count]['answer'].' +
    '; + } else { + $s.=' '; + } + $lines_count++; + //if the left side of the "matching" has been completely + // shown but the right side still has values to show... + + if (($lines_count - 1) == $num_suggestions) { + // if it remains answers to shown at the right side + while (isset($select_items[$lines_count])) { + $s.=''.$select_items[$lines_count]['letter'].'.'; + $s .= $select_items[$lines_count]['answer']; + $lines_count++; + } + } + $s .= '
    '; + $matching_correct_answer++; + $s .= '
  • '; + } + } + } // end for() + + if ($show_comment) { + $s .= '
    '; + } else { + if ($answerType == MATCHING || $answerType == UNIQUE_ANSWER_NO_OPTION || $answerType == MULTIPLE_ANSWER_TRUE_FALSE || + $answerType == MULTIPLE_ANSWER_COMBINATION_TRUE_FALSE) { + $s .= ''; + } + } + + if ($answerType == DRAGGABLE) { + $s .= '
'; + + $counterAnswer = 1; + foreach ($objAnswerTmp->answer as $answerId => $answer_item) { + $answerCorrect = $objAnswerTmp->isCorrect($answerId); + $windowId = $questionId.'_'.$counterAnswer; + if ($answerCorrect == 0) { + $s .= '
'.$counterAnswer.'
'; + $counterAnswer++; + } + } + } + + if ($answerType == MATCHING) { + $s .= '
'; + } + + $s .= '
'; + + // destruction of the Answer object + unset($objAnswerTmp); + + // destruction of the Question object + unset($objQuestionTmp); + + $html .= $s; + return $html; + } elseif ($answerType == HOT_SPOT || $answerType == HOT_SPOT_DELINEATION) { + // Question is a HOT_SPOT + //checking document/images visibility + if (api_is_platform_admin() || api_is_course_admin()) { + $course = api_get_course_info(); + $doc_id = DocumentManager::get_document_id($course, '/images/'.$pictureName); + if (is_numeric($doc_id)) { + $images_folder_visibility = api_get_item_visibility($course, 'document', $doc_id, api_get_session_id()); + if (!$images_folder_visibility) { + //This message is shown only to the course/platform admin if the image is set to visibility = false + Display::display_warning_message(get_lang('ChangeTheVisibilityOfTheCurrentImage')); + } + } + } + $questionName = $objQuestionTmp->selectTitle(); + $questionDescription = $objQuestionTmp->selectDescription(); + + if ($freeze) { + $s .= Display::img($objQuestionTmp->selectPicturePath()); + $html .= $s; + return $html; + } + + // Get the answers, make a list + $objAnswerTmp = new Answer($questionId); + + // get answers of hotpost + $answers_hotspot = array(); + foreach ($objAnswerTmp->answer as $answerId => $answer_item) { + //$answers = $objAnswerTmp->selectAnswerByAutoId($objAnswerTmp->selectAutoId($answerId)); + $answers_hotspot[$answerId] = $objAnswerTmp->selectAnswer($answerId); + } + + // display answers of hotpost order by id + $answer_list = '
'.get_lang('HotspotZones').'
'; + if (!empty($answers_hotspot)) { + ksort($answers_hotspot); + foreach ($answers_hotspot as $key => $value) { + $answer_list .= '
'.$key.'.- '.$value.'

'; + } + } + $answer_list .= '
'; + + if ($answerType == HOT_SPOT_DELINEATION) { + $answer_list = ''; + $swf_file = 'hotspot_delineation_user'; + $swf_height = 405; + } else { + $swf_file = 'hotspot_user'; + $swf_height = 436; + } + + if (!$only_questions) { + if ($show_title) { + $html .= Testcategory::getCategoryNamesForQuestion($objQuestionTmp->id); + $html .= '
'.$current_item.'. '.$questionName.'
'; + $html .= $questionDescription; + } else { + $html .= '
'; + $html .= '
'; + $html .= '
'; + $html .= Display::div($current_item.'. ', array('class' => 'question_no_title')); + $html .= '
'; + $html .= '
'; + $html .= '
'; + if (!empty($questionDescription)) { + $html .= Display::div($questionDescription, array('class' => 'question_description')); + } + $html .= '
'; + $html .= '
'; + } + //@todo I need to the get the feedback type + $html .= ''; + $html .= ' + + '; + } + + $canClick = isset($_GET['editQuestion']) ? '0' : (isset($_GET['modifyAnswers']) ? '0' : '1'); + + $s .= ' + + + + + '; + $s .= ''; + $html .= $s; + $html .= '
'; + $html .= '
+ +
+ + '.$answer_list.'
+
'; + return $html; + } + return $nbrAnswers; } } diff --git a/main/exercice/question_list_admin.inc.php b/main/exercice/question_list_admin.inc.php index 0ba0692ee3..8a4a135690 100644 --- a/main/exercice/question_list_admin.inc.php +++ b/main/exercice/question_list_admin.inc.php @@ -214,7 +214,7 @@ if (!$inATest) { echo '
'; //echo get_lang('Level').': '.$objQuestionTmp->selectLevel(); echo '
'; - echo ExerciseLib::showQuestion($objQuestionTmp, false, null, null, false, true, false, true, $objExercise->feedback_type, true); + echo $objExercise->showQuestion($objQuestionTmp, false, null, null, false, true, false, true, $objExercise->feedback_type, true); echo '

'; echo ''; echo ''; diff --git a/main/exercice/testcategory.class.php b/main/exercice/testcategory.class.php index 83c652c188..26438d4491 100644 --- a/main/exercice/testcategory.class.php +++ b/main/exercice/testcategory.class.php @@ -713,9 +713,10 @@ class Testcategory foreach ($categoriesAddedInExercise as $category) { $categoryId = $category['category_id']; - $newCategoryList[$categoryId] = $categories[$categoryId]; + if (isset($categories[$categoryId])) { + $newCategoryList[$categoryId] = $categories[$categoryId]; + } } - return $newCategoryList; }