Browse Source

Add method for search session by name on course catalog - refs BT#10219 #TMI

Angel Fernando Quiroz Campos 9 năm trước cách đây
mục cha
commit
2ce8bedf32
3 tập tin đã thay đổi với 72 bổ sung1 xóa
  1. 9 1
      main/auth/courses.php
  2. 31 0
      main/auth/courses_controller.php
  3. 32 0
      main/inc/lib/auth.lib.php

+ 9 - 1
main/auth/courses.php

@@ -53,7 +53,8 @@ $actions = array(
     'subscribe_user_with_password',
     'display_sessions',
     'subscribe_to_session',
-    'search_tag'
+    'search_tag',
+    'search_session'
 );
 
 $action = CoursesAndSessionsCatalog::is(CATALOG_SESSIONS) ? 'display_sessions' : 'display_random_courses';
@@ -309,4 +310,11 @@ switch ($action) {
 
         $courses_controller->sessionsListByCoursesTag($limit);
         break;
+    case 'search_session':
+        if (!$user_can_view_page) {
+            api_not_allowed(true);
+        }
+
+        $courses_controller->sessionListBySearch($limit);
+        break;
 }

+ 31 - 0
main/auth/courses_controller.php

@@ -676,6 +676,37 @@ class CoursesController
         $tpl->display($contentTemplate);
     }
 
+    /**
+     * Show the Session Catalogue with filtered session by a query term
+     * @param array $limit
+     */
+    public function sessionListBySearch(array $limit)
+    {
+        $q = isset($_REQUEST['q']) ? Security::remove_XSS($_REQUEST['q']) : null;
+        $hiddenLinks = isset($_GET['hidden_links']) ? intval($_GET['hidden_links']) == 1 : false;
+        $courseUrl = getCourseCategoryUrl(1, $limit['length'], null, 0, 'subscribe');
+        $searchDate = isset($_POST['date']) ? $_POST['date'] : date('Y-m-d');
+
+        $sessions = $this->model->browseSessionsBySearch($q, $limit);
+        $sessionsBlocks = $this->getFormatedSessionsBlock($sessions);
+
+        $tpl = new Template();
+        $tpl->assign('show_courses', CoursesAndSessionsCatalog::showCourses());
+        $tpl->assign('show_sessions', CoursesAndSessionsCatalog::showSessions());
+        $tpl->assign('show_tutor', (api_get_setting('show_session_coach')==='true' ? true : false));
+        $tpl->assign('course_url', $courseUrl);
+        $tpl->assign('already_subscribed_label', $this->getAlreadyRegisteredInSessionLabel());
+        $tpl->assign('hidden_links', $hiddenLinks);
+        $tpl->assign('search_token', Security::get_token());
+        $tpl->assign('search_date', Security::remove_XSS($searchDate));
+        $tpl->assign('search_tag', Security::remove_XSS($q));
+        $tpl->assign('sessions', $sessionsBlocks);
+
+        $contentTemplate = $tpl->get_template('auth/session_catalog.tpl');
+
+        $tpl->display($contentTemplate);
+    }
+
     /**
      * Get the formated data for sessions block to be displayed on Session Catalog page
      * @param array $sessions The session list

+ 32 - 0
main/inc/lib/auth.lib.php

@@ -769,4 +769,36 @@ SQL;
         return $sessionsToBrowse;
     }
 
+    /**
+     * Search sessions by searched term by session name
+     * @param string $queryTerm Term for search
+     * @param array $limit Limit info
+     * @return array The sessions
+     */
+    public function browseSessionsBySearch($queryTerm, array $limit)
+    {
+        $sessionsToBrowse = [];
+
+        $criteria = Doctrine\Common\Collections\Criteria::create()
+            ->where(
+                Doctrine\Common\Collections\Criteria::expr()->contains('name', $queryTerm)
+            )
+            ->setFirstResult($limit['start'])
+            ->setMaxResults($limit['length']);
+
+        $sessions = Database::getManager()
+                ->getRepository('ChamiloCoreBundle:Session')
+                ->matching($criteria);
+
+        foreach ($sessions as $session) {
+            if ($session->getNbrCourses() === 0) {
+                continue;
+            }
+
+            $sessionsToBrowse[] = $session;
+        }
+
+        return $sessionsToBrowse;
+    }
+
 }