From 9fffb6916205b4508509cc9f4544209ae7945b9c Mon Sep 17 00:00:00 2001 From: toyomoyo Date: Tue, 22 May 2007 02:08:22 +0000 Subject: [PATCH] MDL-8877, specify time of manual enrolments and related improvements for changing enrolment period from user/index.php. Thanks Andrei! --- admin/roles/assign.html | 5 ++- admin/roles/assign.php | 28 +++++++++++++- lang/en_utf8/moodle.php | 4 ++ lib/gradelib.php | 3 +- user/action_redir.php | 3 +- user/extendenrol.php | 81 ++++++++++++++++++++++++++++++++++++----- user/index.php | 17 ++++----- 7 files changed, 118 insertions(+), 23 deletions(-) diff --git a/admin/roles/assign.html b/admin/roles/assign.html index b350b4bb1c..158c5ca87c 100755 --- a/admin/roles/assign.html +++ b/admin/roles/assign.html @@ -1,5 +1,8 @@
-
+
+ + + diff --git a/admin/roles/assign.php b/admin/roles/assign.php index 3cc60513ff..a0788e5259 100755 --- a/admin/roles/assign.php +++ b/admin/roles/assign.php @@ -17,6 +17,7 @@ $hidden = optional_param('hidden', 0, PARAM_BOOL); // whether this assignment is hidden $timestart = optional_param('timestart', 0, PARAM_INT); $timeend = optional_param('timened', 0, PARAM_INT); + $extendperiod = optional_param('extendperiod', 0, PARAM_INT); $userid = optional_param('userid', 0, PARAM_INT); // needed for user tabs $courseid = optional_param('courseid', 0, PARAM_INT); // needed for user tabs @@ -80,8 +81,27 @@ $strparticipants = get_string('participants'); $strsearchresults = get_string('searchresults'); + $unlimitedperiod = get_string('unlimited'); + $defaultperiod = $course->enrolperiod; + for ($i=1; $i<=365; $i++) { + $seconds = $i * 86400; + $periodmenu[$seconds] = get_string('numdays', '', $i); + } - + $timeformat = get_string('strftimedate'); + $basemenu[0] = get_string('startdate') . ' (' . userdate($course->startdate, $timeformat) . ')'; + 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) . ')'; + } + } + /// Make sure this user can assign that role if ($roleid) { @@ -156,6 +176,12 @@ } } if ($allow) { + $timestart = $timemodified; + if($extendperiod > 0) { + $timeend = $timestart + $extendperiod; + } else { + $timeend = 0; + } if (! role_assign($roleid, $adduser, 0, $context->id, $timestart, $timeend, $hidden)) { $errors[] = "Could not add user with id $adduser to this role!"; } diff --git a/lang/en_utf8/moodle.php b/lang/en_utf8/moodle.php index f2743ec19e..fbb1a51b6d 100644 --- a/lang/en_utf8/moodle.php +++ b/lang/en_utf8/moodle.php @@ -584,6 +584,10 @@ Please contact your $a->teacherstr for any further enquiries.'; $string['expirythreshold'] = 'Threshold'; $string['explanation'] = 'Explanation'; $string['extendenrol'] = 'Extend enrolment'; +$string['groupextendenrol'] = 'Extend enrolment for all'; +$string['courseenrolstartdate'] = 'Course enrolment start date'; +$string['courseenrolenddate'] = 'Course enrolment end date'; +$string['startingfrom'] = 'Starting from'; $string['extendperiod'] = 'Extended period'; $string['failedloginattempts'] = '$a->attempts failed logins since your last login'; $string['failedloginattemptsall'] = '$a->attempts failed logins for $a->accounts accounts'; diff --git a/lib/gradelib.php b/lib/gradelib.php index 12340effa0..a1df02f103 100644 --- a/lib/gradelib.php +++ b/lib/gradelib.php @@ -195,7 +195,7 @@ function grades_grab_grades() { if (function_exists($gradefunc) && !event_is_registered($mod, $gradefunc)) { // get all instance of the mod $module = get_record('modules', 'name', $mod); - if ($module && $modinstances = get_records('course_modules', 'module', $module->id)) { + if ($module && $modinstances = get_records_select('course_modules cm, '.$CFG->prefix.$mod.' m', 'cm.module = '.$module->id.' AND m.id = cm.instance')) { foreach ($modinstances as $modinstance) { // for each instance, call the xxx_grades() function if ($grades = $gradefunc($modinstance->instance)) { @@ -210,6 +210,7 @@ function grades_grab_grades() { $eventdata->gradetype = 0; $eventdata->userid = $userid; $eventdata->gradevalue = $usergrade; + $eventdata->itemname = $modinstance->name; trigger_event('grade_added', $eventdata); } diff --git a/user/action_redir.php b/user/action_redir.php index 157ff1b096..4351c3f391 100644 --- a/user/action_redir.php +++ b/user/action_redir.php @@ -11,7 +11,8 @@ $id = required_param('id', PARAM_INT); // Add every page will be redirected by this script $actions = array( 'messageselect.php', - 'extendenrol.php' + 'extendenrol.php', + 'groupextendenrol.php', ); if (array_search($formaction, $actions) === false) { diff --git a/user/extendenrol.php b/user/extendenrol.php index 304922264f..f0ae686917 100644 --- a/user/extendenrol.php +++ b/user/extendenrol.php @@ -15,7 +15,7 @@ require_login($course->id); require_capability('moodle/role:assign', $context); if ((count($users) > 0) and ($form = data_submitted()) and confirm_sesskey()) { - if (count($form->userid) != count($form->extendperiod)) { + if (count($form->userid) != count($form->extendperiod) || count($form->userid) != count($form->extendbase)) { error('Parameters malformation', $CFG->wwwroot.'/user/index.php?id='.$id); } @@ -30,7 +30,48 @@ if ((count($users) > 0) and ($form = data_submitted()) and confirm_sesskey()) { foreach ($students as $student) { // only extend if the user can make role assignments on this role if (user_can_assign($context, $student->roleid)) { - role_assign($student->roleid, $v, 0, $context->id, $student->timestart, $student->timeend + $form->extendperiod[$k], 0); + switch($form->extendperiod[$k]) { + case 0: // No change + break; + case -1: // unlimited + $student->timeend = 0; + break; + default: // extend + switch($form->extendbase[$k]) { + case 0: // course start date + $student->timeend = $course->startdate + $form->extendperiod[$k]; + 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[$k]; + } + 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[$k]; + } + break; + case 3: // current date + if(time() > $course->startdate) { + $student->timeend = time() + $form->extendperiod[$k]; + } + break; + case 4: // course enrolment start date + if($course->enrolstartdate > 0) { + $student->timeend = $course->enrolstartdate + $form->extendperiod[$k]; + } + break; + case 5: // course enrolment end date + if($course->enrolenddate > 0) { + $student->timeend = $course->enrolenddate + $form->extendperiod[$k]; + } + break; + } + } + role_assign($student->roleid, $v, 0, $context->id, $student->timestart, $student->timeend, 0); } } } @@ -50,22 +91,40 @@ if ($course->id != SITEID) { 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); } -print_heading(get_string('extendenrol')); +// this will contain all available the based On select options, but we'll disable some on them on a per user basis +$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('extendenrol'); +print_heading($title . helpbutton('extendenrol', $title, 'moodle', true, false, '', true)); echo "\n"; echo ''; echo ''; -$table->head = array (get_string('fullname'), get_string('enrolmentstart'), get_string('enrolmentend'), get_string('extendperiod')); +$table->head = array (get_string('fullname'), get_string('enrolmentstart'), get_string('enrolmentend'), get_string('extendperiod'), get_string('startingfrom')); $table->align = array ('left', 'center', 'center', 'center'); $table->width = "600"; -$timeformat = get_string('strftimedate'); $nochange = get_string('nochange'); $notavailable = get_string('notavailable'); -$unlimited = get_string('unlimited'); foreach ($_POST as $k => $v) { if (preg_match('/^user(\d+)$/',$k,$m)) { @@ -74,23 +133,27 @@ foreach ($_POST as $k => $v) { WHERE u.id={$m[1]} AND ra.contextid = $context->id"))) { continue; } + $userbasemenu = $basemenu; if ($user->timestart) { $timestart = userdate($user->timestart, $timeformat); } else { $timestart = $notavailable; + unset($userbasemenu[1]); } if ($user->timeend) { $timeend = userdate($user->timeend, $timeformat); - $checkbox = choose_from_menu($periodmenu, "extendperiod[{$m[1]}]", "0", $nochange, '', '0', true); } else { $timeend = $unlimited; - $checkbox = ''.$nochange; + unset($userbasemenu[2]); } + $checkbox = choose_from_menu($periodmenu, "extendperiod[{$m[1]}]", "0", $nochange, '', '0', true); + $checkbox2 = choose_from_menu($userbasemenu, "extendbase[{$m[1]}]", "2", "", '', '0', true); $table->data[] = array( fullname($user, true), $timestart, $timeend, - ''.$checkbox + ''.$checkbox, + $checkbox2 ); } } diff --git a/user/index.php b/user/index.php index c92f250881..db71b6ce57 100644 --- a/user/index.php +++ b/user/index.php @@ -189,13 +189,9 @@ echo ''; } - if ($groupmode == VISIBLEGROUPS or ($groupmode and has_capability('moodle/site:accessallgroups', $context))) { - if ($groups_names = groups_get_groups_names($course->id)) { //TODO: - echo ''; - print_group_menu($groups_names, $groupmode, $currentgroup, $baseurl); - echo ''; - } - } + echo ''; + setup_and_print_groups($course, $groupmode, $baseurl); + echo ''; // get minimum lastaccess for this course and display a dropbox to filter by lastaccess going back this far. // this might not work anymore because you always going to get yourself as the most recent entry? added $USER!=$user ch @@ -605,9 +601,10 @@ if (has_capability('moodle/site:readallmessages', $context)) { $displaylist['messageselect.php'] = get_string('messageselectadd'); } - if ($course->enrolperiod) { - $displaylist['extendenrol.php'] = get_string('extendenrol'); - } + + $displaylist['extendenrol.php'] = get_string('extendenrol'); + $displaylist['groupextendenrol.php'] = get_string('groupextendenrol'); + helpbutton("participantswithselectedusers", get_string("withselectedusers")); choose_from_menu ($displaylist, "formaction", "", get_string("withselectedusers"), "if(checksubmit(this.form))this.form.submit();", ""); echo ''; -- 2.39.5