|
@@ -132,7 +132,6 @@ class Exercise
|
|
|
|
|
|
$id = intval($id);
|
|
|
if (empty($this->course_id)) {
|
|
|
-
|
|
|
return false;
|
|
|
}
|
|
|
$sql = "SELECT * FROM $TBL_EXERCISES
|
|
@@ -408,14 +407,6 @@ class Exercise
|
|
|
*/
|
|
|
public function isRandomByCat()
|
|
|
{
|
|
|
- /*$res = 0;
|
|
|
- if ($this->randomByCat == 1) {
|
|
|
- $res = 1;
|
|
|
- } else if ($this->randomByCat == 2) {
|
|
|
- $res = 2;
|
|
|
- }
|
|
|
- */
|
|
|
-
|
|
|
$res = EXERCISE_CATEGORY_RANDOM_DISABLED;
|
|
|
if ($this->randomByCat == EXERCISE_CATEGORY_RANDOM_SHUFFLED) {
|
|
|
$res = EXERCISE_CATEGORY_RANDOM_SHUFFLED;
|
|
@@ -435,10 +426,12 @@ class Exercise
|
|
|
*/
|
|
|
public function updateRandomByCat($random)
|
|
|
{
|
|
|
- if (in_array($random, array(
|
|
|
+ if (in_array(
|
|
|
+ $random,
|
|
|
+ array(
|
|
|
EXERCISE_CATEGORY_RANDOM_SHUFFLED,
|
|
|
EXERCISE_CATEGORY_RANDOM_ORDERED,
|
|
|
- EXERCISE_CATEGORY_RANDOM_DISABLED
|
|
|
+ EXERCISE_CATEGORY_RANDOM_DISABLED,
|
|
|
)
|
|
|
)) {
|
|
|
$this->randomByCat = $random;
|
|
@@ -466,7 +459,7 @@ class Exercise
|
|
|
*/
|
|
|
public function isRandom()
|
|
|
{
|
|
|
- if($this->random > 0 || $this->random == -1) {
|
|
|
+ if ($this->random > 0 || $this->random == -1) {
|
|
|
return true;
|
|
|
} else {
|
|
|
return false;
|
|
@@ -505,7 +498,7 @@ class Exercise
|
|
|
/**
|
|
|
* If false the question list will be managed as always if true the question will be filtered
|
|
|
* depending of the exercise settings (table c_quiz_rel_category)
|
|
|
- * @param bool active or inactive grouping
|
|
|
+ * @param bool $status active or inactive grouping
|
|
|
**/
|
|
|
public function setCategoriesGrouping($status)
|
|
|
{
|
|
@@ -575,7 +568,10 @@ class Exercise
|
|
|
public function getQuestionListPagination($start, $limit, $sidx, $sord, $where_condition = array(), $extraFields = array())
|
|
|
{
|
|
|
if (!empty($this->id)) {
|
|
|
- $category_list = TestCategory::getListOfCategoriesNameForTest($this->id, false);
|
|
|
+ $category_list = TestCategory::getListOfCategoriesNameForTest(
|
|
|
+ $this->id,
|
|
|
+ false
|
|
|
+ );
|
|
|
$TBL_EXERCICE_QUESTION = Database::get_course_table(TABLE_QUIZ_TEST_QUESTION);
|
|
|
$TBL_QUESTIONS = Database::get_course_table(TABLE_QUIZ_QUESTION);
|
|
|
|
|
@@ -589,7 +585,6 @@ class Exercise
|
|
|
|
|
|
if (!empty($sidx) && !empty($sord)) {
|
|
|
if ($sidx == 'question') {
|
|
|
-
|
|
|
if (in_array(strtolower($sord), array('desc', 'asc'))) {
|
|
|
$orderCondition = " ORDER BY q.$sidx $sord";
|
|
|
}
|
|
@@ -597,9 +592,7 @@ class Exercise
|
|
|
}
|
|
|
|
|
|
$sql .= $orderCondition;
|
|
|
-
|
|
|
$limitCondition = null;
|
|
|
-
|
|
|
if (isset($start) && isset($limit)) {
|
|
|
$start = intval($start);
|
|
|
$limit = intval($limit);
|
|
@@ -635,7 +628,7 @@ class Exercise
|
|
|
|
|
|
$questionType = Display::tag(
|
|
|
'div',
|
|
|
- Display::return_icon($typeImg, $typeExpl, array(), ICON_SIZE_MEDIUM).$question_media
|
|
|
+ Display::return_icon($typeImg, $typeExpl, array(), ICON_SIZE_MEDIUM).$question_media
|
|
|
);
|
|
|
|
|
|
$question = array(
|
|
@@ -704,7 +697,7 @@ class Exercise
|
|
|
ON (e.question_id= q.id AND e.c_id = q.c_id)
|
|
|
WHERE
|
|
|
e.c_id = {$this->course_id} AND
|
|
|
- e.exercice_id = '".Database::escape_string($this->id)."'
|
|
|
+ e.exercice_id = '".Database::escape_string($this->id)."'
|
|
|
ORDER BY q.question";
|
|
|
$result = Database::query($sql);
|
|
|
$list = array();
|
|
@@ -721,7 +714,6 @@ class Exercise
|
|
|
private function getQuestionOrderedList()
|
|
|
{
|
|
|
$questionList = array();
|
|
|
-
|
|
|
$TBL_EXERCICE_QUESTION = Database::get_course_table(TABLE_QUIZ_TEST_QUESTION);
|
|
|
$TBL_QUESTIONS = Database::get_course_table(TABLE_QUIZ_QUESTION);
|
|
|
|
|
@@ -736,7 +728,6 @@ class Exercise
|
|
|
e.exercice_id = ".Database::escape_string($this->id);
|
|
|
|
|
|
$result = Database::query($sql);
|
|
|
-
|
|
|
$count_question_orders = Database::num_rows($result);
|
|
|
|
|
|
// Getting question list from the order (question list drag n drop interface ).
|
|
@@ -817,7 +808,6 @@ class Exercise
|
|
|
|
|
|
if (!empty($questions_by_category)) {
|
|
|
$temp_question_list = array();
|
|
|
-
|
|
|
foreach ($questions_by_category as $category_id => & $categoryQuestionList) {
|
|
|
if (isset($categoryCountArray) && !empty($categoryCountArray)) {
|
|
|
if (isset($categoryCountArray[$category_id])) {
|
|
@@ -875,7 +865,6 @@ class Exercise
|
|
|
$cat = new TestCategory();
|
|
|
|
|
|
// Setting category order.
|
|
|
-
|
|
|
switch ($questionSelectionType) {
|
|
|
case EX_Q_SELECTION_ORDERED: // 1
|
|
|
case EX_Q_SELECTION_RANDOM: // 2
|
|
@@ -896,7 +885,6 @@ class Exercise
|
|
|
$categoriesAddedInExercise
|
|
|
);
|
|
|
|
|
|
-
|
|
|
$question_list = $this->pickQuestionsPerCategory(
|
|
|
$categoriesAddedInExercise,
|
|
|
$question_list,
|
|
@@ -1022,7 +1010,6 @@ class Exercise
|
|
|
$result['category_with_questions_list'] = isset($questions_by_category) ? $questions_by_category : array();
|
|
|
|
|
|
// Adding category info in the category list with question list:
|
|
|
-
|
|
|
if (!empty($questions_by_category)) {
|
|
|
/*$em = Database::getManager();
|
|
|
$repo = $em->getRepository('ChamiloCoreBundle:CQuizCategory');*/
|
|
@@ -1167,34 +1154,6 @@ class Exercise
|
|
|
*/
|
|
|
public function selectRandomList($adminView = false)
|
|
|
{
|
|
|
- /*$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();
|
|
|
- // $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++;
|
|
|
- }
|
|
|
- } else {
|
|
|
- $my_question_list = $my_random_list;
|
|
|
- }
|
|
|
- return $my_question_list;
|
|
|
- }*/
|
|
|
-
|
|
|
$TBL_EXERCISE_QUESTION = Database::get_course_table(TABLE_QUIZ_TEST_QUESTION);
|
|
|
$TBL_QUESTIONS = Database::get_course_table(TABLE_QUIZ_QUESTION);
|
|
|
|
|
@@ -1419,11 +1378,13 @@ class Exercise
|
|
|
$TBL_DOCUMENT = Database::get_course_table(TABLE_DOCUMENT);
|
|
|
|
|
|
if ($sound['size'] && (strstr($sound['type'],'audio') || strstr($sound['type'],'video'))) {
|
|
|
- $this->sound=$sound['name'];
|
|
|
+ $this->sound = $sound['name'];
|
|
|
|
|
|
if (@move_uploaded_file($sound['tmp_name'],$audioPath.'/'.$this->sound)) {
|
|
|
$sql = "SELECT 1 FROM $TBL_DOCUMENT
|
|
|
- WHERE c_id = ".$this->course_id." AND path='".str_replace($documentPath,'',$audioPath).'/'.$this->sound."'";
|
|
|
+ WHERE
|
|
|
+ c_id = ".$this->course_id." AND
|
|
|
+ path='".str_replace($documentPath,'',$audioPath).'/'.$this->sound."'";
|
|
|
$result = Database::query($sql);
|
|
|
|
|
|
if (!Database::num_rows($result)) {
|
|
@@ -1448,8 +1409,8 @@ class Exercise
|
|
|
);
|
|
|
}
|
|
|
}
|
|
|
- } elseif($delete && is_file($audioPath.'/'.$this->sound)) {
|
|
|
- $this->sound='';
|
|
|
+ } elseif ($delete && is_file($audioPath.'/'.$this->sound)) {
|
|
|
+ $this->sound = '';
|
|
|
}
|
|
|
}
|
|
|
|
|
@@ -1687,7 +1648,6 @@ class Exercise
|
|
|
$this->id = Database::insert($TBL_EXERCISES, $params);
|
|
|
|
|
|
if ($this->id) {
|
|
|
-
|
|
|
$sql = "UPDATE $TBL_EXERCISES SET id = iid WHERE iid = {$this->id} ";
|
|
|
Database::query($sql);
|
|
|
|
|
@@ -1784,8 +1744,7 @@ class Exercise
|
|
|
public function removeFromList($questionId)
|
|
|
{
|
|
|
// searches the position of the question ID in the list
|
|
|
- $pos = array_search($questionId,$this->questionList);
|
|
|
-
|
|
|
+ $pos = array_search($questionId, $this->questionList);
|
|
|
// question not found
|
|
|
if ($pos === false) {
|
|
|
return false;
|
|
@@ -1817,10 +1776,25 @@ class Exercise
|
|
|
$sql = "UPDATE $TBL_EXERCISES SET active='-1'
|
|
|
WHERE c_id = ".$this->course_id." AND id = ".intval($this->id);
|
|
|
Database::query($sql);
|
|
|
- api_item_property_update($this->course, TOOL_QUIZ, $this->id, 'QuizDeleted', api_get_user_id());
|
|
|
- api_item_property_update($this->course, TOOL_QUIZ, $this->id, 'delete', api_get_user_id());
|
|
|
|
|
|
- if (api_get_setting('search_enabled')=='true' && extension_loaded('xapian') ) {
|
|
|
+ api_item_property_update(
|
|
|
+ $this->course,
|
|
|
+ TOOL_QUIZ,
|
|
|
+ $this->id,
|
|
|
+ 'QuizDeleted',
|
|
|
+ api_get_user_id()
|
|
|
+ );
|
|
|
+ api_item_property_update(
|
|
|
+ $this->course,
|
|
|
+ TOOL_QUIZ,
|
|
|
+ $this->id,
|
|
|
+ 'delete',
|
|
|
+ api_get_user_id()
|
|
|
+ );
|
|
|
+
|
|
|
+ if (api_get_setting('search_enabled')=='true' &&
|
|
|
+ extension_loaded('xapian')
|
|
|
+ ) {
|
|
|
$this->search_engine_delete();
|
|
|
}
|
|
|
}
|
|
@@ -1829,7 +1803,7 @@ class Exercise
|
|
|
* Creates the form to create / edit an exercise
|
|
|
* @param FormValidator $form
|
|
|
*/
|
|
|
- public function createForm($form, $type='full')
|
|
|
+ public function createForm($form, $type = 'full')
|
|
|
{
|
|
|
if (empty($type)) {
|
|
|
$type = 'full';
|
|
@@ -1860,7 +1834,7 @@ class Exercise
|
|
|
'Width' => '100%',
|
|
|
'Height' => '150',
|
|
|
);
|
|
|
- if (is_array($type)){
|
|
|
+ if (is_array($type)) {
|
|
|
$editor_config = array_merge($editor_config, $type);
|
|
|
}
|
|
|
|
|
@@ -1966,7 +1940,6 @@ class Exercise
|
|
|
} else {
|
|
|
// if is Directfeedback but has not questions we can allow to modify the question type
|
|
|
if ($this->selectNbrQuestions() == 0) {
|
|
|
-
|
|
|
// feedback type
|
|
|
$radios_feedback = array();
|
|
|
$radios_feedback[] = $form->createElement('radio', 'exerciseFeedbackType', null, get_lang('ExerciseAtTheEndOfTheTest'),'0',array('id' =>'exerciseType_0', 'onclick' => 'check_feedback()'));
|
|
@@ -1989,7 +1962,6 @@ class Exercise
|
|
|
$radios[] = $form->createElement('radio', 'exerciseType', null, get_lang('SimpleExercise'), '1');
|
|
|
$radios[] = $form->createElement('radio', 'exerciseType', null, get_lang('SequentialExercise'),'2');
|
|
|
$form->addGroup($radios, null, get_lang('ExerciseType'));
|
|
|
-
|
|
|
} else {
|
|
|
//Show options freeze
|
|
|
$radios_results_disabled[] = $form->createElement('radio', 'results_disabled', null, get_lang('ShowScoreAndRightAnswer'), '0', array('id'=>'result_disabled_0'));
|
|
@@ -2190,9 +2162,7 @@ class Exercise
|
|
|
}
|
|
|
|
|
|
$form->addElement('date_time_picker', 'start_time');
|
|
|
-
|
|
|
$form->addElement('html','</div>');
|
|
|
-
|
|
|
$form->addElement('checkbox', 'activate_end_date_check', null , get_lang('EnableEndTime'), array('onclick' => 'activate_end_date()'));
|
|
|
|
|
|
if (!empty($this->end_time)) {
|
|
@@ -2271,7 +2241,6 @@ class Exercise
|
|
|
);
|
|
|
|
|
|
$defaults = array();
|
|
|
-
|
|
|
if (api_get_setting('search_enabled') === 'true') {
|
|
|
require_once api_get_path(LIBRARY_PATH) . 'specific_fields_manager.lib.php';
|
|
|
|
|
@@ -3281,7 +3250,6 @@ class Exercise
|
|
|
$answerWeighting = (float)$objAnswerTmp->selectWeighting($answerId);
|
|
|
$answerAutoId = $objAnswerTmp->selectAutoId($answerId);
|
|
|
$answerIid = isset($objAnswerTmp->iid[$answerId]) ? $objAnswerTmp->iid[$answerId] : '';
|
|
|
-
|
|
|
$answer_correct_array[$answerId] = (bool)$answerCorrect;
|
|
|
|
|
|
if ($debug) {
|
|
@@ -5411,8 +5379,8 @@ class Exercise
|
|
|
.'</table>';
|
|
|
$open_question_list = null;
|
|
|
foreach ($question_list_answers as $item) {
|
|
|
- $question = $item['question'];
|
|
|
- $answer = $item['answer'];
|
|
|
+ $question = $item['question'];
|
|
|
+ $answer = $item['answer'];
|
|
|
$answer_type = $item['answer_type'];
|
|
|
|
|
|
if (!empty($question) && !empty($answer) && $answer_type == FREE_ANSWER) {
|
|
@@ -6972,7 +6940,6 @@ class Exercise
|
|
|
$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
|
|
@@ -7045,7 +7012,6 @@ class Exercise
|
|
|
// 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 .= '<div class="ui-widget ui-helper-clearfix">
|
|
@@ -7059,7 +7025,6 @@ class Exercise
|
|
|
$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);
|
|
@@ -7067,7 +7032,6 @@ class Exercise
|
|
|
// 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++;
|
|
@@ -7079,7 +7043,6 @@ class Exercise
|
|
|
$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];
|
|
@@ -7428,12 +7391,9 @@ class Exercise
|
|
|
<b>'.$lines_count.'</b>. '.$parsed_answer.'
|
|
|
</div>
|
|
|
</td>';
|
|
|
-
|
|
|
// middle part (matches selects)
|
|
|
-
|
|
|
$s .= '<td width="10%" align="center"> ';
|
|
|
$s .= '<div style="display:block">';
|
|
|
-
|
|
|
$s .= '<select id="window_'.$windowId.'_select" name="choice['.$questionId.']['.$numAnswer.']">';
|
|
|
$selectedValue = 0;
|
|
|
// fills the list-box
|
|
@@ -7452,7 +7412,6 @@ class Exercise
|
|
|
$selected = 'selected="selected"';
|
|
|
$selectedValue = $val['id'];
|
|
|
}
|
|
|
- //$s .= '<option value="'.$val['id'].'" '.$selected.'>'.$val['letter'].'</option>';
|
|
|
$s .= '<option value="'.$item.'" '.$selected.'>'.$val['letter'].'</option>';
|
|
|
$item++;
|
|
|
}
|
|
@@ -7474,7 +7433,6 @@ class Exercise
|
|
|
$s .= '</select></div></td>';
|
|
|
|
|
|
$s.='<td width="45%" valign="top" >';
|
|
|
-
|
|
|
if (isset($select_items[$lines_count])) {
|
|
|
$s.= '<div id="window_'.$windowId.'_answer" class="window window_right_question">
|
|
|
<b>'.$select_items[$lines_count]['letter'].'.</b> '.$select_items[$lines_count]['answer'].'
|