Browse Source

Updating from 1.9.x

Julio Montoya 11 years ago
parent
commit
f6a3791b08

+ 7 - 16
main/group/group.php

@@ -14,7 +14,8 @@
 *	@author Isaac Flores, code cleaning and improvements
 *	@package chamilo.group
 */
-$is_allowed_in_course = api_is_allowed_to_edit(false, true);
+$is_allowed_in_course = api_is_allowed_in_course();
+$userId = api_get_user_id();
 
 $this_section = SECTION_COURSES;
 $current_course_tool  = TOOL_GROUP;
@@ -42,23 +43,13 @@ if (api_get_setting('allow_group_categories') == 'false') {
     $res = Database::query($sql);
     $num = Database::num_rows($res);
     if ($num == 0) {
-        $sql = "INSERT INTO ".$cat_table."
-        (c_id, id, title, description, forum_state, wiki_state, max_student, self_reg_allowed, self_unreg_allowed, groups_per_user, display_order)
+        $sql = "INSERT INTO $cat_table (c_id, id , title , description , forum_state, wiki_state, max_student, self_reg_allowed, self_unreg_allowed, groups_per_user, display_order)
         VALUES ($course_id, '2', '".Database::escape_string(get_lang('DefaultGroupCategory'))."', '', '1', '1', '8', '0', '0', '0', '0');";
         Database::query($sql);
     }
 }
 
 /*	Header */
-
-if (!isset ($_GET['origin']) || $_GET['origin'] != 'learnpath') {
-    // So we are not in learnpath tool
-    event_access_tool(TOOL_GROUP);
-    if (!$is_allowed_in_course) {
-        api_not_allowed(true);
-    }
-}
-
 Display::display_header(get_lang('Groups'));
 
 // Tool introduction
@@ -77,14 +68,14 @@ Display::display_introduction_section(TOOL_GROUP);
 if (isset($_GET['action']) && $is_allowed_in_course) {
     switch ($_GET['action']) {
         case 'self_reg':
-            if (GroupManager :: is_self_registration_allowed($_SESSION['_user']['user_id'], $my_group_id)) {
-                GroupManager :: subscribe_users($_SESSION['_user']['user_id'], $my_group_id);
+            if (GroupManager::is_self_registration_allowed($userId, $my_group_id)) {
+                GroupManager::subscribe_users($userId, $my_group_id);
                 Display :: display_confirmation_message(get_lang('GroupNowMember'));
             }
             break;
         case 'self_unreg':
-            if (GroupManager :: is_self_unregistration_allowed($_SESSION['_user']['user_id'], $my_group_id)) {
-                GroupManager :: unsubscribe_users($_SESSION['_user']['user_id'], $my_group_id);
+            if (GroupManager::is_self_unregistration_allowed($userId, $my_group_id)) {
+                GroupManager::unsubscribe_users($userId, $my_group_id);
                 Display :: display_confirmation_message(get_lang('StudentDeletesHimself'));
             }
             break;

+ 49 - 35
main/group/group_category.php

@@ -15,7 +15,12 @@ $current_course_tool  = TOOL_GROUP;
 // Notice for unauthorized people.
 api_protect_course_script(true);
 
-if (!api_is_allowed_to_edit(false,true) || !(isset ($_GET['id']) || isset ($_POST['id']) || isset ($_GET['action']) || isset ($_POST['action']))) {
+if (!api_is_allowed_to_edit(false,true) ||
+    !(isset ($_GET['id']) ||
+    isset ($_POST['id']) ||
+    isset ($_GET['action']) ||
+    isset ($_POST['action']))
+) {
 	api_not_allowed();
 }
 
@@ -141,16 +146,13 @@ $form->addElement('html', '</div>');
 }
 
 $form->addElement('header', get_lang('DefaultSettingsForNewGroups'));
-// Self registration
 $form->addElement('hidden', 'action');
-
-// Documents settings
 $form->addElement('html', '<div class="span6">');
 
 // Work settings
 $group = array(
-    $form->createElement('checkbox', 'self_registration_allowed', get_lang('GroupSelfRegistration'), get_lang('GroupAllowStudentRegistration'), 1),
-    $form->createElement('checkbox', 'self_unregistration_allowed', null, get_lang('GroupAllowStudentUnregistration'), 1)
+    $form->createElement('checkbox', 'self_reg_allowed', get_lang('GroupSelfRegistration'), get_lang('GroupAllowStudentRegistration'), 1),
+    $form->createElement('checkbox', 'self_unreg_allowed', null, get_lang('GroupAllowStudentUnregistration'), 1)
 );
 $form->addGroup($group, '', Display::return_icon('user.png', get_lang('GroupSelfRegistration'), array(), ICON_SIZE_SMALL).' '.get_lang('GroupSelfRegistration'), '', false);
 
@@ -169,7 +171,6 @@ $group = array(
     $form->createElement('radio', 'work_state', null, get_lang('Private'), GroupManager::TOOL_PRIVATE)
 );
 $form->addGroup($group, '', Display::return_icon('work.png', get_lang('GroupWork'), array(), ICON_SIZE_SMALL).' '.get_lang('GroupWork'), '', false);
-
 // Forum settings
 
 $group = array(
@@ -179,7 +180,6 @@ $group = array(
 );
 $form->addGroup($group, '', Display::return_icon('agenda.png', get_lang('GroupCalendar'), array(), ICON_SIZE_SMALL).' '.get_lang('GroupCalendar'), '', false);
 // Wiki Settings
-
 $form->addElement('html', '</div>');
 $form->addElement('html', '<div class="span6">');
 // Chat Settings
@@ -215,9 +215,7 @@ $group = array(
 );
 $form->addGroup($group, '', Display::return_icon('chat.png', get_lang('Chat'), array(), ICON_SIZE_SMALL).' '.get_lang('Chat'), '', false);
 
-
 $form->addElement('html', '</div>');
-
 $form->addElement('html', '<div class="span12">');
 
 // Submit
@@ -231,34 +229,50 @@ if ($form->validate()) {
 	} else {
 		$max_member = $values['max_member'];
 	}
+
 	$self_reg_allowed = isset($values['self_reg_allowed']) ? $values['self_reg_allowed'] : 0;
 	$self_unreg_allowed = isset($values['self_unreg_allowed']) ? $values['self_unreg_allowed'] : 0;
+
 	switch ($values['action']) {
-		case 'update_settings':
-			GroupManager::update_category(
-                $values['id'],
-                $values['title'],
-                $values['description'],
-                $values['doc_state'],
-                $values['work_state'],
-                $values['calendar_state'],
-                $values['announcements_state'],
-                $values['forum_state'],
-                $values['wiki_state'],
-                $values['chat_state'],
-                $self_reg_allowed,
-                $self_unreg_allowed,
-                $max_member,
-                $values['groups_per_user']
-            );
-			$msg = urlencode(get_lang('GroupPropertiesModified'));
-			header('Location: group.php?action=show_msg&msg='.$msg.'&category='.$values['id']);
-			break;
-		case 'add_category':
-			GroupManager :: create_category($values['title'], $values['description'], $values['doc_state'], $values['work_state'], $values['calendar_state'], $values['announcements_state'], $values['forum_state'], $values['wiki_state'], $values['chat_state'], $self_reg_allowed, $self_unreg_allowed, $max_member, $values['groups_per_user']);
-			$msg = urlencode(get_lang('CategoryCreated'));
-			header('Location: group.php?action=show_msg&msg='.$msg);
-			break;
+	    case 'update_settings':
+		GroupManager::update_category(
+                    $values['id'],
+                    $values['title'],
+                    $values['description'],
+                    $values['doc_state'],
+                    $values['work_state'],
+                    $values['calendar_state'],
+                    $values['announcements_state'],
+                    $values['forum_state'],
+                    $values['wiki_state'],
+                    $values['chat_state'],
+                    $self_reg_allowed,
+                    $self_unreg_allowed,
+                    $max_member,
+                    $values['groups_per_user']
+                );
+                $msg = urlencode(get_lang('GroupPropertiesModified'));
+                header('Location: group.php?action=show_msg&msg='.$msg.'&category='.$values['id']);
+                break;
+	    case 'add_category':
+	        GroupManager :: create_category(
+                    $values['title'],
+                    $values['description'],
+                    $values['doc_state'],
+                    $values['work_state'],
+                    $values['calendar_state'],
+                    $values['announcements_state'],
+                    $values['forum_state'],
+                    $values['wiki_state'],
+                    $values['chat_state'],
+                    $self_reg_allowed,
+                    $self_unreg_allowed,
+                    $max_member,
+                    $values['groups_per_user']
+                );
+	        $msg = urlencode(get_lang('CategoryCreated'));
+	        header('Location: group.php?action=show_msg&msg='.$msg);
+	        break;
 	}
 }
 

+ 7 - 1
main/group/group_creation.php

@@ -44,7 +44,13 @@ if (isset ($_POST['action'])) {
                 } elseif ($_POST['same_category']) {
                     $group['category'] = $_POST['group_0_category'];
                 }
-                GroupManager :: create_group($group['name'], $group['category'], $group['tutor'], $group['places']);
+
+                GroupManager::create_group(
+                    $group['name'],
+                    $group['category'],
+                    $group['tutor'],
+                    $group['places']
+                );
             }
             $msg = urlencode(count($groups).' '.get_lang('GroupsAdded'));
             header('Location: group.php?action=show_msg&msg='.$msg);

+ 3 - 3
main/group/group_edit.php

@@ -393,10 +393,11 @@ if ($form->validate()) {
     }
     $self_registration_allowed = isset($values['self_registration_allowed']) ? 1 : 0;
     $self_unregistration_allowed = isset($values['self_unregistration_allowed']) ? 1 : 0;
+
     GroupManager :: set_group_properties(
         $current_group['id'],
-        strip_tags($values['name']),
-        strip_tags($values['description']),
+        $values['name'],
+        $values['description'],
         $max_member,
         $values['doc_state'],
         $values['work_state'],
@@ -454,7 +455,6 @@ if ($defaults['maximum_number_of_students'] == GroupManager::MEMBER_PER_GROUP_NO
     $defaults['max_member'] = $defaults['maximum_number_of_students'];
 }
 
-
 if (!empty($_GET['keyword']) && !empty($_GET['submit'])) {
     $keyword_name = Security::remove_XSS($_GET['keyword']);
     echo '<br/>'.get_lang('SearchResultsFor').' <span style="font-style: italic ;"> '.$keyword_name.' </span><br>';

+ 19 - 8
main/group/group_space.php

@@ -60,9 +60,11 @@ if ($current_group['doc_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)) {
-		api_not_allowed($print_headers);
-	}
+    if (!api_is_allowed_to_edit(null,true) &&
+        !GroupManager::is_user_in_group($user_id, $group_id)
+    ) {
+        api_not_allowed($print_headers);
+    }
 }
 
 
@@ -137,7 +139,9 @@ 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) OR GroupManager :: is_user_in_group(api_get_user_id(), $current_group['id'])) {
+if (api_is_allowed_to_edit(false, true) OR
+    GroupManager::is_user_in_group(api_get_user_id(), $current_group['id'])
+) {
     $actions_array = array();
     // Link to the forum of this group
     $forums_of_groups = get_forums_of_group($current_group['id']);
@@ -145,7 +149,12 @@ if (api_is_allowed_to_edit(false, true) OR GroupManager :: is_user_in_group(api_
 	if (is_array($forums_of_groups)) {
 		if ($current_group['forum_state'] != GroupManager::TOOL_NOT_AVAILABLE ) {
 			foreach ($forums_of_groups as $key => $value) {
-				if ($value['forum_group_public_private'] == 'public' || (/*!empty($user_subscribe_to_current_group) && */ $value['forum_group_public_private'] == 'private') || !empty($user_is_tutor) || api_is_allowed_to_edit(false, true)) {
+                //*!empty($user_subscribe_to_current_group) && */
+				if ($value['forum_group_public_private'] == 'public' ||
+                    ($value['forum_group_public_private'] == 'private') ||
+                    !empty($user_is_tutor) ||
+                    api_is_allowed_to_edit(false, true)
+                ) {
                     $actions_array[] = array(
                         'url' => '../forum/viewforum.php?forum='.$value['forum_id'].'&gidReq='.Security::remove_XSS($current_group['id']).'&amp;origin=group',
                         'content' => Display::return_icon('forum.png', get_lang('Forum').': '.$value['forum_title'] , array(), 32)
@@ -215,6 +224,7 @@ if (api_is_allowed_to_edit(false, true) OR GroupManager :: is_user_in_group(api_
 
 	// Link to the forum of this group
 	$forums_of_groups = get_forums_of_group($current_group['id']);
+
 	if (is_array($forums_of_groups)) {
 		if ( $current_group['forum_state'] == GroupManager::TOOL_PUBLIC ) {
 			foreach ($forums_of_groups as $key => $value) {
@@ -227,6 +237,7 @@ if (api_is_allowed_to_edit(false, true) OR GroupManager :: is_user_in_group(api_
 			}
 		}
 	}
+
 	if ($current_group['doc_state'] == GroupManager::TOOL_PUBLIC) {
 		// Link to the documents area of this group
         $actions_array[] = array(
@@ -470,11 +481,11 @@ function email_filter($email) {
  */
 function user_icon_filter($user_id) {
 	global $origin;
-	$userinfo = Database::get_user_info_from_id($user_id);
+	$userinfo = api_get_user_info($user_id);
 	$image_path = UserManager::get_user_picture_path_by_id($user_id, 'web', false, true);
 	$image_repository = $image_path['dir'];
 	$existing_image = $image_path['file'];
-	$photo = '<center><img src="'.$image_repository.$existing_image.'" alt="'.api_get_person_name($userinfo['firstname'], $userinfo['lastname']).'"  width="22" height="22" title="'.api_get_person_name($userinfo['firstname'], $userinfo['lastname']).'" /></center>';
+	$photo = '<center><img src="'.$image_repository.$existing_image.'" alt="'.$userinfo['complete_name'].'"  width="22" height="22" title="'.$userinfo['complete_name'].'" /></center>';
 	return '<a href="../user/userInfo.php?origin='.$origin.'&amp;uInfo='.$user_id.'">'.$photo;
 }
 
@@ -489,7 +500,7 @@ function user_icon_filter($user_id) {
  * @return  string  HTML link
  */
 function user_name_filter($name, $url_params, $row) {
-    $tab_user_info = Database::get_user_info_from_id($row[0]);
+    $tab_user_info = api_get_user_info($row[0]);
     $username = api_htmlentities(sprintf(get_lang('LoginX'), $tab_user_info['username']), ENT_QUOTES);
     return '<a href="../user/userInfo.php?uInfo='.$row[0].'&amp;'.$url_params.'" title="'.$username.'">'.$name.'</a>';
 }

+ 22 - 5
main/group/import.php

@@ -2,9 +2,7 @@
 /* For licensing terms, see /license.txt */
 
 // Name of the language file that needs to be included
-$language_file = 'group';
 
-require_once '../inc/global.inc.php';
 $this_section = SECTION_COURSES;
 $current_course_tool  = TOOL_GROUP;
 
@@ -39,15 +37,23 @@ if ($form->validate()) {
         $groupData = Import::csv_reader($_FILES['file']['tmp_name']);
         $deleteNotInArray = $form->getSubmitValue('delete_not_in_file') == 1 ? true : false;
 
-        $result = GroupManager::importCategoriesAndGroupsFromArray($groupData, $deleteNotInArray);
+        $result = GroupManager::importCategoriesAndGroupsFromArray(
+            $groupData,
+            $deleteNotInArray
+        );
+
         if (!empty($result)) {
             $html = null;
+
             foreach ($result as $status => $data) {
-                if (empty($data['category']) && empty($data['group'])) {
-                    continue;
+                if ($status != 'error') {
+                    if (empty($data['category']) && empty($data['group'])) {
+                        continue;
+                    }
                 }
 
                 $html .= " <h3>".get_lang(ucfirst($status)).' </h3>';
+
                 if (!empty($data['category'])) {
                     $html .= "<h4> ".get_lang('Categories').':</h4>';
                     foreach ($data['category'] as $category) {
@@ -61,7 +67,18 @@ if ($form->validate()) {
                         $html .= "<div>".$group['group']."</div>";
                     }
                 }
+
+                if ($status == 'error') {
+                    if (!empty($data)) {
+                        foreach ($data as $message) {
+                            if (!empty($message)) {
+                                $html .= "<div>".$message."</div>";
+                            }
+                        }
+                    }
+                }
             }
+
             echo $html;
         }
     }

+ 1 - 0
main/group/member_settings.php

@@ -127,6 +127,7 @@ if (!empty($complete_user_list)) {
 
 // Group members
 $group_member_list = GroupManager :: get_subscribed_users($current_group['id']);
+
 $selected_users = array();
 if (!empty($group_member_list)) {
     foreach ($group_member_list as $index => $user) {

+ 32 - 8
main/group/settings.php

@@ -14,9 +14,6 @@
 /*	INIT SECTION */
 
 // Name of the language file that needs to be included
-$language_file = 'group';
-
-require_once '../inc/global.inc.php';
 $this_section = SECTION_COURSES;
 $current_course_tool  = TOOL_GROUP;
 
@@ -38,12 +35,21 @@ if (!api_is_allowed_to_edit(false, true) && !$is_group_member) {
 // Build form
 $form = new FormValidator('group_edit', 'post', api_get_self().'?'.api_get_cidreq());
 $form->addElement('hidden', 'action');
+$form->addElement('html', '<div class="span6">');
+
 
 // Group name
 $form->addElement('text', 'name', get_lang('GroupName'));
 
-// Description
-$form->addElement('textarea', 'description', get_lang('Description'), array ('class' => 'span6', 'rows' => 6));
+if (api_get_setting('allow_group_categories') == 'true') {
+    $groupCategories = GroupManager::get_categories();
+    $categoryList = array();
+    //$categoryList[] = null;
+    foreach ($groupCategories as $category) {
+        $categoryList[$category['id']] = $category['title'];
+    }
+    $form->addElement('select', 'category_id', get_lang('Category'), $categoryList);
+}
 
 // Members per group
 $group = array(
@@ -55,6 +61,17 @@ $group = array(
 $form->addGroup($group, 'max_member_group', get_lang('GroupLimit'), '', false);
 $form->addRule('max_member_group', get_lang('InvalidMaxNumberOfMembers'), 'callback', 'check_max_number_of_members');
 
+$form->addElement('html', '</div>');
+
+$form->addElement('html', '<div class="span6">');
+// Description
+$form->addElement('textarea', 'description', get_lang('Description'), array ('class' => 'span6', 'rows' => 6));
+$form->addElement('html', '</div>');
+
+$form->addElement('html', '<div class="span12">');
+$form->addElement('header', get_lang('DefaultSettingsForNewGroups'));
+$form->addElement('html', '</div>');
+
 $form->addElement('html', '<div class="span6">');
 
 // Self registration
@@ -138,11 +155,12 @@ if ($form->validate()) {
     }
     $self_registration_allowed   = isset($values['self_registration_allowed']) ? 1 : 0;
     $self_unregistration_allowed = isset($values['self_unregistration_allowed']) ? 1 : 0;
+    $categoryId = isset($values['category_id']) ? $values['category_id'] : null;
 
     GroupManager::set_group_properties(
         $current_group['id'],
-        strip_tags($values['name']),
-        strip_tags($values['description']),
+        $values['name'],
+        $values['description'],
         $max_member,
         $values['doc_state'],
         $values['work_state'],
@@ -152,7 +170,8 @@ if ($form->validate()) {
         $values['wiki_state'],
         $values['chat_state'],
         $self_registration_allowed,
-        $self_unregistration_allowed
+        $self_unregistration_allowed,
+        $categoryId
     );
     if (isset($_POST['group_members']) && count($_POST['group_members']) > $max_member && $max_member != GroupManager::MEMBER_PER_GROUP_NO_LIMIT) {
         header('Location: group.php?'.api_get_cidreq(true, false).'&action=warning_message&msg='.get_lang('GroupTooMuchMembers'));
@@ -163,6 +182,11 @@ if ($form->validate()) {
 }
 
 $defaults = $current_group;
+$category = GroupManager::get_category_from_group($group_id);
+if (!empty($category)) {
+    $defaults['category_id'] = $category['id'];
+}
+
 $action = isset($_GET['action']) ? $_GET['action'] : '';
 $defaults['action'] = $action;
 if ($defaults['maximum_number_of_students'] == GroupManager::MEMBER_PER_GROUP_NO_LIMIT) {

+ 96 - 40
main/inc/lib/groupmanager.lib.php

@@ -77,8 +77,8 @@ class GroupManager
     public static function get_group_list($category = null, $course_code = null)
     {
         $my_user_id = api_get_user_id();
-
         $course_info = api_get_course_info($course_code);
+
         $course_id = $course_info['real_id'];
         $table_group_user = Database :: get_course_table(TABLE_GROUP_USER);
         $table_group  = Database :: get_course_table(TABLE_GROUP);
@@ -541,6 +541,7 @@ class GroupManager
      * @param int        Chat tool's visibility (0=none,1=private,2=public)
      * @param bool         Whether self registration is allowed or not
      * @param bool         Whether self unregistration is allowed or not
+     * @param int       $categoryId
      * @return bool     TRUE if properties are successfully changed, false otherwise
      */
     public static function set_group_properties(
@@ -556,14 +557,14 @@ class GroupManager
         $wiki_state,
         $chat_state,
         $self_registration_allowed,
-        $self_unregistration_allowed
+        $self_unregistration_allowed,
+        $categoryId = null
     ) {
         $table_group = Database :: get_course_table(TABLE_GROUP);
         $table_forum = Database :: get_course_table(TABLE_FORUM);
+        $categoryId = intval($categoryId);
         //$forum_id = get_forums_of_group($group_id);
         $group_id = Database::escape_string($group_id);
-        $category = self::get_category_from_group($group_id);
-
         $course_id = api_get_course_int_id();
 
         $sql = "UPDATE ".$table_group." SET
@@ -578,7 +579,8 @@ class GroupManager
                     description='".Database::escape_string(trim($description))."',
                     max_student= '".Database::escape_string($maximum_number_of_students)."',
                     self_registration_allowed='".Database::escape_string($self_registration_allowed)."',
-                    self_unregistration_allowed='".Database::escape_string($self_unregistration_allowed)."'
+                    self_unregistration_allowed = '".Database::escape_string($self_unregistration_allowed)."',
+                    category_id = '".Database::escape_string($categoryId)."'
                 WHERE c_id = $course_id AND id=".$group_id;
         $result = Database::query($sql);
         //Here we are updating a field in the table forum_forum that perhaps duplicates the table group_info.forum_state cvargas
@@ -764,8 +766,10 @@ class GroupManager
         $maximum_number_of_students = 8,
         $groups_per_user = 0
     ) {
+        if (empty($title)) {
+            return false;
+        }
         $table_group_category = Database :: get_course_table(TABLE_GROUP_CATEGORY);
-
         $course_id = api_get_course_int_id();
 
         $sql = "SELECT MAX(display_order)+1 as new_order FROM $table_group_category WHERE c_id = $course_id ";
@@ -874,7 +878,8 @@ class GroupManager
                     $wiki_state,
                     $chat_state,
                     $self_registration_allowed,
-                    $self_unregistration_allowed
+                    $self_unregistration_allowed,
+                    $id
                 );
             }
         }
@@ -927,23 +932,65 @@ class GroupManager
         Database::query($sql);
     }
 
-    // GROUP USERS FUNCTIONS
-
     /**
      * Get all users from a given group
      * @param int $group_id The group
      * @param bool $load_extra_info
+     * @param int $start
+     * @param int $limit
+     * @param bool $getCount
+     * @param int $courseId
      * @return array list of user id
      */
-    public static function get_users($group_id, $load_extra_info = false)
-    {
+    public static function get_users(
+        $group_id,
+        $load_extra_info = false,
+        $start = null,
+        $limit = null,
+        $getCount = false,
+        $courseId = null,
+        $column = null,
+        $direction = null
+    ) {
         $group_user_table = Database :: get_course_table(TABLE_GROUP_USER);
+        $user_table = Database :: get_main_table(TABLE_MAIN_USER);
+
         $group_id = Database::escape_string($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";
+        if (empty($courseId)) {
+            $courseId = api_get_course_int_id();
+        } else {
+            $courseId = intval($courseId);
+        }
+
+        $select = " SELECT g.user_id, firstname, lastname ";
+        if ($getCount) {
+            $select = " SELECT count(u.user_id) count";
+        }
+        $sql = "$select
+                FROM $group_user_table g
+                INNER JOIN $user_table u
+                ON (u.user_id = g.user_id)
+                WHERE c_id = $courseId AND g.group_id = $group_id";
+
+        if (!empty($column) && !empty($direction)) {
+            $column = Database::escape_string($column);
+            $direction = Database::escape_string($direction);
+            $sql .= " ORDER BY $column $direction";
+        }
+
+        if (!empty($start) && !empty($limit)) {
+            $start = intval($start);
+            $limit = intval($limit);
+            $sql .= " LIMIT $start, $limit";
+        }
+
         $res = Database::query($sql);
         $users = array ();
         while ($obj = Database::fetch_object($res)) {
+            if ($getCount) {
+                return $obj->count;
+                break;
+            }
             if ($load_extra_info) {
                 $users[] = api_get_user_info($obj->user_id);
             } else {
@@ -1292,10 +1339,14 @@ class GroupManager
         $group_id = Database::escape_string($group_id);
         $user_id = Database::escape_string($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);
+        $sql = 'SELECT 1 FROM '.$table_group_user.'
+                WHERE
+                    c_id = '.$course_id.' AND
+                    group_id = '.$group_id.' AND
+                    user_id = '.$user_id;
+        $result = Database::query($sql);
 
-        return Database::num_rows($db_result) > 0;
+        return Database::num_rows($result) > 0;
     }
 
     /**
@@ -1888,21 +1939,19 @@ class GroupManager
         $table_group = Database::get_course_table(TABLE_GROUP);
         $user_id = intval($user_id);
         $course_id = api_get_course_int_id();
-        $sql = "SELECT DISTINCT name FROM $table_group g
-               INNER JOIN $table_group_user gu
-               ON (gu.group_id = g.id)
-               INNER JOIN $table_tutor_user tu
-               ON (tu.group_id = g.id)
+        $sql = "SELECT DISTINCT name
+               FROM $table_group g
+               LEFT JOIN $table_group_user gu
+               ON (gu.group_id = g.id AND g.c_id = gu.c_id)
+               LEFT JOIN $table_tutor_user tu
+               ON (tu.group_id = g.id AND g.c_id = tu.c_id)
                WHERE
-                  tu.c_id= $course_id AND
-                  gu.c_id= $course_id AND
                   g.c_id= $course_id AND
                   (gu.user_id = $user_id OR tu.user_id = $user_id) ";
-
         $res = Database::query($sql);
         $groups = array();
         while ($group = Database::fetch_array($res)) {
-            $groups[] .= $group['name'];
+            $groups[] = $group['name'];
         }
         return $groups;
     }
@@ -2161,12 +2210,17 @@ class GroupManager
 
         $groupCategories = GroupManager :: get_categories();
 
+        if (empty($groupCategories)) {
+            $result['error'][] = get_lang('CreateACategory');
+            return $result;
+        }
+
         foreach ($groupData as $data) {
             $isCategory = empty($data['group']) ? true : false;
-
             if ($isCategory) {
                 $categoryInfo = self::getCategoryByTitle($data['category']);
                 $categoryId = $categoryInfo['id'];
+
                 if (!empty($categoryInfo)) {
                     // Update
                     self::update_category(
@@ -2188,6 +2242,7 @@ class GroupManager
                     $data['category_id'] = $categoryId;
                     $result['updated']['category'][] = $data;
                 } else {
+
                     // Add
                     $categoryId = self::create_category(
                         $data['category'],
@@ -2212,21 +2267,20 @@ class GroupManager
                 }
                 $elementsFound['categories'][] = $categoryId;
             } else {
-
                 $groupInfo = self::getGroupByName($data['group']);
 
-                if (empty($groupInfo)) {
-                    $categoryInfo = self::getCategoryByTitle($data['category']);
-
-                    $categoryId = null;
-                    if (!empty($categoryInfo)) {
-                        $categoryId = $categoryInfo['id'];
-                    } else {
-                        if (!empty($groupCategories) && isset($groupCategories[0])) {
-                            $defaultGroupCategory = $groupCategories[0];
-                            $categoryId = $defaultGroupCategory['id'];
-                        }
+                $categoryInfo = self::getCategoryByTitle($data['category']);
+                $categoryId = null;
+                if (!empty($categoryInfo)) {
+                    $categoryId = $categoryInfo['id'];
+                } else {
+                    if (!empty($groupCategories) && isset($groupCategories[0])) {
+                        $defaultGroupCategory = $groupCategories[0];
+                        $categoryId = $defaultGroupCategory['id'];
                     }
+                }
+
+                if (empty($groupInfo)) {
 
                     // Add
                     $groupId = self::create_group(
@@ -2250,7 +2304,8 @@ class GroupManager
                             $data['wiki_state'],
                             $data['chat_state'],
                             $data['self_reg_allowed'],
-                            $data['self_unreg_allowed']
+                            $data['self_unreg_allowed'],
+                            $categoryId
                         );
                         $data['group_id'] = $groupId;
                         $result['added']['group'][] = $data;
@@ -2271,7 +2326,8 @@ class GroupManager
                         $data['wiki_state'],
                         $data['chat_state'],
                         $data['self_reg_allowed'],
-                        $data['self_unreg_allowed']
+                        $data['self_unreg_allowed'],
+                        $categoryId
                     );
 
                     $data['group_id'] = $groupId;