diff --git a/main/group/group_space.php b/main/group/group_space.php index 01c033ce45..4b35e650dc 100755 --- a/main/group/group_space.php +++ b/main/group/group_space.php @@ -24,7 +24,6 @@ require_once api_get_path(SYS_CODE_PATH).'forum/forumconfig.inc.php'; $group_id = api_get_group_id(); $user_id = api_get_user_id(); $current_group = GroupManager::get_group_properties($group_id); - if (empty($current_group)) { api_not_allowed(true); } @@ -37,35 +36,10 @@ $interbreadcrumb[] = array('url' => 'group.php', 'name' => get_lang('Groups')); $forums_of_groups = get_forums_of_group($current_group['id']); -/*$forum_state_public = 0; -if (is_array($forums_of_groups)) { - foreach ($forums_of_groups as $key => $value) { - if ($value['forum_group_public_private'] == 'public') { - $forum_state_public = 1; - } - } -} - -if ($current_group['doc_state'] != 1 && - $current_group['calendar_state'] != 1 && - $current_group['work_state'] != 1 && - $current_group['announcements_state'] != 1 && - $current_group['wiki_state'] != 1 && - $current_group['chat_state'] != 1 && - $forum_state_public != 1 -) { - -}*/ - -if (!api_is_allowed_to_edit(null, true) && - (!GroupManager::is_user_in_group($user_id, $group_id) || - $current_group['status'] == 0 - ) -) { +if (!GroupManager::userHasAccessToBrowse($user_id, $current_group, api_get_session_id())) { api_not_allowed(true); } -/* Header */ Display::display_header($nameTools.' '.Security::remove_XSS($current_group['name']), 'Group'); /* Introduction section (editable by course admin) */ @@ -266,7 +240,7 @@ if (api_is_allowed_to_edit(false, true) OR if ($current_group['doc_state'] == GroupManager::TOOL_PUBLIC) { // Link to the documents area of this group $actions_array[] = array( - 'url' => '../document/document.php?'.api_get_cidreq().'&origin='.$origin, + 'url' => '../document/document.php?'.api_get_cidreq(), 'content' => Display::return_icon('folder.png', get_lang('GroupDocument'), array(), ICON_SIZE_MEDIUM) ); } diff --git a/main/inc/lib/groupmanager.lib.php b/main/inc/lib/groupmanager.lib.php index 6476a51baf..cdee100174 100755 --- a/main/inc/lib/groupmanager.lib.php +++ b/main/inc/lib/groupmanager.lib.php @@ -1904,32 +1904,30 @@ class GroupManager switch ($tool) { case self::GROUP_TOOL_FORUM : - $state_key = 'forum_state'; + $key = 'forum_state'; break; case self::GROUP_TOOL_DOCUMENTS : - $state_key = 'doc_state'; + $key = 'doc_state'; break; case self::GROUP_TOOL_CALENDAR : - $state_key = 'calendar_state'; + $key = 'calendar_state'; break; case self::GROUP_TOOL_ANNOUNCEMENT : - $state_key = 'announcements_state'; + $key = 'announcements_state'; break; case self::GROUP_TOOL_WORK : - $state_key = 'work_state'; + $key = 'work_state'; break; case self::GROUP_TOOL_WIKI : - $state_key = 'wiki_state'; + $key = 'wiki_state'; break; case self::GROUP_TOOL_CHAT : - $state_key = 'chat_state'; + $key = 'chat_state'; break; default: return false; } - $user_is_in_group = self::is_user_in_group($user_id, $group_id); - // Check group properties $groupInfo = self::get_group_properties($group_id); @@ -1937,27 +1935,87 @@ class GroupManager return false; } - if (!$user_is_in_group) { + if ($groupInfo['status'] == 0) { return false; } - if ($groupInfo['status'] == 0) { + if (!isset($groupInfo[$key])) { return false; } - if ($groupInfo[$state_key] == self::TOOL_NOT_AVAILABLE) { + if (api_is_allowed_to_edit(false, true)) { + return true; + } + + $status = $groupInfo[$key]; + + switch ($status) { + case self::TOOL_NOT_AVAILABLE: + return false; + break; + case self::TOOL_PUBLIC: + return true; + break; + case self::TOOL_PRIVATE: + $userIsInGroup = self::is_user_in_group($user_id, $group_id); + if ($userIsInGroup) { + return true; + } + break; + } + + return false; + } + + /** + * @param int $userId + * @param array $groupInfo + * + * @return bool + */ + public static function userHasAccessToBrowse($userId, $groupInfo, $sessionId = 0) + { + if (empty($groupInfo)) { return false; - } elseif ($groupInfo[$state_key] == self::TOOL_PUBLIC) { + } + + if (api_is_platform_admin()) { return true; - } elseif (api_is_allowed_to_edit(false, true)) { + } + + if (api_is_allowed_to_edit(false, true)) { return true; - } elseif ($groupInfo[$state_key] == self::TOOL_PRIVATE && !$user_is_in_group) { + } + + $groupId = $groupInfo['id']; + $tutors = self::get_subscribed_tutors($groupId, true); + + if (in_array($userId, $tutors)) { + return true; + } + + if ($groupInfo['status'] == 0) { return false; - } else { - return $user_is_in_group; + } + + if ( + self::user_has_access($userId, $groupId, self::GROUP_TOOL_FORUM) || + self::user_has_access($userId, $groupId, self::GROUP_TOOL_DOCUMENTS) || + self::user_has_access($userId, $groupId, self::GROUP_TOOL_CALENDAR) || + self::user_has_access($userId, $groupId, self::GROUP_TOOL_ANNOUNCEMENT) || + self::user_has_access($userId, $groupId, self::GROUP_TOOL_WORK) || + self::user_has_access($userId, $groupId, self::GROUP_TOOL_WIKI) || + self::user_has_access($userId, $groupId, self::GROUP_TOOL_CHAT) + ) { + return true; + } + + if (api_is_course_coach() && $groupInfo['session_id'] == $sessionId) { + return true; } } + /** * Get all groups where a specific user is subscribed * @param int $user_id @@ -2135,24 +2193,8 @@ class GroupManager $row[] = $this_group['id']; } - - // Group name - if ((api_is_allowed_to_edit(false, true) || - ( - in_array($user_id, $tutorsids_of_group) || - $this_group['is_member'] || - self::user_has_access($user_id, $this_group['id'], self::GROUP_TOOL_FORUM) || - self::user_has_access($user_id, $this_group['id'], self::GROUP_TOOL_DOCUMENTS) || - self::user_has_access($user_id, $this_group['id'], self::GROUP_TOOL_CALENDAR) || - self::user_has_access($user_id, $this_group['id'], self::GROUP_TOOL_ANNOUNCEMENT) || - self::user_has_access($user_id, $this_group['id'], self::GROUP_TOOL_WORK) || - self::user_has_access($user_id, $this_group['id'], self::GROUP_TOOL_WIKI) || - self::user_has_access($user_id, $this_group['id'], self::GROUP_TOOL_CHAT) - ) - ) - && !(api_is_course_coach() && intval($this_group['session_id']) != $session_id) - ) { - + if (GroupManager::userHasAccessToBrowse($user_id, $this_group, $session_id)) { + // Group name $groupNameClass = null; if ($this_group['status'] == 0) { $groupNameClass = 'muted';