diff --git a/course/lib.php b/course/lib.php index f0f198f12ec..72f6ffe017c 100644 --- a/course/lib.php +++ b/course/lib.php @@ -398,8 +398,8 @@ function build_logs_array($course, $user=0, $date=0, $order="l.time ASC", $limit /// Getting all members of a group. if ($groupid and !$user) { - $gusers = groups_get_members($groupid); - if (!empty($gusers)) { + if ($gusers = groups_get_members($groupid)) { + $gusers = array_keys($gusers); $joins[] = 'l.userid IN (' . implode(',', $gusers) . ')'; } else { $joins[] = 'l.userid = 0'; // No users in groups, so we want something that will always by false. diff --git a/group/assign.php b/group/assign.php index 0bd3d7628f1..51f74c1c638 100644 --- a/group/assign.php +++ b/group/assign.php @@ -1,145 +1,108 @@ courseid)) { +if (! $course = get_record('course', 'id', $grouping->courseid)) { print_error('invalidcourse'); } - -require_login($course); $courseid = $course->id; -$strsearch = get_string('search'); -$strshowall = get_string('showall'); -$returnurl = $CFG->wwwroot.'/group/index.php?id='.$courseid.'&group='.$groupid; - +require_login($course); $context = get_context_instance(CONTEXT_COURSE, $courseid); require_capability('moodle/course:managegroups', $context); - if ($frm = data_submitted() and confirm_sesskey()) { +$returnurl = $CFG->wwwroot.'/group/groupings.php?id='.$courseid; - if (isset($frm->cancel)) { - redirect($returnurl); - } else if (isset($frm->add) and !empty($frm->addselect)) { +if ($frm = data_submitted() and confirm_sesskey()) { - foreach ($frm->addselect as $userid) { - if (! $userid = clean_param($userid, PARAM_INT)) { - continue; - } - if (!groups_add_member($groupid, $userid)) { - print_error('erroraddremoveuser', 'group', $returnurl); - } + if (isset($frm->cancel)) { + redirect($returnurl); + + } else if (isset($frm->add) and !empty($frm->addselect)) { + foreach ($frm->addselect as $groupid) { + $groupid = (int)$groupid; + if (record_exists('groupings_groups', 'groupingid', $grouping->id, 'groupid', $groupid)) { + continue; } + $assign = new object(); + $assign->groupingid = $grouping->id; + $assign->groupid = $groupid; + $assign->timeadded = time(); + insert_record('groupings_groups', $assign); + } - } else if (isset($frm->remove) and !empty($frm->removeselect)) { + } else if (isset($frm->remove) and !empty($frm->removeselect)) { - foreach ($frm->removeselect as $userid) { - if (! $userid = clean_param($userid, PARAM_INT)) { - continue; - } - if (!groups_remove_member($groupid, $userid)) { - print_error('erroraddremoveuser', 'group', $returnurl); - } - - // MDL-9983 - $eventdata = new object(); - $eventdata -> groupid = $groupid; - $eventdata -> userid = $userid; - events_trigger('group_user_removed', $eventdata); - } + foreach ($frm->removeselect as $groupid) { + $groupid = (int)$groupid; + delete_records('groupings_groups', 'groupingid', $grouping->id, 'groupid', $groupid); } } +} - $groupmembers = groups_get_members($groupid); - $groupmembersoptions = ''; - $groupmemberscount = 0; - if ($groupmembers != false) { - // Put the groupings into a hash and sorts them - foreach ($groupmembers as $userid) { - $listmembers[$userid] = groups_get_user_displayname($userid, $courseid); - $groupmemberscount ++; - } - natcasesort($listmembers); - // Print out the HTML - foreach($listmembers as $id => $name) { - $groupmembersoptions .= "\n"; - } - } else { - $groupmembersoptions .= ''; - } +$currentmembers = array(); +$potentialmembers = array(); - $potentialmembers = array(); - $potentialmembersoptions = ''; - $potentialmemberscount = 0; - - $potentialmembers = groups_get_users_not_in_group($courseid, $groupid, $searchtext); - if (!empty($potentialmembers)) { - $potentialmemberscount = count($potentialmembers); - } else { - $potentialmemberscount = 0; - } - if ($potentialmemberscount <= MAX_USERS_PER_PAGE) { - - if ($potentialmembers != false) { - // Put the groupings into a hash and sorts them - foreach ($potentialmembers as $userid => $user) { - $nonmembers[$userid] = fullname($user); - //$nonmembers[$userid] = groups_get_user_displayname($userid, $courseid); - } - natcasesort($nonmembers); - - // Print out the HTML - foreach($nonmembers as $id => $name) { - $potentialmembersoptions .= "\n"; - } - } else { - $potentialmembersoptions .= ''; +if ($groups = get_records('groups', 'courseid', $courseid, 'name')) { + if ($assignment = get_records('groupings_groups', 'groupingid', $grouping->id)) { + foreach ($assignment as $ass) { + $currentmembers[$ass->groupid] = $groups[$ass->groupid]; + unset($groups[$ass->groupid]); } } + $potentialmembers = $groups; +} - // Print the page and form - $strgroups = get_string('groups'); - $strparticipants = get_string('participants'); +$currentmembersoptions = ''; +$currentmemberscount = 0; +if ($currentmembers) { + foreach($currentmembers as $group) { + $currentmembersoptions .= ''; + $currentmemberscount ++; + } +} else { + $currentmembersoptions .= ''; +} - $groupname = groups_get_group_displayname($groupid); +$potentialmembersoptions = ''; +$potentialmemberscount = 0; +if ($potentialmembers) { + foreach($potentialmembers as $group) { + $potentialmembersoptions .= ''; + $potentialmemberscount ++; + } +} else { + $potentialmembersoptions .= ''; +} - print_header("$course->shortname: $strgroups", - $course->fullname, - "wwwroot/course/view.php?id=$courseid\">$course->shortname ". - "-> wwwroot/user/index.php?id=$courseid\">$strparticipants ". - "-> wwwroot/group/index.php?id=$courseid\">$strgroups". - '-> '. get_string('adduserstogroup', 'group'), '', '', true, '', user_login_string($course, $USER)); +// Print the page and form +$strgroups = get_string('groups'); +$strparticipants = get_string('participants'); + +$groupingname = format_string($grouping->name); + +print_header("$course->shortname: $strgroups", + $course->fullname, + "wwwroot/course/view.php?id=$courseid\">$course->shortname ". + "-> wwwroot/user/index.php?id=$courseid\">$strparticipants ". + "-> wwwroot/group/index.php?id=$courseid\">$strgroups". + '-> '. get_string('addgroupstogroupings', 'group'), '', '', true, '', user_login_string($course, $USER)); ?>
-

+

@@ -149,13 +112,13 @@ require_capability('moodle/course:managegroups', $context);
- +
@@ -174,37 +137,13 @@ require_capability('moodle/course:managegroups', $context); onfocus="document.getElementById('assignform').add.disabled=false; document.getElementById('assignform').remove.disabled=true; document.getElementById('assignform').removeselect.selectedIndex=-1;"> - MAX_USERS_PER_PAGE) { - echo ''."\n" - .''."\n"; - } else { - echo $potentialmembersoptions; - } - ?> +
- - - - '."\n"; - } - ?>
- +
@@ -213,4 +152,6 @@ require_capability('moodle/course:managegroups', $context); diff --git a/group/group.php b/group/group.php index 7951d9708ed..4a8a93a2fd8 100644 --- a/group/group.php +++ b/group/group.php @@ -14,10 +14,10 @@ require_once('lib.php'); require_once('group_form.php'); /// get url variables -$courseid = optional_param('courseid', PARAM_INT); -$id = optional_param('id', 0, PARAM_INT); -$delete = optional_param('delete', 0, PARAM_BOOL); -$confirm = optional_param('confirm', 0, PARAM_BOOL); +$courseid = optional_param('courseid', 0, PARAM_INT); +$id = optional_param('id', 0, PARAM_INT); +$delete = optional_param('delete', 0, PARAM_BOOL); +$confirm = optional_param('confirm', 0, PARAM_BOOL); if ($id) { if (!$group = get_record('groups', 'id', $id)) { diff --git a/group/grouping.php b/group/grouping.php index de6d4163264..eb55a24455a 100644 --- a/group/grouping.php +++ b/group/grouping.php @@ -13,19 +13,19 @@ require_once('lib.php'); require_once('grouping_form.php'); /// get url variables -$courseid = optional_param('courseid', PARAM_INT); -$id = optional_param('id', 0, PARAM_INT); -$delete = optional_param('delete', 0, PARAM_BOOL); -$confirm = optional_param('confirm', 0, PARAM_BOOL); +$courseid = optional_param('courseid', 0, PARAM_INT); +$id = optional_param('id', 0, PARAM_INT); +$delete = optional_param('delete', 0, PARAM_BOOL); +$confirm = optional_param('confirm', 0, PARAM_BOOL); if ($id) { if (!$grouping = get_record('groupings', 'id', $id)) { error('Group ID was incorrect'); } if (empty($courseid)) { - $courseid = $group->courseid; + $courseid = $grouping->courseid; - } else if ($courseid != $group->courseid) { + } else if ($courseid != $grouping->courseid) { error('Course ID was incorrect'); } @@ -45,7 +45,7 @@ require_login($course); $context = get_context_instance(CONTEXT_COURSE, $course->id); require_capability('moodle/course:managegroups', $context); -$returnurl = $CFG->wwwroot.'/group/index.php?id='.$course->id; +$returnurl = $CFG->wwwroot.'/group/groupings.php?id='.$course->id; if ($id and $delete) { @@ -53,7 +53,7 @@ if ($id and $delete) { print_header(get_string('deleteselectedgrouping', 'group'), get_string('deleteselectedgroup', 'group')); $optionsyes = array('id'=>$id, 'delete'=>1, 'courseid'=>$courseid, 'sesskey'=>sesskey(), 'confirm'=>1); $optionsno = array('id'=>$courseid); - notice_yesno(get_string('deletegroupingconfirm', 'group', $group->name), 'grouping.php', 'index.php', $optionsyes, $optionsno, 'get', 'get'); + notice_yesno(get_string('deletegroupingconfirm', 'group', $grouping->name), 'grouping.php', 'groupings.php', $optionsyes, $optionsno, 'get', 'get'); print_footer(); die; @@ -64,7 +64,7 @@ if ($id and $delete) { $eventdata->group = $id; $eventdata->course = $courseid; events_trigger('grouping_deleted', $eventdata); - redirect('index.php?id='.$course->id); + redirect($returnurl); } else { print_error('erroreditgrouping', 'group', $returnurl); } @@ -99,7 +99,8 @@ if ($editform->is_cancelled()) { } -$strgroups = get_string('groups'); +$strgroups = get_string('groups'); +$strgroupings = get_string('groupings', 'group'); $strparticipants = get_string('participants'); if ($id) { @@ -112,7 +113,7 @@ print_header("$course->shortname: ". $strheading, $course->fullname, "wwwroot/course/view.php?id=$courseid\">$course->shortname ". "-> wwwroot/user/index.php?id=$courseid\">$strparticipants ". - "-> $strgroups". + "-> $strgroupings". "-> $strheading", '', '', true, '', user_login_string($course, $USER)); print_heading($strheading); $editform->display(); diff --git a/group/groupings.php b/group/groupings.php new file mode 100644 index 00000000000..7844e7c923b --- /dev/null +++ b/group/groupings.php @@ -0,0 +1,80 @@ +dirroot.'/group/lib.php'; + +$courseid = required_param('id', PARAM_INT); + +if (!$course = get_record('course', 'id', $courseid)) { + print_error('nocourseid'); +} + +require_login($course); +$context = get_context_instance(CONTEXT_COURSE, $course->id); +require_capability('moodle/course:managegroups', $context); + +$strgrouping = get_string('grouping', 'group'); +$strgroups = get_string('groups'); +$strname = get_string('name'); +$strdelete = get_string('delete'); +$stredit = get_string('edit'); +$srtnewgrouping = get_string('creategrouping', 'group'); +$strgroups = get_string('groups'); +$strgroupings = get_string('groupings', 'group'); +$struses = get_string('activities'); +$strparticipants = get_string('participants'); +$strmanagegrping = get_String('addgroupstogrouping', 'group'); + +$navlinks = array(array('name'=>$strparticipants, 'link'=>$CFG->wwwroot.'/user/index.php?id='.$courseid, 'type'=>'misc'), + array('name'=>$strgroups, 'link'=>$CFG->wwwroot.'/group/index.php?id='.$courseid, 'type'=>'misc'), + array('name'=>$strgroupings, 'link'=>'', 'type'=>'misc')); +$navigation = build_navigation($navlinks); + +/// Print header +print_header_simple($strgroupings, ': '.$strgroupings, $navigation, '', '', true, '', navmenu($course)); + +print_heading($strgroupings); + +$data = array(); +if ($groupings = get_records('groupings', 'courseid', $course->id)) { + foreach($groupings as $grouping) { + $line = array(); + $line[0] = format_string($grouping->name); + + if ($groups = groups_get_all_groups($courseid, 0, $grouping->id)) { + $groupnames = array(); + foreach ($groups as $group) { + $groupnames[] = format_string($group->name); + } + $line[1] = implode(', ', $groupnames); + } else { + $line[1] = get_string('none'); + } + $line[2] = (int)count_records('course_modules', 'course', $course->id, 'groupingid', $grouping->id); + + $buttons = "id\">pixpath/t/edit.gif\" class=\"iconsmall\" alt=\"$stredit\" /> "; + $buttons .= "id&delete=1\">pixpath/t/delete.gif\" class=\"iconsmall\" alt=\"$strdelete\" /> "; + $buttons .= "id\">pixpath/i/group.gif\" class=\"iconsmall\" alt=\"$strmanagegrping\" /> "; + + $line[3] = $buttons; + $data[] = $line; + } +} +$table->head = array($strgrouping, $strgroups, $struses, $stredit); +$table->size = array('30%', '50%', '10%', '10%'); +$table->align = array('left', 'left', 'center', 'center'); +$table->width = '90%'; +$table->data = $data; +print_table($table); + +echo '
'; +print_single_button('grouping.php', array('courseid'=>$courseid), $srtnewgrouping); +echo '
'; + +print_footer($course); + +?> diff --git a/group/index.php b/group/index.php index 1025061e1a5..f81944083bf 100644 --- a/group/index.php +++ b/group/index.php @@ -47,9 +47,14 @@ if (!$course = get_record('course', 'id',$courseid)) { case 'ajax_getmembersingroup': $members = array(); - - if ($memberids = groups_get_members($groupid)) { - $member_names = groups_userids_to_user_names($memberids, $courseid); + if ($members = groups_get_members($groupid)) { + $member_names = array(); + foreach($members as $member) { + $user = new object(); + $user->id = $member->id; + $user->name = fullname($member, true); + $member_names[] = $user; + } $json = new Services_JSON(); echo $json->encode($member_names); } @@ -74,7 +79,7 @@ if (!$course = get_record('course', 'id',$courseid)) { break; case 'showaddmembersform': - redirect('assign.php?group='.$groupid); + redirect('members.php?group='.$groupid); break; case 'updatemembers': //Currently reloading. @@ -175,21 +180,22 @@ if (!$course = get_record('course', 'id',$courseid)) { echo ' + + + + + + + + + +
+ +
+
+ + + +

+ +
+ +

+
+ +
+ +
+ + + + '."\n"; + } + ?> +
+ +
+
+ + + + diff --git a/lang/en_utf8/group.php b/lang/en_utf8/group.php index 76bb0957dff..6396f4eae52 100644 --- a/lang/en_utf8/group.php +++ b/lang/en_utf8/group.php @@ -38,7 +38,6 @@ $string['deletegroupingconfirm'] = 'Are you sure you want to delete grouping \'$ $string['deletegroupconfirm'] = 'Are you sure you want to delete group \'$a\'?'; $string['editgroupingsettings'] = 'Edit grouping settings'; -$string['editgroupingpermissions'] = 'Edit grouping permissions'; $string['deletegrouping'] = 'Delete grouping'; $string['creategrouping'] = 'Create grouping'; $string['createautomaticgrouping'] = 'Create automatic grouping'; @@ -52,6 +51,7 @@ $string['addgroupstogrouping'] = 'Add group to grouping'; //'groupS' $string['removeselectedusers'] = 'Remove selected users'; $string['adduserstogroup'] = 'Add/remove users'; //'from group' +$string['addgroupstogroupings'] = 'Add/remove groups'; //'from group' $string['groupingname'] = 'Grouping name'; $string['defaultgroupingname'] = 'Grouping'; @@ -87,9 +87,10 @@ $string['save'] = 'Save'; $string['cancel'] = 'Cancel'; $string['return'] = 'Return'; $string['backtogroups'] = 'Back to groups'; +$string['backtogroupings'] = 'Back to groupings'; $string['existingmembers'] = 'Existing members: $a'; $string['potentialmembers'] = 'Potential members: $a'; -$string['groupfor'] = "for group"; +$string['groupfor'] = 'for group'; $string['groupinfo'] = 'Info about selected group'; $string['groupinfomembers'] = 'Info about selected members'; $string['groupinfopeople'] = 'Info about selected people'; diff --git a/lib/grouplib.php b/lib/grouplib.php index 2657b3887e2..243416b6c3f 100644 --- a/lib/grouplib.php +++ b/lib/grouplib.php @@ -46,24 +46,33 @@ function groups_get_group($groupid) { * Gets array of all groups in a specified course. * @param int $courseid The id of the course. * @param int $userid optional user id, returns only groups of the user. + * @param int $groupingid optional returns only groups in the specified grouping. * @return array | false Returns an array of the group IDs or false if no records * or an error occurred. */ -function groups_get_all_groups($courseid, $userid=0) { +function groups_get_all_groups($courseid, $userid=0, $groupingid=0) { global $CFG; - if (empty($userdi)) { - return get_records('groups', 'courseid', $courseid, 'name ASC'); - + if (!empty($userid)) { + $userfrom = ", {$CFG->prefix}groups_members gm"; + $userwhere = "AND g.id = gm.groupid AND gm.userid = '$userid'"; } else { - return get_records_sql("SELECT g.* - FROM {$CFG->prefix}groups g, - {$CFG->prefix}groups_members m - WHERE g.courseid = '$courseid' - AND g.id = m.groupid - AND m.userid = '$userid' - ORDER BY name ASC"); + $userfrom = ""; + $userwhere = ""; } + + if (!empty($groupingid)) { + $groupingfrom = ", {$CFG->prefix}groupings_groups gg"; + $groupingwhere = "AND g.id = gg.groupid AND gg.groupingid = '$groupingid'"; + } else { + $groupingfrom = ""; + $groupingwhere = ""; + } + + return get_records_sql("SELECT g.* + FROM {$CFG->prefix}groups g $userfrom $groupingfrom + WHERE g.courseid = '$courseid' $userwhere $groupingwhere + ORDER BY name ASC"); } /** @@ -84,5 +93,22 @@ function groups_is_member($groupid, $userid=null) { return record_exists('groups_members', 'groupid', $groupid, 'userid', $userid); } +/** + * Returns the users in the specified group. + * @param int $groupid The groupid to get the users for + * @param int $sort optional sorting of returned users + * @return array | false Returns an array of the users for the specified + * group or false if no users or an error returned. + */ +function groups_get_members($groupid, $sort='lastname ASC') { + global $CFG; + + return get_records_sql("SELECT u.* + FROM {$CFG->prefix}user u, {$CFG->prefix}groups_members gm + WHERE u.id = gm.userid AND gm.groupid = '$groupid' + ORDER BY $sort"); +} + + ?> diff --git a/mod/hotpot/report.php b/mod/hotpot/report.php index 7c54e3467c0..3581353d28a 100644 --- a/mod/hotpot/report.php +++ b/mod/hotpot/report.php @@ -110,8 +110,8 @@ case 'group': // group members - if ($memberids = groups_get_members($formdata['reportgroupid'])) { //TODO:check. - foreach ($memberids as $memberid) { + if ($members = groups_get_members($formdata['reportgroupid'])) { + foreach ($members as $memberid=>$unused) { $users[$memberid] = 1; // "1" signifies currently recognized participant } } diff --git a/theme/standard/styles_layout.css b/theme/standard/styles_layout.css index 7814b27725f..c2e1cfe8b46 100644 --- a/theme/standard/styles_layout.css +++ b/theme/standard/styles_layout.css @@ -413,6 +413,17 @@ form.popupform label { width: 18em; } +#group-groupings .buttons { + margin: 20px; + text-align:center; +} + +#group-groupings .buttons .singlebutton { + display: inline; + padding: 5px; +} + + img.icon { vertical-align:middle; margin-right:4px;