#294 Add categories for test tool - minor changes

skala
Hubert Borderiou 14 years ago
parent 28a25f2622
commit be0946b4fd
  1. 17
      main/exercice/exercice.php
  2. 41
      main/exercice/exercise.class.php
  3. 1
      main/exercice/question_list_admin.inc.php
  4. 20
      main/exercice/question_pool.php
  5. 21
      main/exercice/testcategory.class.php
  6. 2
      main/lang/english/exercice.inc.php

@ -723,7 +723,7 @@ if ($show == 'test') {
if ($is_allowedToEdit) {
$headers = array(array('name' => get_lang('ExerciseName')),
array('name' => get_lang('QuantityQuestions'), 'params' => array('width'=>'80px')),
array('name' => get_lang('QuantityQuestions'), 'params' => array('width'=>'100px')),
array('name' => get_lang('Actions'), 'params' => array('width'=>'180px')));
} else {
$headers = array(array('name' => get_lang('ExerciseName')),
@ -861,19 +861,24 @@ if ($show == 'test') {
// Number of questions
$random_label = '';
if ($row['random'] > 0) {
if ($row['random'] > 0 || $row['random'] == -1) {
// if random == -1 means use random questions with all questions
$random_number_of_question = $row['random'];
if ($random_number_of_question == -1) {
$random_number_of_question = $rowi;
}
if ($row['random_by_category'] > 0) {
if (!class_exists("testcategory.class.php")) include_once "testcategory.class.php" ;
$nbQuestionsTotal = Testcategory::getNumberOfQuestionRandomByCategory($exid, $row['random']);
$nbQuestionsTotal = Testcategory::getNumberOfQuestionRandomByCategory($exid, $random_number_of_question);
$number_of_questions .= $nbQuestionsTotal." ";
$number_of_questions .= ($nbQuestionsTotal > 1) ? get_lang("QuestionsLowerCase") : get_lang("QuestionLowerCase") ;
$number_of_questions .= " - ";
$number_of_questions .= $row['random'].' '.get_lang('QuestionByCategory');
$number_of_questions .= Testcategory::getNumberMaxQuestionByCat($exid).' '.get_lang('QuestionByCategory');
} else {
$random_label = ' ('.get_lang('Random').') ';
$number_of_questions = $row['random'] . ' ' .$random_label.' '.$textByCategory;
$number_of_questions = $random_number_of_question . ' ' .$random_label.' '.$textByCategory;
//Bug if we set a random value bigger than the real number of questions
if ($row['random'] > $rowi) {
if ($random_number_of_question > $rowi) {
$number_of_questions = $rowi. ' ' .$random_label;
}
}

@ -283,7 +283,6 @@ class Exercise {
}
/**
* tells if questions are selected randomly, and if so returns the draws
*
@ -301,7 +300,7 @@ class Exercise {
* @return - integer - 0 if not random, otherwise the draws
*/
function isRandom() {
if($this->random > 0){
if($this->random > 0 || $this->random == -1) {
return true;
} else {
return false;
@ -384,29 +383,34 @@ class Exercise {
* @author - Olivier Brouckaert
* @return - array - if the exercise is not set to take questions randomly, returns the question list
* without randomizing, otherwise, returns the list with questions selected randomly
* Modified by Hubert Borderiou 15 nov 2011
*/
function selectRandomList() {
$nbQuestions = $this->selectNbrQuestions();
$temp_list = $this->questionList;
//Not a random exercise, or if there are not at least 2 questions
if($this->random == 0 || $nbQuestions < 2) {
return $this->questionList;
}
if ($nbQuestions != 0) {
shuffle($temp_list);
$my_random_list = array_combine(range(1,$nbQuestions),$temp_list);
$my_question_list = array();
$i = 0;
foreach ($my_random_list as $item) {
if ($i < $this->random) {
$my_question_list[$i] = $item;
} else {
break;
// $this->random == -1 if random with all questions
if ($this->random > 0) {
$i = 0;
foreach ($my_random_list as $item) {
if ($i < $this->random) {
$my_question_list[$i] = $item;
} else {
break;
}
$i++;
}
$i++;
}
} else {
$my_question_list = $my_random_list;
}
return $my_question_list;
}
}
@ -740,7 +744,7 @@ class Exercise {
return false;
} else {
if ($this->isRandom()) {
if (count($this->questionList) >= $this->random) {
if (count($this->questionList) >= $this->random && $this->random > 0) {
$this->random -= 1;
$this->save();
}
@ -908,11 +912,12 @@ class Exercise {
}
}
// number of random question
$option = array();
$max = ($this->id > 0) ? $this->selectNbrQuestions() : 10 ;
$option = range(0,$max);
$option[0] = get_lang('No');
$option[-1] = get_lang('Everybody'); // #3942
$form->addElement('select', 'randomQuestions',array(get_lang('RandomQuestions'), get_lang('RandomQuestionsHelp')), $option, array('id'=>'randomQuestions','class'=>'chzn-select'));
//random answers
@ -3326,10 +3331,14 @@ class Exercise {
*/
// If test option is Grouped By Categories
if ($isRandomByCategory == 2) {
$tabCategoryQuestions = Testcategory::sortTabByBracketLabel($tabCategoryQuestions); // 24-02-2011 hub pour projet Bernard Ycard
$tabCategoryQuestions = Testcategory::sortTabByBracketLabel($tabCategoryQuestions);
}
while (list($cat_id, $tabquestion) = each($tabCategoryQuestions)) {
$questionList = array_merge($questionList, Testcategory::getNElementsFromArray($tabquestion, $this->random));
$number_of_random_question = $this->random;
if ($this->random == -1) {
$number_of_random_question = count($this->questionList);
}
$questionList = array_merge($questionList, Testcategory::getNElementsFromArray($tabquestion, $number_of_random_question));
}
// shuffle the question list if test is not grouped by categories
if ($isRandomByCategory == 1) {

@ -30,7 +30,6 @@ if ($deleteQuestion) {
if ($objExercise->removeFromList($deleteQuestion)) {
$nbrQuestions--;
}
//Random -1 if
}
// destruction of the Question object
unset($objQuestionTmp);

@ -1,4 +1,6 @@
<?php
/* For licensing terms, see /license.txt */
/**
@ -267,7 +269,7 @@ echo '<div class="actions">';
}
else {
echo '<a href="exercice.php?'.api_get_cidReq().'">'.Display::return_icon('back.png', get_lang('BackToExercisesList'),'','32').'</a>';
echo "<a href='admin.php?exerciceId=0'>".Display::return_icon('add_question.gif', get_lang('NewQu'), '', 32)."</a>";
echo "<a href='admin.php?exerciseId=0'>".Display::return_icon('add_question.gif', get_lang('NewQu'), '', 32)."</a>";
$titleAdd = get_lang('manageAllQuestions');
}
echo '</div>';
@ -614,13 +616,16 @@ foreach ($main_question_list as $tabQuestion) {
$row[] = get_question_type_for_question($selected_course, $tabQuestion['id']);
$row[] = get_question_categorie_for_question($selected_course, $tabQuestion['id']);
$row[] = $tabQuestion['level'];
echo "HUBC exerciseId=$exerciseId <br/>";
$row[] = get_action_icon_for_question($actionIcon1, $fromExercise, $tabQuestion['id'], $tabQuestion['type'],
$tabQuestion['question'], $selected_course, $courseCategoryId, $exerciseLevel,
$answerType, $session_id).
$answerType, $session_id, $exerciseId).
"&nbsp;".
get_action_icon_for_question($actionIcon2, $fromExercise, $tabQuestion['id'], $tabQuestion['type'],
$tabQuestion['question'], $selected_course, $courseCategoryId, $exerciseLevel, $answerType,
$session_id);
$session_id, $exerciseId);
$data[] = $row;
}
Display :: display_sortable_table($header, $data, '', array('per_page_default'=>999,'per_page'=>999,'page_nr'=>1));
@ -680,13 +685,16 @@ function get_a_tag_for_question($in_addA, $in_fromex, $in_questionid, $in_questi
// return the <a> html code for delete, add, clone, edit a question
// hubert.borderiou 13-10-2011
function get_action_icon_for_question($in_action, $from_exercice, $in_questionid, $in_questiontype, $in_questionname,
$in_selected_course, $in_courseCategoryId, $in_exerciseLevel, $in_answerType, $in_session_id
$in_selected_course, $in_courseCategoryId, $in_exerciseLevel, $in_answerType, $in_session_id, $in_exercice_id
) {
$res = "";
$getParams = "&selected_course=$in_selected_course&courseCategoryId=$in_courseCategoryId&exerciseId=$from_exercice&exerciseLevel=$in_exerciseLevel&answerType=$in_answerType&session_id=$in_session_id";
$getParams = "&selected_course=$in_selected_course&courseCategoryId=$in_courseCategoryId&exerciseId=$in_exercice_id&exerciseLevel=$in_exerciseLevel&answerType=$in_answerType&session_id=$in_session_id";
echo $getParams."<hr/>";
switch ($in_action) {
case "delete" :
$res = "<a href='".api_get_self()."?".api_get_cidreq()."&exerciseId=$from_exercice&delete=$in_questionid$getParams' onclick='return confirm_your_choice()'>";
$res = "<a href='".api_get_self()."?".api_get_cidreq()."&delete=$in_questionid$getParams' onclick='return confirm_your_choice()'>";
$res .= Display::return_icon("delete.gif", get_lang('Delete'));
$res .= "</a>";
break;

@ -417,6 +417,27 @@ class Testcategory {
}
return $totalcatscore;
}
/**
* return the number max of question in a category
* count the number of questions in all categories, and return the max
* @author - hubert borderiou
*/
public static function getNumberMaxQuestionByCat($in_testid) {
$res_num_max = 0;
// foreach question
$tabcatid = Testcategory::getListOfCategoriesIDForTest($in_testid);
for ($i=0; $i < count($tabcatid); $i++) {
if ($tabcatid[$i] > 0) { // 0 = no category for this question
$nbQuestionInThisCat = Testcategory::getNumberOfQuestionsInCategoryForTest($in_testid, $tabcatid[$i]);
if ($nbQuestionInThisCat > $res_num_max) {
$res_num_max = $nbQuestionInThisCat;
}
}
}
return $res_num_max;
}
}
endif;
?>

@ -421,7 +421,7 @@ $ReviewQuestions = "Review selected questions";
$YouTriedToResolveThisExerciseEarlier = "You have tried to resolve this question earlier";
$ThereAreNoQuestionsForThisExercise = "There are no questions for this exercise";
// question category
$QuestionByCategory = "question(s) par catégories";
$QuestionByCategory = "question(s) by categories";
$QuestionLowerCase = "question";
$QuestionUpperCaseFirstLetter = "Question";
$QuestionsLowerCase = "questions";

Loading…
Cancel
Save