Applying patch sent by Marko Kastelic see #1949

skala
Julio Montoya 15 years ago
parent b4f09aa5c9
commit 78ef28457e
  1. 6
      main/group/group.php
  2. 26
      main/group/group_edit.php
  3. 76
      main/inc/lib/groupmanager.lib.php

@ -296,10 +296,10 @@ foreach ($group_cats as $index => $category) {
$row[] = $tutor_info;
// Edit-links
if (api_is_allowed_to_edit(false, true) && !(api_is_course_coach() && intval($this_group['session_id']) != intval($_SESSION['id_session']))) {
$edit_actions = '<a href="group_edit.php?'.api_get_cidreq().'&gidReq='.$this_group['id'].'" title="'.get_lang('Edit').'">'.Display::return_icon('settings.png', get_lang('EditGroup'),'','22').'</a>&nbsp;';
$edit_actions .= '<a href="'.api_get_self().'?'.api_get_cidreq().'&category='.$category['id'].'&amp;action=delete_one&amp;id='.$this_group['id'].'" onclick="javascript: if(!confirm('."'".addslashes(api_htmlentities(get_lang('ConfirmYourChoice'), ENT_QUOTES))."'".')) return false;" title="'.get_lang('Delete').'">'.Display::return_icon('delete.png', get_lang('Delete'),'','22').'</a>&nbsp;';
$edit_actions = '<a href="group_edit.php?'.api_get_cidreq().'&gidReq='.$this_group['id'].'" title="'.get_lang('Edit').'">'.Display::return_icon('settings.png', get_lang('EditGroup'),'','22').'</a>&nbsp;';
$edit_actions .= '<a href="'.api_get_self().'?'.api_get_cidreq().'&category='.$category['id'].'&amp;action=empty_one&amp;id='.$this_group['id'].'" onclick="javascript: if(!confirm('."'".addslashes(api_htmlentities(get_lang('ConfirmYourChoice'), ENT_QUOTES))."'".')) return false;" title="'.get_lang('EmptyGroup').'">'.Display::return_icon('clean.png',get_lang('EmptyGroup'),'','22').'</a>&nbsp;';
$edit_actions .= '<a href="'.api_get_self().'?'.api_get_cidreq().'&category='.$category['id'].'&amp;action=fill_one&amp;id='.$this_group['id'].'" onclick="javascript: if(!confirm('."'".addslashes(api_htmlentities(get_lang('ConfirmYourChoice'), ENT_QUOTES))."'".')) return false;" title="'.get_lang('FillGroup').'">'.Display::return_icon('fill.png',get_lang('FillGroup'),'','22').'</a>';
$edit_actions .= '<a href="'.api_get_self().'?'.api_get_cidreq().'&category='.$category['id'].'&amp;action=fill_one&amp;id='.$this_group['id'].'" onclick="javascript: if(!confirm('."'".addslashes(api_htmlentities(get_lang('ConfirmYourChoice'), ENT_QUOTES))."'".')) return false;" title="'.get_lang('FillGroup').'">'.Display::return_icon('fill.png',get_lang('FillGroup'),'','22').'</a>&nbsp;';
$edit_actions .= '<a href="'.api_get_self().'?'.api_get_cidreq().'&category='.$category['id'].'&amp;action=delete_one&amp;id='.$this_group['id'].'" onclick="javascript: if(!confirm('."'".addslashes(api_htmlentities(get_lang('ConfirmYourChoice'), ENT_QUOTES))."'".')) return false;" title="'.get_lang('Delete').'">'.Display::return_icon('delete.png', get_lang('Delete'),'','22').'</a>&nbsp;';
$row[] = $edit_actions;
}
if (!empty($this_group['nbMember'])) {

@ -190,6 +190,7 @@ $form->addElement('radio', 'chat_state', null, get_lang('Private'), TOOL_PRIVATE
//$form->addElement('style_submit_button', 'submit', get_lang('Search'), 'class="search"');
// Getting all the users
/*
if (isset($_SESSION['id_session'])) {
$complete_user_list = CourseManager :: get_user_list_from_course_code($_course['id'], true, $_SESSION['id_session']);
$complete_user_list2 = CourseManager :: get_coach_list_from_course_code($_course['id'], $_SESSION['id_session']);
@ -215,13 +216,12 @@ foreach ($complete_user_list as $user_id => $o_course_user) {
$temp[] = implode(', ', $groups_name); //Group
$temp[] = $o_course_user['official_code'];
}
}
}*/
$complete_user_list = GroupManager :: fill_groups_list($current_group['id']);
usort($complete_user_list, 'sort_users');
$possible_users = array();
foreach ($complete_user_list as $index => $user) {
$possible_users[$user['user_id']] = api_get_person_name($user['firstname'], $user['lastname']).' ('.$user['username'].')';
$possible_users[$user['user_id']] = api_get_person_name($user['firstname'], $user['lastname']).' ('.$user['username'].')';
}
// Group tutors
@ -233,7 +233,7 @@ foreach ($group_tutor_list as $index => $user) {
$selected_tutors[] = $user['user_id'];
}
$group_tutors_element = $form->addElement('advmultiselect', 'group_tutors', get_lang('GroupTutors'), $possible_users, 'style="width: 225px;"');
$group_tutors_element = $form->addElement('advmultiselect', 'group_tutors', get_lang('GroupTutors'), $possible_users, 'style="width: 280px;"');
$group_tutors_element->setElementTemplate('
{javascript}
<table{class}>
@ -254,10 +254,20 @@ $group_tutors_element->setButtonAttributes('remove', array('class' => 'arrowl'))
$group_member_list = GroupManager :: get_subscribed_users($current_group['id']);
$selected_users = array ();
foreach ($group_member_list as $index => $user) {
//$possible_users[$user['user_id']] = api_get_person_name($user['firstname'], $user['lastname']);
$selected_users[] = $user['user_id'];
//$possible_users[$user['user_id']] = api_get_person_name($user['firstname'], $user['lastname']);
$selected_users[] = $user['user_id'];
}
$group_members_element = $form->addElement('advmultiselect', 'group_members', get_lang('GroupMembers'), $possible_users, 'style="width: 225px;"');
// possible : number_groups_left > 0 and is group member
$possible_users = array();
foreach ($complete_user_list as $index => $user) {
if( $user['number_groups_left'] >0 || in_array($user['user_id'],$selected_users) )
$possible_users[$user['user_id']] = api_get_person_name($user['firstname'], $user['lastname']).' ('.$user['username'].')';
}
$group_members_element = $form->addElement('advmultiselect', 'group_members', get_lang('GroupMembers'), $possible_users, 'style="width: 280px;"');
$group_members_element->setElementTemplate('
{javascript}

@ -1520,5 +1520,77 @@ class GroupManager {
}
return $groups;
}
}
?>
/**
* fill_groups_list
*
* see : fill_groups
* Fill the groups with students.
*
* note :
* optimize fill_groups_list <--> fill_groups
*
*/
public static function fill_groups_list ($group_ids) {
$group_ids = is_array($group_ids) ? $group_ids : array ($group_ids);
$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);
$i--;
}
}
if (count($group_ids)==0){
return false;}
}
global $_course;
$category = self :: get_category_from_group($group_ids[0]);
$groups_per_user = $category['groups_per_user'];
$course_user_table = Database :: get_main_table(TABLE_MAIN_COURSE_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 == GROUP_PER_MEMBER_NO_LIMIT ? INFINITE : $groups_per_user);
/*
* 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
FROM ".$group_table." g
LEFT JOIN ".$group_user_table." ug
ON g.id = ug.group_id
WHERE g.id IN (".implode(',', $group_ids).")
GROUP BY (g.id)
HAVING (nbPlaces > 0 OR g.max_student = ".MEMBER_PER_GROUP_NO_LIMIT.")
ORDER BY nbPlaces DESC";
$sql_result = Database::query($sql);
$group_available_place = array ();
while ($group = Database::fetch_array($sql_result, 'ASSOC'))
{
$group_available_place[$group['gid']] = $group['nbPlaces'];
}
/*
* Retrieve course users (reverse) ordered by the number
* of group they are already enrolled
*/
for ($i = 0; $i < count($complete_user_list); $i ++)
{
//find # of groups the user is enrolled in
$number_of_groups = self :: user_in_number_of_groups($complete_user_list[$i]["user_id"],$category['id']);
//add # of groups to user list
$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 = 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);
return $complete_user_list;
}
}
Loading…
Cancel
Save