Improving results page. (Work in progress) see BT#6397

skala
Julio Montoya 12 years ago
parent c04a6ec240
commit cbe3969897
  1. 4
      main/inc/Entity/CurriculumItemRelUser.php
  2. 5
      main/inc/Entity/Repository/CurriculumItemRelUserRepository.php
  3. 20
      main/inc/Entity/User.php
  4. 29
      main/template/minedu/tool/curriculum/category/results.tpl
  5. 109
      src/ChamiloLMS/Controller/Tool/Curriculum/CurriculumCategoryController.php
  6. 2
      src/ChamiloLMS/Controller/Tool/Curriculum/CurriculumUserController.php

@ -50,7 +50,7 @@ class CurriculumItemRelUser
private $description; private $description;
/** /**
* @ORM\ManyToOne(targetEntity="User")) * @ORM\ManyToOne(targetEntity="User", inversedBy="curriculumItems"))
* @ORM\JoinColumn(name="user_id", referencedColumnName="user_id", nullable=true) * @ORM\JoinColumn(name="user_id", referencedColumnName="user_id", nullable=true)
*/ */
private $user; private $user;
@ -78,7 +78,7 @@ class CurriculumItemRelUser
} }
/** /**
* @return mixed * @return CurriculumItem
*/ */
public function getItem() public function getItem()
{ {

@ -13,8 +13,8 @@ class CurriculumItemRelUserRepository extends EntityRepository
{ {
/** /**
* Get all users that are registered in the course. No matter the status * Get all users that are registered in the course. No matter the status
* * @param \Entity\CurriculumItem $item
* @param \Entity\CurriculumItem $course * @param \Entity\User $user
* @return bool * @return bool
*/ */
public function isAllowToInsert(\Entity\CurriculumItem $item, \Entity\User $user) public function isAllowToInsert(\Entity\CurriculumItem $item, \Entity\User $user)
@ -33,6 +33,5 @@ class CurriculumItemRelUserRepository extends EntityRepository
->getQuery() ->getQuery()
->getSingleScalarResult(); ->getSingleScalarResult();
return $count <= $max ? true : false; return $count <= $max ? true : false;
} }
} }

@ -249,9 +249,8 @@ class User implements AdvancedUserInterface, \Serializable , EquatableInterface
private $isActive; private $isActive;
/** /**
* @ORM\ManyToOne(targetEntity="CurriculumItemRelUser") * @ORM\OneToMany(targetEntity="CurriculumItemRelUser", mappedBy="user")
* @ORM\JoinColumn(name="user_id", referencedColumnName="user_id", nullable=true) **/
*/
private $curriculumItems; private $curriculumItems;
/** /**
@ -1159,4 +1158,19 @@ class User implements AdvancedUserInterface, \Serializable , EquatableInterface
{ {
return $this->hrDeptId; return $this->hrDeptId;
} }
/**
* @todo use SUM
* @return int
*/
public function getCurriculumScore()
{
$items = $this->getCurriculumItems();
$score = 0;
/** @var \Entity\CurriculumItemRelUser $itemRelUser */
foreach ($items as $itemRelUser) {
$score += $itemRelUser->getItem()->getScore();
}
return $score ;
}
} }

@ -2,15 +2,22 @@
{% block content %} {% block content %}
{{ 'Results' | trans }} {{ 'Results' | trans }}
<hr /> <hr />
<ul> {% if pagination != '' %}
{% for user in users %} <ul>
<li> {% for user in pagination.currentPageResults %}
{{ user.complete_name }} - {{ user.score }} <li>
<a class="btn" href="{{ url('curriculum_user.controller:getUserItemsAction', {{ user.firstname }} - {{ user.lastname }} {{ user.score }}
{ 'userId': user.user_id, 'course' : course.code, 'id_session' : course_session.id }) }}"> <a class="btn" href="{{ url('curriculum_user.controller:getUserItemsAction',
{{ 'Details' | trans }} { 'userId': user.userId, 'course' : course.code, 'id_session' : course_session.id }) }}">
</a> {{ 'Details' | trans }}
</li> </a>
{% endfor %} </li>
</ul> {% endfor %}
</ul>
{% if pagerfanta.haveToPaginate %}
{{ pagerfanta(pagination, 'twitter_bootstrap', { 'proximity': 3 } ) }}
{% endif %}
{% endif %}
{% endblock %} {% endblock %}

@ -11,6 +11,10 @@ use Entity;
use ChamiloLMS\Form\CurriculumCategoryType; use ChamiloLMS\Form\CurriculumCategoryType;
use Symfony\Component\Routing\Annotation\Route; use Symfony\Component\Routing\Annotation\Route;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Method; use Sensio\Bundle\FrameworkExtraBundle\Configuration\Method;
use Pagerfanta\Adapter\DoctrineORMAdapter;
use Pagerfanta\View\TwitterBootstrapView;
use Pagerfanta\Pagerfanta;
/** /**
* Class CurriculumController * Class CurriculumController
@ -26,6 +30,11 @@ class CurriculumCategoryController extends CommonController
*/ */
public function indexAction() public function indexAction()
{ {
// @todo use something better
if (!api_is_allowed_to_edit(true, true, true)) {
$this->abort('405');
}
$breadcrumbs = array( $breadcrumbs = array(
array( array(
'name' => get_lang('Curriculum'), 'name' => get_lang('Curriculum'),
@ -114,6 +123,10 @@ class CurriculumCategoryController extends CommonController
*/ */
public function readCategoryAction($id) public function readCategoryAction($id)
{ {
// @todo use something better
if (!api_is_allowed_to_edit(true, true, true)) {
$this->abort('405');
}
return parent::readAction($id); return parent::readAction($id);
} }
@ -123,6 +136,11 @@ class CurriculumCategoryController extends CommonController
*/ */
public function addCategoryAction() public function addCategoryAction()
{ {
// @todo use something better
if (!api_is_allowed_to_edit(true, true, true)) {
$this->abort('405');
}
$breadcrumbs = array( $breadcrumbs = array(
array( array(
'name' => get_lang('Curriculum'), 'name' => get_lang('Curriculum'),
@ -163,6 +181,11 @@ class CurriculumCategoryController extends CommonController
*/ */
public function addFromParentAction($id) public function addFromParentAction($id)
{ {
// @todo use something better
if (!api_is_allowed_to_edit(true, true, true)) {
$this->abort('405');
}
$breadcrumbs = array( $breadcrumbs = array(
array( array(
'name' => get_lang('Curriculum'), 'name' => get_lang('Curriculum'),
@ -233,6 +256,11 @@ class CurriculumCategoryController extends CommonController
*/ */
public function editCategoryAction($id) public function editCategoryAction($id)
{ {
// @todo use something better
if (!api_is_allowed_to_edit(true, true, true)) {
$this->abort('405');
}
$breadcrumbs = array( $breadcrumbs = array(
array( array(
'name' => get_lang('Curriculum'), 'name' => get_lang('Curriculum'),
@ -269,6 +297,11 @@ class CurriculumCategoryController extends CommonController
*/ */
public function deleteCategoryAction($id) public function deleteCategoryAction($id)
{ {
// @todo use something better
if (!api_is_allowed_to_edit(true, true, true)) {
$this->abort('405');
}
return parent::deleteAction($id); return parent::deleteAction($id);
} }
@ -277,8 +310,13 @@ class CurriculumCategoryController extends CommonController
* @Route("/results") * @Route("/results")
* @Method({"GET"}) * @Method({"GET"})
*/ */
public function resultsAction() public function resultsAction($page = 1)
{ {
// @todo use something better
if (!api_is_allowed_to_edit(true, true, true)) {
$this->abort('405');
}
$breadcrumbs = array( $breadcrumbs = array(
array( array(
'name' => get_lang('Curriculum'), 'name' => get_lang('Curriculum'),
@ -302,10 +340,8 @@ class CurriculumCategoryController extends CommonController
'name' => get_lang('Results'), 'name' => get_lang('Results'),
) )
); );
$this->setBreadcrumb($breadcrumbs); $this->setBreadcrumb($breadcrumbs);
if (!api_is_allowed_to_edit(true, true, true)) {
$this->abort('405');
}
$session = $this->getSession(); $session = $this->getSession();
$sessionId = 0; $sessionId = 0;
@ -313,49 +349,48 @@ class CurriculumCategoryController extends CommonController
$sessionId = $this->getSession()->getId(); $sessionId = $this->getSession()->getId();
} }
// @todo move in a function /*$qb = $this->getManager()
$users = \CourseManager::get_user_list_from_course_code(
$this->getCourse()->getCode(),
$sessionId,
null,
null,
STUDENT
);
$qb = $this->getManager()
->createQueryBuilder() ->createQueryBuilder()
->select('node.id, u.userId, SUM(i.score) as score') ->select('u, u.userId, u.userId, i, SUM(i.score) as score, node')
->from('Entity\CurriculumCategory', 'node') ->from('Entity\CurriculumCategory', 'node')
->innerJoin('node.course', 'c') ->innerJoin('node.course', 'c')
->innerJoin('node.items', 'i') ->innerJoin('node.items', 'i')
->innerJoin('i.userItems', 'u') ->innerJoin('i.userItems', 'u')
->groupby('u.userId') ;*/
//, SUM(i.score) as score
$qb = $this->getManager()
->createQueryBuilder()
->select('u, u.firstname, u.lastname, u.userId, SUM(i.score) as score')
->from('Entity\User', 'u')
->innerJoin('u.curriculumItems', 'ci')
->innerJoin('ci.item', 'i')
->innerJoin('i.category', 'c')
->where('c.cId = :courseId AND (c.sessionId = :sessionId or c.sessionId IS NULL) ')
->setParameters(
array(
'courseId' => $this->getCourse()->getId(),
'sessionId' => $sessionId
)
)
->groupby('u.userId') ; ->groupby('u.userId') ;
$this->setCourseParameters($qb, 'node');
$query = $qb->getQuery();
$userResults = $query->getResult();
$userResultsByUserId = array(); $maxPerPage = 10;
if (!empty($userResults)) {
foreach ($userResults as $item) {
$userResultsByUserId[$item['userId']] = $item['score'];
}
}
if (!empty($users)) { $adapter = new DoctrineORMAdapter($qb);
foreach ($users as &$user) { $pagination = new Pagerfanta($adapter);
if (!empty($userResultsByUserId)) { $pagination->setMaxPerPage($maxPerPage); // 10 by default
if (isset($userResultsByUserId[$user['user_id']])) { $pagination->setCurrentPage($page);
$user['score'] = $userResultsByUserId[$user['user_id']];
} else {
$user['score'] = 0;
}
}
}
}
$template = $this->getTemplate(); $page = 1;
$template->assign('users', $users); $this->app['pagerfanta.view.router.name'] = 'curriculum_category.controller:resultsAction';
$this->app['pagerfanta.view.router.params'] = array(
'course' => $this->getCourse()->getCode(),
'page' => $page
);
$this->app['template']->assign('pagination', $pagination);
$template = $this->getTemplate();
$response = $template->render_template($this->getTemplatePath().'results.tpl'); $response = $template->render_template($this->getTemplatePath().'results.tpl');
return new Response($response, 200, array()); return new Response($response, 200, array());
} }

@ -327,8 +327,6 @@ class CurriculumUserController extends CommonController
} }
} }
var_dump($categoryScore);
$this->get('template')->assign('category_counter', $categoryCounter); $this->get('template')->assign('category_counter', $categoryCounter);
$this->get('template')->assign('categories', $categories); $this->get('template')->assign('categories', $categories);
$this->get('template')->assign('userResultId', $userId); $this->get('template')->assign('userResultId', $userId);

Loading…
Cancel
Save