Browse Source

before/after days are also affected by the session-course-teachers

See BT#7740
Julio Montoya 10 years ago
parent
commit
eef69336ad
2 changed files with 47 additions and 9 deletions
  1. 11 4
      main/inc/lib/main_api.lib.php
  2. 36 5
      main/inc/lib/usermanager.lib.php

+ 11 - 4
main/inc/lib/main_api.lib.php

@@ -1985,10 +1985,17 @@ function api_get_session_info($session_id) {
  * @param int $session_id
  * @param string $course_code
  * @param bool $ignore_visibility_for_admins
- * @return int  0 = session still available, SESSION_VISIBLE_READ_ONLY = 1, SESSION_VISIBLE = 2, SESSION_INVISIBLE = 3
- */
-function api_get_session_visibility($session_id, $course_code = null, $ignore_visibility_for_admins = true)
-{
+ * @return int
+ *  0 = session still available,
+ *  SESSION_VISIBLE_READ_ONLY = 1,
+ *  SESSION_VISIBLE = 2,
+ *  SESSION_INVISIBLE = 3
+ */
+function api_get_session_visibility(
+    $session_id,
+    $course_code = null,
+    $ignore_visibility_for_admins = true
+) {
     // Means that the session is still available.
     $visibility = 0;
 

+ 36 - 5
main/inc/lib/usermanager.lib.php

@@ -2335,8 +2335,11 @@ class UserManager
      * @return array  list of statuses [session_category][session_id]
      * @todo ensure multiple access urls are managed correctly
      */
-    public static function get_sessions_by_category($user_id, $is_time_over = false, $ignore_visibility_for_admins = false)
-    {
+    public static function get_sessions_by_category(
+        $user_id,
+        $is_time_over = false,
+        $ignore_visibility_for_admins = false
+    ) {
         // Database Table Definitions
         $tbl_session = Database :: get_main_table(TABLE_MAIN_SESSION);
         $tbl_session_course_user = Database :: get_main_table(TABLE_MAIN_SESSION_COURSE_USER);
@@ -2395,8 +2398,35 @@ class UserManager
 
                 $session_id = $row['id'];
 
-                // Checking session visibility
-                $visibility = api_get_session_visibility($session_id, null, $ignore_visibility_for_admins);
+                $courseList = UserManager::get_courses_list_by_session(
+                    $user_id,
+                    $row['id']
+                );
+
+                // General coach session visibility.
+                $visibility = api_get_session_visibility(
+                    $session_id,
+                    null,
+                    $ignore_visibility_for_admins
+                );
+
+                // Course Coach session visibility.
+                $atLeastOneCourseIsVisible = false;
+                foreach ($courseList as $course) {
+                    // Checking session visibility
+                    $visibility = api_get_session_visibility(
+                        $session_id,
+                        $course['code'],
+                        $ignore_visibility_for_admins
+                    );
+                    if ($visibility != SESSION_INVISIBLE) {
+                        $atLeastOneCourseIsVisible = true;
+                    }
+                }
+
+                if ($atLeastOneCourseIsVisible) {
+                    $visibility = $atLeastOneCourseIsVisible;
+                }
 
                 switch ($visibility) {
                     case SESSION_VISIBLE_READ_ONLY:
@@ -2413,9 +2443,10 @@ class UserManager
                 $categories[$row['session_category_id']]['sessions'][$row['id']]['date_end'] = $row['date_end'];
                 $categories[$row['session_category_id']]['sessions'][$row['id']]['nb_days_access_before_beginning'] = $row['nb_days_access_before_beginning'];
                 $categories[$row['session_category_id']]['sessions'][$row['id']]['nb_days_access_after_end'] = $row['nb_days_access_after_end'];
-                $categories[$row['session_category_id']]['sessions'][$row['id']]['courses'] = UserManager::get_courses_list_by_session($user_id, $row['id']);
+                $categories[$row['session_category_id']]['sessions'][$row['id']]['courses'] = $courseList;
             }
         }
+
         return $categories;
 
     }