Browse Source

Use entities when browse session on catalog - refs BT#9887 #TMI

Angel Fernando Quiroz Campos 9 years ago
parent
commit
27f375e568
2 changed files with 41 additions and 55 deletions
  1. 19 13
      main/auth/courses_controller.php
  2. 22 42
      main/inc/lib/auth.lib.php

+ 19 - 13
main/auth/courses_controller.php

@@ -551,7 +551,7 @@ class CoursesController
     {
         $date = isset($_POST['date']) ? $_POST['date'] : date('Y-m-d');
         $hiddenLinks = isset($_GET['hidden_links']) ? intval($_GET['hidden_links']) == 1 : false;
-
+        $userId = api_get_user_id();
         $limit = isset($limit) ? $limit : getLimitArray();
 
         $countSessions = $this->model->countSessions($date);
@@ -578,29 +578,35 @@ class CoursesController
         }
 
         foreach ($sessions as $session) {
-            $sessionDates = SessionManager::parseSessionDates($session);
+            $sessionDates = SessionManager::parseSessionDates([
+                'display_start_date' => $session->getDisplayStartDate(),
+                'display_end_date' => $session->getDisplayEndDate(),
+                'access_start_date' => $session->getAccessStartDate(),
+                'access_end_date' => $session->getAccessEndDate(),
+                'coach_access_start_date' => $session->getCoachAccessStartDate(),
+                'coach_access_end_date' => $session->getCoachAccessEndDate()
+            ]);
 
             $sessionsBlock = array(
-                'id' => $session['id'],
-                'name' => $session['name'],
-                'nbr_courses' => $session['nbr_courses'],
-                'nbr_users' => $session['nbr_users'],
-                'coach_name' => $session['coach_name'],
-                'is_subscribed' => $session['is_subscribed'],
-                'icon' => $this->getSessionIcon($session['name']),
+                'id' => $session->getId(),
+                'name' => $session->getName(),
+                'nbr_courses' => $session->getNbrCourses(),
+                'nbr_users' => $session->getNbrUsers(),
+                'coach_name' => $session->getGeneralCoach()->getCompleteName(),
+                'is_subscribed' => SessionManager::isUserSubscribedAsStudent($session->getId(), $userId),
+                'icon' => $this->getSessionIcon($session->getName()),
                 'date' => $sessionDates['display'],
                 'subscribe_button' => $this->getRegisteredInSessionButton(
-                    $session[$key],
+                    $key === 'id' ? $session->getId() : $session->getName(),
                     $catalogSessionAutoSubscriptionAllowed
                 ),
-                'show_description' => $session['show_description'],
+                'show_description' => $session->getShowDescription(),
             );
 
-
             /** @var \Chamilo\CoreBundle\Entity\Repository\SequenceRepository $repo */
             $repo = Database::getManager()->getRepository('ChamiloCoreBundle:SequenceResource');
             $requirementAndDependencies = $repo->getRequirementAndDependencies(
-                $session['id'],
+                $session->getId(),
                 SequenceResource::SESSION_TYPE
             );
 

+ 22 - 42
main/inc/lib/auth.lib.php

@@ -643,54 +643,34 @@ class Auth
      */
     public function browseSessions($date = null, $limit = array())
     {
-        $userTable = Database::get_main_table(TABLE_MAIN_USER);
-        $sessionTable = Database::get_main_table(TABLE_MAIN_SESSION);
-
-        $sessionsToBrowse = array();
-        $userId = api_get_user_id();
-        $limitFilter = getLimitFilterFromArray($limit);
+        $em = Database::getManager();
+        $qb = $em->createQueryBuilder();
 
-        $sql = <<<SQL
-            SELECT s.*, u.lastname, u.firstname, u.username, description,
-                show_description
-            FROM $sessionTable AS s
-            INNER JOIN $userTable AS u
-                ON s.id_coach = u.user_id
-            WHERE 1 = 1
-SQL;
+        $_sessions = $qb->select('s')
+            ->from('ChamiloCoreBundle:Session', 's')
+            ->setFirstResult($limit['start'])
+            ->setMaxResults($limit['length'])
+            ->where(
+                $qb->expr()->gt('s.nbrCourses', 0)
+            );
 
         if (!is_null($date)) {
-            $date = Database::escape_string($date);
-
-            $sql .= <<<SQL
-                AND ('$date' BETWEEN s.access_start_date AND s.access_end_date)
-                OR (s.access_end_date IS NULL)
-                OR (
-                    s.access_start_date IS NULL AND
-                    s.access_end_date IS NOT NULL AND
-                    s.access_end_date > '$date'
+            $_sessions
+                ->andWhere(
+                    $qb->expr()->orX(
+                        $qb->expr()->between(':date', 's.accessStartDate', 's.accessEndDate'),
+                        $qb->expr()->isNull('s.accessEndDate'),
+                        $qb->expr()->andX(
+                            $qb->expr()->isNull('s.accessStartDate'),
+                            $qb->expr()->isNotNull('s.accessEndDate'),
+                            $qb->expr()->gt('s.accessEndDate', ':date')
+                        )
+                    )
                 )
-SQL;
-        }
-
-        // Add limit filter to do pagination
-        $sql .= $limitFilter;
-
-        $sessionResult = Database::query($sql);
-
-        if ($sessionResult != false) {
-            while ($session = Database::fetch_assoc($sessionResult)) {
-                if ($session['nbr_courses'] > 0) {
-                    $session['coach_name'] = api_get_person_name($session['firstname'], $session['lastname']);
-                    $session['coach_name'] .= " ({$session['username']})";
-                    $session['is_subscribed'] = SessionManager::isUserSubscribedAsStudent($session['id'], $userId);
-
-                    $sessionsToBrowse[] = $session;
-                }
-            }
+                ->setParameter('date', $date);
         }
 
-        return $sessionsToBrowse;
+        return $_sessions->getQuery()->getResult();
     }
 
     /**