No using session when doing stats (only admin can access this stats).

skala
Julio Montoya 12 years ago
parent 8903a0b7df
commit 3aca2840b5
  1. 2
      main/exercice/exercise.class.php
  2. 8
      main/exercice/testcategory.class.php
  3. 25
      main/inc/Entity/Repository/TrackExerciseRepository.php
  4. 61
      main/inc/ajax/exercise.ajax.php
  5. 24
      main/template/minedu/admin/exercise_statistics/exercise_distribution/index.tpl
  6. 43
      src/ChamiloLMS/Controller/Admin/ExerciseStatistics/ExerciseStatisticsController.php

@ -710,7 +710,7 @@ class Exercise
* Gets the question list ordered by the question_order setting (drag and drop) * Gets the question list ordered by the question_order setting (drag and drop)
* @return array * @return array
*/ */
private function getQuestionOrderedList() public function getQuestionOrderedList()
{ {
$questionList = array(); $questionList = array();

@ -1068,8 +1068,15 @@ class Testcategory
$globalCategoryScore = array(); $globalCategoryScore = array();
foreach ($category_list as $category_id => $category_item) { foreach ($category_list as $category_id => $category_item) {
/** @var Entity\CQuizCategory $cat */ /** @var Entity\CQuizCategory $cat */
$cat = $em->find('Entity\CQuizCategory', $category_id); $cat = $em->find('Entity\CQuizCategory', $category_id);
if (empty($cat)) {
continue;
}
$path = $repo->getPath($cat); $path = $repo->getPath($cat);
if ($loadChildren) { if ($loadChildren) {
@ -1078,6 +1085,7 @@ class Testcategory
} }
$categoryName = $category_name_list[$category_id]; $categoryName = $category_name_list[$category_id];
//$categoryName = $category_item['name'];
$index = 0; $index = 0;
if ($categoryMinusOne) { if ($categoryMinusOne) {

@ -64,6 +64,31 @@ class TrackExerciseRepository extends EntityRepository
return $results; return $results;
} }
/**
* @param int $exerciseId
* @param int $courseId
* @param int $distributionId
* @return array
*/
public function getResultsWithNoSession($exerciseId, $courseId, $distributionId)
{
$qb = $this->createQueryBuilder('e');
$qb->select('e.exeId, e.exeResult')
->where('e.exeExoId = :exerciseId AND e.cId = :courseId AND e.status = :status')
->andWhere('e.quizDistributionId = :distributionId')
->setParameters(
array(
'exerciseId' => $exerciseId,
'courseId' => $courseId,
'status' => '',
'distributionId' => $distributionId
)
);
$results = $qb->getQuery()->getArrayResult();
$results = \array_column($results, 'exeResult', 'exeId');
return $results;
}
/*public function getResultsPerGlobalCategory($exerciseId, $courseId, $sessionId, $distributionId, $globalCategory) /*public function getResultsPerGlobalCategory($exerciseId, $courseId, $sessionId, $distributionId, $globalCategory)
{ {
$qb = $this->createQueryBuilder('e'); $qb = $this->createQueryBuilder('e');

@ -751,9 +751,17 @@ switch ($action) {
echo 0; echo 0;
break; break;
case 'get_modificator': case 'get_modificator':
$sessions = SessionManager::get_session_by_course($_REQUEST['cId']);
if (empty($sessions)) {
echo '0.00';
} else {
$sessionInfo = current($sessions);
$sessionId = $sessionInfo['id'];
}
$params = array( $params = array(
'exerciseId' => $_REQUEST['exerciseId'], 'exerciseId' => $_REQUEST['exerciseId'],
'sessionId' => $_REQUEST['sessionId'], 'sessionId' => $sessionId,
'cId' => $_REQUEST['cId'], 'cId' => $_REQUEST['cId'],
'quizDistributionId' => $_REQUEST['distributionId'], 'quizDistributionId' => $_REQUEST['distributionId'],
'categoryId' => $_REQUEST['categoryId'] 'categoryId' => $_REQUEST['categoryId']
@ -768,32 +776,39 @@ switch ($action) {
} }
break; break;
case 'save_modificator': case 'save_modificator':
$params = array( // Save to all sessions from this course:
'exerciseId' => $_REQUEST['exerciseId'], $sessions = SessionManager::get_session_by_course($_REQUEST['cId']);
'sessionId' => $_REQUEST['sessionId'],
'cId' => $_REQUEST['cId'], foreach ($sessions as $session) {
'quizDistributionId' => $_REQUEST['distributionId'], $sessionId = $session['id'];
'categoryId' => $_REQUEST['categoryId']
); $params = array(
'exerciseId' => $_REQUEST['exerciseId'],
'sessionId' => $sessionId,
'cId' => $_REQUEST['cId'],
'quizDistributionId' => $_REQUEST['distributionId'],
'categoryId' => $_REQUEST['categoryId']
);
$quizDistributionRelSessionRelCategory = $app['orm.em']->getRepository('Entity\CQuizDistributionRelSessionRelCategory')->findOneBy($params); $quizDistributionRelSessionRelCategory = $app['orm.em']->getRepository('Entity\CQuizDistributionRelSessionRelCategory')->findOneBy($params);
if (empty($quizDistributionRelSessionRelCategory)) { if (empty($quizDistributionRelSessionRelCategory)) {
$quizDistributionRelSessionRelCategory = new Entity\CQuizDistributionRelSessionRelCategory(); $quizDistributionRelSessionRelCategory = new Entity\CQuizDistributionRelSessionRelCategory();
$quizDistributionRelSessionRelCategory->setExerciseId($_REQUEST['exerciseId']); $quizDistributionRelSessionRelCategory->setExerciseId($_REQUEST['exerciseId']);
$quizDistributionRelSessionRelCategory->setSessionId($_REQUEST['sessionId']); $quizDistributionRelSessionRelCategory->setSessionId($sessionId);
$quizDistributionRelSessionRelCategory->setCId($_REQUEST['cId']); $quizDistributionRelSessionRelCategory->setCId($_REQUEST['cId']);
$quizDistributionRelSessionRelCategory->setQuizDistributionId($_REQUEST['distributionId']); $quizDistributionRelSessionRelCategory->setQuizDistributionId($_REQUEST['distributionId']);
$quizDistributionRelSessionRelCategory->setCategoryId($_REQUEST['categoryId']); $quizDistributionRelSessionRelCategory->setCategoryId($_REQUEST['categoryId']);
} }
$quizDistributionRelSessionRelCategory->setModifier($_REQUEST['value']); $quizDistributionRelSessionRelCategory->setModifier($_REQUEST['value']);
event_system('update_modificator', 'modifier', $_REQUEST['value']); event_system('update_modificator', 'modifier', $_REQUEST['value']);
event_system('update_modificator', 'exerciseId', $_REQUEST['exerciseId']); event_system('update_modificator', 'exerciseId', $_REQUEST['exerciseId']);
event_system('update_modificator', 'distributionId', $_REQUEST['distributionId']); event_system('update_modificator', 'distributionId', $_REQUEST['distributionId']);
$app['orm.em']->persist($quizDistributionRelSessionRelCategory); $app['orm.em']->persist($quizDistributionRelSessionRelCategory);
$app['orm.em']->flush(); $app['orm.em']->flush();
}
echo 1; echo 1;
break; break;
default: default:

@ -67,10 +67,13 @@
<table class="table"> <table class="table">
<tr> <tr>
<td> <td>
Categorias / Formas id
</td> </td>
{% for distribution in distributions %} {% for distributionId in distributions %}
<td> <td>
{{ distribution.distribution.id }} (# intentos {{ results[distribution.distribution.id].counter }} ) #{{ distributionId }}
<br />
{{ results[distributionId].counter }} intentos
</td> </td>
{% endfor %} {% endfor %}
</tr> </tr>
@ -80,13 +83,16 @@
<td> <td>
{{ category.title }} {{ category.title }}
</td> </td>
{% for distribution in distributions %} {% for distributionId in distributions %}
<td> <td>
{% if results[distribution.distribution.id] and results[distribution.distribution.id][category.id] %} {% if results[distributionId] and results[distributionId][category.id] %}
{% set average = results[distribution.distribution.id][category.id].result / results[distribution.distribution.id].counter %} {% set average = results[distributionId][category.id].result / results[distributionId].counter %}
{{ average|number_format(2) }} ({{ results[distribution.distribution.id][category.id].result }})
{% set id = distribution.distribution.id ~ "_" ~ category.id %} Promedio: {{ average|number_format(2) }}
<br>
Resultado: {{ results[distributionId][category.id].result }}
{% set id = distributionId ~ "_" ~ category.id %}
<a id="button_{{ id }}" class="btn edit">+</a> <a id="button_{{ id }}" class="btn edit">+</a>
@ -128,9 +134,9 @@
<td> <td>
Total Total
</td> </td>
{% for distribution in distributions %} {% for distributionId in distributions %}
<td> <td>
{{ results[distribution.distribution.id].total }} {{ results[distributionId].total }}
</td> </td>
{% endfor %} {% endfor %}
</tr> </tr>

@ -13,6 +13,7 @@ use Sensio\Bundle\FrameworkExtraBundle\Configuration\Method;
use ChamiloLMS\Form\CQuizDistributionType; use ChamiloLMS\Form\CQuizDistributionType;
use Doctrine\Common\Collections\Criteria; use Doctrine\Common\Collections\Criteria;
use Doctrine\Common\Collections\ArrayCollection; use Doctrine\Common\Collections\ArrayCollection;
use Symfony\Component\Validator\Tests\ValidationVisitorTest;
/** /**
* Class ExerciseStatisticsController * Class ExerciseStatisticsController
@ -29,6 +30,10 @@ class ExerciseStatisticsController extends CommonController
*/ */
public function indexAction($exerciseId) public function indexAction($exerciseId)
{ {
if (!api_is_platform_admin()) {
return $this->abort(500);
}
set_time_limit(0); set_time_limit(0);
$template = $this->get('template'); $template = $this->get('template');
@ -44,12 +49,25 @@ class ExerciseStatisticsController extends CommonController
/** @var Gedmo\Tree\Entity\Repository\NestedTreeRepository $repo */ /** @var Gedmo\Tree\Entity\Repository\NestedTreeRepository $repo */
$repo = $em->getRepository('Entity\CQuizCategory'); $repo = $em->getRepository('Entity\CQuizCategory');
// Getting categories
//$questionList = $exercise->getQuestionList();
$questionList = $exercise->getQuestionOrderedList();
// Getting categories // Getting categories
$categories = $exercise->getListOfCategoriesWithQuestionForTest(); $categories = $exercise->getListOfCategoriesWithQuestionForTest();
$cat = new \Testcategory();
$categoriesAddedInExercise = $cat->getCategoryExerciseTree($exerciseId, $courseId, 'root, lft ASC', false, true, false);
$categories = \Testcategory::getQuestionsByCat($exerciseId, $questionList, $categoriesAddedInExercise, $courseId);
$categories = $exercise->fillQuestionByCategoryArray($categories);
$categories = $exercise->getListOfCategoriesWithQuestionForTest($categories);
$globalCategories = \Testcategory::globalizeCategories($exerciseId, $courseId, $categories, true, true); $globalCategories = \Testcategory::globalizeCategories($exerciseId, $courseId, $categories, true, true);
$categoryList = array(); $categoryList = array();
$categoryListInverse = array(); $categoryListInverse = array();
foreach ($globalCategories as $categoryId => & $data) { foreach ($globalCategories as $categoryId => & $data) {
$data['id'] = $categoryId; $data['id'] = $categoryId;
$cat = $em->find('Entity\CQuizCategory', $categoryId); $cat = $em->find('Entity\CQuizCategory', $categoryId);
@ -73,6 +91,7 @@ class ExerciseStatisticsController extends CommonController
} }
} }
if (empty($categories) || empty($globalCategories)) { if (empty($categories) || empty($globalCategories)) {
throw new \Exception('No categories in this exercise.'); throw new \Exception('No categories in this exercise.');
} }
@ -82,13 +101,15 @@ class ExerciseStatisticsController extends CommonController
foreach ($categories as $categoryData) { foreach ($categories as $categoryData) {
foreach ($categoryData['question_list'] as $questionId) { foreach ($categoryData['question_list'] as $questionId) {
//$questionListWithCategory[$questionId] = $categoryData['id']; //$questionListWithCategory[$questionId] = $categoryData['id'];
$questionListWithCategory[$questionId] = $categoryListInverse[$categoryData['id']]; if (isset($categoryListInverse[$categoryData['id']])) {
$questionListWithCategory[$questionId] = $categoryListInverse[$categoryData['id']];
}
} }
} }
$params = array( $params = array(
'exerciseId' => $exerciseId, 'exerciseId' => $exerciseId,
'sessionId' => $sessionId, //'sessionId' => $sessionId,
'cId' => $course->getId() 'cId' => $course->getId()
); );
@ -101,21 +122,24 @@ class ExerciseStatisticsController extends CommonController
// Getting results per distribution // Getting results per distribution
$attemptsPerDistribution = array(); $attemptsPerDistribution = array();
/** @var Entity\CQuizDistributionRelSession $distribution */
$distributionIdList = array();
foreach ($quizDistributionRelSessions as $distribution) { foreach ($quizDistributionRelSessions as $distribution) {
$attemptsPerDistribution[$distribution->getQuizDistributionId()] = $em->getRepository("Entity\TrackExercise")->getResults( $attemptsPerDistribution[$distribution->getQuizDistributionId()] = $em->getRepository("Entity\TrackExercise")->getResultsWithNoSession(
$exerciseId, $exerciseId,
$courseId, $courseId,
$sessionId, //$sessionId,
$distribution->getQuizDistributionId() $distribution->getQuizDistributionId()
); );
} }
$distributionIdList = array_keys($attemptsPerDistribution);
if (empty($attemptsPerDistribution)) { if (empty($attemptsPerDistribution)) {
throw new \Exception('Not enough data. TrackExercise has not quizDistributionId'); throw new \Exception('Not enough data. TrackExercise has not quizDistributionId');
} }
foreach ($quizDistributionRelSessions as $distribution) { foreach ($distributionIdList as $distributionId) {
$distributionId = $distribution->getQuizDistributionId();
$attemptList = $attemptsPerDistribution[$distributionId]; $attemptList = $attemptsPerDistribution[$distributionId];
$exeIdList = array_keys($attemptList); $exeIdList = array_keys($attemptList);
$markPerQuestions = $em->getRepository("Entity\TrackAttempt")->getResults( $markPerQuestions = $em->getRepository("Entity\TrackAttempt")->getResults(
@ -125,6 +149,9 @@ class ExerciseStatisticsController extends CommonController
$total = 0; $total = 0;
if (!empty($markPerQuestions)) { if (!empty($markPerQuestions)) {
foreach ($markPerQuestions as $questionId => $marks) { foreach ($markPerQuestions as $questionId => $marks) {
/*if (!isset($questionListWithCategory[$questionId])) {
continue;
}*/
$categoryId = $questionListWithCategory[$questionId]; $categoryId = $questionListWithCategory[$questionId];
if (!isset($finalResults[$distributionId][$categoryId])) { if (!isset($finalResults[$distributionId][$categoryId])) {
$finalResults[$distributionId][$categoryId]['result'] = 0; $finalResults[$distributionId][$categoryId]['result'] = 0;
@ -145,10 +172,8 @@ class ExerciseStatisticsController extends CommonController
$template->assign('total', $total); $template->assign('total', $total);
$template->assign('cId', $this->getCourseId()); $template->assign('cId', $this->getCourseId());
$template->assign('exerciseId', $exerciseId); $template->assign('exerciseId', $exerciseId);
$template->assign('sessionId', $this->getSessionId()); $template->assign('sessionId', $this->getSessionId());
$template->assign('distributions', $distributionIdList);
$template->assign('distributions', $quizDistributionRelSessions);
$response = $template->render_template($this->getTemplatePath().'index.tpl'); $response = $template->render_template($this->getTemplatePath().'index.tpl');
return new Response($response, 200, array()); return new Response($response, 200, array());
} }

Loading…
Cancel
Save