]> git.mjollnir.org Git - moodle.git/commitdiff
part of the user management improvements on enrolment, forgot to check this in
authortoyomoyo <toyomoyo>
Tue, 5 Jun 2007 01:54:19 +0000 (01:54 +0000)
committertoyomoyo <toyomoyo>
Tue, 5 Jun 2007 01:54:19 +0000 (01:54 +0000)
user/groupextendenrol.php [new file with mode: 0755]

diff --git a/user/groupextendenrol.php b/user/groupextendenrol.php
new file mode 100755 (executable)
index 0000000..23d1b56
--- /dev/null
@@ -0,0 +1,161 @@
+<?php  // $Id$\r
+require_once("../config.php");\r
+\r
+$id    = required_param('id', PARAM_INT);              // course id\r
+$users = optional_param('userid', array(), PARAM_INT); // array of user id\r
+\r
+if (! $course = get_record('course', 'id', $id)) {\r
+    error("Course ID is incorrect");\r
+}\r
+\r
+$context = get_context_instance(CONTEXT_COURSE, $id);\r
+require_login($course->id);\r
+\r
+// to extend enrolments current user needs to be able to do role assignments\r
+require_capability('moodle/role:assign', $context);\r
+\r
+if ((count($users) > 0) and ($form = data_submitted()) and confirm_sesskey()) {\r
+\r
+    foreach ($form->userid as $k => $v) {\r
+        // find all roles this student have in this course  \r
+        if ($students = get_records_sql("SELECT ra.id, ra.roleid, ra.timestart, ra.timeend\r
+                                       FROM {$CFG->prefix}role_assignments ra\r
+                                       WHERE userid = $v\r
+                                       AND contextid = $context->id")) {\r
+            // enrol these users again, with time extension\r
+            // not that this is not necessarily a student role\r
+            foreach ($students as $student) {\r
+                // only extend if the user can make role assignments on this role\r
+                if (user_can_assign($context, $student->roleid)) {\r
+                    switch($form->extendperiod) {\r
+                        case 0: // No change (currently this option is not available in dropdown list, but it might be ...)\r
+                            break;\r
+                        case -1: // unlimited\r
+                            $student->timeend = 0;\r
+                            break;\r
+                        default: // extend\r
+                            switch($form->extendbase) {\r
+                                case 0: // course start date\r
+                                    $student->timeend = $course->startdate + $form->extendperiod;\r
+                                    break;\r
+                                case 1: // student enrolment start date\r
+                                    // we check for student enrolment date because Moodle versions before 1.9 did not set this for\r
+                                    // unlimited enrolment courses, so it might be 0\r
+                                    if($student->timestart > 0) {\r
+                                        $student->timeend = $student->timestart + $form->extendperiod;\r
+                                    }\r
+                                    break;\r
+                                case 2: // student enrolment start date\r
+                                    // enrolment end equals 0 means Unlimited, so adding some time to that will still yield Unlimited\r
+                                    if($student->timeend > 0) {\r
+                                        $student->timeend = $student->timeend + $form->extendperiod;\r
+                                    }\r
+                                    break;\r
+                                case 3: // current date\r
+                                    if(time() > $course->startdate) {\r
+                                        $student->timeend = time() + $form->extendperiod;\r
+                                    }\r
+                                    break;\r
+                                case 4: // course enrolment start date\r
+                                    if($course->enrolstartdate > 0) {\r
+                                        $student->timeend = $course->enrolstartdate + $form->extendperiod;\r
+                                    }\r
+                                    break;\r
+                                case 5: // course enrolment end date\r
+                                    if($course->enrolenddate > 0) {\r
+                                        $student->timeend = $course->enrolenddate + $form->extendperiod;\r
+                                    }\r
+                                    break;\r
+                            }\r
+                    } \r
+                    role_assign($student->roleid, $v, 0, $context->id, $student->timestart, $student->timeend, 0);\r
+                }\r
+            }\r
+        }\r
+    }\r
+\r
+    redirect("$CFG->wwwroot/user/index.php?id=$id", get_string('changessaved'));\r
+}\r
+\r
+/// Print headers\r
+\r
+if ($course->id != SITEID) {\r
+    print_header("$course->shortname: ".get_string('extendenrol'), $course->fullname,\r
+    "<a href=\"../course/view.php?id=$course->id\">$course->shortname</a> -> ".\r
+    get_string('extendenrol'), "", "", true, "&nbsp;", navmenu($course));\r
+} else {\r
+    print_header("$course->shortname: ".get_string('extendenrol'), $course->fullname,\r
+    get_string('extendenrol'), "", "", true, "&nbsp;", navmenu($course));\r
+}\r
+\r
+$timeformat = get_string('strftimedate');\r
+$unlimited = get_string('unlimited');\r
+$periodmenu[-1] = $unlimited;\r
+for ($i=1; $i<=365; $i++) {\r
+    $seconds = $i * 86400;\r
+    $periodmenu[$seconds] = get_string('numdays', '', $i);\r
+}\r
+\r
+$basemenu[0] = get_string('startdate') . ' (' . userdate($course->startdate, $timeformat) . ')';\r
+$basemenu[1] = get_string('enrolmentstart');\r
+$basemenu[2] = get_string('enrolmentend');\r
+if(time() > $course->startdate) {\r
+    $basemenu[3] = get_string('today') . ' (' . userdate(time(), $timeformat) . ')' ;\r
+}\r
+if($course->enrollable == 2) {\r
+    if($course->enrolstartdate > 0) {\r
+        $basemenu[4] = get_string('courseenrolstartdate') . ' (' . userdate($course->enrolstartdate, $timeformat) . ')';\r
+    }\r
+    if($course->enrolenddate > 0) {\r
+        $basemenu[5] = get_string('courseenrolenddate') . ' (' . userdate($course->enrolenddate, $timeformat) . ')';\r
+    }\r
+}\r
+\r
+$title = get_string('groupextendenrol');\r
+print_heading($title . helpbutton('groupextendenrol', $title, 'moodle', true, false, '', true));\r
+echo '<form method="post" action="groupextendenrol.php">';\r
+echo '<input type="hidden" name="id" value="'.$course->id.'" />';\r
+echo '<input type="hidden" name="sesskey" value="'.$USER->sesskey.'" />';\r
+$table->head  = array (get_string('fullname'), get_string('enrolmentstart'), get_string('enrolmentend'));\r
+$table->align = array ('left', 'center', 'center', 'center');\r
+$table->width = "600";\r
+$nochange = get_string('nochange');\r
+$notavailable = get_string('notavailable');\r
+\r
+foreach ($_POST as $k => $v) {\r
+    if (preg_match('/^user(\d+)$/',$k,$m)) {\r
+        \r
+        if (!($user = get_record_sql("SELECT * FROM {$CFG->prefix}user u \r
+                                    INNER JOIN {$CFG->prefix}role_assignments ra ON u.id=ra.userid \r
+                                    WHERE u.id={$m[1]} AND ra.contextid = $context->id"))) {\r
+            continue;\r
+        }\r
+        if ($user->timestart) {\r
+            $timestart = userdate($user->timestart, $timeformat);\r
+        } else {\r
+            $timestart = $notavailable;\r
+        }\r
+        if ($user->timeend) {\r
+            $timeend = userdate($user->timeend, $timeformat);\r
+        } else {\r
+            $timeend = $unlimited;\r
+        }\r
+        $table->data[] = array(\r
+        fullname($user, true),\r
+        $timestart,\r
+        $timeend . '<input type="hidden" name="userid['.$m[1].']" value="'.$m[1].'" />'\r
+        );\r
+    }\r
+}\r
+print_table($table);\r
+echo '<div style="width:100%;text-align:center;"><strong>';\r
+echo get_string('extendperiod') . ' ';\r
+choose_from_menu($periodmenu, "extendperiod");\r
+echo ' ' . get_string('startingfrom') . ' ';\r
+choose_from_menu($basemenu, "extendbase", "2", "");\r
+echo '</strong><br />';\r
+echo '<input type="submit" value="'.get_string('savechanges').'" />';\r
+echo '</div></form>';\r
+\r
+print_footer($course);\r
+?>
\ No newline at end of file