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).
*/
/* INIT SECTION */
require_once '../inc/global.inc.php';
$this_section = SECTION_COURSES;
$current_course_tool = TOOL_GROUP;
@ -107,7 +105,10 @@ function check_group_members($value)
if ($value['max_student'] == GroupManager::MEMBER_PER_GROUP_NO_LIMIT) {
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'));
}
@ -130,26 +131,28 @@ $form->addElement('hidden', 'action');
$form->addElement('hidden', 'max_student', $current_group['max_student']);
$complete_user_list = GroupManager::fill_groups_list($current_group['id']);
$orderUserListByOfficialCode = api_get_configuration_value('order_user_list_by_official_code');
$possible_users = array();
$userGroup = new UserGroup();
if (!empty($complete_user_list)) {
usort($complete_user_list, 'sort_users');
foreach ($complete_user_list as $index => $user) {
$officialCode = !empty($user['official_code']) ? ' - '.$user['official_code'] : null;
$name = api_get_person_name(
$user['firstname'],
$user['lastname']
).' ('.$user['username'].')'.$officialCode;
$groups = $userGroup->getUserGroupListByUser($user['user_id']);
$groupNameListToString = '';
if (!empty($groups)) {
$groupNameList = array_column($groups, 'name');
$groupNameListToString = ' - ['.implode(', ', $groupNameList).']';
}
$name = api_get_person_name($user['firstname'], $user['lastname']).
' ('.$user['username'].')'.$officialCode.$groupNameListToString;
global $_configuration;
if (isset($_configuration['order_user_list_by_official_code']) &&
$_configuration['order_user_list_by_official_code']
) {
if ($orderUserListByOfficialCode) {
$officialCode = !empty($user['official_code']) ? $user['official_code']." - " : '? - ';
$name = $officialCode." ".api_get_person_name(
$user['firstname'],
$user['lastname']
).' ('.$user['username'].')';
$name = $officialCode." ".api_get_person_name($user['firstname'], $user['lastname']).' ('.$user['username'].')';
}
$possible_users[$user['user_id']] = $name;
}
@ -181,14 +184,20 @@ if ($form->validate()) {
$values = $form->exportValues();
// Storing the users (we first remove all users and then add only those who were selected)
GroupManager :: unsubscribe_all_users($current_group['id']);
GroupManager:: unsubscribe_all_users($current_group['id']);
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)
$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'));
} else {
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) {
case 'empty':
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'));
}
break;

@ -149,6 +149,7 @@ class UserGroup extends Model
* Gets a list of course ids by user group
* @param int $id user group id
* @param array $loadCourseData
*
* @return array
*/
public function get_courses_by_usergroup($id, $loadCourseData = false)
@ -399,6 +400,45 @@ class UserGroup extends Model
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
* @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