Adding media functions

skala
Julio Montoya 13 years ago
parent 5a46fab97d
commit a2517cba7c
  1. 4
      main/exercice/exercice.php
  2. 139
      main/exercice/exercise.class.php

@ -375,6 +375,8 @@ if ($is_allowedToEdit && $origin != 'learnpath') {
echo '<a href="question_pool.php">';
echo Display::return_icon('database.png', get_lang('QuestionPool'), array('style' => 'width:32px'));
echo '</a>';
//echo Display::url(Display::return_icon('looknfeel.png', get_lang('Media')), 'media.php?' . api_get_cidreq());
// end question category
echo '<a href="hotpotatoes.php?'.api_get_cidreq().'">'.Display :: return_icon('import_hotpotatoes.png', get_lang('ImportHotPotatoesQuiz'), '', ICON_SIZE_MEDIUM).'</a>';
// link to import qti2 ...
@ -610,7 +612,7 @@ if (!empty($exercise_list)) {
}
// Number of questions
$random_label = '';
$random_label = null;
if ($row['random'] > 0 || $row['random'] == -1) {
// if random == -1 means use random questions with all questions
$random_number_of_question = $row['random'];

@ -23,11 +23,6 @@ $debug = false; //All exercise scripts should depend in this debug variable
require_once dirname(__FILE__).'/../inc/lib/exercise_show_functions.lib.php';
if(!class_exists('Exercise')):
/**
* Exercise class
* @package chamilo.exercise
*/
class Exercise {
public $id;
@ -1609,10 +1604,10 @@ class Exercise {
return $id;
}
public function show_button($question_id, $questionNum) {
public function show_button($question_id, $questionNum, $questions_in_media = array()) {
global $origin, $safe_lp_id, $safe_lp_item_id, $safe_lp_item_view_id;
$question_list = $this->get_validated_question_list();
$nbrQuestions = count($question_list);
$nbrQuestions = $this->get_count_question_list();
$all_button = $html = $label = '';
$hotspot_get = isset($_POST['hotspot']) ? Security::remove_XSS($_POST['hotspot']):null;
@ -1646,9 +1641,15 @@ class Exercise {
$all_button .= '<a href="javascript://" class="btn" onclick="previous_question_and_save('.$prev_question.', '.$question_id.' ); ">'.get_lang('PreviousQuestion').'</a>';
}
//Next question
$all_button .= '&nbsp;<a href="javascript://" class="'.$class.'" onclick="save_now('.$question_id.'); ">'.$label.'</a>';
$all_button .= '<span id="save_for_now_'.$question_id.'"></span>&nbsp;';
//Next question
if (!empty($questions_in_media)) {
$questions_in_media = "['".implode("','",$questions_in_media)."']";
$all_button .= '&nbsp;<a href="javascript://" class="'.$class.'" onclick="save_question_list('.$questions_in_media.'); ">'.$label.'</a>';
} else {
$all_button .= '&nbsp;<a href="javascript://" class="'.$class.'" onclick="save_now('.$question_id.'); ">'.$label.'</a>';
}
$all_button .= '<span id="save_for_now_'.$question_id.'" class="exercise_save_mini_message"></span>&nbsp;';
$html .= $all_button;
} else {
if ($this->review_answers) {
@ -3520,6 +3521,40 @@ class Exercise {
return false;
}
function get_media_list() {
$media_questions = array();
$question_list = $this->get_validated_question_list();
if (!empty($question_list)) {
foreach ($question_list as $questionId) {
$objQuestionTmp = Question::read($questionId);
if (isset($objQuestionTmp->parent_id) && $objQuestionTmp->parent_id != 0) {
$media_questions[$objQuestionTmp->parent_id][] = $objQuestionTmp->id;
} else {
//Always the last item
$media_questions[999][] = $objQuestionTmp->id;
}
}
}
return $media_questions;
}
function media_is_activated($media_list) {
$active = false;
if (isset($media_list) && !empty($media_list)) {
$media_count = count($media_list);
if ($media_count > 1) {
return true;
} elseif ($media_count == 1) {
if (isset($media_list[999])) {
return false;
} else {
return true;
}
}
}
return $active;
}
function get_validated_question_list() {
$tabres = array();
$isRandomByCategory = $this->isRandomByCat();
@ -3531,30 +3566,24 @@ class Exercise {
}
} else {
if ($this->isRandom()) {
if (!class_exists("Testcategory")) {
require_once("testcategory.class.php");
}
//
// USE question categories
//
// get questions by category for this exercice
// we have to choice $objExercise->random question in each array values of $tabCategoryQuestions
// key of $tabCategoryQuestions are the categopy id (0 for not in a category)
// value is the array of question id of this category
$questionList = array();
$tabCategoryQuestions = array();
$tabCategoryQuestions = Testcategory::getQuestionsByCat($this->id);
$isRandomByCategory = $this->selectRandomByCat();
// on tri les catégories en fonction du terme entre [] en tête de la description de la catégorie
// on tri les categories en fonction du terme entre [] en tête de la description de la catégorie
/*
* ex de catégories :
* [biologie] Maîtriser les mécanismes de base de la génétique
* [biologie] Relier les moyens de défenses et les agents infectieux
* [biologie] Savoir où est produite l'énergie dans les cellules et sous quelle forme
* [chimie] Classer les molécules suivant leur pouvoir oxydant ou réducteur
* [chimie] Connaître la définition de la théorie acide/base selon Brönsted
* ex de catégories :
* [biologie] Maîtriser les mécanismes de base de la génétique
* [biologie] Relier les moyens de défenses et les agents infectieux
* [biologie] Savoir où est produite l'énergie dans les cellules et sous quelle forme
* [chimie] Classer les molécules suivant leur pouvoir oxydant ou réducteur
* [chimie] Connaître la définition de la théorie acide/base selon Brönsted
* [chimie] Connaître les charges des particules
* On veut dans l'ordre des groupes définis par le terme entre crochet au début du titre de la catégorie
* On veut dans l'ordre des groupes définis par le terme entre crochet au début du titre de la catégorie
*/
// If test option is Grouped By Categories
if ($isRandomByCategory == 2) {
@ -3580,6 +3609,53 @@ class Exercise {
return $tabres;
}
function get_question_list($expand_media_questions = false) {
$question_list = $this->get_validated_question_list();
$question_list = $this->transform_question_list_with_medias($question_list, $expand_media_questions);
return $question_list;
}
function transform_question_list_with_medias($question_list, $expand_media_questions = false) {
$new_question_list = array();
if (!empty($question_list)) {
$media_questions = $this->get_media_list();
$media_active = $this->media_is_activated($media_questions);
if ($media_active) {
$counter = 1;
foreach ($question_list as $question_id) {
$add_question = true;
foreach ($media_questions as $media_id => $question_list_in_media) {
if ($media_id != 999 && in_array($question_id, $question_list_in_media)) {
$add_question = false;
if (!in_array($media_id, $new_question_list)) {
$new_question_list[$counter] = $media_id;
$counter++;
}
break;
}
}
if ($add_question) {
$new_question_list[$counter] = $question_id;
$counter++;
}
}
if ($expand_media_questions) {
$media_key_list = array_keys($media_questions);
foreach ($new_question_list as &$question_id) {
if (in_array($question_id, $media_key_list)) {
$question_id = $media_questions[$question_id];
}
}
$new_question_list = array_flatten($new_question_list);
}
} else {
$new_question_list = $question_list;
}
}
return $new_question_list;
}
public function get_stat_track_exercise_info_by_exe_id($exe_id) {
$track_exercises = Database :: get_statistic_table(TABLE_STATISTIC_TRACK_E_EXERCICES);
$exe_id = intval($exe_id);
@ -3690,6 +3766,16 @@ class Exercise {
return $html;
}
function get_count_question_list() {
//Real question count
$question_count = 0;
$question_list = $this->get_question_list();
if (!empty($question_list)) {
$question_count = count($question_list);
}
return $question_count;
}
function get_exercise_list_ordered() {
$table_exercise_order = Database::get_course_table(TABLE_QUIZ_ORDER);
$course_id = api_get_course_int_id();
@ -3704,5 +3790,4 @@ class Exercise {
}
return $list;
}
}
endif;
}
Loading…
Cancel
Save