]> git.mjollnir.org Git - moodle.git/commitdiff
MDL-15449, enrol multiple users to multiple courses, including bugs fix, see tracker...
authordongsheng <dongsheng>
Thu, 10 Jul 2008 09:16:43 +0000 (09:16 +0000)
committerdongsheng <dongsheng>
Thu, 10 Jul 2008 09:16:43 +0000 (09:16 +0000)
admin/user/user_bulk.php
admin/user/user_bulk_enrol.php [new file with mode: 0644]
admin/user/user_bulk_forms.php
lang/en_utf8/admin.php
mod/forum/lib.php
user/filters/lib.php

index acd9a4f60fc153a829e09591287b1b3d4c10d927..a36261cc82a3d748a7c547cafeb4de6f892269aa 100755 (executable)
@@ -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');
     }
 }
 
diff --git a/admin/user/user_bulk_enrol.php b/admin/user/user_bulk_enrol.php
new file mode 100644 (file)
index 0000000..ab7bb79
--- /dev/null
@@ -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();
index fad10cd344908a1359035351b6b6f8fe792e09e8..3c841b49209855ddaad350f66b223794771b83a8 100644 (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');
     }
 }
-?>
\ No newline at end of file
+?>
index e54da75843f0255481508189f712e80520875300..26e6447ac6c474efc3dcb82327ac8f297ba5dfff 100644 (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?';
index 94ab2941cd12d1ad8e95e5e3f8d784d68fff01fb..29ff1f37e1c2e009ed73744c2f830075d57ded8b 100644 (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,
index decedf7a72150b6fcfa3d43b022788d84e0a5491..6fc8d83e2446b13327a97559666087ad00c779e3 100644 (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');