From 9b8c9d379cbcb5ffa2cf9b600925bf26fe2419b4 Mon Sep 17 00:00:00 2001 From: toyomoyo Date: Tue, 5 Jun 2007 01:54:19 +0000 Subject: [PATCH] part of the user management improvements on enrolment, forgot to check this in --- user/groupextendenrol.php | 161 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 161 insertions(+) create mode 100755 user/groupextendenrol.php diff --git a/user/groupextendenrol.php b/user/groupextendenrol.php new file mode 100755 index 0000000000..23d1b56cde --- /dev/null +++ b/user/groupextendenrol.php @@ -0,0 +1,161 @@ +id); + +// to extend enrolments current user needs to be able to do role assignments +require_capability('moodle/role:assign', $context); + +if ((count($users) > 0) and ($form = data_submitted()) and confirm_sesskey()) { + + foreach ($form->userid as $k => $v) { + // find all roles this student have in this course + if ($students = get_records_sql("SELECT ra.id, ra.roleid, ra.timestart, ra.timeend + FROM {$CFG->prefix}role_assignments ra + WHERE userid = $v + AND contextid = $context->id")) { + // enrol these users again, with time extension + // not that this is not necessarily a student role + foreach ($students as $student) { + // only extend if the user can make role assignments on this role + if (user_can_assign($context, $student->roleid)) { + switch($form->extendperiod) { + case 0: // No change (currently this option is not available in dropdown list, but it might be ...) + break; + case -1: // unlimited + $student->timeend = 0; + break; + default: // extend + switch($form->extendbase) { + case 0: // course start date + $student->timeend = $course->startdate + $form->extendperiod; + break; + case 1: // student enrolment start date + // we check for student enrolment date because Moodle versions before 1.9 did not set this for + // unlimited enrolment courses, so it might be 0 + if($student->timestart > 0) { + $student->timeend = $student->timestart + $form->extendperiod; + } + break; + case 2: // student enrolment start date + // enrolment end equals 0 means Unlimited, so adding some time to that will still yield Unlimited + if($student->timeend > 0) { + $student->timeend = $student->timeend + $form->extendperiod; + } + break; + case 3: // current date + if(time() > $course->startdate) { + $student->timeend = time() + $form->extendperiod; + } + break; + case 4: // course enrolment start date + if($course->enrolstartdate > 0) { + $student->timeend = $course->enrolstartdate + $form->extendperiod; + } + break; + case 5: // course enrolment end date + if($course->enrolenddate > 0) { + $student->timeend = $course->enrolenddate + $form->extendperiod; + } + break; + } + } + role_assign($student->roleid, $v, 0, $context->id, $student->timestart, $student->timeend, 0); + } + } + } + } + + redirect("$CFG->wwwroot/user/index.php?id=$id", get_string('changessaved')); +} + +/// Print headers + +if ($course->id != SITEID) { + print_header("$course->shortname: ".get_string('extendenrol'), $course->fullname, + "id\">$course->shortname -> ". + get_string('extendenrol'), "", "", true, " ", navmenu($course)); +} else { + print_header("$course->shortname: ".get_string('extendenrol'), $course->fullname, + get_string('extendenrol'), "", "", true, " ", navmenu($course)); +} + +$timeformat = get_string('strftimedate'); +$unlimited = get_string('unlimited'); +$periodmenu[-1] = $unlimited; +for ($i=1; $i<=365; $i++) { + $seconds = $i * 86400; + $periodmenu[$seconds] = get_string('numdays', '', $i); +} + +$basemenu[0] = get_string('startdate') . ' (' . userdate($course->startdate, $timeformat) . ')'; +$basemenu[1] = get_string('enrolmentstart'); +$basemenu[2] = get_string('enrolmentend'); +if(time() > $course->startdate) { + $basemenu[3] = get_string('today') . ' (' . userdate(time(), $timeformat) . ')' ; +} +if($course->enrollable == 2) { + if($course->enrolstartdate > 0) { + $basemenu[4] = get_string('courseenrolstartdate') . ' (' . userdate($course->enrolstartdate, $timeformat) . ')'; + } + if($course->enrolenddate > 0) { + $basemenu[5] = get_string('courseenrolenddate') . ' (' . userdate($course->enrolenddate, $timeformat) . ')'; + } +} + +$title = get_string('groupextendenrol'); +print_heading($title . helpbutton('groupextendenrol', $title, 'moodle', true, false, '', true)); +echo '
'; +echo ''; +echo ''; +$table->head = array (get_string('fullname'), get_string('enrolmentstart'), get_string('enrolmentend')); +$table->align = array ('left', 'center', 'center', 'center'); +$table->width = "600"; +$nochange = get_string('nochange'); +$notavailable = get_string('notavailable'); + +foreach ($_POST as $k => $v) { + if (preg_match('/^user(\d+)$/',$k,$m)) { + + if (!($user = get_record_sql("SELECT * FROM {$CFG->prefix}user u + INNER JOIN {$CFG->prefix}role_assignments ra ON u.id=ra.userid + WHERE u.id={$m[1]} AND ra.contextid = $context->id"))) { + continue; + } + if ($user->timestart) { + $timestart = userdate($user->timestart, $timeformat); + } else { + $timestart = $notavailable; + } + if ($user->timeend) { + $timeend = userdate($user->timeend, $timeformat); + } else { + $timeend = $unlimited; + } + $table->data[] = array( + fullname($user, true), + $timestart, + $timeend . '' + ); + } +} +print_table($table); +echo '
'; +echo get_string('extendperiod') . ' '; +choose_from_menu($periodmenu, "extendperiod"); +echo ' ' . get_string('startingfrom') . ' '; +choose_from_menu($basemenu, "extendbase", "2", ""); +echo '
'; +echo ''; +echo '
'; + +print_footer($course); +?> \ No newline at end of file -- 2.39.5