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 != '' %}
+
+ {% for user in pagination.currentPageResults %}
+ -
+ {{ user.firstname }} - {{ user.lastname }} {{ user.score }}
+
+ {{ 'Details' | trans }}
+
+
+ {% endfor %}
+
+
+ {% 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);