MDL-15449, enrol multiple users to multiple courses, including bugs fix, see tracker, sent by Jonathan.

This commit is contained in:
dongsheng
2008-07-10 09:16:43 +00:00
parent 554606c76b
commit 51471f2ad5
6 changed files with 159 additions and 4 deletions
+1
View File
@@ -24,6 +24,7 @@ if ($data = $action_form->get_data()) {
case 3: redirect($CFG->wwwroot.'/'.$CFG->admin.'/user/user_bulk_delete.php');
case 4: redirect($CFG->wwwroot.'/'.$CFG->admin.'/user/user_bulk_display.php');
case 5: redirect($CFG->wwwroot.'/'.$CFG->admin.'/user/user_bulk_download.php');
case 6: redirect($CFG->wwwroot.'/'.$CFG->admin.'/user/user_bulk_enrol.php');
}
}
+151
View File
@@ -0,0 +1,151 @@
<?php // $Id$
/**
* script for bulk user multy enrol operations
*/
require_once('../../config.php');
require_once($CFG->libdir.'/adminlib.php');
$processed = optional_param('processed', '', PARAM_CLEAN);
$sort = optional_param('sort', 'fullname', PARAM_ALPHA); //Sort by full name
$dir = optional_param('dir', 'asc', PARAM_ALPHA); //Order to sort (ASC)
admin_externalpage_setup('userbulk');
require_capability('moodle/user:delete', get_context_instance(CONTEXT_SYSTEM));
$return = $CFG->wwwroot.'/'.$CFG->admin.'/user/user_bulk.php';
//If no users selected then return to user_bulk.php
if (empty($SESSION->bulk_users)) {
redirect($return);
}
$users = $SESSION->bulk_users; //Get users to display
$usertotal = get_users(false); //Total number of users registered
$usercount = count($users); //number of users
admin_externalpage_print_header();
//take user info
foreach ($users as $key => $id) {
$user = $DB->get_record('user', array('id'=>$id));
$user->fullname = fullname($user, true);
unset($user->firstname);
unset($user->lastname);
$users[$key] = $user;
}
// Need to sort by date
function sort_compare($a, $b) {
global $sort, $dir;
if($sort == 'lastaccess') {
$rez = $b->lastaccess - $a->lastaccess;
} else {
$rez = strcasecmp(@$a->$sort, @$b->$sort);
}
return $dir == 'desc' ? -$rez : $rez;
}
usort($users, 'sort_compare');
//Take courses data (id, shortname, and fullname)
$courses = get_courses_page(1, 'c.sortorder ASC', 'c.id,c.shortname,c.fullname,c.visible', $totalcount);
$table->width = "95%";
$columns = array('fullname');
foreach ($courses as $v)
{
$columns[] = $v->shortname;
}
//Print columns headers from table
foreach ($columns as $column) {
$strtitle = $column;
if ($sort != $column) {
$columnicon = '';
$columndir = 'asc';
} else {
$columndir = ($dir == 'asc') ? 'desc' : 'asc';
$columnicon = ' <img src="'.$CFG->pixpath.'/t/'.($dir == 'asc' ? 'down' : 'up' ).'.gif" alt="" />';
}
$table->head[] = '<a href="user_bulk_enrol.php?sort='.$column.'&amp;dir='.$columndir.'">'.$strtitle.'</a>'.$columnicon;
$table->align[] = 'left';
}
// process data submitting
if(!empty($processed)) {
//Process data form here
$total = count($courses) * count($users);
for ( $i = 0; $i < $total; $i++ )
{
$param = "selected".$i;
$info = optional_param($param, '', PARAM_CLEAN);
/**
* user id: ids[0]
* course id: ids[1]
* enrol stat: ids[2]
*/
$ids = explode(',', $info);
if(!empty($ids[2])) {
$context = get_context_instance(CONTEXT_COURSE, $ids[1]);
if( role_assign(5, $ids[0], 0, $context->id) ) {
continue;
}
} else {
if( empty($ids[1] ) ) {
continue;
}
$context = get_context_instance(CONTEXT_COURSE, $ids[1]);
if( role_unassign(5, $ids[0], 0, $context->id) ) {
continue;
}
}
}
redirect($return, get_string('changessaved'));
}
echo <<<EOD
<script type="text/javascript">
function toggleck(id, uid, cid) {
var el = document.getElementById('ck-'+id);
if(!document.getElementById('ck-'+id+'-c').checked) {
el.name = 'selected'+id;
el.value = uid+','+cid+',0';
} else {
el.name = 'unselected';
}
}
</script>
EOD;
//Form beginning
echo '<form id="multienrol" name="multienrol" method="post" action="user_bulk_enrol.php">';
echo '<input type="hidden" name="processed" value="yes" />';
$count = 0;
foreach($users as $user)
{
$temparray = array (
'<a href="'.$CFG->wwwroot.'/user/view.php?id='.$user->id.'&amp;course='.SITEID.'">'.$user->fullname.'</a>'
);
$mycourses = get_my_courses($user->id);
$i = 1;
foreach($courses as $acourse)
{
$temparray[$i] = '';
if(isset($mycourses[$acourse->id])) {
// already enrolled
$temparray[$i] .= '<input type="hidden" id="ck-'.$count.'" name="unselected'.$count.
'" value="'.$user->id.','.$acourse->id.',1" />';
$temparray[$i] .= "<input type='checkbox' id='ck-".$count.
"-c' checked='yes' onclick='toggleck(\"".
$count."\",".$user->id.",".$acourse->id.",false)' />";
} else {
// unenrol
$temparray[$i] .= '<input type="checkbox" name="selected'.
$count.'" value="'.$user->id.','.$acourse->id.','.true.'" />';
}
$i++;
$count++;
}
$table->data[] = $temparray;
}
print_heading("$usercount / $usertotal ".get_string('users'));
print_table($table);
echo '<div class="continuebutton">';
echo '<input type="submit" name="multienrolsubmit" value="save changes">';
echo '</div>';
echo '</form>';
admin_externalpage_print_footer();
+4 -2
View File
@@ -24,7 +24,9 @@ class user_bulk_action_form extends moodleform {
if (has_capability('moodle/user:update', $syscontext)) {
$actions[5] = get_string('download', 'admin');
}
if (has_capability('moodle/role:assign', $syscontext)){
$actions[6] = get_string('enrolmultipleusers', 'admin');
}
$objs = array();
$objs[] =& $mform->createElement('select', 'action', null, $actions);
$objs[] =& $mform->createElement('submit', 'doaction', get_string('go'));
@@ -106,4 +108,4 @@ class user_bulk_form extends moodleform {
$renderer->setGroupElementTemplate($template, 'usersgrp');
}
}
?>
?>
+1
View File
@@ -334,6 +334,7 @@ $string['enablerssfeeds'] = 'Enable RSS feeds';
$string['enablestats'] = 'Enable statistics';
$string['enabletrusttext'] = 'Enable Trusted Content';
$string['encoding'] = 'Encoding';
$string['enrolmultipleusers'] = 'Enrol the users';
$string['environment'] = 'Environment';
$string['environmenterrortodo'] = 'You must solve all the environmental problems (errors) found above before proceeding to install this Moodle version!';
$string['environmenterrorupgrade'] = 'Warning: you should solve all the environmental problems (errors) found above before proceeding to upgrade this Moodle version! Upgrading without fixing these requirements could cause problems such as data loss. Are you sure you want to continue with the upgrade?';
+1 -1
View File
@@ -5551,7 +5551,7 @@ function forum_remove_user_tracking($userid, $context) {
break;
case CONTEXT_COURSE: // For a whole course
if ($course = $DB->get_record('course', array('id' => $context->instanceid), '', '', '', '', 'id')) {
if ($course = $DB->get_record('course', array('id' => $context->instanceid), 'id')) {
// find all forums in which this user has reading tracked
if ($forums = $DB->get_records_sql("SELECT f.id, cm.id as coursemodule
FROM {forum} f,
+1 -1
View File
@@ -94,7 +94,7 @@ class user_filtering {
* @return object filter
*/
function get_field($fieldname, $advanced) {
global $USER, $CFG, $DB;
global $USER, $CFG, $DB, $SITE;
switch ($fieldname) {
case 'username': return new user_filter_text('username', get_string('username'), $advanced, 'username');