From 87d15e03705015234876fdc5d0d6ab0aaf33637d Mon Sep 17 00:00:00 2001 From: Julio Montoya Date: Thu, 13 Oct 2011 16:45:59 +0200 Subject: [PATCH] Adding the c_id field due the new database changes (single course database) --- main/inc/lib/groupmanager.lib.php | 256 +++++++++++++----------------- 1 file changed, 114 insertions(+), 142 deletions(-) diff --git a/main/inc/lib/groupmanager.lib.php b/main/inc/lib/groupmanager.lib.php index 32410a7c0a..034f90ca14 100644 --- a/main/inc/lib/groupmanager.lib.php +++ b/main/inc/lib/groupmanager.lib.php @@ -7,8 +7,6 @@ /** * Code */ -require_once 'database.lib.php'; -require_once 'course.lib.php'; require_once 'tablesort.lib.php'; require_once 'fileManage.lib.php'; require_once 'fileUpload.lib.php'; @@ -63,12 +61,9 @@ define("DEFAULT_GROUP_CATEGORY", 2); * be used outside a session. */ class GroupManager { - /*============================================================================== - * GROUP FUNCTIONS - ==============================================================================*/ - private function __construct() { - - } + //GROUP FUNCTIONS + private function __construct() { + } /** * Get list of groups for current course. * @param int $category The id of the category from which the groups are @@ -77,11 +72,10 @@ class GroupManager { * @return array An array with all information about the groups. */ public static function get_group_list ($category = null, $course_code = null) { - global $_user; - //$isStudentView = $_REQUEST['isStudentView']; - $course_db = ''; - $my_user_id=api_get_user_id(); - $my_status_of_user_in_course=''; + $course_db = ''; + $my_user_id = api_get_user_id(); + $my_status_of_user_in_course = ''; + /* if ($course_code != null) { $course_info = Database :: get_course_info($course_code); @@ -90,18 +84,16 @@ class GroupManager { $my_course_code=api_get_course_id(); } */ - $course_info = api_get_course_info($course_code); - - $course_id = $course_info['real_id']; - - $table_group = Database :: get_course_table(TABLE_GROUP); + $course_info = api_get_course_info($course_code); + $course_id = $course_info['real_id']; $table_user = Database :: get_main_table(TABLE_MAIN_USER); $table_course = Database :: get_main_table(TABLE_MAIN_COURSE); $table_group_user = Database :: get_course_table(TABLE_GROUP_USER); + $table_group = Database :: get_course_table(TABLE_GROUP); //condition for the session $session_id = api_get_session_id(); - $my_status_of_user_in_course = CourseManager::get_user_in_course_status($my_user_id, $course_info['code']); + $my_status_of_user_in_course = CourseManager::get_user_in_course_status($my_user_id, $course_info['code']); $is_student_in_session = false; if (is_null($my_status_of_user_in_course) || $my_status_of_user_in_course=='') {//into session @@ -111,8 +103,8 @@ class GroupManager { } //COURSEMANAGER or STUDENT - if ($my_status_of_user_in_course==COURSEMANAGER || api_is_allowed_to_edit(null, true) || api_is_drh()) { - $sql = "SELECT g.id , + if ($my_status_of_user_in_course == COURSEMANAGER || api_is_allowed_to_edit(null, true) || api_is_drh()) { + $sql = "SELECT g.id , g.name , g.description , g.category_id, @@ -129,9 +121,9 @@ class GroupManager { LEFT JOIN ".$table_group_user." ug2 ON ug2.group_id = g.id"; } elseif ($my_status_of_user_in_course==STUDENT || $is_student_in_session===true || $_SESSION['studentview'] == 'studentview') { - $sql = "SELECT g.id , - g.name , - g.description , + $sql = "SELECT g.id, + g.name, + g.description, g.category_id, g.max_student maximum_number_of_members, g.secret_directory, @@ -145,21 +137,20 @@ class GroupManager { ON ug.group_id = g.id AND ug.user_id = '".api_get_user_id()."' LEFT JOIN ".$table_group_user." ug2 ON ug2.group_id = g.id"; - } + $sql .= " AND ug.c_id = $course_id"; + } + $sql .= " WHERE 1=1 "; - $sql .= "WHERE 1=1 "; - if ($category != null) { $sql .= " AND g.category_id = '".Database::escape_string($category)."' "; $session_condition = api_get_session_condition($session_id); if(!empty($session_condition)) $sql .= $session_condition; - } else + } else { $session_condition = api_get_session_condition($session_id, true); + } - $sql .= " AND g.c_id = $course_id AND - ug.c_id = $course_id - "; + $sql .= " AND g.c_id = $course_id "; if(!empty($session_condition)) $sql .= $session_condition; @@ -210,11 +201,11 @@ class GroupManager { $course_id = api_get_course_int_id(); - if (intval($places) == 0) //if the amount of users per group is not filled in, use the setting from the category - { + if (intval($places) == 0) { + //if the amount of users per group is not filled in, use the setting from the category $places = $category['max_student']; } - $sql = "INSERT INTO ".$table_group." SET + echo $sql = "INSERT INTO ".$table_group." SET c_id = $course_id , category_id='".Database::escape_string($category_id)."', max_student = '".$places."', @@ -236,7 +227,8 @@ class GroupManager { $my_path = api_get_path(SYS_COURSE_PATH).$currentCourseRepository.'/document'; $unique_name = create_unexisting_directory($_course,$_user['user_id'], api_get_session_id(), $lastId,NULL,$my_path, $desired_dir_name); /* Stores the directory path into the group table */ - $sql = "UPDATE ".$table_group." SET name = '".Database::escape_string($name)."', secret_directory = '".$unique_name."' WHERE id ='".$lastId."'"; + $sql = "UPDATE ".$table_group." SET name = '".Database::escape_string($name)."', secret_directory = '".$unique_name."' + WHERE c_id = $course_id AND id ='".$lastId."'"; Database::query($sql); @@ -286,6 +278,7 @@ class GroupManager { * @param int $number_of_groups The number of groups that have to be created */ public static function create_subgroups ($group_id, $number_of_groups) { + $course_id = api_get_course_int_id(); $table_group = Database :: get_course_table(TABLE_GROUP); $category_id = self :: create_category('Subgroups', '', TOOL_PRIVATE, TOOL_PRIVATE, 0, 0, 1, 1); $users = self :: get_users($group_id); @@ -296,14 +289,12 @@ class GroupManager { $group_ids[] = self :: create_group('SUBGROUP '.$group_nr, $category_id, 0, 0); } $members = array (); - foreach ($users as $index => $user_id) - { + foreach ($users as $index => $user_id) { self :: subscribe_users($user_id, $group_ids[$index % $number_of_groups]); $members[$group_ids[$index % $number_of_groups]]++; } - foreach ($members as $group_id => $places) - { - $sql = "UPDATE $table_group SET max_student = $places WHERE id = $group_id"; + foreach ($members as $group_id => $places) { + $sql = "UPDATE $table_group SET max_student = $places WHERE c_id = $course_id AND id = $group_id"; Database::query($sql); } } @@ -374,14 +365,7 @@ class GroupManager { * @param string $course_code Default is current course * @return integer - number of groups deleted. */ - public static function delete_groups($group_ids, $course_code = null) { - /*$course_db = ''; - if ($course_code != null) { - $course = Database :: get_course_info($course_code); - $course['path'] = $course['directory']; - $course_db = $course['database']; - } else { - }*/ + public static function delete_groups($group_ids, $course_code = null) { $course_info = api_get_course_info($course_code); $course_id = $course_info['real_id']; @@ -404,15 +388,6 @@ class GroupManager { return 0; } - - // define repository for deleted element - - /* Useless code - $group_garbage = api_get_path(SYS_ARCHIVE_PATH).$course['path']."/group"; - var_dump($group_garbage); - if (!file_exists($group_garbage)) - FileManager :: mkdirs($group_garbage, api_get_permissions_for_new_directories()); - */ // Unsubscribe all users self :: unsubscribe_all_users($group_ids); $sql = "SELECT id, secret_directory, session_id FROM $group_table WHERE c_id = $course_id AND id IN (".implode(' , ', $group_ids).")"; @@ -467,21 +442,21 @@ class GroupManager { $db_result = Database::query($sql); $db_object = Database::fetch_object($db_result); - $result['id'] = $db_object->id; - $result['name'] = $db_object->name; - $result['tutor_id'] = isset($db_object->tutor_id)?$db_object->tutor_id:null; - $result['description'] = $db_object->description; - $result['maximum_number_of_students'] = $db_object->max_student; - $result['doc_state'] = $db_object->doc_state; - $result['work_state'] = $db_object->work_state; - $result['calendar_state'] = $db_object->calendar_state; - $result['announcements_state'] = $db_object->announcements_state; - $result['forum_state'] = $db_object->forum_state; - $result['wiki_state'] = $db_object->wiki_state; - $result['chat_state'] = $db_object->chat_state; - $result['directory'] = $db_object->secret_directory; - $result['self_registration_allowed'] = $db_object->self_registration_allowed; - $result['self_unregistration_allowed'] = $db_object->self_unregistration_allowed; + $result['id'] = $db_object->id; + $result['name'] = $db_object->name; + $result['tutor_id'] = isset($db_object->tutor_id)?$db_object->tutor_id:null; + $result['description'] = $db_object->description; + $result['maximum_number_of_students'] = $db_object->max_student; + $result['doc_state'] = $db_object->doc_state; + $result['work_state'] = $db_object->work_state; + $result['calendar_state'] = $db_object->calendar_state; + $result['announcements_state'] = $db_object->announcements_state; + $result['forum_state'] = $db_object->forum_state; + $result['wiki_state'] = $db_object->wiki_state; + $result['chat_state'] = $db_object->chat_state; + $result['directory'] = $db_object->secret_directory; + $result['self_registration_allowed'] = $db_object->self_registration_allowed; + $result['self_unregistration_allowed'] = $db_object->self_unregistration_allowed; return $result; } @@ -508,6 +483,7 @@ class GroupManager { $table_forum = Database :: get_course_table(TABLE_FORUM); //$forum_id = get_forums_of_group($group_id); $group_id = Database::escape_string($group_id); + $course_id = api_get_course_int_id(); $sql = "UPDATE ".$table_group." SET name='".Database::escape_string(trim($name))."', doc_state = '".Database::escape_string($doc_state)."', @@ -533,9 +509,8 @@ class GroupManager { } elseif ($forum_state===0) { $sql2 .= " forum_group_public_private='unavailable' "; } - $sql2 .=" WHERE forum_of_group=".$group_id; + $sql2 .=" WHERE c_id = $course_id AND forum_of_group=".$group_id; $result2 = Database::query($sql2); - return $result; } /** @@ -543,8 +518,9 @@ class GroupManager { * @return int The number of groups for the current course. */ public static function get_number_of_groups() { + $course_id = api_get_course_int_id(); $table_group = Database :: get_course_table(TABLE_GROUP); - $res = Database::query('SELECT COUNT(id) AS number_of_groups FROM '.$table_group); + $res = Database::query("SELECT COUNT(id) AS number_of_groups FROM $table_group WHERE c_id = $course_id "); $obj = Database::fetch_object($res); return $obj->number_of_groups; } @@ -716,17 +692,12 @@ class GroupManager { * Returns the number of groups of the user with the greatest number of * subscribtions in the given category */ - public static function get_current_max_groups_per_user ($category_id = null, $course_code = null) { - $course_db = ''; - - if ($course_code != null) - { - $course_info = Database :: get_course_info($course_code); - $course_db = $course_info['database']; - } - $group_table = Database :: get_course_table(TABLE_GROUP, $course_db); - $group_user_table = Database :: get_course_table(TABLE_GROUP_USER, $course_db); - $sql = 'SELECT COUNT(gu.group_id) AS current_max FROM '.$group_user_table.' gu, '.$group_table.' g WHERE gu.group_id = g.id '; + public static function get_current_max_groups_per_user ($category_id = null, $course_code = null) { + $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 FROM '.$group_user_table.' gu, '.$group_table.' g + WHERE g.c_id = '.$course_info['real_id'].' AND gu.group_id = g.id '; if ($category_id != null) { $category_id = Database::escape_string($category_id); $sql .= ' AND g.category_id = '.$category_id; @@ -746,14 +717,17 @@ class GroupManager { $table_group_cat = Database :: get_course_table(TABLE_GROUP_CATEGORY); $id1 = Database::escape_string($id1); $id2 = Database::escape_string($id2); + + $course_id = api_get_course_int_id(); + - $sql = "SELECT id,display_order FROM $table_group_cat WHERE id IN ($id1,$id2)"; + $sql = "SELECT id,display_order FROM $table_group_cat WHERE id IN ($id1,$id2) AND c_id = $course_id "; $res = Database::query($sql); $cat1 = Database::fetch_object($res); $cat2 = Database::fetch_object($res); - $sql = "UPDATE $table_group_cat SET display_order=$cat2->display_order WHERE id=$cat1->id"; + $sql = "UPDATE $table_group_cat SET display_order=$cat2->display_order WHERE id = $cat1->id AND c_id = $course_id "; Database::query($sql); - $sql = "UPDATE $table_group_cat SET display_order=$cat1->display_order WHERE id=$cat2->id"; + $sql = "UPDATE $table_group_cat SET display_order=$cat1->display_order WHERE id = $cat2->id AND c_id = $course_id "; Database::query($sql); } @@ -769,7 +743,8 @@ class GroupManager { public static function get_users ($group_id) { $group_user_table = Database :: get_course_table(TABLE_GROUP_USER); $group_id = Database::escape_string($group_id); - $sql = "SELECT user_id FROM $group_user_table WHERE group_id = $group_id"; + $course_id = api_get_course_int_id(); + $sql = "SELECT user_id FROM $group_user_table WHERE c_id = $course_id AND group_id = $group_id"; $res = Database::query($sql); $users = array (); while ($obj = Database::fetch_object($res)) { @@ -817,14 +792,14 @@ class GroupManager { } global $_course; - $category = self :: get_category_from_group($group_ids[0]); + $category = self::get_category_from_group($group_ids[0]); $groups_per_user = $category['groups_per_user']; $course_user_table = Database :: get_main_table(TABLE_MAIN_COURSE_USER); $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 == GROUP_PER_MEMBER_NO_LIMIT ? INFINITE : $groups_per_user); /* @@ -839,8 +814,7 @@ class GroupManager { LEFT JOIN ".$group_user_table." ug ON g.id = ug.group_id WHERE - g.c_id = $course_id AND - ug.c_id = $course_id AND + g.c_id = $course_id AND g.id IN (".implode(',', $group_ids).") GROUP BY (g.id) HAVING (nbPlaces > 0 OR g.max_student = ".MEMBER_PER_GROUP_NO_LIMIT.") @@ -921,7 +895,9 @@ class GroupManager { public static function number_of_students ($group_id) { $table_group_user = Database :: get_course_table(TABLE_GROUP_USER); $group_id = Database::escape_string($group_id); - $db_result = Database::query('SELECT COUNT(*) AS number_of_students FROM '.$table_group_user.' WHERE group_id = '.$group_id); + $course_id = api_get_course_int_id(); + $sql = "SELECT COUNT(*) AS number_of_students FROM $table_group_user WHERE c_id = $course_id AND group_id = $group_id"; + $db_result = Database::query($sql); $db_object = Database::fetch_object($db_result); return $db_object->number_of_students; } @@ -933,10 +909,10 @@ class GroupManager { public static function maximum_number_of_students ($group_id) { $table_group = Database :: get_course_table(TABLE_GROUP); $group_id = Database::escape_string($group_id); - $db_result = Database::query('SELECT max_student FROM '.$table_group.' WHERE id = '.$group_id); + $course_id = api_get_course_int_id(); + $db_result = Database::query("SELECT max_student FROM $table_group WHERE c_id = $course_id AND id = $group_id"); $db_object = Database::fetch_object($db_result); - if ($db_object->max_student == 0) - { + if ($db_object->max_student == 0) { return INFINITE; } return $db_object->max_student; @@ -971,12 +947,13 @@ class GroupManager { * @return bool TRUE if self-registration is allowed in the given group. */ public static function is_self_registration_allowed ($user_id, $group_id) { + $course_id = api_get_course_int_id(); if (!$user_id > 0) return false; $table_group = Database :: get_course_table(TABLE_GROUP); $group_id= intval($group_id); if (isset($group_id)) { - $sql = 'SELECT self_registration_allowed FROM '.$table_group.' WHERE id = "'.$group_id.'" '; + $sql = "SELECT self_registration_allowed FROM $table_group WHERE c_id = $course_id AND id = $group_id"; $db_result = Database::query($sql); $db_object = Database::fetch_object($db_result); return $db_object->self_registration_allowed == 1 && self :: can_user_subscribe($user_id, $group_id); @@ -995,7 +972,8 @@ class GroupManager { return false; $table_group = Database :: get_course_table(TABLE_GROUP); $group_id = Database::escape_string($group_id); - $db_result = Database::query('SELECT self_unregistration_allowed FROM '.$table_group.' WHERE id = '.$group_id); + $course_id = api_get_course_int_id(); + $db_result = Database::query('SELECT self_unregistration_allowed FROM '.$table_group.' WHERE c_id = '.$course_id.' AND id = '.$group_id); $db_object = Database::fetch_object($db_result); return $db_object->self_unregistration_allowed == 1 && self :: can_user_unsubscribe($user_id, $group_id); } @@ -1010,7 +988,8 @@ class GroupManager { $table_group_user = Database :: get_course_table(TABLE_GROUP_USER); $group_id = Database::escape_string($group_id); $user_id = Database::escape_string($user_id); - $sql = 'SELECT 1 FROM '.$table_group_user.' WHERE group_id = '.$group_id.' AND user_id = '.$user_id; + $course_id = api_get_course_int_id(); + $sql = 'SELECT 1 FROM '.$table_group_user.' WHERE c_id = '.$course_id.' AND group_id = '.$group_id.' AND user_id = '.$user_id; $db_result = Database::query($sql); return Database::num_rows($db_result) > 0; } @@ -1027,8 +1006,7 @@ class GroupManager { $result = CourseManager :: is_user_subscribed_in_real_or_linked_course($user_id, $course_code); $result = !self :: is_subscribed($user_id, $group_id); $result &= (self :: number_of_students($group_id) < self :: maximum_number_of_students($group_id)); - if ($category['groups_per_user'] == GROUP_PER_MEMBER_NO_LIMIT) - { + if ($category['groups_per_user'] == GROUP_PER_MEMBER_NO_LIMIT) { $category['groups_per_user'] = INFINITE; } $result &= (self :: user_in_number_of_groups($user_id, $category['id']) < $category['groups_per_user']); @@ -1061,7 +1039,7 @@ class GroupManager { $sql = "SELECT ug.id, u.user_id, u.lastname, u.firstname, u.email FROM ".$table_user." u, ".$table_group_user." ug - WHERE ug.c_id = $course_id AND + WHERE ug.c_id = $course_id AND ug.group_id='".$group_id."' AND ug.user_id=u.user_id". $order_clause; $db_result = Database::query($sql); @@ -1098,16 +1076,13 @@ class GroupManager { $db_result = Database::query($sql); $users = array (); while ($user = Database::fetch_object($db_result)) { - if (!$id_only) - { + if (!$id_only) { $member['user_id'] = $user->user_id; $member['firstname'] = $user->firstname; $member['lastname'] = $user->lastname; $member['email'] = $user->email; $users[] = $member; - } - else - { + } else { $users[]=$user->user_id; } } @@ -1124,11 +1099,13 @@ class GroupManager { $result = true; $course_id = api_get_course_int_id(); $table_group_user = Database :: get_course_table(TABLE_GROUP_USER); - foreach ($user_ids as $index => $user_id) { - $user_id = Database::escape_string($user_id); - $group_id = Database::escape_string($group_id); - $sql = "INSERT INTO ".$table_group_user." (c_id, user_id, group_id) VALUES ('$course_id', '".$user_id."', '".$group_id."')"; - $result &= Database::query($sql); + if (!empty($user_ids)) { + foreach ($user_ids as $index => $user_id) { + $user_id = Database::escape_string($user_id); + $group_id = Database::escape_string($group_id); + $sql = "INSERT INTO ".$table_group_user." (c_id, user_id, group_id) VALUES ('$course_id', '".$user_id."', '".$group_id."')"; + $result &= Database::query($sql); + } } return $result; } @@ -1176,13 +1153,14 @@ class GroupManager { * @return bool TRUE if successfull */ public static function unsubscribe_all_users ($group_ids) { + $course_id = api_get_course_int_id(); + $group_ids = is_array($group_ids) ? $group_ids : array ($group_ids); $group_ids = array_map('intval',$group_ids); if( count($group_ids) > 0) { if(api_is_course_coach()) { for($i=0 ; $i0) { return true; @@ -1252,13 +1231,9 @@ class GroupManager { public static function is_user_in_group ($user_id, $group_id) { $member = self :: is_subscribed($user_id,$group_id); $tutor = self :: is_tutor_of_group($user_id,$group_id); - - if ($member OR $tutor) - { + if ($member OR $tutor) { return true; - } - else - { + } else { return false; } } @@ -1298,11 +1273,11 @@ class GroupManager { */ public static function is_tutor ($user_id) { global $_course; - $course_user_table = Database :: get_main_table(TABLE_MAIN_COURSE_USER); - $user_id = Database::escape_string($user_id); + $course_user_table = Database::get_main_table(TABLE_MAIN_COURSE_USER); + $user_id = Database::escape_string($user_id); $sql = "SELECT tutor_id FROM ".$course_user_table." - WHERE user_id='".$user_id."' AND course_code='".$_course['sysCode']."'"."AND tutor_id=1"; + WHERE user_id='".$user_id."' AND course_code='".$_course['code']."'"."AND tutor_id=1"; $db_result = Database::query($sql); $result = (Database::num_rows($db_result) > 0); return $result; @@ -1335,8 +1310,7 @@ class GroupManager { return $groups; } - /* - ----------------------------------------------------------- + /* Group functions these take virtual/linked courses into account when necessary ----------------------------------------------------------- @@ -1534,12 +1508,12 @@ class GroupManager { $table_group_user=Database::get_course_table(TABLE_GROUP_USER); $table_group=Database::get_course_table(TABLE_GROUP); $user_id = Database::escape_string($user_id); - $sql_groups = 'SELECT name FROM '.$table_group.' g,'.$table_group_user.' gu WHERE gu.user_id="'.$user_id.'" AND gu.group_id=g.id'; + $course_id = api_get_course_int_id(); + $sql_groups = 'SELECT name FROM '.$table_group.' g,'.$table_group_user.' gu WHERE g.c_id '.$course_id.' AND gu.user_id="'.$user_id.'" AND gu.group_id=g.id'; $res = Database::query($sql_groups); $groups=array(); - while($group = Database::fetch_array($res)) - { + while($group = Database::fetch_array($res)) { $groups[] .= $group['name']; } return $groups; @@ -1558,7 +1532,6 @@ class GroupManager { public static function fill_groups_list ($group_ids) { $group_ids = is_array($group_ids) ? $group_ids : array ($group_ids); $group_ids = array_map('intval',$group_ids); - if (api_is_course_coach()) { for($i=0 ; $i 0 OR g.max_student = ".MEMBER_PER_GROUP_NO_LIMIT.") ORDER BY nbPlaces DESC"; $sql_result = Database::query($sql); $group_available_place = array (); - while ($group = Database::fetch_array($sql_result, 'ASSOC')) - { + while ($group = Database::fetch_array($sql_result, 'ASSOC')) { $group_available_place[$group['gid']] = $group['nbPlaces']; } /* * Retrieve course users (reverse) ordered by the number * of group they are already enrolled */ - for ($i = 0; $i < count($complete_user_list); $i ++) - { + 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"],$category['id']);