Browse Source

Avoid empty session list for usergroup (class) - refs BT#13531

Angel Fernando Quiroz Campos 7 years ago
parent
commit
eb15f5764b
2 changed files with 26 additions and 21 deletions
  1. 5 3
      main/inc/lib/sessionmanager.lib.php
  2. 21 18
      main/inc/lib/usergroup.lib.php

+ 5 - 3
main/inc/lib/sessionmanager.lib.php

@@ -5386,7 +5386,7 @@ class SessionManager
                         WHERE id = '$session_id'";
                         WHERE id = '$session_id'";
                 Database::query($sql);
                 Database::query($sql);
 
 
-                self::addClassesByName($session_id, $classes);
+                self::addClassesByName($session_id, $classes, false);
             }
             }
         }
         }
 
 
@@ -5401,8 +5401,9 @@ class SessionManager
      * Add classes (by their names) to a session
      * Add classes (by their names) to a session
      * @param int $sessionId
      * @param int $sessionId
      * @param array $classesNames
      * @param array $classesNames
+     * @param bool $deleteClassSessions Optional. Empty the session list for the usergroup (class)
      */
      */
-    private static function addClassesByName($sessionId, $classesNames)
+    private static function addClassesByName($sessionId, $classesNames, $deleteClassSessions = true)
     {
     {
         if (!$classesNames) {
         if (!$classesNames) {
             return;
             return;
@@ -5413,7 +5414,8 @@ class SessionManager
         foreach ($classesNames as $className) {
         foreach ($classesNames as $className) {
             $usergroup->subscribe_sessions_to_usergroup(
             $usergroup->subscribe_sessions_to_usergroup(
                 $usergroup->get_id_by_name($className),
                 $usergroup->get_id_by_name($className),
-                [$sessionId]
+                [$sessionId],
+                $deleteClassSessions
             );
             );
         }
         }
     }
     }

+ 21 - 18
main/inc/lib/usergroup.lib.php

@@ -629,10 +629,11 @@ class UserGroup extends Model
 
 
     /**
     /**
      * Subscribes sessions to a group  (also adding the members of the group in the session and course)
      * Subscribes sessions to a group  (also adding the members of the group in the session and course)
-     * @param   int   $usergroup_id  usergroup id
+     * @param   int $usergroup_id usergroup id
-     * @param   array  $list list of session ids
+     * @param   array $list list of session ids
+     * @param bool $deleteCurrentSessions Optional. Empty the session list for the usergroup (class)
      */
      */
-    public function subscribe_sessions_to_usergroup($usergroup_id, $list)
+    public function subscribe_sessions_to_usergroup($usergroup_id, $list, $deleteCurrentSessions = true)
     {
     {
         $current_list = self::get_sessions_by_usergroup($usergroup_id);
         $current_list = self::get_sessions_by_usergroup($usergroup_id);
         $user_list = self::get_users_by_usergroup($usergroup_id);
         $user_list = self::get_users_by_usergroup($usergroup_id);
@@ -645,26 +646,28 @@ class UserGroup extends Model
                 }
                 }
             }
             }
         }
         }
-        if (!empty($current_list)) {
+        if ($deleteCurrentSessions) {
-            foreach ($current_list as $session_id) {
+            if (!empty($current_list)) {
-                if (!in_array($session_id, $list)) {
+                foreach ($current_list as $session_id) {
-                    $delete_items[] = $session_id;
+                    if (!in_array($session_id, $list)) {
+                        $delete_items[] = $session_id;
+                    }
                 }
                 }
             }
             }
-        }
 
 
-        // Deleting items
+            // Deleting items
-        if (!empty($delete_items)) {
+            if (!empty($delete_items)) {
-            foreach ($delete_items as $session_id) {
+                foreach ($delete_items as $session_id) {
-                if (!empty($user_list)) {
+                    if (!empty($user_list)) {
-                    foreach ($user_list as $user_id) {
+                        foreach ($user_list as $user_id) {
-                        SessionManager::unsubscribe_user_from_session($session_id, $user_id);
+                            SessionManager::unsubscribe_user_from_session($session_id, $user_id);
+                        }
                     }
                     }
+                    Database::delete(
+                        $this->usergroup_rel_session_table,
+                        array('usergroup_id = ? AND session_id = ?' => array($usergroup_id, $session_id))
+                    );
                 }
                 }
-                Database::delete(
-                    $this->usergroup_rel_session_table,
-                    array('usergroup_id = ? AND session_id = ?' => array($usergroup_id, $session_id))
-                );
             }
             }
         }
         }