Browse Source

Add filter by date in sessions catalog - refs #7275

Angel Fernando Quiroz Campos 10 years ago
parent
commit
c0f1af3b1b

+ 3 - 1
main/auth/courses.php

@@ -220,6 +220,8 @@ switch ($action) {
         $courses_controller->courses_categories($action, $_GET['category_code']);
         break;
     case 'display_sessions':
-        $courses_controller->sessions($action);
+        $date = isset($_POST['date']) ? $_POST['date'] : null;
+        
+        $courses_controller->sessions($action, $date);
         break;
 }

+ 4 - 2
main/auth/courses_controller.php

@@ -311,8 +311,9 @@ class CoursesController { // extends Controller {
     /**
      * It's used for listing sessions, render to sessions view in course catalog
      * @param string $action
+     * @param date $date (Optional) The date for search
      */
-    public function sessions($action)
+    public function sessions($action, $date = null)
     {
         $data = array();
         $browse_course_categories = $this->model->browse_course_categories();
@@ -321,7 +322,8 @@ class CoursesController { // extends Controller {
 
         $data['browse_course_categories'] = $browse_course_categories;
         $data['action'] = Security::remove_XSS($action);
-        $data['browseSessions'] = $this->model->browseSessions();
+        $data['date'] = Security::remove_XSS($date);
+        $data['browseSessions'] = $this->model->browseSessions($date);
 
         $data['catalogShowCoursesSessions'] = 0;
 

+ 31 - 11
main/inc/lib/auth.lib.php

@@ -522,24 +522,44 @@ class Auth
         }
     }
     
-    public function browseSessions()
+    /**
+     * List the sessions 
+     * @param date $date (optional) The date of sessions
+     * @return array The session list
+     */
+    public function browseSessions($date = null)
     {
         require_once api_get_path(LIBRARY_PATH) . 'sessionmanager.lib.php';
 
-        $sessions = SessionManager::get_sessions_list();
+        $userTable = Database::get_main_table(TABLE_MAIN_USER);
+        $sessionTable = Database::get_main_table(TABLE_MAIN_SESSION);
+
         $sessionsToBrowse = array();
         $userId = api_get_user_id();
 
-        foreach ($sessions as $session) {
-            if ($session['nbr_courses'] > 0) {
-                $sessionToBrowse = array(
-                    'id' => $session['id'],
-                    'name' => $session['name'],
-                    'coach_name' => api_get_person_name($session['firstname'], $session['lastname']),
-                    'is_subscribed' => SessionManager::isUserSusbcribedAsStudent($session['id'], $userId)
-                );
+        $sql = "SELECT s.id, s.name, s.nbr_courses, s.nbr_users, s.date_start, s.date_end, u.lastname, u.firstname, u.username "
+                . "FROM $sessionTable AS s "
+                . "INNER JOIN $userTable AS u "
+                . "ON s.id_coach = u.user_id ";
+
+        if (!is_null($date)) {
+            $date = Database::escape_string($date);
+            
+            $sql .= "WHERE ('$date' BETWEEN s.date_start AND s.date_end) "
+                    . "OR (s.date_start = '0000-00-00' OR s.date_end = '0000-00-00')";
+        }
+
+        $sessionResult = Database::query($sql);
 
-                $sessionsToBrowse[] = $sessionToBrowse;
+        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::isUserSusbcribedAsStudent($session['id'], $userId);
+
+                    $sessionsToBrowse[] = $session;
+                }
             }
         }
 

+ 18 - 4
main/template/default/auth/courses_categories.php

@@ -83,6 +83,12 @@ if ($catalogShowCoursesSessions == CATALOG_COURSES_SESSIONS || $catalogShowCours
             
             return parseInt(parts[1], 10);
         };
+        
+        <?php if ($showSessions) { ?>
+        $('#date').datepicker({
+            dateFormat: 'yy-mm-dd'
+        });
+        <?php } ?>
     });
 </script>
 
@@ -189,14 +195,20 @@ if ($catalogShowCoursesSessions == CATALOG_COURSES_SESSIONS || $catalogShowCours
                 <?php if ($showSessions) { ?>
                     <li class="nav-header"><?php echo get_lang('Sessions'); ?></li>
                     <li>
-                        <?php if ($action == 'display_sessions') { ?>
+                        <?php if ($action == 'display_sessions' && $_SERVER['REQUEST_METHOD'] != 'POST') { ?>
                             <strong><?php echo get_lang('SessionList'); ?></strong>
                         <?php } else { ?>
                             <a href="<?php echo api_get_self() ?>?action=display_sessions&hidden_links=<?php echo $hidden_links ?>"><?php echo get_lang('SessionList'); ?></a>
                         <?php } ?>
                     </li>
-                    <form>
-                        <div class="control-group">
+                    <li class="nav-header"><?php echo get_lang('SearchActiveSessions') ?></li>
+                    <form class="form-search" method="post" action="<?php echo api_get_self(); ?>?action=display_sessions">
+                        <div class="input-append">
+                            <?php echo Display::input('date', 'date', $date, array(
+                                'class' => 'span2',
+                                'id' => 'date',
+                                'readonly' => ''
+                            )); ?>
                             <button class="btn" type="submit"><?php echo get_lang('Search'); ?></button>
                         </div>
                     </form>
@@ -232,7 +244,9 @@ if ($catalogShowCoursesSessions == CATALOG_COURSES_SESSIONS || $catalogShowCours
                                         <?php if ($session['is_subscribed']) { ?>
                                             <?php echo display_already_registered_in_session_label(); ?>
                                         <?php } else { ?>
-                                            <a class="btn btn-primary" href=""><?php echo get_lang('Subscribe'); ?></a>
+                                            <?php if ($session['visibility'] == SESSION_AVAILABLE) { ?>
+                                                <a class="btn btn-primary" href=""><?php echo get_lang('Subscribe'); ?></a>
+                                            <?php } ?>
                                         <?php } ?>
                                     </div>
                                 </div>