From cbe3969897f65f938ffbbff54e9f3135750f7613 Mon Sep 17 00:00:00 2001 From: Julio Montoya Date: Thu, 7 Nov 2013 18:10:52 +0100 Subject: [PATCH] Improving results page. (Work in progress) see BT#6397 --- main/inc/Entity/CurriculumItemRelUser.php | 4 +- .../CurriculumItemRelUserRepository.php | 5 +- main/inc/Entity/User.php | 20 +++- .../tool/curriculum/category/results.tpl | 29 +++-- .../CurriculumCategoryController.php | 109 ++++++++++++------ .../Curriculum/CurriculumUserController.php | 2 - 6 files changed, 111 insertions(+), 58 deletions(-) diff --git a/main/inc/Entity/CurriculumItemRelUser.php b/main/inc/Entity/CurriculumItemRelUser.php index 43f68778a4..638c2736fe 100644 --- a/main/inc/Entity/CurriculumItemRelUser.php +++ b/main/inc/Entity/CurriculumItemRelUser.php @@ -50,7 +50,7 @@ class CurriculumItemRelUser private $description; /** - * @ORM\ManyToOne(targetEntity="User")) + * @ORM\ManyToOne(targetEntity="User", inversedBy="curriculumItems")) * @ORM\JoinColumn(name="user_id", referencedColumnName="user_id", nullable=true) */ private $user; @@ -78,7 +78,7 @@ class CurriculumItemRelUser } /** - * @return mixed + * @return CurriculumItem */ public function getItem() { diff --git a/main/inc/Entity/Repository/CurriculumItemRelUserRepository.php b/main/inc/Entity/Repository/CurriculumItemRelUserRepository.php index ddec0cf7ad..a4d6748e47 100644 --- a/main/inc/Entity/Repository/CurriculumItemRelUserRepository.php +++ b/main/inc/Entity/Repository/CurriculumItemRelUserRepository.php @@ -13,8 +13,8 @@ class CurriculumItemRelUserRepository extends EntityRepository { /** * Get all users that are registered in the course. No matter the status - * - * @param \Entity\CurriculumItem $course + * @param \Entity\CurriculumItem $item + * @param \Entity\User $user * @return bool */ public function isAllowToInsert(\Entity\CurriculumItem $item, \Entity\User $user) @@ -33,6 +33,5 @@ class CurriculumItemRelUserRepository extends EntityRepository ->getQuery() ->getSingleScalarResult(); return $count <= $max ? true : false; - } } diff --git a/main/inc/Entity/User.php b/main/inc/Entity/User.php index 6f1b333f35..8219cfb8c7 100644 --- a/main/inc/Entity/User.php +++ b/main/inc/Entity/User.php @@ -249,9 +249,8 @@ class User implements AdvancedUserInterface, \Serializable , EquatableInterface private $isActive; /** - * @ORM\ManyToOne(targetEntity="CurriculumItemRelUser") - * @ORM\JoinColumn(name="user_id", referencedColumnName="user_id", nullable=true) - */ + * @ORM\OneToMany(targetEntity="CurriculumItemRelUser", mappedBy="user") + **/ private $curriculumItems; /** @@ -1159,4 +1158,19 @@ class User implements AdvancedUserInterface, \Serializable , EquatableInterface { 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 ; + } } diff --git a/main/template/minedu/tool/curriculum/category/results.tpl b/main/template/minedu/tool/curriculum/category/results.tpl index a3ab2b4e17..998e0ffc7d 100644 --- a/main/template/minedu/tool/curriculum/category/results.tpl +++ b/main/template/minedu/tool/curriculum/category/results.tpl @@ -2,15 +2,22 @@ {% block content %} {{ 'Results' | trans }}
- + {% if pagination != '' %} + + + {% if pagerfanta.haveToPaginate %} + {{ pagerfanta(pagination, 'twitter_bootstrap', { 'proximity': 3 } ) }} + {% endif %} + {% endif %} + {% endblock %} diff --git a/src/ChamiloLMS/Controller/Tool/Curriculum/CurriculumCategoryController.php b/src/ChamiloLMS/Controller/Tool/Curriculum/CurriculumCategoryController.php index 09f852212a..ca64ea9001 100644 --- a/src/ChamiloLMS/Controller/Tool/Curriculum/CurriculumCategoryController.php +++ b/src/ChamiloLMS/Controller/Tool/Curriculum/CurriculumCategoryController.php @@ -11,6 +11,10 @@ use Entity; use ChamiloLMS\Form\CurriculumCategoryType; use Symfony\Component\Routing\Annotation\Route; use Sensio\Bundle\FrameworkExtraBundle\Configuration\Method; +use Pagerfanta\Adapter\DoctrineORMAdapter; + +use Pagerfanta\View\TwitterBootstrapView; +use Pagerfanta\Pagerfanta; /** * Class CurriculumController @@ -26,6 +30,11 @@ class CurriculumCategoryController extends CommonController */ public function indexAction() { + // @todo use something better + if (!api_is_allowed_to_edit(true, true, true)) { + $this->abort('405'); + } + $breadcrumbs = array( array( 'name' => get_lang('Curriculum'), @@ -114,6 +123,10 @@ class CurriculumCategoryController extends CommonController */ public function readCategoryAction($id) { + // @todo use something better + if (!api_is_allowed_to_edit(true, true, true)) { + $this->abort('405'); + } return parent::readAction($id); } @@ -123,6 +136,11 @@ class CurriculumCategoryController extends CommonController */ public function addCategoryAction() { + // @todo use something better + if (!api_is_allowed_to_edit(true, true, true)) { + $this->abort('405'); + } + $breadcrumbs = array( array( 'name' => get_lang('Curriculum'), @@ -163,6 +181,11 @@ class CurriculumCategoryController extends CommonController */ public function addFromParentAction($id) { + // @todo use something better + if (!api_is_allowed_to_edit(true, true, true)) { + $this->abort('405'); + } + $breadcrumbs = array( array( 'name' => get_lang('Curriculum'), @@ -233,6 +256,11 @@ class CurriculumCategoryController extends CommonController */ public function editCategoryAction($id) { + // @todo use something better + if (!api_is_allowed_to_edit(true, true, true)) { + $this->abort('405'); + } + $breadcrumbs = array( array( 'name' => get_lang('Curriculum'), @@ -269,6 +297,11 @@ class CurriculumCategoryController extends CommonController */ public function deleteCategoryAction($id) { + // @todo use something better + if (!api_is_allowed_to_edit(true, true, true)) { + $this->abort('405'); + } + return parent::deleteAction($id); } @@ -277,8 +310,13 @@ class CurriculumCategoryController extends CommonController * @Route("/results") * @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( array( 'name' => get_lang('Curriculum'), @@ -302,10 +340,8 @@ class CurriculumCategoryController extends CommonController 'name' => get_lang('Results'), ) ); + $this->setBreadcrumb($breadcrumbs); - if (!api_is_allowed_to_edit(true, true, true)) { - $this->abort('405'); - } $session = $this->getSession(); $sessionId = 0; @@ -313,49 +349,48 @@ class CurriculumCategoryController extends CommonController $sessionId = $this->getSession()->getId(); } - // @todo move in a function - $users = \CourseManager::get_user_list_from_course_code( - $this->getCourse()->getCode(), - $sessionId, - null, - null, - STUDENT - ); - - $qb = $this->getManager() + /*$qb = $this->getManager() ->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') ->innerJoin('node.course', 'c') ->innerJoin('node.items', 'i') ->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') ; - $this->setCourseParameters($qb, 'node'); - $query = $qb->getQuery(); - $userResults = $query->getResult(); - $userResultsByUserId = array(); - if (!empty($userResults)) { - foreach ($userResults as $item) { - $userResultsByUserId[$item['userId']] = $item['score']; - } - } + $maxPerPage = 10; - if (!empty($users)) { - foreach ($users as &$user) { - if (!empty($userResultsByUserId)) { - if (isset($userResultsByUserId[$user['user_id']])) { - $user['score'] = $userResultsByUserId[$user['user_id']]; - } else { - $user['score'] = 0; - } - } - } - } + $adapter = new DoctrineORMAdapter($qb); + $pagination = new Pagerfanta($adapter); + $pagination->setMaxPerPage($maxPerPage); // 10 by default + $pagination->setCurrentPage($page); - $template = $this->getTemplate(); - $template->assign('users', $users); + $page = 1; + $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'); return new Response($response, 200, array()); } diff --git a/src/ChamiloLMS/Controller/Tool/Curriculum/CurriculumUserController.php b/src/ChamiloLMS/Controller/Tool/Curriculum/CurriculumUserController.php index 4c6c33e6aa..a7fc30b227 100644 --- a/src/ChamiloLMS/Controller/Tool/Curriculum/CurriculumUserController.php +++ b/src/ChamiloLMS/Controller/Tool/Curriculum/CurriculumUserController.php @@ -327,8 +327,6 @@ class CurriculumUserController extends CommonController } } - var_dump($categoryScore); - $this->get('template')->assign('category_counter', $categoryCounter); $this->get('template')->assign('categories', $categories); $this->get('template')->assign('userResultId', $userId);