From 9cf2ebe0b0beb5f4fe55dc1094eb1a298a38015c Mon Sep 17 00:00:00 2001 From: Julio Montoya Date: Mon, 31 Mar 2014 14:26:11 +0200 Subject: [PATCH] Fixing group import, category edition see BT#7682 --- main/group/example.csv | 4 +- main/group/group.php | 27 +++--- main/group/group_category.php | 50 ++++++---- main/group/group_creation.php | 7 +- main/group/group_edit.php | 4 +- main/group/group_space.php | 34 +++++-- main/group/import.php | 25 ++++- main/group/settings.php | 27 +++++- main/inc/lib/groupmanager.lib.php | 97 +++++++++++--------- tests/main/inc/lib/groupmanager.lib.test.php | 54 +++++++---- 10 files changed, 213 insertions(+), 116 deletions(-) diff --git a/main/group/example.csv b/main/group/example.csv index 95598bd0de..1f22f95304 100644 --- a/main/group/example.csv +++ b/main/group/example.csv @@ -1,5 +1,5 @@ "category";"group";"description";"announcements_state";"calendar_state";"chat_state";"doc_state";"forum_state";"work_state";"wiki_state";"max_student";"self_reg_allowed";"self_unreg_allowed";"groups_per_user"; "Category 1";"";"This is a category";"2";"2";"2";"2";"2";"2";"2";"0";"0";"0";"0"; -"";"This is a group with no category";"";"2";"2";"2";"2";"2";"2";"2";"0";"0";"0" -"Category 1";"This is a group in a Category 1";"";"2";"2";"2";"2";"2";"2";"2";"0";"0";"0" +"";"Group 1";"This is a group with no category";"2";"2";"2";"2";"2";"2";"2";"0";"0";"0" +"Category 1";"Group 2";"This is a group in a category 1";"2";"2";"2";"2";"2";"2";"2";"0";"0";"0" diff --git a/main/group/group.php b/main/group/group.php index 48e7c0d3b7..80cb3638a7 100644 --- a/main/group/group.php +++ b/main/group/group.php @@ -21,6 +21,7 @@ $language_file = 'group'; require_once '../inc/global.inc.php'; $is_allowed_in_course = api_is_allowed_in_course(); +$userId = api_get_user_id(); $this_section = SECTION_COURSES; $current_course_tool = TOOL_GROUP; @@ -64,34 +65,34 @@ Display::display_introduction_section(TOOL_GROUP); * Self-registration and un-registration */ $my_group_id = isset($_GET['group_id']) ? intval($_GET['group_id']) : null; -$my_msg = isset($_GET['msg']) ? Security::remove_XSS($_GET['msg']) : null; -$my_group = isset($_REQUEST['group']) ? Security::remove_XSS($_REQUEST['group']) : null; -$my_get_id1 = isset($_GET['id1']) ? Security::remove_XSS($_GET['id1']) : null; -$my_get_id2 = isset($_GET['id2']) ? Security::remove_XSS($_GET['id2']) : null; -$my_get_id = isset($_GET['id']) ? Security::remove_XSS($_GET['id']) : null; +$my_msg = isset($_GET['msg']) ? Security::remove_XSS($_GET['msg']) : null; +$my_group = isset($_REQUEST['group']) ? Security::remove_XSS($_REQUEST['group']) : null; +$my_get_id1 = isset($_GET['id1']) ? Security::remove_XSS($_GET['id1']) : null; +$my_get_id2 = isset($_GET['id2']) ? Security::remove_XSS($_GET['id2']) : null; +$my_get_id = isset($_GET['id']) ? Security::remove_XSS($_GET['id']) : null; 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; case 'show_msg': - Display :: display_confirmation_message($my_msg); + Display::display_confirmation_message($my_msg); break; case 'warning_message': - Display :: display_warning_message($my_msg); + Display::display_warning_message($my_msg); break; case 'success_message': - Display :: display_confirmation_message($my_msg); + Display::display_confirmation_message($my_msg); break; } } @@ -107,7 +108,7 @@ if (api_is_allowed_to_edit(false, true)) { switch ($_POST['action']) { case 'delete_selected': if (is_array($_POST['group'])) { - GroupManager :: delete_groups($my_group); + GroupManager::delete_groups($my_group); Display :: display_confirmation_message(get_lang('SelectedGroupsDeleted')); } break; diff --git a/main/group/group_category.php b/main/group/group_category.php index a3423824fe..285f474215 100644 --- a/main/group/group_category.php +++ b/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,20 +146,17 @@ if (api_get_setting('allow_group_categories') == 'true') { } $form->addElement('header', get_lang('DefaultSettingsForNewGroups')); -// Action $form->addElement('hidden', 'action'); - - $form->addElement('html', '
'); // Self registration $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); -// Documents settings +// Documents settings. $group = array( $form->createElement('radio', 'doc_state', get_lang('GroupDocument'), get_lang('NotAvailable'), GroupManager::TOOL_NOT_AVAILABLE), $form->createElement('radio', 'doc_state', null, get_lang('Public'), GroupManager::TOOL_PUBLIC), @@ -162,7 +164,7 @@ $group = array( ); $form->addGroup($group, '', Display::return_icon('folder.png', get_lang('GroupDocument'), array(), ICON_SIZE_SMALL).' '.get_lang('GroupDocument'), '', false); -// Work settings +// Work settings. $group = array( $form->createElement('radio', 'work_state', get_lang('GroupWork'), get_lang('NotAvailable'), GroupManager::TOOL_NOT_AVAILABLE), $form->createElement('radio', 'work_state', null, get_lang('Public'), GroupManager::TOOL_PUBLIC), @@ -170,8 +172,7 @@ $group = array( ); $form->addGroup($group, '', Display::return_icon('work.png', get_lang('GroupWork'), array(), ICON_SIZE_SMALL).' '.get_lang('GroupWork'), '', false); - -// Calendar settings +// Calendar settings. $group = array( $form->createElement('radio', 'calendar_state', get_lang('GroupCalendar'), get_lang('NotAvailable'), GroupManager::TOOL_NOT_AVAILABLE), $form->createElement('radio', 'calendar_state', null, get_lang('Public'), GroupManager::TOOL_PUBLIC), @@ -179,11 +180,10 @@ $group = array( ); $form->addGroup($group, '', Display::return_icon('agenda.png', get_lang('GroupCalendar'), array(), ICON_SIZE_SMALL).' '.get_lang('GroupCalendar'), '', false); - $form->addElement('html', '
'); $form->addElement('html', '
'); -// Announcements settings +// Announcements settings. $group = array( $form->createElement('radio', 'announcements_state', get_lang('GroupAnnouncements'), get_lang('NotAvailable'), GroupManager::TOOL_NOT_AVAILABLE), $form->createElement('radio', 'announcements_state', null, get_lang('Public'), GroupManager::TOOL_PUBLIC), @@ -191,7 +191,7 @@ $group = array( ); $form->addGroup($group, '', Display::return_icon('announce.png', get_lang('GroupAnnouncements'), array(), ICON_SIZE_SMALL).' '.get_lang('GroupAnnouncements'), '', false); -// Forum settings +// Forum settings. $group = array( $form->createElement('radio', 'forum_state', get_lang('GroupForum'), get_lang('NotAvailable'), GroupManager::TOOL_NOT_AVAILABLE), $form->createElement('radio', 'forum_state', null, get_lang('Public'), GroupManager::TOOL_PUBLIC), @@ -199,7 +199,7 @@ $group = array( ); $form->addGroup($group, '', Display::return_icon('forum.png', get_lang('GroupForum'), array(), ICON_SIZE_SMALL).' '.get_lang('GroupForum'), '', false); -// Wiki settings +// Wiki settings. $group = array( $form->createElement('radio', 'wiki_state', get_lang('GroupWiki'), get_lang('NotAvailable'), GroupManager::TOOL_NOT_AVAILABLE), $form->createElement('radio', 'wiki_state', null, get_lang('Public'), GroupManager::TOOL_PUBLIC), @@ -207,7 +207,7 @@ $group = array( ); $form->addGroup($group, '', Display::return_icon('wiki.png', get_lang('GroupWiki'), array(), ICON_SIZE_SMALL).' '.get_lang('GroupWiki'), '', false); -// Chat settings +// Chat settings. $group = array( $form->createElement('radio', 'chat_state', get_lang('Chat'), get_lang('NotAvailable'), GroupManager::TOOL_NOT_AVAILABLE), $form->createElement('radio', 'chat_state', null, get_lang('Public'), GroupManager::TOOL_PUBLIC), @@ -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', '
'); - $form->addElement('html', '
'); // Submit @@ -231,8 +229,10 @@ 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( @@ -255,7 +255,21 @@ if ($form->validate()) { 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']); + 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; diff --git a/main/group/group_creation.php b/main/group/group_creation.php index 71a95f5af8..518f0d1bd1 100644 --- a/main/group/group_creation.php +++ b/main/group/group_creation.php @@ -17,10 +17,9 @@ $current_course_tool = TOOL_GROUP; // Notice for unauthorized people. api_protect_course_script(true); - /* Create the groups */ -if (isset ($_POST['action'])) { +if (isset($_POST['action'])) { switch ($_POST['action']) { case 'create_groups': $groups = array(); @@ -45,7 +44,7 @@ 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); @@ -126,7 +125,7 @@ elseif (isset($_POST['number_of_groups'])) { $category) { // Don't allow new groups in the virtual course category! diff --git a/main/group/group_edit.php b/main/group/group_edit.php index 1c84a00373..09ee8d2e99 100644 --- a/main/group/group_edit.php +++ b/main/group/group_edit.php @@ -286,8 +286,8 @@ if ($form->validate()) { 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'], diff --git a/main/group/group_space.php b/main/group/group_space.php index ed8c1202d3..c9ff1bbc1e 100644 --- a/main/group/group_space.php +++ b/main/group/group_space.php @@ -60,7 +60,8 @@ 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)) { + if (!api_is_allowed_to_edit(null,true) && + !GroupManager::is_user_in_group($user_id, $group_id)) { api_not_allowed($print_headers); } } @@ -90,6 +91,7 @@ if (!empty($_GET['selfUnReg']) && GroupManager :: is_self_unregistration_allowed GroupManager :: unsubscribe_users($user_id, $current_group['id']); Display::display_normal_message(get_lang('StudentDeletesHimself')); } + echo '
'; echo ''.Display::return_icon('back.png',get_lang('BackToGroupList'),'',ICON_SIZE_MEDIUM).''; @@ -98,7 +100,8 @@ echo ''.Display::return_icon('back.png',get_lang('BackToGrou */ $subscribe_group = ''; if (GroupManager :: is_self_registration_allowed($user_id, $current_group['id'])) { - $subscribe_group = ''.get_lang("RegIntoGroup").''; + $subscribe_group = ''. + get_lang("RegIntoGroup").''; } /* @@ -106,7 +109,8 @@ if (GroupManager :: is_self_registration_allowed($user_id, $current_group['id']) */ $unsubscribe_group = ''; if (GroupManager :: is_self_unregistration_allowed($user_id, $current_group['id'])) { - $unsubscribe_group = ''.get_lang("StudentUnsubscribe").''; + $unsubscribe_group = ''. + get_lang("StudentUnsubscribe").''; } echo ' 
'; @@ -121,12 +125,17 @@ if (isset($_GET['action'])) { /* Main Display Area */ $course_code = api_get_course_id(); -$is_course_member = CourseManager :: is_user_subscribed_in_real_or_linked_course(api_get_user_id(), $course_code); +$is_course_member = CourseManager::is_user_subscribed_in_real_or_linked_course( + api_get_user_id(), + $course_code +); // Edit the group. $edit_url = ''; -if (api_is_allowed_to_edit(false, true) or GroupManager :: is_tutor_of_group(api_get_user_id(), api_get_group_id())) { +if (api_is_allowed_to_edit(false, true) or + GroupManager::is_tutor_of_group(api_get_user_id(), api_get_group_id()) +) { $my_origin = isset($origin) ? $origin : ''; $edit_url = ''. Display::return_icon('edit.png', get_lang('EditGroup'),'',ICON_SIZE_SMALL).''; @@ -144,7 +153,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']); @@ -152,7 +163,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']).'&origin=group', 'content' => Display::return_icon('forum.png', get_lang('Forum').': '.$value['forum_title'] , array(), 32) @@ -161,7 +177,7 @@ if (api_is_allowed_to_edit(false, true) OR GroupManager :: is_user_in_group(api_ } } } - if ($current_group['doc_state'] != GroupManager::TOOL_NOT_AVAILABLE ) { + if ($current_group['doc_state'] != GroupManager::TOOL_NOT_AVAILABLE) { // Link to the documents area of this group $actions_array[] = array( 'url' => '../document/document.php?'.api_get_cidreq(), @@ -222,6 +238,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) { @@ -234,6 +251,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( diff --git a/main/group/import.php b/main/group/import.php index fe1765308f..de90233327 100644 --- a/main/group/import.php +++ b/main/group/import.php @@ -39,15 +39,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 .= "

".get_lang(ucfirst($status)).'

'; + if (!empty($data['category'])) { $html .= "

".get_lang('Categories').':

'; foreach ($data['category'] as $category) { @@ -61,7 +69,18 @@ if ($form->validate()) { $html .= "
".$group['group']."
"; } } + + if ($status == 'error') { + if (!empty($data)) { + foreach ($data as $message) { + if (!empty($message)) { + $html .= "
".$message."
"; + } + } + } + } } + echo $html; } } diff --git a/main/group/settings.php b/main/group/settings.php index 6f7aab335b..9c707611bf 100644 --- a/main/group/settings.php +++ b/main/group/settings.php @@ -24,12 +24,12 @@ $current_course_tool = TOOL_GROUP; api_protect_course_script(true); $group_id = api_get_group_id(); -$current_group = GroupManager :: get_group_properties($group_id); +$current_group = GroupManager::get_group_properties($group_id); $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(), $group_id); +$is_group_member = GroupManager::is_tutor_of_group(api_get_user_id(), $group_id); if (!api_is_allowed_to_edit(false, true) && !$is_group_member) { api_not_allowed(true); @@ -46,6 +46,16 @@ $form->addElement('html', '
'); // Group name $form->addElement('text', 'name', get_lang('GroupName')); +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( $form->createElement('radio', 'max_member_no_limit', get_lang('GroupLimit'), get_lang('NoLimit'), GroupManager::MEMBER_PER_GROUP_NO_LIMIT), @@ -150,11 +160,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'], @@ -164,7 +175,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')); @@ -175,6 +187,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) { diff --git a/main/inc/lib/groupmanager.lib.php b/main/inc/lib/groupmanager.lib.php index e35b5ff5fe..d12ad7dfbe 100644 --- a/main/inc/lib/groupmanager.lib.php +++ b/main/inc/lib/groupmanager.lib.php @@ -534,19 +534,20 @@ class GroupManager /** * Set group properties * Changes the group's properties. - * @param int Group Id - * @param string Group name + * @param int Group Id + * @param string Group name * @param string Group description - * @param int Max number of students in group - * @param int Document tool's visibility (0=none,1=private,2=public) - * @param int Work tool's visibility (0=none,1=private,2=public) - * @param int Calendar tool's visibility (0=none,1=private,2=public) - * @param int Announcement tool's visibility (0=none,1=private,2=public) - * @param int Forum tool's visibility (0=none,1=private,2=public) - * @param int Wiki tool's visibility (0=none,1=private,2=public) - * @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 Max number of students in group + * @param int Document tool's visibility (0=none,1=private,2=public) + * @param int Work tool's visibility (0=none,1=private,2=public) + * @param int Calendar tool's visibility (0=none,1=private,2=public) + * @param int Announcement tool's visibility (0=none,1=private,2=public) + * @param int Forum tool's visibility (0=none,1=private,2=public) + * @param int Wiki tool's visibility (0=none,1=private,2=public) + * @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( @@ -562,14 +563,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); - //$forum_id = get_forums_of_group($group_id); - $group_id = Database::escape_string($group_id); - $category = self::get_category_from_group($group_id); + $categoryId = intval($categoryId); + $group_id = Database::escape_string($group_id); $course_id = api_get_course_int_id(); $sql = "UPDATE ".$table_group." SET @@ -581,20 +582,21 @@ class GroupManager forum_state = '".Database::escape_string($forum_state)."', wiki_state = '".Database::escape_string($wiki_state)."', chat_state = '".Database::escape_string($chat_state)."', - 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)."' + 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)."', + 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 $forum_state = (int) $forum_state; $sql2 = "UPDATE ".$table_forum." SET "; - if ($forum_state===1) { + if ($forum_state === 1) { $sql2 .= " forum_group_public_private='public' "; - } elseif ($forum_state===2) { + } elseif ($forum_state === 2) { $sql2 .= " forum_group_public_private='private' "; - } elseif ($forum_state===0) { + } elseif ($forum_state === 0) { $sql2 .= " forum_group_public_private='unavailable' "; } $sql2 .=" WHERE c_id = $course_id AND forum_of_group=".$group_id; @@ -767,8 +769,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 "; @@ -842,7 +846,7 @@ class GroupManager $course_id = api_get_course_int_id(); - $sql = "UPDATE ".$table_group_category."SET + $sql = "UPDATE ".$table_group_category." SET title='".Database::escape_string($title)."', description='".Database::escape_string($description)."', doc_state = '".Database::escape_string($doc_state)."', @@ -857,6 +861,7 @@ class GroupManager self_unreg_allowed = '".Database::escape_string($self_unregistration_allowed)."', max_student = ".Database::escape_string($maximum_number_of_students)." WHERE c_id = $course_id AND id = $id"; + Database::query($sql); // Updating all groups inside this category @@ -877,7 +882,8 @@ class GroupManager $wiki_state, $chat_state, $self_registration_allowed, - $self_unregistration_allowed + $self_unregistration_allowed, + $id ); } } @@ -2204,14 +2210,19 @@ class GroupManager 'groups' => array() ); - $groupCategories = GroupManager :: get_categories(); + $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( @@ -2233,6 +2244,7 @@ class GroupManager $data['category_id'] = $categoryId; $result['updated']['category'][] = $data; } else { + // Add $categoryId = self::create_category( $data['category'], @@ -2257,21 +2269,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( @@ -2295,7 +2306,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; @@ -2316,7 +2328,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; diff --git a/tests/main/inc/lib/groupmanager.lib.test.php b/tests/main/inc/lib/groupmanager.lib.test.php index 19308ea28b..a9c3f9c077 100755 --- a/tests/main/inc/lib/groupmanager.lib.test.php +++ b/tests/main/inc/lib/groupmanager.lib.test.php @@ -80,25 +80,41 @@ class TestGroupManager extends UnitTestCase { //var_dump($res); } - public function testSetGroupProperties(){ - $group= array('group_id'=>'01', - 'name'=>'1', - 'description'=>'', - 'maximum_number_of_students'=>'2', - 'doc_state' =>'', - 'work_state' =>'', - 'calendar_state' =>'', - 'announcements_state'=>'', - 'forum_state'=>'', - 'wiki_state'=>'', - 'chat_state' =>'', - 'self_registration_allowed'=>'', - 'self_unregistration_allowed'=>''); - $res = GroupManager::set_group_properties($group['group_id'], $group['name'], $group['description'], - $group['maximum_number_of_students'], $group['doc_state'], - $group['work_state'], $group['calendar_state'], $group['announcements_state'], - $group['forum_state'],$group['wiki_state'],$group['chat_state'], $group['self_registration_allowed'], - $group['self_unregistration_allowed']); + public function testSetGroupProperties() + { + $group = array( + 'group_id'=>'01', + 'name'=>'1', + 'description'=>'', + 'maximum_number_of_students'=>'2', + 'doc_state' =>'', + 'work_state' =>'', + 'calendar_state' =>'', + 'announcements_state'=>'', + 'forum_state'=>'', + 'wiki_state'=>'', + 'chat_state' =>'', + 'self_registration_allowed'=>'', + 'self_unregistration_allowed'=>'', + 'category_id' => null + ); + + $res = GroupManager::set_group_properties( + $group['group_id'], + $group['name'], + $group['description'], + $group['maximum_number_of_students'], + $group['doc_state'], + $group['work_state'], + $group['calendar_state'], + $group['announcements_state'], + $group['forum_state'], + $group['wiki_state'], + $group['chat_state'], + $group['self_registration_allowed'], + $group['self_unregistration_allowed'], + $group['category_id'] + ); $this->assertTrue(is_bool($res)); //var_dump($res); }