Should fix question pagination BT#6996

skala
Julio Montoya 12 years ago
parent 36d625ca98
commit 3535151c5f
  1. 104
      main/exercice/exercise.class.php
  2. 11
      main/exercice/testcategory.class.php

@ -959,13 +959,88 @@ class Exercise
* @param array $questions_by_category
* @return array
*/
function fillQuestionByCategoryArray($questions_by_category)
function fillQuestionByCategoryArrayPerQuestion($questions_by_category)
{
global $app;
$em = $app['orm.em'];
$repo = $em->getRepository('Entity\CQuizCategory');
$newCategoryList = array();
if (!empty($questions_by_category)) {
foreach ($questions_by_category as $categoryInfo) {
$categoryId = $categoryInfo['categoryId'];
$questionList = array($categoryInfo['questionId']);
$cat = new Testcategory($categoryId);
$cat = (array)$cat;
$cat['iid'] = $cat['id'];
$cat['name'] = $cat['title'];
$categoryParentInfo = null;
if (!empty($cat['parent_id'])) {
if (!isset($parentsLoaded[$cat['parent_id']])) {
$categoryEntity = $em->find('Entity\CQuizCategory', $cat['parent_id']);
$parentsLoaded[$cat['parent_id']] = $categoryEntity;
} else {
$categoryEntity = $parentsLoaded[$cat['parent_id']];
}
$path = $repo->getPath($categoryEntity);
/*$index = 0;
if ($this->categoryMinusOne) {
$index = 1;
}*/
/** @var Entity\CQuizCategory $categoryParent*/
foreach ($path as $categoryParent) {
$visibility = $categoryParent->getVisibility();
if ($visibility == 0) {
$categoryParentId = $categoryId;
$categoryTitle = $cat['title'];
if (count($path) > 1) {
continue;
}
} else {
$categoryParentId = $categoryParent->getIid();
$categoryTitle = $categoryParent->getTitle();
}
$categoryParentInfo['id'] = $categoryParentId;
$categoryParentInfo['iid'] = $categoryParentId;
$categoryParentInfo['parent_path'] = null;
$categoryParentInfo['title'] = $categoryTitle;
$categoryParentInfo['name'] = $categoryTitle;
$categoryParentInfo['parent_id'] = null;
break;
}
}
$cat['parent_info'] = $categoryParentInfo;
//$newCategoryList[$categoryId] = array(
$newCategoryList[] = array(
'category' => $cat,
'question_list' => $questionList
);
}
}
return $newCategoryList;
}
/**
* @param array $questions_by_category
* @return array
*/
function fillQuestionByCategoryArray($questions_by_category)
{
global $app;
$em = $app['orm.em'];
$repo = $em->getRepository('Entity\CQuizCategory');
$newCategoryList = array();
if (!empty($questions_by_category)) {
foreach ($questions_by_category as $categoryId => $questionList) {
$cat = new Testcategory($categoryId);
@ -984,11 +1059,11 @@ class Exercise
}
$path = $repo->getPath($categoryEntity);
$index = 0;
/*$index = 0;
if ($this->categoryMinusOne) {
//$index = 1;
}
$index = 1;
}*/
/** @var Entity\CQuizCategory $categoryParent*/
@ -5570,8 +5645,7 @@ class Exercise
// We make a little shuffle now.
$questionByCategory = Testcategory::getCategoriesFromQuestionList(
$questionList,
$this->course_id,
true
$this->course_id
);
$cat = new Testcategory();
@ -6112,14 +6186,24 @@ class Exercise
if (empty($categoryList)) {
// Old behaviour when sub categories are static.
//$categoryList = $this->getListOfCategoriesWithQuestionForTest();
// $categoryList = $this->getListOfCategoriesWithQuestionForTest();
// Generating category list from the question list, because subcategories can be randomized!
$questionByCategory = Testcategory::getCategoriesFromQuestionList(
$questionList,
$this->course_id
$this->course_id,
true
);
$categoryListFromQuestionList = $this->fillQuestionByCategoryArray($questionByCategory);
// @todo fix before adding to chamilo 1.10
// special hotfix for minedu - this is needed because we use distributions!!
if ($this->getQuestionSelectionType() == EX_Q_SELECTION_CATEGORIES_ORDERED_BY_PARENT_QUESTIONS_RANDOM) {
$categoryListFromQuestionList = $this->fillQuestionByCategoryArrayPerQuestion($questionByCategory);
} else {
$categoryListFromQuestionList = $this->fillQuestionByCategoryArray($questionByCategory);
}
$categoryList = $this->getListOfCategoriesWithQuestionForTest($categoryListFromQuestionList);
Session::write('categoryList', $categoryList);
@ -6287,7 +6371,6 @@ class Exercise
$nextValue = 0;
$wasMedia = false;
$before = 0;
if (!empty($categories)) {
$selectionType = $this->getQuestionSelectionType();
$useRootAsCategoryTitle = false;
@ -6369,6 +6452,7 @@ class Exercise
$nextValue = $nextValue - $before + 1;
}
}
$html .= Display::progressPaginationBar(
$nextValue,
$questionList,

@ -1349,13 +1349,20 @@ class Testcategory
* @param int $courseId
* @return array
*/
public static function getCategoriesFromQuestionList($questionList, $courseId)
public static function getCategoriesFromQuestionList($questionList, $courseId, $multipleCategoriesAllowed = false)
{
$categories = array();
foreach ($questionList as $questionId) {
$categoryList = self::getCategoryForQuestionWithCategoryData($questionId, $courseId);
foreach ($categoryList as $categoryData) {
$categories[$categoryData['iid']][] = $questionId;
if ($multipleCategoriesAllowed) {
$categories[] = array(
'categoryId' => $categoryData['iid'],
'questionId' => $questionId
);
} else {
$categories[$categoryData['iid']][] = $questionId;
}
}
}
return $categories;

Loading…
Cancel
Save