libdir.'/pear'.PATH_SEPARATOR.ini_get('include_path')); require_once('HTML/AJAX/JSON.php'); require_js('yui_yahoo'); require_js('yui_dom'); require_js('yui_utilities'); require_js('yui_connection'); require_js($CFG->wwwroot.'/group/clientlib.js'); $courseid = required_param('id', PARAM_INT); $groupid = optional_param('group', false, PARAM_INT); $userid = optional_param('user', false, PARAM_INT); $action = groups_param_action(); // Support either single group= parameter, or array groups[] if ($groupid) { $groupids=array($groupid); } else { $groupids=array(); if (isset($_REQUEST['groups'])) { foreach ($_REQUEST['groups'] as $groupid) { if ($groupid = clean_param($groupid, PARAM_INT)) { $groupids[]=$groupid; } } } } $singlegroup=count($groupids) == 1; $returnurl = $CFG->wwwroot.'/group/index.php?id='.$courseid; // Get the course information so we can print the header and // check the course id is valid if (!$course = get_record('course', 'id',$courseid)) { $success = false; print_error('invalidcourse'); //'The course ID is invalid' } // Make sure that the user has permissions to manage groups. require_login($course); $context = get_context_instance(CONTEXT_COURSE, $courseid); if (! has_capability('moodle/course:managegroups', $context)) { redirect(); //"group.php?id=$course->id"); // Not allowed to see all groups } // Check for multiple/no group errors if(!$singlegroup) { switch($action) { case 'ajax_getmembersingroup': case 'showgroupsettingsform': case 'showaddmembersform': case 'updatemembers': print_error('errorselectone','group',$returnurl); } } switch ($action) { case false: //OK, display form. break; case 'ajax_getmembersingroup': $roles = array(); if ($groupmemberroles = groups_get_members_by_role($groupids[0],$courseid,'u.id,u.firstname,u.lastname')) { foreach($groupmemberroles as $roleid=>$roledata) { $shortroledata=new StdClass; $shortroledata->name=$roledata->name; $shortroledata->users=array(); foreach($roledata->users as $member) { $shortmember=new StdClass; $shortmember->id=$member->id; $shortmember->name=fullname($member, true); $shortroledata->users[]=$shortmember; } $roles[]=$shortroledata; } } echo json_encode($roles); die; // Client side JavaScript takes it from here. case 'deletegroup': if(count($groupids)==0) { print_error('errorselectsome','group',$returnurl); } $groupidlist=implode(',',$groupids); redirect('delete.php?courseid='.$courseid.'&groups='.$groupidlist); break; case 'showcreateorphangroupform': redirect('group.php?courseid='.$courseid); break; case 'showautocreategroupsform': redirect('autogroup.php?courseid='.$courseid); break; case 'showgroupsettingsform': redirect('group.php?courseid='.$courseid.'&id='.$groupids[0]); break; case 'updategroups': //Currently reloading. break; case 'removemembers': break; case 'showaddmembersform': redirect('members.php?group='.$groupids[0]); break; case 'updatemembers': //Currently reloading. break; default: //ERROR. if (debugging()) { error('Error, unknown button/action. Probably a user-interface bug!', $returnurl); break; } } // Print the page and form $strgroups = get_string('groups'); $strparticipants = get_string('participants'); $navlinks = array(array('name'=>$strparticipants, 'link'=>$CFG->wwwroot.'/user/index.php?id='.$courseid, 'type'=>'misc'), array('name'=>$strgroups, 'link'=>'', 'type'=>'misc')); $navigation = build_navigation($navlinks); /// Print header print_header_simple($strgroups, ': '.$strgroups, $navigation, '', '', true, '', navmenu($course)); // Add tabs $currenttab = 'groups'; require('tabs.php'); $disabled = 'disabled="disabled"'; if (ajaxenabled()) { // Some buttons are enabled if single group selected $showaddmembersform_disabled = $singlegroup ? '' : $disabled; $showeditgroupsettingsform_disabled = $singlegroup ? '' : $disabled; $deletegroup_disabled = count($groupids)>0 ? '' : $disabled; } else { // Do not disable buttons. The buttons work based on the selected group, // which you can change without reloading the page, so it is not appropriate // to disable them if no group is selected. $showaddmembersform_disabled = ''; $showeditgroupsettingsform_disabled = ''; $deletegroup_disabled = ''; } print_heading(format_string($course->shortname) .' '.$strgroups, 'center', 3); echo '
'."\n"; echo '
'."\n"; echo ''."\n"; echo ''."\n"; echo ''."\n"; echo "'."\n"; echo ''."\n"; echo ''."\n"; echo '
\n"; // NO GROUPINGS YET! echo '

'."\n"; if (ajaxenabled()) { $onchange = 'membersCombo.refreshMembers();'; } else { $onchange = ''; } echo ''."\n"; echo '

'."\n"; echo '

'."\n"; echo '

'."\n"; echo '

'."\n"; echo '

'."\n"; echo '
'."\n"; echo '

'."\n"; //NOTE: the SELECT was, multiple="multiple" name="user[]" - not used and breaks onclick. echo ''."\n"; echo '

'."\n"; echo '
'."\n"; // echo '
'."\n"; echo '
'."\n"; if (ajaxenabled()) { echo ''."\n"; } print_footer($course); /** * Returns the first button action with the given prefix, taken from * POST or GET, otherwise returns false. * See /lib/moodlelib.php function optional_param. * @param $prefix 'act_' as in 'action'. * @return string The action without the prefix, or false if no action found. */ function groups_param_action($prefix = 'act_') { $action = false; //($_SERVER['QUERY_STRING'] && preg_match("/$prefix(.+?)=(.+)/", $_SERVER['QUERY_STRING'], $matches)) { //b_(.*?)[&;]{0,1}/ if ($_POST) { $form_vars = $_POST; } elseif ($_GET) { $form_vars = $_GET; } if ($form_vars) { foreach ($form_vars as $key => $value) { if (preg_match("/$prefix(.+)/", $key, $matches)) { $action = $matches[1]; break; } } } if ($action && !preg_match('/^\w+$/', $action)) { $action = false; error('Action had wrong type.'); } ///if (debugging()) echo 'Debug: '.$action; return $action; } ?>