Fixing exercise exam pagination when using "medias"

skala
Julio Montoya 12 years ago
parent 8de3ff8c45
commit c8ea456640
  1. 13
      main/exercice/exercise.class.php
  2. 1
      main/exercice/exercise_reminder.php
  3. 50
      main/exercice/exercise_submit.php
  4. 70
      main/exercice/question.class.php
  5. 7
      main/exercice/question_list_pagination_admin.inc.php
  6. 26
      main/exercice/testcategory.class.php
  7. 8
      main/inc/ajax/exercise.ajax.php
  8. 45
      main/inc/ajax/model.ajax.php
  9. 58
      main/inc/lib/display.lib.php

@ -473,7 +473,7 @@ class Exercise
$sql = "SELECT q.iid
FROM $TBL_EXERCICE_QUESTION e INNER JOIN $TBL_QUESTIONS q
ON (e.question_id = q.iid AND e.c_id = ".$this->course_id." AND q.c_id = ".$this->course_id.")
ON (e.question_id = q.iid AND e.c_id = ".$this->course_id.")
WHERE e.exercice_id = '".Database::escape_string($this->id)."'
ORDER BY question_order";
$limitCondition = null;
@ -533,21 +533,22 @@ class Exercise
$TBL_EXERCICE_QUESTION = Database::get_course_table(TABLE_QUIZ_TEST_QUESTION);
$TBL_QUESTIONS = Database::get_course_table(TABLE_QUIZ_QUESTION);
//Getting question_order count (to verify that the question list is correct and all question_order's were set)
// Getting question_order count (to verify that the question list is correct and all question_order's were set)
$sql = "SELECT DISTINCT e.question_order
FROM $TBL_EXERCICE_QUESTION e INNER JOIN $TBL_QUESTIONS q
ON (e.question_id = q.iid)
WHERE e.exercice_id = '".Database::escape_string($this->id)."'";
WHERE 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 interface drag n drop)
// Getting question list from the order (question list interface drag n drop).
$sql = "SELECT e.question_id, e.question_order
FROM $TBL_EXERCICE_QUESTION e INNER JOIN $TBL_QUESTIONS q
ON (e.question_id= q.iid)
WHERE e.exercice_id = '".Database::escape_string($this->id)."'
ORDER BY question_order";
//var_dump($sql);
$result = Database::query($sql);
// Fills the array with the question ID for this exercise
@ -4613,7 +4614,7 @@ class Exercise
if (!empty($question_list)) {
foreach ($question_list as $questionId) {
$objQuestionTmp = Question::read($questionId);
// if a media question exists
// If a media question exists
if (isset($objQuestionTmp->parent_id) && $objQuestionTmp->parent_id != 0) {
$media_questions[$objQuestionTmp->parent_id][] = $objQuestionTmp->id;
} else {
@ -4744,7 +4745,7 @@ class Exercise
function get_validated_question_list()
{
// Getting current question list
$question_list = $this->selectQuestionList();
$question_list = $this->selectQuestionList(true);
// Getting random by category setting
$random_by_category = $this->isRandomByCat();

@ -64,6 +64,7 @@ if ($time_control) {
$htmlHeadXtra[] = $objExercise->show_time_control_js($time_left);
}
$exe_id = null;
if (isset($_SESSION['exe_id'])) {
$exe_id = intval($_SESSION['exe_id']);
}

@ -64,8 +64,7 @@ $htmlHeadXtra[]= api_get_css(api_get_path(WEB_LIBRARY_PATH).'javascript/epiclock
$htmlHeadXtra[]= api_get_js('epiclock/javascript/jquery.dateformat.min.js');
$htmlHeadXtra[]= api_get_js('epiclock/javascript/jquery.epiclock.min.js');
$htmlHeadXtra[]= api_get_js('epiclock/renderers/minute/epiclock.minute.js');
$htmlHeadXtra[] = api_get_js('d3/jquery.xcolor.js');
$htmlHeadXtra[]= api_get_js('d3/jquery.xcolor.js');
$htmlHeadXtra[]= '<script>
var recycle_icon = "<a href=\'#\' class=\'ui-icon ui-icon-refresh\'>Recycle image</a>";
@ -329,7 +328,6 @@ jsPlumb.ready(function() {
}
});
$(function(){
$(".highlight_image").on("click", function() {
$(this).parent().find(".highlight_image").each(function(index){
@ -354,16 +352,12 @@ $origin = isset($_REQUEST['origin']) ? Security::remove_XSS($_REQUEST['origi
$reminder = isset($_REQUEST['reminder']) ? intval($_REQUEST['reminder']) : 0;
$remind_question_id = isset($_REQUEST['remind_question_id']) ? intval($_REQUEST['remind_question_id']) : 0;
$exerciseId = isset($_REQUEST['exerciseId']) ? intval($_REQUEST['exerciseId']) : 0;
$formSent = isset($_REQUEST['formSent']) ? $_REQUEST['formSent'] : null;
$exerciseResult = isset($_REQUEST['exerciseResult']) ? $_REQUEST['exerciseResult'] : null;
$formSent = isset($_REQUEST['formSent']) ? $_REQUEST['formSent'] : null;
$exerciseResult = isset($_REQUEST['exerciseResult']) ? $_REQUEST['exerciseResult'] : null;
$choice = isset($_REQUEST['choice']) ? $_REQUEST['choice'] : null;
$choice = empty($choice) ? isset($_REQUEST['choice2']) ? $_REQUEST['choice2'] : null : null;
$exerciseResultCoordinates = isset($_REQUEST['exerciseResultCoordinates']) ? $_REQUEST['exerciseResultCoordinates'] : null;
$choice = isset($_REQUEST['choice']) ? $_REQUEST['choice'] : null;
$choice = empty($choice) ? isset($_REQUEST['choice2']) ? $_REQUEST['choice2'] : null : null;
//From submit modal
$current_question = isset($_REQUEST['num']) ? intval($_REQUEST['num']) : null;
$current_question = isset($_REQUEST['num']) ? intval($_REQUEST['num']) : null;
//Error message
$error = '';
@ -466,7 +460,7 @@ if ($objExercise->selectAttempts() > 0) {
$attempt_html .= Display::div(get_lang('Score').' '.$marks, array('id'=>'question_score'));
}
}
$score = ExerciseLib::show_score($last_attempt_info['exe_result'], $last_attempt_info['exe_weighting']);
$score = ExerciseLib::show_score($last_attempt_info['exe_result'], $last_attempt_info['exe_weighting']);
$attempt_html .= Display::div(get_lang('YourTotalScore').' '.$score, array('id'=>'question_score'));
} else {
$attempt_html .= Display::return_message(sprintf(get_lang('ReachedMaxAttempts'), $exercise_title, $objExercise->selectAttempts()), 'warning', false);
@ -485,8 +479,9 @@ if ($objExercise->selectAttempts() > 0) {
}
echo $attempt_html;
if ($origin != 'learnpath')
if ($origin != 'learnpath') {
Display :: display_footer();
}
exit;
}
}
@ -517,17 +512,16 @@ if (!isset($_SESSION['questionList'])) {
}
//Fix in order to get the correct question list
$question_list_flatten = $objExercise->transform_question_list_with_medias($questionList, true);
$questionListFlatten = $objExercise->transform_question_list_with_medias($questionList, true);
Session::write('question_list_flatten', $question_list_flatten);
Session::write('question_list_flatten', $questionListFlatten);
$clock_expired_time = null;
if (empty($exercise_stat_info)) {
if ($debug) error_log('5 $exercise_stat_info is empty ');
$total_weight = 0;
//$questionList = $objExercise->get_question_list(true);
foreach ($question_list_flatten as $question_id) {
foreach ($questionListFlatten as $question_id) {
$objQuestionTmp = Question::read($question_id);
$total_weight += floatval($objQuestionTmp->weighting);
}
@ -545,7 +539,7 @@ if (empty($exercise_stat_info)) {
$_SESSION['expired_time'][$current_expired_time_key] = $clock_expired_time;
if ($debug) { error_log('5.4. Setting the $_SESSION[expired_time]: '.$_SESSION['expired_time'][$current_expired_time_key] ); };
}
$exe_id = $objExercise->save_stat_track_exercise_info($clock_expired_time, $learnpath_id, $learnpath_item_id, $learnpath_item_view_id, $question_list_flatten, $total_weight);
$exe_id = $objExercise->save_stat_track_exercise_info($clock_expired_time, $learnpath_id, $learnpath_item_id, $learnpath_item_view_id, $questionListFlatten, $total_weight);
$exercise_stat_info = $objExercise->get_stat_track_exercise_info($learnpath_id, $learnpath_item_id, $learnpath_item_view_id);
if ($debug) error_log("5.5 Creating a new attempt exercise_stat_info[] exe_id : $exe_id");
} else {
@ -868,10 +862,6 @@ if (api_is_course_admin() && $origin != 'learnpath') {
if ($objExercise->type == ONE_PER_PAGE) {
$exercise_result = get_answered_questions_from_attempt($exe_id, $objExercise);
$conditions = array();
$conditions[] = array("class" => 'remind', 'items' => $my_remind_list);
$conditions[] = array("class" => 'answered', 'items' => $exercise_result);
$link = api_get_self().'?'.$params.'&num=';
$fixedRemindList = array();
if (!empty($my_remind_list)) {
@ -888,10 +878,10 @@ if ($objExercise->type == ONE_PER_PAGE) {
}
$categoryList = Session::read('categoryList');
//$categoryList = null;
$categoryList = null;
if (empty($categoryList)) {
$categoryList = Testcategory::getListOfCategoriesWithQuestionForTestObject($objExercise, $questionList);
$categoryList = Testcategory::getListOfCategoriesWithQuestionForTestObject($objExercise, $questionListFlatten, $mediaQuestions);
Session::write('categoryList', $categoryList);
}
@ -905,10 +895,16 @@ if ($objExercise->type == ONE_PER_PAGE) {
echo Display::label(get_lang('Answered'), 'success').'<br />'.Display::label(get_lang('Unanswered')).'<br />'.$reviewAnswerLabel.Display::label(get_lang('CurrentQuestion'), 'info');
echo '</div>';
$conditions = array();
$conditions[] = array("class" => 'remind', 'items' => $my_remind_list);
$conditions[] = array("class" => 'answered', 'items' => $exercise_result);
$link = api_get_self().'?'.$params.'&num=';
//var_dump($categoryList);
echo '<div class="span10">';
if (!empty($categoryList)) {
//var_dump($categoryList, $mediaQuestions);
echo Display::progress_pagination_bar_with_categories($categoryList, $mediaQuestions, $current_question, $conditions, $link);
echo Display::progress_pagination_bar_with_categories($questionList, $categoryList, $current_question, $conditions, $link);
} else {
echo Display::progress_pagination_bar($questionList, $current_question, $conditions, $link);
}

@ -367,8 +367,8 @@ abstract class Question
/**
* changes the question weighting
*
* @author - Olivier Brouckaert
* @param - integer $weighting - question weighting
* @author Olivier Brouckaert
* @param integer $weighting - question weighting
*/
public function updateWeighting($weighting)
{
@ -376,8 +376,8 @@ abstract class Question
}
/**
* @author - Hubert Borderiou 12-10-2011
* @param - array of category $in_category
* @author Hubert Borderiou 12-10-2011
* @param array of category $in_category
*/
public function updateCategory($category_list)
{
@ -385,8 +385,8 @@ abstract class Question
}
/**
* @author - Hubert Borderiou 12-10-2011
* @param - interger $in_positive
* @author Hubert Borderiou 12-10-2011
* @param interger $in_positive
*/
public function updateScoreAlwaysPositive($in_positive)
{
@ -394,8 +394,8 @@ abstract class Question
}
/**
* @author - Hubert Borderiou 12-10-2011
* @param - interger $in_positive
* @author Hubert Borderiou 12-10-2011
* @param interger $in_positive
*/
public function updateUncheckedMayScore($in_positive)
{
@ -408,8 +408,8 @@ abstract class Question
* A question can have n categories
* if category is empty, then question has no category then delete the category entry
*
* @param - int $in_positive
* @author - Julio Montoya - Adding multiple cat support
* @param array category list
* @author Julio Montoya - Adding multiple cat support
*/
public function saveCategories($category_list)
{
@ -441,6 +441,8 @@ abstract class Question
Database::query($sql);
}
}
} else {
$this->deleteCategory();
}
}
@ -476,10 +478,8 @@ abstract class Question
}
/**
* Deletes any category entry for question id
* @author hubert borderiou 12-10-2011
* delete any category entry for question id
* @param : none
* delte the category for question
*/
public function deleteCategory()
{
@ -491,10 +491,10 @@ abstract class Question
}
/**
* changes the question position
* Changes the question position
*
* @author - Olivier Brouckaert
* @param - integer $position - question position
* @author Olivier Brouckaert
* @param integer $position - question position
*/
public function updatePosition($position)
{
@ -502,10 +502,10 @@ abstract class Question
}
/**
* changes the question level
* Changes the question level
*
* @author - Nicolas Raynaud
* @param - integer $level - question level
* @author Nicolas Raynaud
* @param integer $level - question level
*/
public function updateLevel($level)
{
@ -516,8 +516,8 @@ abstract class Question
* changes the answer type. If the user changes the type from "unique answer" to "multiple answers"
* (or conversely) answers are not deleted, otherwise yes
*
* @author - Olivier Brouckaert
* @param - integer $type - answer type
* @author Olivier Brouckaert
* @param integer $type - answer type
*/
public function updateType($type)
{
@ -550,6 +550,7 @@ abstract class Question
* @author Olivier Brouckaert
* @param string $Picture - temporary path of the picture to upload
* @param string $PictureName - Name of the picture
* @param string
* @return bool - true if uploaded, otherwise false
*/
public function uploadPicture($Picture, $PictureName, $picturePath = null)
@ -1422,11 +1423,10 @@ abstract class Question
$("#category_id").trigger("addItem",[{"title": data.title, "value": data.value}]);
}
}
},
});
} else {
// Removes all items
var all = $("#category_id").trigger("selectAll");
all.each(function(index, value) {
@ -1441,7 +1441,6 @@ abstract class Question
});
});
// hub 13-12-2010
function visiblerDevisibler(in_id) {
if (document.getElementById(in_id)) {
@ -1694,9 +1693,7 @@ abstract class Question
} else {
//echo $url = '<a href="question_pool.php?'.api_get_cidreq().'&fromExercise='.$exerciseId.'">';
}
echo $url = '<a href="'.api_get_path(WEB_PUBLIC_PATH).'courses/'.api_get_course_path().'/'.api_get_session_id().'/exercise/'.$exerciseId.'/question-pool">';
echo Display::return_icon('database.png', get_lang('GetExistingQuestion'));
}
echo '</a>';
@ -2008,7 +2005,6 @@ abstract class Question
public static function getQuestionColumns($courseCode = null, $extraFields = array(), $questionFields = array(), $checkFields = false)
{
// The order is important you need to check the the $column variable in the model.ajax.php file
//$columns = array('id', get_lang('Name'), get_lang('Description'));
$columns = array('id', get_lang('Name'));
// Column config.
@ -2024,14 +2020,7 @@ abstract class Question
'index' => 'question',
'width' => '200',
'align' => 'left'
),
/* array(
'name' => 'description',
'index' => 'description',
'width' => '100',
'align' => 'left',
'sortable' => 'false'
)*/
)
);
//var_dump($extraFields, $questionFields);
// Extra field rules.
@ -2047,9 +2036,7 @@ abstract class Question
$columnModel[] = array(
'name' => 'actions',
'index' => 'actions',
'width' => '30',
// 'align' => 'left',
// 'sortable' => 'false'
'width' => '30'
);
foreach ($columnModel as $col) {
@ -2479,7 +2466,6 @@ abstract class Question
}
}
if (!empty($fields)) {
foreach ($fields as $field) {
@ -2518,6 +2504,7 @@ abstract class Question
}
/**
*
* @param $exerciseId
* @param $mediaId
* @return array|bool
@ -2529,12 +2516,12 @@ abstract class Question
$questionTable = Database::get_course_table(TABLE_QUIZ_QUESTION);
$questionRelExerciseTable = Database::get_course_table(TABLE_QUIZ_TEST_QUESTION);
$sql = "SELECT * FROM $questionTable q INNER JOIN $questionRelExerciseTable r ON (q.iid = r.question_id)
$sql = "SELECT q.* FROM $questionTable q INNER JOIN $questionRelExerciseTable r ON (q.iid = r.question_id)
WHERE (r.exercice_id = $exerciseId AND q.parent_id = $mediaId) ";
$result = Database::query($sql);
if (Database::num_rows($result)) {
return Database::store_result($result);
return Database::store_result($result, 'ASSOC');
}
return false;
}
@ -2570,6 +2557,7 @@ abstract class Question
public function allQuestionWithMediaHaveTheSameCategory($exerciseId, $mediaId, $categoryListToCompare = array(), $ignoreQuestionId = null, $returnCategoryId = false)
{
$questions = $this->getQuestionCategoriesOfMediaQuestions($exerciseId, $mediaId);
$result = false;
$categoryId = null;
if (empty($questions)) {

@ -80,6 +80,7 @@ $column_model = array(
//Autowidth
$extra_params['autowidth'] = 'true';
//height auto
$extra_params['height'] = 'auto';
@ -102,6 +103,10 @@ $action_links = 'function action_formatter(cellvalue, options, rowObject) {
// grid definition see the $career->display() function
echo Display::grid_js('question_list', $url, $columns, $column_model, $extra_params, array(), $action_links, true);
?>
$("#question_list").jqGrid('navGrid','#question_list_pager',
{search:false, edit:false, add:false, del:false, refresh:true}
);
});
</script>
@ -115,7 +120,7 @@ $action_links = 'function action_formatter(cellvalue, options, rowObject) {
<?php
Question :: display_type_menu($objExercise);
Question::display_type_menu($objExercise);
echo Question::getMediaLabels();
echo '<br/><div style="clear:both;"></div>';

@ -509,26 +509,35 @@ class Testcategory
/**
* @param Exercise $exercise_obj
* @return array
* @return array question list (flatten not grouped by Medias)
*/
public static function getListOfCategoriesWithQuestionForTestObject($exercise_obj, $question_list)
public static function getListOfCategoriesWithQuestionForTestObject($exercise_obj, $questionList, $mediaQuestions)
{
//$question_list = $exercise_obj->selectQuestionList();
$categoriesWithQuestion = array();
$parentsLoaded = array();
global $app;
$em = $app['orm.em'];
$repo = $em->getRepository('Entity\CQuizCategory');
// the array given by selectQuestionList start at indice 1 and not at indice 0 !!! ???
foreach ($question_list as $question_id) {
$category_list = Testcategory::getCategoryForQuestion($question_id);
foreach ($category_list as $categoryId) {
$newMediaList = array();
foreach ($mediaQuestions as $mediaId => $questionMediaList) {
foreach ($questionMediaList as $questionId) {
$newMediaList[$questionId] = $mediaId;
}
}
foreach ($questionList as $question_id) {
//var_dump($question_id);
$categoryList = Testcategory::getCategoryForQuestion($question_id);
//var_dump($categoryList);
foreach ($categoryList as $categoryId) {
if (!isset($categoriesWithQuestion[$categoryId])) {
$cat = new Testcategory($categoryId);
$cat = (array)$cat;
$cat['iid'] = $cat['id'];
$cat['name'] = $cat['title'];
if (!empty($cat['parent_id'])) {
if (!isset($parentsLoaded[$cat['parent_id']])) {
$categoryEntity = $em->find('Entity\CQuizCategory', $cat['parent_id']);
@ -549,14 +558,15 @@ class Testcategory
$temp = isset($categoriesWithQuestion[$categoryId]) ? $categoriesWithQuestion[$categoryId]['question_list'] : array();
$categoriesWithQuestion[$categoryId] = $cat;
$categoriesWithQuestion[$categoryId]['question_list'] = $temp;
$categoriesWithQuestion[$categoryId]['media_question'] = $newMediaList[$question_id];
} else {
$categoriesWithQuestion[$categoryId] = $cat;
$categoriesWithQuestion[$categoryId]['media_question'] = $newMediaList[$question_id];
}
}
$categoriesWithQuestion[$categoryId]['question_list'][] = (int)$question_id;
}
}
return $categoriesWithQuestion;
}

@ -24,15 +24,15 @@ $course_code = isset($_REQUEST['cidReq']) ? $_REQUEST['cidReq'] : api_get_course
switch ($action) {
case 'get_categories_by_media':
$questionId = $_REQUEST['questionId'];
$id = $_REQUEST['mediaId'];
$mediaId = $_REQUEST['mediaId'];
$exerciseId = $_REQUEST['exerciseId'];
$question = Question::read($questionId);
if (empty($id)) {
if (empty($mediaId)) {
echo 0;
break;
}
$categoryId = $question->allQuestionWithMediaHaveTheSameCategory($exerciseId, $id, null, null, true);
$categoryId = $question->allQuestionWithMediaHaveTheSameCategory($exerciseId, $mediaId, null, null, true);
if (!empty($categoryId)) {
$category = new Testcategory($categoryId);

@ -169,12 +169,6 @@ if (!$sidx) {
//@todo rework this
switch ($action) {
case 'get_questions':
$categoryId = isset($_REQUEST['categoryId']) ? $_REQUEST['categoryId'] : null;
$exerciseId = isset($_REQUEST['exerciseId']) ? $_REQUEST['exerciseId'] : null;
$courseId = isset($_REQUEST['courseId']) ? $_REQUEST['courseId'] : null;
$count = Question::getQuestions($categoryId, $exerciseId, $courseId, array('where'=> $where_condition, 'extra' => $extra_fields, 'question' => $questionFields), true);
break;
case 'get_user_list_plugin_widescale':
$count = UserManager::get_user_data(null, null, null, null, true);
break;
@ -315,42 +309,6 @@ $is_allowedToEdit = api_is_allowed_to_edit(null, true) || api_is_allowed_to_edit
$columns = array();
switch ($action) {
case 'get_questions':
// @todo implement a class that manages jqgrid petitions
/** @var \Entity\Repository\CQuizQuestionRepository $repo */
/*$repo = $em->getRepository('Entity\CQuizQuestion');
var_dump($where_condition, $extra_fields);
$qb = $repo->getQuestionsByCategory($categoryId);
if (!empty($sidx) && strlen($sidx) > 1) {
$sidx = 'q.'.$sidx;
$sord = strtoupper($sord);
$qb->addOrderBy($sidx, $sord);
}
$qb->getFirstResult($start);
$qb->getMaxResults($limit);
$query = $qb->getQuery();
//echo $qb->getQuery()->getSQL();
$questions = $query->getResult();*/
/** @var \Entity\CQuizCategory $category */
/*$category = $repo->find($categoryId);
$questions = $category->getQuestions();*/
$columns = Question::getQuestionColumns(api_get_course_id(), $questionFields);
$columns = $columns['simple_column_name'];
$result = Question::getQuestions(
$categoryId,
$exerciseId,
$courseId,
array(
'where'=> $where_condition,
'order'=>"$sidx $sord",
'extra' => $extra_fields,
'question' => $questionFields,
'limit'=> "$start , $limit"
)
);
break;
case 'get_user_list_plugin_widescale':
$columns = array('username', 'firstname', 'lastname', 'exam_password');
$column_names = array(get_lang('Username'), get_lang('Firstname'), get_lang('Lastname'), get_lang('Password'));
@ -709,8 +667,7 @@ $allowed_actions = array(
'get_user_course_report_resumed',
'get_group_reporting',
'get_question_list',
'get_user_list_plugin_widescale',
'get_questions'
'get_user_list_plugin_widescale'
);
//5. Creating an obj to return a json

@ -1727,7 +1727,7 @@ class Display
/**
* @todo use twig
*/
static function group_button($title, $elements)
public static function group_button($title, $elements)
{
$html = '<div class="btn-toolbar">
<div class="btn-group">
@ -1749,17 +1749,17 @@ class Display
* @param string $link
* @return string
*/
public static function progress_pagination_bar($list, $current, $conditions = array(), $link = null, $counter = null)
public static function progress_pagination_bar($list, $current, $conditions = array(), $link = null, $counter = null, $addLetters = false, $fixValue = null)
{
if (empty($counter)) {
$counter = 1;
}
$fixedCounter = $counter;
$pagination_size = 'pagination-mini';
//$html = '<div class="exercise_pagination pagination '.$pagination_size.' pagination-centered"><ul>';
$html = '<div class="exercise_pagination pagination '.$pagination_size.'"><ul>';
$cleanCounter = 1;
foreach ($list as $item_id) {
$class = "active";
//$class = "active";
if ($counter < $current) {
// $class = "before";
}
@ -1795,11 +1795,20 @@ class Display
if (empty($link)) {
$link_to_show = "#";
} else {
$link_counter = $counter -1;
$link_counter = $counter - 1;
$link_to_show = $link.$link_counter;
}
$html .= '<li class = "'.$class.'"><a href="'.$link_to_show.'">'.$counter.'</a></li>';
$label = $counter;
if ($addLetters) {
$label = $fixValue.' '.chr(96 + $cleanCounter);
$link_to_show = $link.($fixedCounter - 1);
}
$html .= '<li class = "'.$class.'"><a href="'.$link_to_show.'">'.$label.'</a></li>';
$counter++;
$cleanCounter++;
}
$html .= '</ul></div>';
return $html;
@ -1808,6 +1817,7 @@ class Display
/**
* Shows a list of numbers that represents the question to answer in a exercise
*
* @param array $questionList unflatten question list with medias
* @param array $categories
* @param array $mediaQuestions
* @param int $current
@ -1815,30 +1825,40 @@ class Display
* @param string $link
* @return string
*/
public static function progress_pagination_bar_with_categories($categories, $mediaQuestions, $current, $conditions = array(), $link = null)
public static function progress_pagination_bar_with_categories($unflattenQuestionList, $categories, $current, $conditions = array(), $link = null)
{
$counter = 0;
$totalTemp = 0;
$counter = 1;
$html = null;
var_dump($categories);
$mediaUsedCounter = 0;
//var_dump($categories);
if (!empty($categories)) {
foreach ($categories as $category) {
$list = $category['question_list'];
if ($counter > 0) {
$total = $totalTemp + 1;
} else {
$total = 0;
//var_dump($counter);
$questionList = $category['question_list'];
// In this category there are media questions
$mediaQuestionId = $category['media_question'];
$useLetters = false;
$fixValue = null;
if ($mediaQuestionId != 999) {
$useLetters = true;
$fixValue = $counter;
$mediaUsedCounter++;
}
$html .= '<div class="row">';
$html .= '<div class="span2">'.$category['name'].'</div>';
$html .= '<div class="span8">';
$html .= self::progress_pagination_bar($list, $current, $conditions, $link, $total);
$html .= self::progress_pagination_bar($questionList, $current, $conditions, $link, $counter, $useLetters, $fixValue);
$html .= '</div>';
$html .= '</div>';
$totalTemp = $totalTemp + count($list);
if ($mediaQuestionId != 999) {
$fixValue = $counter + count($questionList);
} else {
$counter = $counter + count($questionList)- 1;
}
$counter++;
}
}

Loading…
Cancel
Save