Add usergroup support see BT#5768

1.10.x
Julio Montoya 10 years ago
parent 0157b72e4e
commit b39d0cf48a
  1. 47
      main/group/member_settings.php
  2. 42
      main/inc/lib/usergroup.lib.php

@ -11,8 +11,6 @@
* @todo course admin functionality to create groups based on who is in which course (or class). * @todo course admin functionality to create groups based on who is in which course (or class).
*/ */
/* INIT SECTION */
require_once '../inc/global.inc.php'; require_once '../inc/global.inc.php';
$this_section = SECTION_COURSES; $this_section = SECTION_COURSES;
$current_course_tool = TOOL_GROUP; $current_course_tool = TOOL_GROUP;
@ -107,7 +105,10 @@ function check_group_members($value)
if ($value['max_student'] == GroupManager::MEMBER_PER_GROUP_NO_LIMIT) { if ($value['max_student'] == GroupManager::MEMBER_PER_GROUP_NO_LIMIT) {
return true; return true;
} }
if (isset($value['max_student']) && isset($value['group_members']) && $value['max_student'] < count($value['group_members'])) { if (isset($value['max_student']) &&
isset($value['group_members']) &&
$value['max_student'] < count($value['group_members'])
) {
return array('group_members' => get_lang('GroupTooMuchMembers')); return array('group_members' => get_lang('GroupTooMuchMembers'));
} }
@ -130,26 +131,28 @@ $form->addElement('hidden', 'action');
$form->addElement('hidden', 'max_student', $current_group['max_student']); $form->addElement('hidden', 'max_student', $current_group['max_student']);
$complete_user_list = GroupManager::fill_groups_list($current_group['id']); $complete_user_list = GroupManager::fill_groups_list($current_group['id']);
$orderUserListByOfficialCode = api_get_configuration_value('order_user_list_by_official_code');
$possible_users = array(); $possible_users = array();
$userGroup = new UserGroup();
if (!empty($complete_user_list)) { if (!empty($complete_user_list)) {
usort($complete_user_list, 'sort_users'); usort($complete_user_list, 'sort_users');
foreach ($complete_user_list as $index => $user) { foreach ($complete_user_list as $index => $user) {
$officialCode = !empty($user['official_code']) ? ' - '.$user['official_code'] : null; $officialCode = !empty($user['official_code']) ? ' - '.$user['official_code'] : null;
$name = api_get_person_name( $groups = $userGroup->getUserGroupListByUser($user['user_id']);
$user['firstname'], $groupNameListToString = '';
$user['lastname'] if (!empty($groups)) {
).' ('.$user['username'].')'.$officialCode; $groupNameList = array_column($groups, 'name');
$groupNameListToString = ' - ['.implode(', ', $groupNameList).']';
}
$name = api_get_person_name($user['firstname'], $user['lastname']).
' ('.$user['username'].')'.$officialCode.$groupNameListToString;
global $_configuration; if ($orderUserListByOfficialCode) {
if (isset($_configuration['order_user_list_by_official_code']) &&
$_configuration['order_user_list_by_official_code']
) {
$officialCode = !empty($user['official_code']) ? $user['official_code']." - " : '? - '; $officialCode = !empty($user['official_code']) ? $user['official_code']." - " : '? - ';
$name = $officialCode." ".api_get_person_name( $name = $officialCode." ".api_get_person_name($user['firstname'], $user['lastname']).' ('.$user['username'].')';
$user['firstname'],
$user['lastname']
).' ('.$user['username'].')';
} }
$possible_users[$user['user_id']] = $name; $possible_users[$user['user_id']] = $name;
} }
@ -181,14 +184,20 @@ if ($form->validate()) {
$values = $form->exportValues(); $values = $form->exportValues();
// Storing the users (we first remove all users and then add only those who were selected) // Storing the users (we first remove all users and then add only those who were selected)
GroupManager :: unsubscribe_all_users($current_group['id']); GroupManager:: unsubscribe_all_users($current_group['id']);
if (isset ($_POST['group_members']) && count($_POST['group_members']) > 0) { if (isset ($_POST['group_members']) && count($_POST['group_members']) > 0) {
GroupManager :: subscribe_users($values['group_members'], $current_group['id']); GroupManager:: subscribe_users(
$values['group_members'],
$current_group['id']
);
} }
// Returning to the group area (note: this is inconsistent with the rest of chamilo) // Returning to the group area (note: this is inconsistent with the rest of chamilo)
$cat = GroupManager :: get_category_from_group($current_group['id']); $cat = GroupManager :: get_category_from_group($current_group['id']);
if (isset($_POST['group_members']) && count($_POST['group_members']) > $max_member && $max_member != GroupManager::MEMBER_PER_GROUP_NO_LIMIT) { 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')); header('Location: group.php?'.api_get_cidreq(true, false).'&action=warning_message&msg='.get_lang('GroupTooMuchMembers'));
} else { } else {
header('Location: group.php?'.api_get_cidreq(true, false).'&action=success_message&msg='.get_lang('GroupSettingsModified').'&category='.$cat['id']); header('Location: group.php?'.api_get_cidreq(true, false).'&action=success_message&msg='.get_lang('GroupSettingsModified').'&category='.$cat['id']);
@ -200,7 +209,7 @@ $action = isset($_GET['action']) ? $_GET['action'] : null;
switch ($action) { switch ($action) {
case 'empty': case 'empty':
if (api_is_allowed_to_edit(false, true)) { if (api_is_allowed_to_edit(false, true)) {
GroupManager :: unsubscribe_all_users($group_id); GroupManager:: unsubscribe_all_users($group_id);
Display :: display_confirmation_message(get_lang('GroupEmptied')); Display :: display_confirmation_message(get_lang('GroupEmptied'));
} }
break; break;

@ -149,6 +149,7 @@ class UserGroup extends Model
* Gets a list of course ids by user group * Gets a list of course ids by user group
* @param int $id user group id * @param int $id user group id
* @param array $loadCourseData * @param array $loadCourseData
*
* @return array * @return array
*/ */
public function get_courses_by_usergroup($id, $loadCourseData = false) public function get_courses_by_usergroup($id, $loadCourseData = false)
@ -399,6 +400,45 @@ class UserGroup extends Model
return $array; return $array;
} }
/**
* @param int $userId
*
* @return array
*/
public function getUserGroupListByUser($userId)
{
if ($this->useMultipleUrl) {
$urlId = api_get_current_access_url_id();
$from = $this->usergroup_rel_user_table." u
INNER JOIN {$this->access_url_rel_usergroup} a
ON (a.usergroup_id AND u.usergroup_id)
INNER JOIN {$this->table} g
ON (u.usergroup_id = g.id)
";
$where = array('where' => array('user_id = ? AND access_url_id = ? ' => array($userId, $urlId)));
} else {
$from = $this->usergroup_rel_user_table." u
INNER JOIN {$this->table} g
ON (u.usergroup_id = g.id)
";
$where = array('where' => array('user_id = ?' => $userId));
}
$results = Database::select(
'g.*',
$from,
$where
);
$array = array();
if (!empty($results)) {
foreach ($results as $row) {
$array[] = $row;
}
}
return $array;
}
/** /**
* Gets the usergroup id list by user id * Gets the usergroup id list by user id
* @param int $userId user id * @param int $userId user id
@ -899,4 +939,4 @@ class UserGroup extends Model
} }
} }
/* CREATE TABLE IF NOT EXISTS access_url_rel_usergroup (access_url_id int unsigned NOT NULL, usergroup_id int unsigned NOT NULL, PRIMARY KEY (access_url_id, usergroup_id));*/

Loading…
Cancel
Save