Improving UI see BT#5768

1.9.x
Julio Montoya 12 years ago
parent 19a0972161
commit 9e10af540e
  1. 18
      main/group/group_space.php
  2. 27
      main/group/member_settings.php
  3. 29
      main/group/settings.php
  4. 26
      main/group/tutor_settings.php
  5. 46
      main/inc/lib/groupmanager.lib.php

@ -141,9 +141,9 @@ if (!empty($current_group['description'])) {
*/
// 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'])) {
$actions_array = array();
// Link to the forum of this group
$forums_of_groups = get_forums_of_group($current_group['id']);
$actions_array = array();
// 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_NOT_AVAILABLE ) {
@ -294,16 +294,20 @@ $tutor_info = '';
if (count($tutors) == 0) {
$tutor_info = get_lang('GroupNoneMasc');
} else {
isset($origin)?$my_origin = $origin:$my_origin='';
foreach($tutors as $index => $tutor) {
isset($origin) ? $my_origin = $origin:$my_origin='';
$tutor_info .= '<ul class="thumbnails">';
foreach ($tutors as $index => $tutor) {
$tab_user_info = Database::get_user_info_from_id($tutor['user_id']);
$username = api_htmlentities(sprintf(get_lang('LoginX'), $tab_user_info['username']), ENT_QUOTES);
$image_path = UserManager::get_user_picture_path_by_id($tutor['user_id'], 'web', false, true);
$image_repository = $image_path['dir'];
$existing_image = $image_path['file'];
$photo= '<img src="'.$image_repository.$existing_image.'" align="absbottom" alt="'.api_get_person_name($tutor['firstname'], $tutor['lastname']).'" width="32" height="32" title="'.api_get_person_name($tutor['firstname'], $tutor['lastname']).'" />';
$tutor_info .= '<a href="../user/userInfo.php?origin='.$my_origin.'&amp;uInfo='.$tutor['user_id'].'">'.$photo.'&nbsp;'.Display::tag('span', api_get_person_name($tutor['firstname'], $tutor['lastname']), array('title'=>$username)).'</a>';
$completeName = api_get_person_name($tutor['firstname'], $tutor['lastname']);
$photo = '<img src="'.$image_repository.$existing_image.'" alt="'.$completeName.'" width="32" height="32" title="'.$completeName.'" />';
$tutor_info .= '<li><a href="'.api_get_path(WEB_CODE_PATH).'user/userInfo.php?origin='.$my_origin.'&amp;uInfo='.$tutor['user_id'].'">'.
$photo.'&nbsp;'.$completeName.'</a></li>';
}
$tutor_info .= '</ul>';
}
echo Display::page_subheader(get_lang('GroupTutors'));

@ -16,7 +16,7 @@
// Name of the language file that needs to be included
$language_file = 'group';
require '../inc/global.inc.php';
require_once '../inc/global.inc.php';
$this_section = SECTION_COURSES;
$current_course_tool = TOOL_GROUP;
@ -24,7 +24,7 @@ $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'));
@ -87,29 +87,16 @@ function sort_users($user_a, $user_b)
}
}
/**
* Function to check the given max number of members per group
*/
function check_max_number_of_members($value)
{
$max_member_no_limit = $value['max_member_no_limit'];
if ($max_member_no_limit == GroupManager::MEMBER_PER_GROUP_NO_LIMIT) {
return true;
}
$max_member = $value['max_member'];
return is_numeric($max_member);
}
/**
* Function to check if the number of selected group members is valid
*/
function check_group_members($value)
{
if ($value['max_member_no_limit'] == GroupManager::MEMBER_PER_GROUP_NO_LIMIT) {
if ($value['max_student'] == GroupManager::MEMBER_PER_GROUP_NO_LIMIT) {
return true;
}
if (isset($value['max_member']) && isset($value['group_members']) && $value['max_member'] < count($value['group_members'])) {
return array ('group_members' => get_lang('GroupTooMuchMembers'));
if (isset($value['max_student']) && isset($value['group_members']) && $value['max_student'] < count($value['group_members'])) {
return array('group_members' => get_lang('GroupTooMuchMembers'));
}
return true;
}
@ -127,10 +114,10 @@ $(document).ready( function() {
// Build form
$form = new FormValidator('group_edit', 'post', api_get_self().'?'.api_get_cidreq());
$form->addElement('hidden', 'action');
$form->addElement('hidden', 'referer');
$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']);
usort($complete_user_list, 'sort_users');
$possible_users = array();

@ -39,23 +39,25 @@ 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('hidden', 'referer');
// Group name
$form->add_textfield('name', get_lang('GroupName'));
$form->addElement('text', 'name', get_lang('GroupName'));
// Description
$form->addElement('textarea', 'description', get_lang('Description'), array ('class' => 'span6', 'rows' => 6));
// Members per group
$form->addElement('radio', 'max_member_no_limit', get_lang('GroupLimit'), get_lang('NoLimit'), GroupManager::MEMBER_PER_GROUP_NO_LIMIT);
$group = array();
$group[] = $form->createElement('radio', 'max_member_no_limit', null, get_lang('MaximumOfParticipants'), 1, array('id' => 'max_member_selected'));
$group[] = $form->createElement('text', 'max_member', null, array('class' => 'span1', 'id' => 'max_member'));
$group[] = $form->createElement('static', null, null, get_lang('GroupPlacesThis'));
$form->addGroup($group, 'max_member_group', null, '', false);
$group = array(
$form->createElement('radio', 'max_member_no_limit', get_lang('GroupLimit'), get_lang('NoLimit'), GroupManager::MEMBER_PER_GROUP_NO_LIMIT),
$form->createElement('radio', 'max_member_no_limit', null, get_lang('MaximumOfParticipants'), 1, array('id' => 'max_member_selected')),
$form->createElement('text', 'max_member', null, array('class' => 'span1', 'id' => 'max_member')),
$form->createElement('static', null, null, ' '.get_lang('GroupPlacesThis'))
);
$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 class="span6">');
// Self registration
$group = array(
$form->createElement('checkbox', 'self_registration_allowed', get_lang('GroupSelfRegistration'), get_lang('GroupAllowStudentRegistration'), 1),
@ -84,6 +86,9 @@ $group[] = $form->createElement('radio', 'calendar_state', null, get_lang('Publi
$group[] = $form->createElement('radio', 'calendar_state', null, get_lang('Private'), GroupManager::TOOL_PRIVATE);
$form->addGroup($group, '', Display::return_icon('agenda.png', get_lang('GroupCalendar') , array(), ICON_SIZE_SMALL).' '.get_lang('GroupCalendar'), '', false);
$form->addElement('html', '</div>');
$form->addElement('html', '<div class="span6">');
// Announcements settings
$group = array();
$group[] = $form->createElement('radio', 'announcements_state', get_lang('GroupAnnouncements'), get_lang('NotAvailable'), GroupManager::TOOL_NOT_AVAILABLE);
@ -114,8 +119,12 @@ $group = array(
);
$form->addGroup($group, '', Display::return_icon('chat.png', get_lang('Chat'), array(), ICON_SIZE_SMALL).' '.get_lang('Chat'), '', false);
// submit button
$form->addElement('html', '</div>');
$form->addElement('html', '<div class="span12">');
// Submit button
$form->addElement('style_submit_button', 'submit', get_lang('SaveSettings'), 'class="save"');
$form->addElement('html', '</div>');
if ($form->validate()) {
$values = $form->exportValues();
@ -178,6 +187,8 @@ if (isset($_GET['show_message_sucess'])) {
$form->setDefaults($defaults);
echo GroupManager::getSettingBar('settings');
echo '<div class="row">';
$form->display();
echo '</div>';
Display :: display_footer();

@ -87,32 +87,6 @@ function sort_users($user_a, $user_b)
}
}
/**
* Function to check the given max number of members per group
*/
function check_max_number_of_members($value)
{
$max_member_no_limit = $value['max_member_no_limit'];
if ($max_member_no_limit == GroupManager::MEMBER_PER_GROUP_NO_LIMIT) {
return true;
}
$max_member = $value['max_member'];
return is_numeric($max_member);
}
/**
* Function to check if the number of selected group members is valid
*/
function check_group_members($value)
{
if ($value['max_member_no_limit'] == GroupManager::MEMBER_PER_GROUP_NO_LIMIT) {
return true;
}
if (isset($value['max_member']) && isset($value['group_members']) && $value['max_member'] < count($value['group_members'])) {
return array ('group_members' => get_lang('GroupTooMuchMembers'));
}
return true;
}
/* MAIN CODE */

@ -454,6 +454,7 @@ class GroupManager
$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['max_student'] = $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;
@ -1148,7 +1149,6 @@ class GroupManager
foreach ($group_available_place as $group_id => $place) {
foreach ($userToken as $user_id => $places) {
if (self :: can_user_subscribe($user_id, $group_id)) {
self :: subscribe_users($user_id, $group_id);
$group_available_place[$group_id]--;
//$userToken[$user_id]--;
@ -1848,7 +1848,8 @@ class GroupManager
/**
* Get all groups where a specific user is subscribed
*/
public static function get_user_group_name ($user_id) {
public static function get_user_group_name($user_id)
{
$table_group_user = Database::get_course_table(TABLE_GROUP_USER);
$table_group = Database::get_course_table(TABLE_GROUP);
$user_id = intval($user_id);
@ -1868,7 +1869,7 @@ class GroupManager
/**
*
* see : fill_groups
* See : fill_groups
* Fill the groups with students.
*
* note : optimize fill_groups_list <--> fill_groups
@ -1881,43 +1882,52 @@ class GroupManager
$group_ids = array_map('intval', $group_ids);
if (api_is_course_coach()) {
for($i=0 ; $i<count($group_ids) ; $i++) {
if(!api_is_element_in_the_session(TOOL_GROUP,$group_ids[$i])) {
array_splice($group_ids,$i,1);
for ($i=0 ; $i<count($group_ids) ; $i++) {
if (!api_is_element_in_the_session(TOOL_GROUP,$group_ids[$i])) {
array_splice($group_ids, $i, 1);
$i--;
}
}
if (count($group_ids)==0){
return false;}
if (count($group_ids)==0) {
return false;
}
}
global $_course;
$session_id = api_get_session_id();
$course_id = api_get_course_int_id();
$category = self::get_category_from_group($group_ids[0]);
$groups_per_user = $category['groups_per_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['sysCode'], true, $session_id);
$number_groups_per_user = ($groups_per_user == self::GROUP_PER_MEMBER_NO_LIMIT ? self::INFINITE : $groups_per_user);
$course_id = api_get_course_int_id();
/*
* Retrieve all the groups where enrollment is still allowed
* (reverse) ordered by the number of place available
*/
$sql = "SELECT g.id gid, g.max_student - count(ug.user_id) nbPlaces, g.max_student
$sql = "SELECT g.id gid, count(ug.user_id) count_users, g.max_student
FROM ".$group_table." g
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.id IN (".implode(',', $group_ids).")
GROUP BY (g.id)
HAVING (nbPlaces > 0 OR g.max_student = ".self::MEMBER_PER_GROUP_NO_LIMIT.")
ORDER BY nbPlaces DESC";
GROUP BY (g.id)";
$sql_result = Database::query($sql);
$group_available_place = array ();
$group_available_place = array();
while ($group = Database::fetch_array($sql_result, 'ASSOC')) {
if (!empty($group['max_student'])) {
$places = intval($group['max_student'] - $group['count_users']);
} else {
$places = self::MEMBER_PER_GROUP_NO_LIMIT;
}
$group_available_place[$group['gid']] = $group['nbPlaces'];
}
@ -1933,11 +1943,11 @@ class GroupManager
$complete_user_list[$i]['number_groups_left'] = $number_groups_per_user - $number_of_groups;
}
//first sort by user_id to filter out duplicates
$complete_user_list = TableSort :: sort_table($complete_user_list, 'user_id');
$complete_user_list = self :: filter_duplicates($complete_user_list, 'user_id');
$complete_user_list = TableSort::sort_table($complete_user_list, 'user_id');
$complete_user_list = self::filter_duplicates($complete_user_list, 'user_id');
//$complete_user_list = self :: filter_only_students($complete_user_list);
//now sort by # of group left
$complete_user_list = TableSort :: sort_table($complete_user_list, 'number_groups_left', SORT_DESC);
$complete_user_list = TableSort::sort_table($complete_user_list, 'number_groups_left', SORT_DESC);
return $complete_user_list;
}

Loading…
Cancel
Save