From 9e7a3d4298788603709c1f57265f958870824220 Mon Sep 17 00:00:00 2001 From: toyomoyo Date: Wed, 4 Jul 2007 02:38:24 +0000 Subject: [PATCH] fixes for extend enrol to make it less restrictive MDL-10181 --- user/extendenrol.php | 11 +- user/groupextendenrol.php | 320 +++++++++++++++++++------------------- 2 files changed, 165 insertions(+), 166 deletions(-) diff --git a/user/extendenrol.php b/user/extendenrol.php index f0ae686917..a13a226595 100644 --- a/user/extendenrol.php +++ b/user/extendenrol.php @@ -13,7 +13,8 @@ require_login($course->id); // to extend enrolments current user needs to be able to do role assignments require_capability('moodle/role:assign', $context); - +$today = time(); +$today = make_timestamp(date('Y', $today), date('m', $today), date('d', $today), 0, 0, 0); if ((count($users) > 0) and ($form = data_submitted()) and confirm_sesskey()) { if (count($form->userid) != count($form->extendperiod) || count($form->userid) != count($form->extendbase)) { error('Parameters malformation', $CFG->wwwroot.'/user/index.php?id='.$id); @@ -55,9 +56,7 @@ if ((count($users) > 0) and ($form = data_submitted()) and confirm_sesskey()) { } break; case 3: // current date - if(time() > $course->startdate) { - $student->timeend = time() + $form->extendperiod[$k]; - } + $student->timeend = $today + $form->extendperiod[$k]; break; case 4: // course enrolment start date if($course->enrolstartdate > 0) { @@ -103,8 +102,8 @@ for ($i=1; $i<=365; $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 || ($course->enrolstartdate == 0 || $course->enrolstartdate <= $today) && ($course->enrolenddate == 0 || $course->enrolenddate > $today)) { + $basemenu[3] = get_string('today') . ' (' . userdate($today, $timeformat) . ')' ; } if($course->enrollable == 2) { if($course->enrolstartdate > 0) { diff --git a/user/groupextendenrol.php b/user/groupextendenrol.php index 23d1b56cde..18b6c78087 100755 --- a/user/groupextendenrol.php +++ b/user/groupextendenrol.php @@ -1,161 +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); +id); + +// to extend enrolments current user needs to be able to do role assignments +require_capability('moodle/role:assign', $context); +$today = time(); +$today = make_timestamp(date('Y', $today), date('m', $today), date('d', $today), 0, 0, 0); + +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 + $student->timeend = $today + $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($course->enrollable != 2 || ($course->enrolstartdate == 0 || $course->enrolstartdate <= $today) && ($course->enrolenddate == 0 || $course->enrolenddate > $today)) { + $basemenu[3] = get_string('today') . ' (' . userdate($today, $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