diff --git a/main/announcements/announcements.php b/main/announcements/announcements.php index fa9e852bab..66c8712b61 100755 --- a/main/announcements/announcements.php +++ b/main/announcements/announcements.php @@ -436,7 +436,7 @@ switch ($action) { $element = CourseManager::addUserGroupMultiSelect($form, array()); } else { - $element = CourseManager::addGroupMultiSelect($form, $group_properties['iid'], array()); + $element = CourseManager::addGroupMultiSelect($form, $group_properties, array()); } $form->addHtml(''); diff --git a/main/calendar/agenda_js.php b/main/calendar/agenda_js.php index 941af60be8..487bbedae1 100755 --- a/main/calendar/agenda_js.php +++ b/main/calendar/agenda_js.php @@ -55,7 +55,7 @@ $courseId = api_get_course_int_id(); if (!empty($group_id)) { $group_properties = GroupManager::get_group_properties($group_id); - $is_group_tutor = GroupManager::is_tutor_of_group(api_get_user_id(), $group_properties['iid']); + $is_group_tutor = GroupManager::is_tutor_of_group(api_get_user_id(), $group_properties); $interbreadcrumb[] = array( "url" => api_get_path(WEB_CODE_PATH)."group/group.php?".api_get_cidreq(), "name" => get_lang('Groups') diff --git a/main/document/document.php b/main/document/document.php index 7eeb68a256..b97836e253 100755 --- a/main/document/document.php +++ b/main/document/document.php @@ -160,7 +160,7 @@ if (!empty($groupId)) { $groupIid = isset($group_properties['iid']) ? $group_properties['iid'] : 0; $isTutorGroup = GroupManager::is_tutor_of_group( $userId, - $group_properties['iid'], + $group_properties, $courseId ); $groupMemberWithEditRights = $isAllowedToEdit || $isTutorGroup; @@ -170,7 +170,7 @@ if (!empty($groupId)) { if ($group_properties['doc_state'] == 2) { // Documents are private - if ($isAllowedToEdit || GroupManager::is_user_in_group($userId, $group_properties['iid'])) { + if ($isAllowedToEdit || GroupManager::is_user_in_group($userId, $group_properties)) { // Only courseadmin or group members (members + tutors) allowed $interbreadcrumb[] = array( 'url' => api_get_path(WEB_CODE_PATH).'group/group.php?'.api_get_cidreq(), @@ -198,8 +198,8 @@ if (!empty($groupId)) { // Allowed to upload? if ($isAllowedToEdit || - GroupManager::is_subscribed($userId, $group_properties['iid']) || - GroupManager::is_tutor_of_group($userId, $group_properties['iid'], $courseId) + GroupManager::is_subscribed($userId, $group_properties) || + GroupManager::is_tutor_of_group($userId, $group_properties, $courseId) ) { // Only course admin or group members can upload $group_member_with_upload_rights = true; @@ -1975,7 +1975,7 @@ if (!$is_certificate_mode && !isset($_GET['move'])) { $selector = DocumentManager::build_directory_selector( $folders, $document_id, - (isset($group_properties['directory']) ? $group_properties['directory'] : array()) + (isset($group_properties['directory']) ? $group_properties['directory'] : array()) ); } diff --git a/main/document/edit_document.php b/main/document/edit_document.php index c2191659fa..7b98c00c40 100755 --- a/main/document/edit_document.php +++ b/main/document/edit_document.php @@ -425,7 +425,7 @@ if ($owner_id == api_get_user_id() || api_is_platform_admin() || $is_allowed_to_edit || GroupManager:: is_user_in_group( api_get_user_id(), - $groupInfo['iid'] + $groupInfo ) ) { $action = api_get_self().'?id='.$document_data['id'].'&'.api_get_cidreq(); diff --git a/main/document/upload.php b/main/document/upload.php index a37eccd57e..5a6777e6d5 100755 --- a/main/document/upload.php +++ b/main/document/upload.php @@ -112,7 +112,7 @@ if (!empty($groupId)) { $groupIid = $group_properties['iid']; // Only courseadmin or group members allowed - if ($is_allowed_to_edit || GroupManager::is_user_in_group(api_get_user_id(), $group_properties['iid'])) { + if ($is_allowed_to_edit || GroupManager::is_user_in_group(api_get_user_id(), $group_properties)) { $interbreadcrumb[] = array( 'url' => api_get_path(WEB_CODE_PATH).'group/group_space.php?'.api_get_cidreq(), 'name' => get_lang('GroupSpace'), diff --git a/main/forum/editpost.php b/main/forum/editpost.php index 3fbf83f307..45b094aac3 100755 --- a/main/forum/editpost.php +++ b/main/forum/editpost.php @@ -165,7 +165,7 @@ $group_id = api_get_group_id(); if (!api_is_allowed_to_edit(null, true) && $current_forum['allow_edit'] == 0 && - !GroupManager::is_tutor_of_group(api_get_user_id(), $group_properties['iid']) + !GroupManager::is_tutor_of_group(api_get_user_id(), $group_properties) ) { api_not_allowed(true); } diff --git a/main/forum/forumfunction.inc.php b/main/forum/forumfunction.inc.php index 644c6df4b7..7df01fe5a2 100755 --- a/main/forum/forumfunction.inc.php +++ b/main/forum/forumfunction.inc.php @@ -1817,12 +1817,18 @@ function get_threads($forum_id, $courseId = null, $sessionId = null) $courseId = $courseId !== null ? intval($courseId) : api_get_course_int_id(); $groupInfo = GroupManager::get_group_properties($groupId); $groupCondition = ''; + if (!empty($groupInfo)) { $groupIid = $groupInfo['iid']; $groupCondition = " AND item_properties.to_group_id = '$groupIid' "; } - $sessionCondition = api_get_session_condition($sessionId, true, false, 'item_properties.session_id'); + $sessionCondition = api_get_session_condition( + $sessionId, + true, + false, + 'item_properties.session_id' + ); // important note: it might seem a little bit awkward that we have 'thread.locked as locked' in the sql statement // because we also have thread.* in it. This is because thread has a field locked and post also has the same field @@ -1874,6 +1880,7 @@ function get_threads($forum_id, $courseId = null, $sessionId = null) thread.forum_id = ".intval($forum_id)." AND thread.c_id = $courseId ORDER BY thread.thread_sticky DESC, thread.thread_date DESC"; + } $result = Database::query($sql); $list = array(); @@ -1964,7 +1971,7 @@ function getPosts( $filterModerated = false; } } else { - if (GroupManager::is_tutor_of_group(api_get_user_id(), $groupInfo['iid']) || api_is_allowed_to_edit(false, true)) { + if (GroupManager::is_tutor_of_group(api_get_user_id(), $groupInfo) || api_is_allowed_to_edit(false, true)) { $filterModerated = false; } } @@ -4915,14 +4922,14 @@ function delete_attachment($post_id, $id_attach = 0, $display = true) * * @todo this is basically the same code as the get_forums function. Consider merging the two. */ -function get_forums_of_group($groupId) +function get_forums_of_group($groupInfo) { $table_forums = Database :: get_course_table(TABLE_FORUM); $table_threads = Database :: get_course_table(TABLE_FORUM_THREAD); $table_posts = Database :: get_course_table(TABLE_FORUM_POST); $table_item_property = Database :: get_course_table(TABLE_ITEM_PROPERTY); $course_id = api_get_course_int_id(); - $groupId = (int) $groupId; + $groupId = (int) $groupInfo['id']; // Student // Select all the forum information of all forums (that are visible to students). diff --git a/main/forum/viewforum.php b/main/forum/viewforum.php index c3cf31da14..ea5f188c64 100755 --- a/main/forum/viewforum.php +++ b/main/forum/viewforum.php @@ -47,8 +47,7 @@ $sessionId = api_get_session_id(); $groupId = api_get_group_id(); $courseId = api_get_course_int_id(); $groupInfo = GroupManager::get_group_properties($groupId); - -$isTutor = GroupManager::is_tutor_of_group($userId, $groupInfo['iid'], $courseId); +$isTutor = GroupManager::is_tutor_of_group($userId, $groupInfo, $courseId); /* MAIN DISPLAY SECTION */ @@ -83,7 +82,7 @@ if (!empty($groupId)) { ); $is_group_tutor = GroupManager::is_tutor_of_group( api_get_user_id(), - $group_properties['iid'] + $group_properties ); // Course @@ -440,6 +439,7 @@ echo '
'; if (is_array($threads)) { $html = ''; $count = 1; + foreach ($threads as $row) { // Thread who have no replies yet and the only post is invisible should not be displayed to students. if (api_is_allowed_to_edit(false, true) || diff --git a/main/forum/viewthread.php b/main/forum/viewthread.php index 6adafe20dc..5e7a4705db 100755 --- a/main/forum/viewthread.php +++ b/main/forum/viewthread.php @@ -139,14 +139,14 @@ if ( isset($_GET['content']) && isset($_GET['id']) && (api_is_allowed_to_edit(false, true) || - (isset($group_properties['iid']) && GroupManager::is_tutor_of_group(api_get_user_id(), $group_properties['iid']))) + (isset($group_properties['iid']) && GroupManager::is_tutor_of_group(api_get_user_id(), $group_properties))) ) { $message = delete_post($_GET['id']); } if (($my_action == 'invisible' || $my_action == 'visible') && isset($_GET['id']) && (api_is_allowed_to_edit(false, true) || - (isset($group_properties['iid']) && GroupManager::is_tutor_of_group(api_get_user_id(), $group_properties['iid']))) + (isset($group_properties['iid']) && GroupManager::is_tutor_of_group(api_get_user_id(), $group_properties))) ) { $message = approve_post($_GET['id'], $_GET['action']); } diff --git a/main/forum/viewthread_flat.inc.php b/main/forum/viewthread_flat.inc.php index 82e8c7ccde..29f4319b98 100755 --- a/main/forum/viewthread_flat.inc.php +++ b/main/forum/viewthread_flat.inc.php @@ -163,7 +163,7 @@ if (isset($current_thread['thread_id'])) { // this in the properties of the forum // The course admin him/herself can do this off course always $groupInfo = GroupManager::get_group_properties($groupId); - if ((isset($groupInfo['iid']) && GroupManager::is_tutor_of_group($userId, $groupInfo['iid'])) || + if ((isset($groupInfo['iid']) && GroupManager::is_tutor_of_group($userId, $groupInfo)) || ($current_forum['allow_edit'] == 1 && $row['user_id'] == $_user['user_id']) || ( api_is_allowed_to_edit(false, true) && @@ -181,7 +181,7 @@ if (isset($current_thread['thread_id'])) { } if ($origin != 'learnpath') { - if (GroupManager::is_tutor_of_group($userId, $groupInfo['iid']) || + if (GroupManager::is_tutor_of_group($userId, $groupInfo) || api_is_allowed_to_edit(false, true) && !(api_is_course_coach() && $current_forum['session_id'] != $sessionId) ) { @@ -207,7 +207,7 @@ if (isset($current_thread['thread_id'])) { } if ( - GroupManager::is_tutor_of_group($userId, $groupInfo['iid']) || + GroupManager::is_tutor_of_group($userId, $groupInfo) || (api_is_allowed_to_edit(false, true) && !(api_is_course_coach() && $current_forum['session_id'] != $sessionId) ) diff --git a/main/forum/viewthread_nested.inc.php b/main/forum/viewthread_nested.inc.php index e9cc3d714a..efbbfded39 100755 --- a/main/forum/viewthread_nested.inc.php +++ b/main/forum/viewthread_nested.inc.php @@ -113,7 +113,7 @@ foreach ($rows as $post) { // The user who posted it can edit his thread only if the course admin allowed this in the properties of the forum // The course admin him/herself can do this off course always - $tutorGroup = GroupManager::is_tutor_of_group(api_get_user_id(), $groupInfo['iid']); + $tutorGroup = GroupManager::is_tutor_of_group(api_get_user_id(), $groupInfo); if ((isset($groupInfo['iid']) && $tutorGroup) || ($current_forum['allow_edit'] == 1 && $post['user_id'] == $userId) || diff --git a/main/forum/viewthread_threaded.inc.php b/main/forum/viewthread_threaded.inc.php index e3dd721c68..de1e8b7759 100755 --- a/main/forum/viewthread_threaded.inc.php +++ b/main/forum/viewthread_threaded.inc.php @@ -237,7 +237,7 @@ $groupInfo = GroupManager::get_group_properties($groupId); // The user who posted it can edit his thread only if the course admin allowed this in the properties of the forum // The course admin him/herself can do this off course always if ( -(isset($groupInfo['iid']) && GroupManager::is_tutor_of_group(api_get_user_id(), $groupInfo['iid'])) || ( +(isset($groupInfo['iid']) && GroupManager::is_tutor_of_group(api_get_user_id(), $groupInfo)) || ( $current_forum['allow_edit'] == 1 && $row['user_id'] == $_user['user_id'] ) || ( @@ -277,7 +277,7 @@ if (!empty($my_post) && is_array($my_post)) { } if ( - (isset($groupInfo['iid']) && GroupManager::is_tutor_of_group(api_get_user_id(), $groupInfo['iid'])) || + (isset($groupInfo['iid']) && GroupManager::is_tutor_of_group(api_get_user_id(), $groupInfo)) || api_is_allowed_to_edit(false, true) && !(api_is_course_coach() && $current_forum['session_id'] != $sessionId) ) { diff --git a/main/group/group.php b/main/group/group.php index 3fc3e5d292..5612e9d05f 100755 --- a/main/group/group.php +++ b/main/group/group.php @@ -72,8 +72,8 @@ if (isset($_GET['action']) && $is_allowed_in_course) { } break; case 'self_reg': - if (GroupManager::is_self_registration_allowed($userId, $groupInfo['iid'])) { - GroupManager::subscribe_users($userId, $groupInfo['iid']); + if (GroupManager::is_self_registration_allowed($userId, $groupInfo)) { + GroupManager::subscribe_users($userId, $groupInfo); Display::addFlash(Display::return_message(get_lang('GroupNowMember'))); header("Location: $currentUrl"); exit; @@ -84,9 +84,8 @@ if (isset($_GET['action']) && $is_allowed_in_course) { } break; case 'self_unreg': - if (GroupManager::is_self_unregistration_allowed($userId, $groupInfo['iid'])) { - GroupManager::unsubscribe_users($userId, $groupInfo['iid']); - + if (GroupManager::is_self_unregistration_allowed($userId, $groupInfo)) { + GroupManager::unsubscribe_users($userId, $groupInfo); Display::addFlash(Display::return_message(get_lang('StudentDeletesHimself'))); header("Location: $currentUrl"); exit; @@ -107,7 +106,7 @@ if (api_is_allowed_to_edit(false, true)) { if (is_array($_POST['group'])) { foreach ($_POST['group'] as $myGroupId) { $groupInfo = GroupManager::get_group_properties($myGroupId); - GroupManager::delete_groups($groupInfo['iid']); + GroupManager::delete_groups($groupInfo); } Display::addFlash(Display::return_message(get_lang('SelectedGroupsDeleted'))); @@ -119,7 +118,7 @@ if (api_is_allowed_to_edit(false, true)) { if (is_array($_POST['group'])) { foreach ($_POST['group'] as $myGroupId) { $groupInfo = GroupManager::get_group_properties($myGroupId); - GroupManager :: unsubscribe_all_users($groupInfo['iid']); + GroupManager :: unsubscribe_all_users($groupInfo); } Display::addFlash(Display::return_message(get_lang('SelectedGroupsEmptied'))); @@ -131,7 +130,7 @@ if (api_is_allowed_to_edit(false, true)) { if (is_array($_POST['group'])) { foreach ($_POST['group'] as $myGroupId) { $groupInfo = GroupManager::get_group_properties($myGroupId); - GroupManager:: fill_groups($groupInfo['iid']); + GroupManager:: fill_groups($groupInfo); } Display::addFlash(Display::return_message(get_lang('SelectedGroupsFilled'))); header("Location: $currentUrl"); @@ -152,14 +151,14 @@ if (api_is_allowed_to_edit(false, true)) { break; case 'delete_one': $groupInfo = GroupManager::get_group_properties($my_get_id); - GroupManager :: delete_groups($groupInfo['iid']); + GroupManager :: delete_groups($groupInfo); Display::addFlash(Display::return_message(get_lang('GroupDel'))); header("Location: $currentUrl"); exit; break; case 'fill_one': $groupInfo = GroupManager::get_group_properties($my_get_id); - GroupManager :: fill_groups($groupInfo['iid']); + GroupManager :: fill_groups($groupInfo); Display::addFlash(Display::return_message(get_lang('GroupFilledGroups'))); header("Location: $currentUrl"); exit; diff --git a/main/group/group_creation.php b/main/group/group_creation.php index 93bd4addd0..7385ef6e84 100755 --- a/main/group/group_creation.php +++ b/main/group/group_creation.php @@ -246,7 +246,7 @@ EOT; $base_group_options = array(); $groups = GroupManager :: get_group_list(); foreach ($groups as $index => $group) { - $number_of_students = GroupManager :: number_of_students($group['iid']); + $number_of_students = GroupManager :: number_of_students($group['id']); if ($number_of_students > 0) { $base_group_options[$group['id']] = $group['name'].' ('.$number_of_students.' '.get_lang('Users').')'; } diff --git a/main/group/group_edit.php b/main/group/group_edit.php index b01079861e..acf0c83213 100755 --- a/main/group/group_edit.php +++ b/main/group/group_edit.php @@ -25,7 +25,7 @@ $nameTools = get_lang('EditGroup'); $interbreadcrumb[] = array ('url' => 'group.php?'.api_get_cidreq(), 'name' => get_lang('Groups')); $interbreadcrumb[] = array ('url' => 'group_space.php?'.api_get_cidreq(), 'name' => $current_group['name']); -$is_group_member = GroupManager :: is_tutor_of_group(api_get_user_id(), $current_group['iid']); +$is_group_member = GroupManager :: is_tutor_of_group(api_get_user_id(), $current_group); if (!api_is_allowed_to_edit(false, true) && !$is_group_member) { api_not_allowed(true); @@ -132,7 +132,7 @@ $form->addText('name', get_lang('GroupName')); // Description $form->addElement('textarea', 'description', get_lang('Description'), array ('rows' => 6)); -$complete_user_list = GroupManager :: fill_groups_list($current_group['iid']); +$complete_user_list = GroupManager :: fill_groups_list($current_group); usort($complete_user_list, 'sort_users'); $possible_users = array(); @@ -141,7 +141,7 @@ foreach ($complete_user_list as $index => $user) { } // Group tutors -$group_tutor_list = GroupManager :: get_subscribed_tutors($current_group['iid']); +$group_tutor_list = GroupManager :: get_subscribed_tutors($current_group); $selected_users = array(); $selected_tutors = array(); foreach ($group_tutor_list as $index => $user) { @@ -157,7 +157,7 @@ $group_tutors_element = $form->addElement( ); // Group members -$group_member_list = GroupManager::get_subscribed_users($current_group['iid']); +$group_member_list = GroupManager::get_subscribed_users($current_group); $selected_users = array (); foreach ($group_member_list as $index => $user) { @@ -335,13 +335,13 @@ if ($form->validate()) { // Storing the tutors (we first remove all the tutors and then add only those who were selected) GroupManager :: unsubscribe_all_tutors($current_group['iid']); if (isset($_POST['group_tutors']) && count($_POST['group_tutors']) > 0) { - GroupManager :: subscribe_tutors($values['group_tutors'], $current_group['iid']); + GroupManager :: subscribe_tutors($values['group_tutors'], $current_group); } // Storing the users (we first remove all users and then add only those who were selected) - GroupManager :: unsubscribe_all_users($current_group['iid']); + GroupManager :: unsubscribe_all_users($current_group); if (isset($_POST['group_members']) && count($_POST['group_members']) > 0) { - GroupManager :: subscribe_users($values['group_members'], $current_group['iid']); + GroupManager :: subscribe_users($values['group_members'], $current_group); } // Returning to the group area (note: this is inconsistent with the rest of chamilo) diff --git a/main/group/group_space.php b/main/group/group_space.php index 44c3f997f0..06d72c7d2f 100755 --- a/main/group/group_space.php +++ b/main/group/group_space.php @@ -33,7 +33,7 @@ $interbreadcrumb[] = array('url' => 'group.php?'.api_get_cidreq(), 'name' => get /* Ensure all private groups // Juan Carlos RaƱa Trabado */ -$forums_of_groups = get_forums_of_group($current_group['iid']); +$forums_of_groups = get_forums_of_group($current_group); if (!GroupManager::userHasAccessToBrowse($user_id, $current_group, api_get_session_id())) { api_not_allowed(true); @@ -50,9 +50,9 @@ Display::display_introduction_section(TOOL_GROUP); * User wants to register in this group */ if (!empty($_GET['selfReg']) && - GroupManager :: is_self_registration_allowed($user_id, $current_group['iid']) + GroupManager :: is_self_registration_allowed($user_id, $current_group) ) { - GroupManager :: subscribe_users($user_id, $current_group['iid']); + GroupManager :: subscribe_users($user_id, $current_group); Display :: display_normal_message(get_lang('GroupNowMember')); } @@ -60,9 +60,9 @@ if (!empty($_GET['selfReg']) && * User wants to unregister from this group */ if (!empty($_GET['selfUnReg']) && - GroupManager :: is_self_unregistration_allowed($user_id, $current_group['iid']) + GroupManager :: is_self_unregistration_allowed($user_id, $current_group) ) { - GroupManager::unsubscribe_users($user_id, $current_group['iid']); + GroupManager::unsubscribe_users($user_id, $current_group); Display::display_normal_message(get_lang('StudentDeletesHimself')); } @@ -75,7 +75,7 @@ echo ''. * Register to group */ $subscribe_group = ''; -if (GroupManager :: is_self_registration_allowed($user_id, $current_group['iid'])) { +if (GroupManager :: is_self_registration_allowed($user_id, $current_group)) { $subscribe_group = ''. get_lang("RegIntoGroup").''; } @@ -84,7 +84,7 @@ if (GroupManager :: is_self_registration_allowed($user_id, $current_group['iid'] * Unregister from group */ $unsubscribe_group = ''; -if (GroupManager :: is_self_unregistration_allowed($user_id, $current_group['iid'])) { +if (GroupManager :: is_self_unregistration_allowed($user_id, $current_group)) { $unsubscribe_group = ''. get_lang("StudentUnsubscribe").''; } @@ -94,7 +94,7 @@ echo ' 
'; $edit_url = ''; if (api_is_allowed_to_edit(false, true) || - GroupManager::is_tutor_of_group(api_get_user_id(), $current_group['iid']) + GroupManager::is_tutor_of_group(api_get_user_id(), $current_group) ) { $edit_url = ''. Display::return_icon('edit.png', get_lang('EditGroup'), '', ICON_SIZE_SMALL).''; @@ -111,13 +111,14 @@ if (!empty($current_group['description'])) { /* * Group Tools */ + // If the user is subscribed to the group or the user is a tutor of the group then if (api_is_allowed_to_edit(false, true) || - GroupManager::is_user_in_group(api_get_user_id(), $current_group['iid']) + GroupManager::is_user_in_group(api_get_user_id(), $current_group) ) { $actions_array = array(); // Link to the forum of this group - $forums_of_groups = get_forums_of_group($current_group['iid']); + $forums_of_groups = get_forums_of_group($current_group); if (is_array($forums_of_groups)) { if ($current_group['forum_state'] != GroupManager::TOOL_NOT_AVAILABLE) { @@ -222,7 +223,7 @@ if (api_is_allowed_to_edit(false, true) || $actions_array = array(); // Link to the forum of this group - $forums_of_groups = get_forums_of_group($current_group['iid']); + $forums_of_groups = get_forums_of_group($current_group); if (is_array($forums_of_groups)) { if ($current_group['forum_state'] == GroupManager::TOOL_PUBLIC) { @@ -300,7 +301,7 @@ if (api_is_allowed_to_edit(false, true) || /* * List all the tutors of the current group */ -$tutors = GroupManager::get_subscribed_tutors($current_group['iid']); +$tutors = GroupManager::get_subscribed_tutors($current_group); $tutor_info = ''; if (count($tutors) == 0) { @@ -425,6 +426,7 @@ function get_group_user_data($from, $number_of_items, $column, $direction) // Database table definition $table_group_user = Database:: get_course_table(TABLE_GROUP_USER); $table_user = Database:: get_main_table(TABLE_MAIN_USER); + $tableGroup = Database:: get_course_table(TABLE_GROUP); // Query if (api_get_setting('show_email_addresses') === 'true') { @@ -437,12 +439,14 @@ function get_group_user_data($from, $number_of_items, $column, $direction) user.firstname AS col2," )." user.email AS col3 - FROM $table_user user, + FROM $table_user user INNER JOIN $table_group_user group_rel_user + ON (group_rel_user.user_id = user.id) + INNER JOIN $tableGroup g + ON (group_rel_user.group_id = g.id) WHERE group_rel_user.c_id = $course_id AND - group_rel_user.user_id = user.id AND - group_rel_user.group_id = '".$groupInfo['iid']."' + g.iid = '".$groupInfo['iid']."' ORDER BY col$column $direction LIMIT $from, $number_of_items"; } else { @@ -458,8 +462,12 @@ function get_group_user_data($from, $number_of_items, $column, $direction) u.email AS col3 FROM $table_user u INNER JOIN $table_group_user gu - ON (gu.user_id = u.id) AND gu.c_id = $course_id - WHERE gu.group_id = '".$groupInfo['iid']."' + ON (gu.user_id = u.id) + INNER JOIN $tableGroup g + ON (gu.group_id = g.id) + WHERE + g.iid = '".$groupInfo['iid']."' AND + gu.c_id = $course_id ORDER BY col$column $direction LIMIT $from, $number_of_items"; } else { @@ -472,11 +480,16 @@ function get_group_user_data($from, $number_of_items, $column, $direction) "user.lastname AS col1, user.firstname AS col2 " )." - FROM $table_user user, $table_group_user group_rel_user + FROM $table_user user + INNER JOIN $table_group_user group_rel_user + ON (group_rel_user.user_id = user.id) + INNER JOIN $tableGroup g + ON (group_rel_user.group_id = g.id) WHERE + g.iid = '".$groupInfo['iid']."' AND group_rel_user.c_id = $course_id AND group_rel_user.user_id = user.id AND - group_rel_user.group_id = '".$groupInfo['iid']."' + g.iid = '".$groupInfo['iid']."' ORDER BY col$column $direction LIMIT $from, $number_of_items"; } diff --git a/main/group/member_settings.php b/main/group/member_settings.php index e92a9e805f..b28b592dbc 100755 --- a/main/group/member_settings.php +++ b/main/group/member_settings.php @@ -25,7 +25,7 @@ $nameTools = get_lang('EditGroup'); $interbreadcrumb[] = array('url' => 'group.php', 'name' => get_lang('Groups')); $interbreadcrumb[] = array('url' => 'group_space.php?'.api_get_cidreq(), 'name' => $current_group['name']); -$is_group_member = GroupManager::is_tutor_of_group(api_get_user_id(), $current_group['iid']); +$is_group_member = GroupManager::is_tutor_of_group(api_get_user_id(), $current_group); if (!api_is_allowed_to_edit(false, true) && !$is_group_member) { api_not_allowed(true); @@ -125,8 +125,8 @@ $(document).ready( function() { $form = new FormValidator('group_edit', 'post', api_get_self().'?'.api_get_cidreq()); $form->addElement('hidden', 'action'); $form->addElement('hidden', 'max_student', $current_group['max_student']); -$complete_user_list = GroupManager::fill_groups_list($current_group['iid']); -$subscribedTutors = GroupManager::getTutors($current_group['iid']); +$complete_user_list = GroupManager::fill_groups_list($current_group); +$subscribedTutors = GroupManager::getTutors($current_group); if ($subscribedTutors) { $subscribedTutors = array_column($subscribedTutors, 'user_id'); } @@ -165,7 +165,7 @@ if (!empty($complete_user_list)) { } // Group members -$group_member_list = GroupManager::get_subscribed_users($current_group['iid']); +$group_member_list = GroupManager::get_subscribed_users($current_group); $selected_users = array(); if (!empty($group_member_list)) { @@ -190,12 +190,12 @@ if ($form->validate()) { $values = $form->exportValues(); // Storing the users (we first remove all users and then add only those who were selected) - GroupManager:: unsubscribe_all_users($current_group['iid']); + GroupManager:: unsubscribe_all_users($current_group); if (isset($_POST['group_members']) && count($_POST['group_members']) > 0) { GroupManager:: subscribe_users( $values['group_members'], - $current_group['iid'] + $current_group ); } @@ -218,7 +218,7 @@ $action = isset($_GET['action']) ? $_GET['action'] : null; switch ($action) { case 'empty': if (api_is_allowed_to_edit(false, true)) { - GroupManager:: unsubscribe_all_users($current_group['iid']); + GroupManager:: unsubscribe_all_users($current_group); Display :: display_confirmation_message(get_lang('GroupEmptied')); } break; diff --git a/main/group/settings.php b/main/group/settings.php index 8b79669f9e..dc87ae1090 100755 --- a/main/group/settings.php +++ b/main/group/settings.php @@ -23,7 +23,7 @@ $current_group = GroupManager::get_group_properties($group_id); $nameTools = get_lang('EditGroup'); $interbreadcrumb[] = array('url' => 'group.php?'.api_get_cidreq(), 'name' => get_lang('Groups')); $interbreadcrumb[] = array('url' => 'group_space.php?'.api_get_cidreq(), 'name' => $current_group['name']); -$is_group_member = GroupManager::is_tutor_of_group(api_get_user_id(), $current_group['iid']); +$is_group_member = GroupManager::is_tutor_of_group(api_get_user_id(), $current_group); if (!api_is_allowed_to_edit(false, true) && !$is_group_member) { api_not_allowed(true); diff --git a/main/group/tutor_settings.php b/main/group/tutor_settings.php index 943936db1f..972d769774 100755 --- a/main/group/tutor_settings.php +++ b/main/group/tutor_settings.php @@ -25,7 +25,7 @@ $nameTools = get_lang('EditGroup'); $interbreadcrumb[] = array('url' => 'group.php?'.api_get_cidreq(), 'name' => get_lang('Groups')); $interbreadcrumb[] = array('url' => 'group_space.php?'.api_get_cidreq(), 'name' => $current_group['name']); -$is_group_member = GroupManager::is_tutor_of_group(api_get_user_id(), $current_group['iid']); +$is_group_member = GroupManager::is_tutor_of_group(api_get_user_id(), $current_group); if (!api_is_allowed_to_edit(false, true) && !$is_group_member) { api_not_allowed(true); @@ -110,18 +110,18 @@ $form = new FormValidator('group_edit', 'post', api_get_self().'?'.api_get_cidre $form->addElement('hidden', 'action'); // Group tutors -$group_tutor_list = GroupManager :: get_subscribed_tutors($current_group['iid']); +$group_tutor_list = GroupManager::get_subscribed_tutors($current_group); $selected_tutors = array(); foreach ($group_tutor_list as $index => $user) { $selected_tutors[] = $user['user_id']; } -$complete_user_list = GroupManager::fill_groups_list($current_group['iid']); +$complete_user_list = GroupManager::fill_groups_list($current_group); $possible_users = array(); $userGroup = new UserGroup(); -$subscribedUsers = GroupManager::get_subscribed_users($current_group['iid']); +$subscribedUsers = GroupManager::get_subscribed_users($current_group); if ($subscribedUsers) { $subscribedUsers = array_column($subscribedUsers, 'user_id'); } @@ -130,7 +130,6 @@ $orderUserListByOfficialCode = api_get_setting('order_user_list_by_official_code if (!empty($complete_user_list)) { usort($complete_user_list, 'sort_users'); foreach ($complete_user_list as $index => $user) { - if (in_array($user['user_id'], $subscribedUsers)) { continue; } @@ -181,7 +180,7 @@ if ($form->validate()) { // Storing the tutors (we first remove all the tutors and then add only those who were selected) GroupManager :: unsubscribe_all_tutors($current_group['iid']); if (isset($_POST['group_tutors']) && count($_POST['group_tutors']) > 0) { - GroupManager::subscribe_tutors($values['group_tutors'], $current_group['iid']); + GroupManager::subscribe_tutors($values['group_tutors'], $current_group); } // Returning to the group area (note: this is inconsistent with the rest of chamilo) diff --git a/main/inc/ajax/document.ajax.php b/main/inc/ajax/document.ajax.php index 37d9f8a828..7cfb01c874 100755 --- a/main/inc/ajax/document.ajax.php +++ b/main/inc/ajax/document.ajax.php @@ -39,7 +39,7 @@ switch ($action) { if (api_get_group_id()) { $groupInfo = GroupManager::get_group_properties(api_get_group_id()); // Only course admin or group members allowed - if ($is_allowed_to_edit || GroupManager::is_user_in_group(api_get_user_id(), $groupInfo['iid'])) { + if ($is_allowed_to_edit || GroupManager::is_user_in_group(api_get_user_id(), $groupInfo)) { } else { exit; } diff --git a/main/inc/ajax/forum.ajax.php b/main/inc/ajax/forum.ajax.php index 891bf4f58f..a28c0c2ab3 100644 --- a/main/inc/ajax/forum.ajax.php +++ b/main/inc/ajax/forum.ajax.php @@ -136,7 +136,7 @@ if (!empty($action)) { $groupInfo = GroupManager::get_group_properties($group_id); if (!api_is_allowed_to_edit(null, true) && $current_forum['allow_edit'] == 0 && - ($group_id && !GroupManager::is_tutor_of_group(api_get_user_id(), $groupInfo['iid'])) + ($group_id && !GroupManager::is_tutor_of_group(api_get_user_id(), $groupInfo)) ) { $json['errorMessage'] = '4. if editing of replies is not allowed'; break; diff --git a/main/inc/lib/agenda.lib.php b/main/inc/lib/agenda.lib.php index fd569b123e..339e7b45f4 100644 --- a/main/inc/lib/agenda.lib.php +++ b/main/inc/lib/agenda.lib.php @@ -85,7 +85,7 @@ class Agenda ) && GroupManager::is_tutor_of_group( api_get_user_id(), - $groupInfo['iid'] + $groupInfo ); if ($isGroupAccess) { $isAllowToEdit = true; @@ -2955,16 +2955,14 @@ class Agenda $form = ''; if (api_is_allowed_to_edit(false, true) || - (api_get_course_setting( - 'allow_user_edit_agenda' - ) && !api_is_anonymous()) && + (api_get_course_setting('allow_user_edit_agenda') && !api_is_anonymous()) && api_is_allowed_to_session_edit(false, true) || (GroupManager::user_has_access( api_get_user_id(), $groupIid, GroupManager::GROUP_TOOL_CALENDAR ) && - GroupManager::is_tutor_of_group(api_get_user_id(), $groupIid)) + GroupManager::is_tutor_of_group(api_get_user_id(), $groupInfo)) ) { $actionsLeft .= Display::url( Display::return_icon( diff --git a/main/inc/lib/course.lib.php b/main/inc/lib/course.lib.php index dd31400159..8615e5f3fa 100755 --- a/main/inc/lib/course.lib.php +++ b/main/inc/lib/course.lib.php @@ -2163,7 +2163,7 @@ class CourseManager $result = Database::query($sql); while ($group_data = Database::fetch_array($result)) { - $group_data['userNb'] = GroupManager::number_of_students($group_data['iid'], $course_id); + $group_data['userNb'] = GroupManager::number_of_students($group_data['id'], $course_id); $group_list[$group_data['id']] = $group_data; } return $group_list; @@ -2252,11 +2252,9 @@ class CourseManager // Cleaning groups $groups = GroupManager::get_groups($courseId); if (!empty($groups)) { - $groupList = array_column($groups, 'iid'); - foreach ($groupList as $groupId) { - GroupManager::delete_groups($groupId, $course['code']); + foreach ($groups as $group) { + GroupManager::delete_groups($group, $course['code']); } - } // Cleaning c_x tables @@ -5755,12 +5753,12 @@ class CourseManager /** * Shows the form for sending a message to a specific group or user. * @param FormValidator $form - * @param int $group_id iid + * @param int $group_id id * @param array $to */ - public static function addGroupMultiSelect($form, $group_id, $to = array()) + public static function addGroupMultiSelect($form, $groupInfo, $to = array()) { - $group_users = GroupManager::get_subscribed_users($group_id); + $group_users = GroupManager::get_subscribed_users($groupInfo); $array = self::buildSelectOptions(null, $group_users, $to); $result = array(); diff --git a/main/inc/lib/groupmanager.lib.php b/main/inc/lib/groupmanager.lib.php index dfa4606423..5fbdbaa79b 100755 --- a/main/inc/lib/groupmanager.lib.php +++ b/main/inc/lib/groupmanager.lib.php @@ -131,7 +131,7 @@ class GroupManager $groups = array(); while ($thisGroup = Database::fetch_array($groupList)) { - $thisGroup['number_of_members'] = count(self::get_subscribed_users($thisGroup['iid'])); + $thisGroup['number_of_members'] = count(self::get_subscribed_users($thisGroup)); if ($thisGroup['session_id'] != 0) { $sql = 'SELECT name FROM '.Database::get_main_table(TABLE_MAIN_SESSION).' WHERE id='.$thisGroup['session_id']; @@ -330,11 +330,13 @@ class GroupManager $members = array(); foreach ($users as $index => $user_id) { + $groupId = $group_ids[$index % $number_of_groups]; + $groupInfo = self::get_group_properties($groupId); self::subscribe_users( $user_id, - $group_ids[$index % $number_of_groups] + $groupInfo ); - $members[$group_ids[$index % $number_of_groups]]++; + $members[$group_ids[$groupId]]++; } foreach ($members as $group_id => $places) { @@ -363,7 +365,8 @@ class GroupManager 0, count($users_ids) ); - self::subscribe_users($users_ids, $group_id); + $groupInfo = self::get_group_properties($group_id); + self::subscribe_users($users_ids, $groupInfo); $group_ids[] = $group_id; } return $group_ids; @@ -374,11 +377,11 @@ class GroupManager * @author Christophe Gesche * @author Hugues Peeters * @author Bart Mollet - * @param int $groupId iid + * @param array $groupInfo iid * @param string $course_code Default is current course * @return integer - number of groups deleted. */ - public static function delete_groups($groupId, $course_code = null) + public static function delete_groups($groupInfo, $course_code = null) { $course_info = api_get_course_info($course_code); $course_id = $course_info['real_id']; @@ -386,26 +389,26 @@ class GroupManager // Database table definitions $group_table = Database:: get_course_table(TABLE_GROUP); $forum_table = Database:: get_course_table(TABLE_FORUM); - $groupId = (int) $groupId; - - $sql = "SELECT id, iid, secret_directory, session_id - FROM $group_table - WHERE c_id = $course_id AND iid = $groupId"; - $db_result = Database::query($sql); - - $group = Database::fetch_object($db_result); - if ($group) { + $groupInfo = self::get_group_properties($groupInfo['iid'], true); + if ($groupInfo) { + $groupIid = $groupInfo['iid']; + $groupId = $groupInfo['id']; + $directory = $groupInfo['secret_directory']; // Unsubscribe all users - self::unsubscribe_all_users($groupId); - self::unsubscribe_all_tutors($groupId); + self::unsubscribe_all_users($groupInfo); + self::unsubscribe_all_tutors($groupInfo); // move group-documents to garbage - $source_directory = api_get_path(SYS_COURSE_PATH).$course_info['path']."/document".$group->secret_directory; + $source_directory = api_get_path(SYS_COURSE_PATH).$course_info['path']."/document".$directory; // File to renamed - $destination_dir = api_get_path(SYS_COURSE_PATH).$course_info['path']."/document".$group->secret_directory.'_DELETED_'.$group->id; + $destination_dir = api_get_path(SYS_COURSE_PATH).$course_info['path']."/document".$directory.'_DELETED_'.$groupInfo['id']; - if (!empty($group->secret_directory)) { + if (!empty($directory)) { //Deleting from document tool - DocumentManager::delete_document($course_info, $group->secret_directory, $source_directory); + DocumentManager::delete_document( + $course_info, + $directory, + $source_directory + ); if (file_exists($source_directory)) { if (api_get_setting('permanently_remove_deleted_files') === 'true') { @@ -430,7 +433,7 @@ class GroupManager // delete the groups $sql = "DELETE FROM $group_table - WHERE c_id = $course_id AND iid = $groupId "; + WHERE c_id = $course_id AND iid = $groupIid "; Database::query($sql); } @@ -440,6 +443,7 @@ class GroupManager /** * Get group properties * @param int $group_id The group from which properties are requested. + * @param bool $useIid * @return array All properties. Array-keys are: * name, tutor_id, description, maximum_number_of_students, * directory and visibility of tools @@ -483,10 +487,10 @@ class GroupManager $result['self_registration_allowed'] = $db_object->self_registration_allowed; $result['self_unregistration_allowed'] = $db_object->self_unregistration_allowed; $result['count_users'] = count( - self::get_subscribed_users($db_object->iid) + self::get_subscribed_users($result) ); $result['count_tutor'] = count( - self::get_subscribed_tutors($db_object->iid) + self::get_subscribed_tutors($result) ); $result['count_all'] = $result['count_users'] + $result['count_tutor']; } @@ -775,7 +779,8 @@ class GroupManager $res = Database::query($sql); if (Database::num_rows($res) > 0) { while ($group = Database::fetch_object($res)) { - self::delete_groups($group->iid, $course_code); + $groupInfo = self::get_group_properties($group->iid, true); + self::delete_groups($groupInfo, $course_code); } } $sql = "DELETE FROM $table_group_cat @@ -948,7 +953,7 @@ class GroupManager */ public static function get_current_max_groups_per_user($category_id = null, $course_code = null) { - $course_info = api_get_course_info ($course_code); + $course_info = api_get_course_info($course_code); $group_table = Database::get_course_table(TABLE_GROUP); $group_user_table = Database::get_course_table(TABLE_GROUP_USER); $sql = 'SELECT COUNT(gu.group_id) AS current_max @@ -1018,7 +1023,6 @@ class GroupManager $group_user_table = Database::get_course_table(TABLE_GROUP_USER); $groupTable = Database::get_course_table(TABLE_GROUP); $user_table = Database::get_main_table(TABLE_MAIN_USER); - $group_id = intval($group_id); if (empty($courseId)) { @@ -1071,7 +1075,7 @@ class GroupManager } /** - * @param int $group_id + * @param int $group_id id * @return array */ public static function getStudentsAndTutors($group_id) @@ -1109,21 +1113,21 @@ class GroupManager /** * Get only tutors from a group - * @param int $group_id iid + * @param array $groupInfo * @return array */ - public static function getTutors($group_id) + public static function getTutors($groupInfo) { $groupTable = Database::get_course_table(TABLE_GROUP); $tutor_user_table = Database::get_course_table(TABLE_GROUP_TUTOR); $course_id = api_get_course_int_id(); - $group_id = intval($group_id); + $group_id = intval($groupInfo['iid']); $sql = "SELECT user_id FROM $tutor_user_table gu INNER JOIN $groupTable g ON (gu.group_id = g.id and g.c_id = gu.c_id) - WHERE gu.c_id = $course_id AND g.id = $group_id"; + WHERE gu.c_id = $course_id AND g.iid = $group_id"; $res = Database::query($sql); $users = array(); @@ -1209,25 +1213,30 @@ class GroupManager * ywarnier:> Now the course_id has been removed (25/1/2005) * The databases are als very inconsistent in this. * - * @param int $groupId iid + * @param array $groupInfo * @author Chrisptophe Gesche , * Hugues Peeters - original version * @author Roan Embrechts - virtual course support, code cleaning * @author Bart Mollet - code cleaning, use other GroupManager-functions * @return void */ - public static function fill_groups($groupId) + public static function fill_groups($groupInfo) { $_course = api_get_course_info(); - $groupId = (int) $groupId; + $groupIid = $groupInfo['iid']; + $groupId = $groupInfo['id']; - $category = self::get_category_from_group($groupId); + $category = self::get_category_from_group($groupIid); $groups_per_user = isset($category['groups_per_user']) ? $category['groups_per_user'] : self::GROUP_PER_MEMBER_NO_LIMIT; $group_table = Database:: get_course_table(TABLE_GROUP); $group_user_table = Database:: get_course_table(TABLE_GROUP_USER); $session_id = api_get_session_id(); - $complete_user_list = CourseManager::get_real_and_linked_user_list($_course['code'], true, $session_id); + $complete_user_list = CourseManager::get_real_and_linked_user_list( + $_course['code'], + true, + $session_id + ); $number_groups_per_user = $groups_per_user == self::GROUP_PER_MEMBER_NO_LIMIT ? self::INFINITE : $groups_per_user; /* @@ -1241,9 +1250,9 @@ class GroupManager LEFT JOIN $group_user_table ug ON g.c_id = $course_id AND ug.c_id = $course_id AND - g.iid = ug.group_id + g.id = ug.group_id WHERE - g.iid = $groupId + g.id = $groupId GROUP BY (g.iid) HAVING (nbPlaces > 0 OR g.max_student = ".self::MEMBER_PER_GROUP_NO_LIMIT.") ORDER BY nbPlaces DESC"; @@ -1267,7 +1276,6 @@ class GroupManager $complete_user_list[$i]['number_groups_left'] = $number_groups_per_user - $number_of_groups; } - //first sort by user_id to filter out duplicates $complete_user_list = TableSort::sort_table($complete_user_list, 'user_id'); $complete_user_list = self::filter_duplicates($complete_user_list, 'user_id'); @@ -1291,11 +1299,12 @@ class GroupManager reset($userToken); arsort($userToken); - foreach ($group_available_place as $group_id => $place) { + foreach ($group_available_place as $groupIid => $place) { foreach ($userToken as $user_id => $places) { - if (self::can_user_subscribe($user_id, $group_id)) { - self::subscribe_users($user_id, $group_id); - $group_available_place[$group_id]--; + $groupInfo = self::get_group_properties($groupIid, true); + if (self::can_user_subscribe($user_id, $groupInfo)) { + self::subscribe_users($user_id, $groupInfo); + $group_available_place[$groupIid]--; unset($userToken[$user_id]); $changed = true; break; @@ -1310,7 +1319,7 @@ class GroupManager /** * Get the number of students in a group. - * @param int $group_id iid + * @param int $group_id id * @return int Number of students in the given group. */ public static function number_of_students($group_id, $course_id = null) @@ -1322,7 +1331,7 @@ class GroupManager } else { $course_id = intval($course_id); } - $sql = "SELECT COUNT(*) AS number_of_students + $sql = "SELECT COUNT(*) AS number_of_students FROM $table_group_user WHERE c_id = $course_id AND group_id = $group_id"; $result = Database::query($sql); @@ -1385,30 +1394,31 @@ class GroupManager /** * Is sef-registration allowed? * @param int $user_id - * @param int $group_id iid + * @param array $groupInfo * @return bool TRUE if self-registration is allowed in the given group. */ - public static function is_self_registration_allowed($user_id, $group_id) + public static function is_self_registration_allowed($user_id, $groupInfo) { $course_id = api_get_course_int_id(); if (!$user_id > 0) { return false; } + $groupIid = $groupInfo['iid']; + $groupId = $groupInfo['id']; + $table_group = Database::get_course_table(TABLE_GROUP); - $group_id = intval($group_id); if (isset($group_id)) { $sql = "SELECT status, self_registration_allowed FROM $table_group - WHERE c_id = $course_id AND iid = $group_id"; + WHERE c_id = $course_id AND iid = $groupIid"; $result = Database::query($sql); $group = Database::fetch_object($result); if ($group->status == 0 || $group->self_registration_allowed != 1) { - return false; } - return self::can_user_subscribe($user_id, $group_id); + return self::can_user_subscribe($user_id, $groupInfo); } else { return false; } @@ -1417,46 +1427,45 @@ class GroupManager /** * Is sef-unregistration allowed? * @param int $user_id - * @param int $group_id iid + * @param array $groupInfo * @return bool TRUE if self-unregistration is allowed in the given group. */ - public static function is_self_unregistration_allowed($user_id, $group_id) + public static function is_self_unregistration_allowed($user_id, $groupInfo) { - if (!$user_id > 0) { + if (!$user_id > 0 || empty($groupInfo)) { return false; } + $groupIid = $groupInfo['iid']; $table_group = Database::get_course_table(TABLE_GROUP); - $group_id = intval($group_id); $course_id = api_get_course_int_id(); $sql = "SELECT status, self_unregistration_allowed FROM $table_group - WHERE c_id = $course_id AND iid = $group_id"; + WHERE c_id = $course_id AND iid = $groupIid"; $result = Database::query($sql); $group = Database::fetch_object($result); if ($group->status == 0 || $group->self_unregistration_allowed != 1) { - return false; } - return self::is_subscribed($user_id, $group_id); + return self::is_subscribed($user_id, $groupInfo); } /** * Is user subscribed in group? * @param int $user_id - * @param int $group_id iid + * @param array $groupInfo * @return bool TRUE if given user is subscribed in given group */ - public static function is_subscribed($user_id, $group_id) + public static function is_subscribed($user_id, $groupInfo) { $course_id = api_get_course_int_id(); if (empty($user_id) || empty($group_id) || empty($course_id)) { return false; } $table_group_user = Database::get_course_table(TABLE_GROUP_USER); - $group_id = intval($group_id); + $group_id = intval($groupInfo['id']); $user_id = intval($user_id); $sql = "SELECT 1 FROM $table_group_user @@ -1473,39 +1482,41 @@ class GroupManager /** * Can a user subscribe to a specified group in a course * @param int $user_id - * @param int $group_id iid + * @param array $groupInfo * @param bool $checkMaxNumberStudents * * @return bool TRUE if given user can be subscribed in given group */ - public static function can_user_subscribe($user_id, $group_id, $checkMaxNumberStudents = true) + public static function can_user_subscribe($user_id, $groupInfo, $checkMaxNumberStudents = true) { + $group_id = $groupInfo['id']; + $groupIid = $groupInfo['iid']; if ($checkMaxNumberStudents) { - $category = self:: get_category_from_group($group_id); + $category = self::get_category_from_group($groupIid); if ($category) { if ($category['groups_per_user'] == self::GROUP_PER_MEMBER_NO_LIMIT) { $category['groups_per_user'] = self::INFINITE; } - $result = self:: user_in_number_of_groups($user_id, $category['id'] ) < $category['groups_per_user']; + $result = self:: user_in_number_of_groups($user_id, $category['id']) < $category['groups_per_user']; if ($result == false) { return false; } } - $result = self:: number_of_students($group_id) < self:: maximum_number_of_students($group_id); + $result = self::number_of_students($group_id) < self:: maximum_number_of_students($groupIid); if ($result == false) { return false; } } - $result = self::is_tutor_of_group($user_id, $group_id); + $result = self::is_tutor_of_group($user_id, $groupInfo); if ($result) { return false; } - $result = self::is_subscribed($user_id, $group_id); + $result = self::is_subscribed($user_id, $groupInfo); if ($result) { return false; @@ -1516,11 +1527,11 @@ class GroupManager /** * Get all subscribed users (members) from a group - * @param int $group_id (iid) + * @param array $groupInfo * @return array An array with information of all users from the given group. * (user_id, firstname, lastname, email) */ - public static function get_subscribed_users($group_id) + public static function get_subscribed_users($groupInfo) { $table_user = Database::get_main_table(TABLE_MAIN_USER); $table_group_user = Database::get_course_table(TABLE_GROUP_USER); @@ -1530,18 +1541,28 @@ class GroupManager $order_clause = " ORDER BY u.official_code, u.firstname, u.lastname"; } + $group_id = intval($groupInfo['id']); + if (empty($group_id)) { return array(); } - $group_id = intval($group_id); + $course_id = api_get_course_int_id(); - $sql = "SELECT ug.id, u.user_id, u.lastname, u.firstname, u.email, u.username - FROM $table_user u INNER JOIN $table_group_user ug + $sql = "SELECT + ug.id, + u.user_id, + u.lastname, + u.firstname, + u.email, + u.username + FROM $table_user u + INNER JOIN $table_group_user ug ON (ug.user_id = u.user_id) WHERE ug.c_id = $course_id AND ug.group_id = $group_id $order_clause"; + $db_result = Database::query($sql); $users = array(); while ($user = Database::fetch_object($db_result)) { @@ -1560,11 +1581,11 @@ class GroupManager /** * @author Patrick Cool , Ghent University * Get all subscribed tutors of a group - * @param int $group_id (iid) + * @param array $groupInfo * @return array An array with information of all users from the given group. * (user_id, firstname, lastname, email) */ - public static function get_subscribed_tutors($group_id, $id_only = false) + public static function get_subscribed_tutors($groupInfo, $id_only = false) { $table_user = Database::get_main_table(TABLE_MAIN_USER); $table_group_tutor = Database::get_course_table(TABLE_GROUP_TUTOR); @@ -1575,7 +1596,7 @@ class GroupManager $order_clause = " ORDER BY u.official_code, u.firstname, u.lastname"; } - $group_id = intval($group_id); + $group_id = intval($groupInfo['id']); $course_id = api_get_course_int_id(); $sql = "SELECT tg.id, u.user_id, u.lastname, u.firstname, u.email @@ -1606,20 +1627,20 @@ class GroupManager /** * Subscribe user(s) to a specified group in current course (as a student) * @param mixed $user_ids Can be an array with user-id's or a single user-id - * @param int $group_id iid + * @param array $groupInfo * @param int $course_id * @return bool TRUE if successful */ - public static function subscribe_users($user_ids, $group_id, $course_id = null) + public static function subscribe_users($user_ids, $groupInfo, $course_id = null) { $user_ids = is_array($user_ids) ? $user_ids : array($user_ids); $course_id = isset($course_id) && !empty($course_id) ? intval($course_id) : api_get_course_int_id(); - $group_id = intval($group_id); + $group_id = $groupInfo['id']; $table_group_user = Database::get_course_table(TABLE_GROUP_USER); if (!empty($user_ids)) { foreach ($user_ids as $user_id) { - if (self::can_user_subscribe($user_id, $group_id)) { + if (self::can_user_subscribe($user_id, $groupInfo)) { $user_id = intval($user_id); $sql = "INSERT INTO ".$table_group_user." (c_id, user_id, group_id) VALUES ('$course_id', '".$user_id."', '".$group_id."')"; @@ -1634,24 +1655,24 @@ class GroupManager /** * Subscribe tutor(s) to a specified group in current course * @param mixed $user_ids Can be an array with user-id's or a single user-id - * @param int $group_id iid + * @param int $group_id id * @param int $course_id * * @author Patrick Cool , Ghent University * @see subscribe_users. This function is almost an exact copy of that function. * @return bool TRUE if successful */ - public static function subscribe_tutors($user_ids, $groupId, $course_id = null) + public static function subscribe_tutors($user_ids, $groupInfo, $course_id = null) { $user_ids = is_array($user_ids) ? $user_ids : array($user_ids); $result = true; $course_id = isset($course_id) && !empty($course_id) ? intval($course_id) : api_get_course_int_id(); $table_group_tutor = Database::get_course_table(TABLE_GROUP_TUTOR); - $groupId = (int) $groupId; + $groupId = (int) $groupInfo['id']; foreach ($user_ids as $user_id) { $user_id = intval($user_id); - if (self::can_user_subscribe($user_id, $groupId, false)) { + if (self::can_user_subscribe($user_id, $groupInfo, false)) { $sql = "INSERT INTO " . $table_group_tutor . " (c_id, user_id, group_id) VALUES ('$course_id', '" . $user_id . "', '" . $groupId . "')"; $result = Database::query($sql); @@ -1664,14 +1685,14 @@ class GroupManager /** * Unsubscribe user(s) from a specified group in current course * @param mixed $user_ids Can be an array with user-id's or a single user-id - * @param int $group_id iid + * @param array $groupInfo * @return bool TRUE if successful */ - public static function unsubscribe_users($user_ids, $group_id) + public static function unsubscribe_users($user_ids, $groupInfo) { $user_ids = is_array($user_ids) ? $user_ids : array ($user_ids); $table_group_user = Database::get_course_table(TABLE_GROUP_USER); - $group_id = intval($group_id); + $group_id = intval($groupInfo['id']); $course_id = api_get_course_int_id(); $sql = 'DELETE FROM '.$table_group_user.' WHERE @@ -1684,15 +1705,13 @@ class GroupManager /** * Unsubscribe all users from one or more groups - * @param int $group_id iid + * @param array $groupInfo * @return bool TRUE if successful */ - public static function unsubscribe_all_users($groupId) + public static function unsubscribe_all_users($groupInfo) { $course_id = api_get_course_int_id(); - //api_is_element_in_the_session(TOOL_GROUP, $group_ids[$i]) - - $groupId = (int) $groupId; + $groupId = (int) $groupInfo['id']; if (empty($course_id) || empty($groupId)) { return false; } @@ -1736,16 +1755,20 @@ class GroupManager /** * Is the user a tutor of this group? * @param int $user_id the id of the user - * @param int $group_id the iid of the group + * @param array $groupInfo * @return boolean true/false * @todo use the function user_has_access that includes this function * @author Patrick Cool , Ghent University */ - public static function is_tutor_of_group($user_id, $group_id) + public static function is_tutor_of_group($user_id, $groupInfo) { + if (empty($groupInfo)) { + return false; + } $table_group_tutor = Database::get_course_table(TABLE_GROUP_TUTOR); $user_id = intval($user_id); - $group_id = intval($group_id); + $group_id = intval($groupInfo['id']); + $course_id = api_get_course_int_id(); $sql = "SELECT * FROM $table_group_tutor @@ -1769,14 +1792,14 @@ class GroupManager * 1. a member of the group OR * 2. a tutor of the group. This function combines both * @param int $user_id the id of the user - * @param int $group_id the iid of the group + * @param array $groupInfo * @return boolean true/false * @author Patrick Cool , Ghent University */ - public static function is_user_in_group($user_id, $group_id) + public static function is_user_in_group($user_id, $groupInfo) { - $member = self::is_subscribed($user_id, $group_id); - $tutor = self::is_tutor_of_group($user_id, $group_id); + $member = self::is_subscribed($user_id, $groupInfo); + $tutor = self::is_tutor_of_group($user_id, $groupInfo); if ($member || $tutor) { return true; } else { @@ -1946,7 +1969,7 @@ class GroupManager return true; break; case self::TOOL_PRIVATE: - $userIsInGroup = self::is_user_in_group($user_id, $groupInfo['iid']); + $userIsInGroup = self::is_user_in_group($user_id, $groupInfo); if ($userIsInGroup) { return true; } @@ -1978,7 +2001,7 @@ class GroupManager } $groupId = $groupInfo['iid']; - $tutors = self::get_subscribed_tutors($groupId, true); + $tutors = self::get_subscribed_tutors($groupInfo, true); if (in_array($userId, $tutors)) { return true; @@ -2072,19 +2095,23 @@ class GroupManager * Fill the groups with students. * * note : optimize fill_groups_list <--> fill_groups - * @param int $groupId (group iid) + * @param array $groupInfo * @return array|bool */ - public static function fill_groups_list($groupId) + public static function fill_groups_list($groupInfo) { - $groupId = (int) $groupId; - $_course = api_get_course_info(); + if (empty($groupInfo)) { + return []; + } + $groupIid = (int) $groupInfo['iid']; + $groupId = (int) $groupInfo['id']; + $_course = api_get_course_info(); if (empty($_course) || empty($groupId)) { return []; } - $category = self::get_category_from_group($groupId); + $category = self::get_category_from_group($groupIid); $number_groups_per_user = self::GROUP_PER_MEMBER_NO_LIMIT; $categoryId = 0; if ($category) { @@ -2107,7 +2134,7 @@ class GroupManager for ($i = 0; $i < count($complete_user_list); $i ++) { // find # of groups the user is enrolled in $number_of_groups = self:: user_in_number_of_groups( - $complete_user_list[$i]["user_id"], + $complete_user_list[$i]['user_id'], $categoryId ); // add # of groups to user list @@ -2145,8 +2172,8 @@ class GroupManager $session_img = api_get_session_image($this_group['session_id'], $user_info['status']); // All the tutors of this group - $tutorsids_of_group = self::get_subscribed_tutors($this_group['iid'], true); - $isMember = self::is_subscribed($user_id, $this_group['iid']); + $tutorsids_of_group = self::get_subscribed_tutors($this_group, true); + $isMember = self::is_subscribed($user_id, $this_group); // Create a new table-row $row = array(); @@ -2225,9 +2252,9 @@ class GroupManager // Self-registration / unregistration if (!api_is_allowed_to_edit(false, true)) { - if (self::is_self_registration_allowed($user_id, $this_group['iid'])) { + if (self::is_self_registration_allowed($user_id, $this_group)) { $row[] = ''.get_lang('GroupSelfRegInf').''; - } elseif (self::is_self_unregistration_allowed($user_id, $this_group['iid'])) { + } elseif (self::is_self_unregistration_allowed($user_id, $this_group)) { $row[] = ''.get_lang('GroupSelfUnRegInf').''; } else { $row[] = '-'; @@ -2426,6 +2453,7 @@ class GroupManager $data['group_id'] = $groupId; $result['added']['group'][] = $data; } + $groupInfo = self::get_group_properties($groupId, true); } else { // Update $groupId = $groupInfo['id']; @@ -2448,8 +2476,11 @@ class GroupManager $data['group_id'] = $groupId; $result['updated']['group'][] = $data; + $groupInfo = self::get_group_properties($groupId); } + + $students = isset($data['students']) ? explode(',', $data['students']) : []; if (!empty($students)) { $studentUserIdList = array(); @@ -2457,7 +2488,7 @@ class GroupManager $userInfo = api_get_user_info_from_username($student); $studentUserIdList[] = $userInfo['user_id']; } - self::subscribe_users($studentUserIdList, $groupId); + self::subscribe_users($studentUserIdList, $groupInfo); } $tutors = isset($data['tutors']) ? explode(',', $data['tutors']) : []; @@ -2467,7 +2498,7 @@ class GroupManager $userInfo = api_get_user_info_from_username($tutor); $tutorIdList[] = $userInfo['user_id']; } - self::subscribe_tutors($tutorIdList, $groupId); + self::subscribe_tutors($tutorIdList, $groupInfo); } $elementsFound['groups'][] = $groupId; @@ -2488,7 +2519,7 @@ class GroupManager $groups = self::get_groups(); foreach ($groups as $group) { if (!in_array($group['iid'], $elementsFound['groups'])) { - self::delete_groups($group['iid']); + self::delete_groups($group); $group['group'] = $group['name']; $result['deleted']['group'][] = $group; } @@ -2573,7 +2604,7 @@ class GroupManager $userList[] = $user['username']; } - $tutors = self::getTutors($groupInfo['iid']); + $tutors = self::getTutors($groupInfo); $tutorList = array(); foreach ($tutors as $user) { $user = api_get_user_info($user['user_id']); @@ -2696,7 +2727,7 @@ class GroupManager foreach ($groups as $group) { $content .= '
  • '; $content .= Display::tag('h3', Security::remove_XSS($group['name'])); - $users = self::getTutors($group['iid']); + $users = self::getTutors($group); if (!empty($users)) { $content .= '