From 3cdc1e28cd85ca129880eb85eb5f004cb794aca4 Mon Sep 17 00:00:00 2001 From: vyshane Date: Fri, 19 Jan 2007 04:57:46 +0000 Subject: [PATCH] Added ajax for groups management interface. --- group/index.php | 137 ++++++++++++++++++++++++++--------------- group/lib/clientlib.js | 118 +++++++++++++++++++++++++++++++++++ 2 files changed, 206 insertions(+), 49 deletions(-) create mode 100644 group/lib/clientlib.js diff --git a/group/index.php b/group/index.php index 8244cf194d..a3d4e57e63 100644 --- a/group/index.php +++ b/group/index.php @@ -11,6 +11,8 @@ require_once('../config.php'); require_once('lib.php'); require_once($CFG->libdir.'/moodlelib.php'); +require_once($CFG->libdir.'/json/JSON.php'); + $success = true; @@ -21,6 +23,7 @@ $userid = optional_param('user', false, PARAM_INT); $action = groups_param_action(); + // Get the course information so we can print the header and // check the course id is valid $course = groups_get_course_info($courseid); @@ -29,6 +32,7 @@ if (! $course) { print_error('invalidcourse'); //'The course ID is invalid' } + if ($success) { // Make sure that the user has permissions to manage groups. require_login($courseid); @@ -41,53 +45,72 @@ if ($success) { // Set the session key so we can check this later $sesskey = !empty($USER->id) ? $USER->sesskey : ''; + switch ($action) { - - case 'showgroupingsettingsform': - redirect(groups_grouping_edit_url($courseid, $groupingid, false)); - break; - case 'showgroupingpermsform': - break; - case 'deletegrouping': - break; - case 'showcreategroupingform': - redirect(groups_grouping_edit_url($courseid, null, false)); - break; - case 'printerfriendly': - redirect('groupui/printgrouping.php?courseid='. $courseid .'&groupingid='. $groupingid); - break; - - case 'showgroupsettingsform': - redirect(groups_group_edit_url($courseid, $groupid, $groupingid, false)); - break; - case 'deletegroup': - redirect(groups_group_edit_url($courseid, $groupid, $groupingid, false, 'delete=1')); - break; - case 'removegroup': - break; - case 'showcreategroupform': - if (GROUP_NOT_IN_GROUPING == $groupingid) { - print_error('errornotingrouping', 'group', groups_home_url($courseid), get_string('notingrouping', 'group')); - } - redirect(groups_group_edit_url($courseid, null, $groupingid, false)); - break; - case 'addgroupstogroupingsform': - break; - case 'updategroups': //Currently reloading. - break; - - case 'removemembers': - break; - case 'showaddmembersform': - redirect(groups_members_add_url($courseid, $groupid, $groupingid, false)); - break; - case 'updatemembers': //Currently reloading. - break; - default: - //print_error('Unknown action.'); - break; + case 'ajax_getgroupsingrouping': + $groups = groups_groupids_to_groups(groups_get_groups_in_grouping($groupingid)); + $json = new Services_JSON(); + echo $json->encode($groups); + die; // Client side JavaScript takes it from here. + + case 'ajax_getmembersingroup': + $memberids = groups_get_members($groupid); + $members = array(); + + foreach ($memberids as $memberid) { + $member = groups_get_user($memberid); + array_push($members, $member); + } + $json = new Services_JSON(); + echo $json->encode($members); + die; // Client side JavaScript takes it from here. + + case 'showgroupingsettingsform': + redirect(groups_grouping_edit_url($courseid, $groupingid, false)); + break; + case 'showgroupingpermsform': + break; + case 'deletegrouping': + break; + case 'showcreategroupingform': + redirect(groups_grouping_edit_url($courseid, null, false)); + break; + case 'printerfriendly': + redirect('groupui/printgrouping.php?courseid='. $courseid .'&groupingid='. $groupingid); + break; + + case 'showgroupsettingsform': + redirect(groups_group_edit_url($courseid, $groupid, $groupingid, false)); + break; + case 'deletegroup': + redirect(groups_group_edit_url($courseid, $groupid, $groupingid, false, 'delete=1')); + break; + case 'removegroup': + break; + case 'showcreategroupform': + if (GROUP_NOT_IN_GROUPING == $groupingid) { + print_error('errornotingrouping', 'group', groups_home_url($courseid), get_string('notingrouping', 'group')); + } + redirect(groups_group_edit_url($courseid, null, $groupingid, false)); + break; + case 'addgroupstogroupingsform': + break; + case 'updategroups': //Currently reloading. + break; + + case 'removemembers': + break; + case 'showaddmembersform': + redirect(groups_members_add_url($courseid, $groupid, $groupingid, false)); + break; + case 'updatemembers': //Currently reloading. + break; + default: + //print_error('Unknown action.'); + break; } + // Print the page and form $strgroups = get_string('groups'); $strparticipants = get_string('participants'); @@ -101,17 +124,21 @@ if ($success) { $usehtmleditor = false; //TODO: eventually we'll implement all buttons, meantime hide the ones we haven't finised. $shownotdone = false; + + print_heading($course->shortname.' '.$strgroups, 'center', 3); ?> -
+ +
" /> -*/ ?> +*/ +?> - +

@@ -137,7 +164,7 @@ if ($success) { $select = ' selected="selected"'; $sel_groupingid = $id; } - echo "\n"; + echo "\n"; $count++; } } @@ -229,9 +256,21 @@ if ($success) {
+
wwwroot.'/lib/yui/yahoo/yahoo-min.js">'; + echo ''; + echo ''."\n"; + + echo ''."\n"; + print_footer($course); } -?> +?> \ No newline at end of file diff --git a/group/lib/clientlib.js b/group/lib/clientlib.js new file mode 100644 index 0000000000..58a98c5539 --- /dev/null +++ b/group/lib/clientlib.js @@ -0,0 +1,118 @@ +/** + * Client-side JavaScript for group management interface. + * @author vy-shane AT moodle.com + * @license http://www.gnu.org/copyleft/gpl.html GNU Public License + * @package groups + */ + + +/** + * Class UpdatableGroupsCombo + */ +function UpdatableGroupsCombo(wwwRoot, courseId) { + this.wwwRoot = wwwRoot; + this.courseId = courseId; + + this.callback = { + success: function(o) { + + if (o.responseText !== undefined) { + var groupsComboEl = document.getElementById("groups"); + var membersComboEl = document.getElementById("members"); + + if (membersComboEl) { + // Clear the members combo box. + while (membersComboEl.firstChild) { + membersComboEl.removeChild(membersComboEl.firstChild); + } + } + + if (groupsComboEl) { + // Clear the groups combo box. + while (groupsComboEl.firstChild) { + groupsComboEl.removeChild(groupsComboEl.firstChild); + } + if (o.responseText) { + var groups = eval('('+o.responseText+')'); + + // Populate the groups combo box. + for (var i=0; i