redirect($returnurl);
} else if ($data = $mform->get_data()) {
- if ($data->duration && $data->timeend == 0) {
+ if (!empty($data->duration) && $data->timeend == 0) {
$data->timeend = $data->timestart + $data->duration;
}
if ($manager->edit_enrolment($ue, $data)) {
/**
* Returns description of edit_user_enrolment() parameters
*
+ * @deprecated since 3.8
* @return external_function_parameters
*/
public static function edit_user_enrolment_parameters() {
/**
* External function that updates a given user enrolment.
*
+ * @deprecated since 3.8
* @param int $courseid The course ID.
* @param int $ueid The user enrolment ID.
* @param int $status The enrolment status.
/**
* Returns description of edit_user_enrolment() result value
*
+ * @deprecated since 3.8
* @return external_description
*/
public static function edit_user_enrolment_returns() {
);
}
+ /**
+ * Mark the edit_user_enrolment web service as deprecated.
+ *
+ * @return bool
+ */
+ public static function edit_user_enrolment_is_deprecated() {
+ return true;
+ }
+
+ /**
+ * Returns description of submit_user_enrolment_form parameters.
+ *
+ * @return external_function_parameters.
+ */
+ public static function submit_user_enrolment_form_parameters() {
+ return new external_function_parameters([
+ 'formdata' => new external_value(PARAM_RAW, 'The data from the event form'),
+ ]);
+ }
+
+ /**
+ * External function that handles the user enrolment form submission.
+ *
+ * @param string $formdata The user enrolment form data in s URI encoded param string
+ * @return array An array consisting of the processing result and error flag, if available
+ */
+ public static function submit_user_enrolment_form($formdata) {
+ global $CFG, $DB, $PAGE;
+
+ // Parameter validation.
+ $params = self::validate_parameters(self::submit_user_enrolment_form_parameters(), ['formdata' => $formdata]);
+
+ $data = [];
+ parse_str($params['formdata'], $data);
+
+ $userenrolment = $DB->get_record('user_enrolments', ['id' => $data['ue']], '*', MUST_EXIST);
+ $instance = $DB->get_record('enrol', ['id' => $userenrolment->enrolid], '*', MUST_EXIST);
+ $plugin = enrol_get_plugin($instance->enrol);
+ $course = get_course($instance->courseid);
+ $context = context_course::instance($course->id);
+ self::validate_context($context);
+
+ require_once("$CFG->dirroot/enrol/editenrolment_form.php");
+ $customformdata = [
+ 'ue' => $userenrolment,
+ 'modal' => true,
+ 'enrolinstancename' => $plugin->get_instance_name($instance)
+ ];
+ $mform = new enrol_user_enrolment_form(null, $customformdata, 'post', '', null, true, $data);
+
+ if ($validateddata = $mform->get_data()) {
+ if (!empty($validateddata->duration) && $validateddata->timeend == 0) {
+ $validateddata->timeend = $validateddata->timestart + $validateddata->duration;
+ }
+ require_once($CFG->dirroot . '/enrol/locallib.php');
+ $manager = new course_enrolment_manager($PAGE, $course);
+ $result = $manager->edit_enrolment($userenrolment, $validateddata);
+
+ return ['result' => $result];
+ } else {
+ return ['result' => false, 'validationerror' => true];
+ }
+ }
+
+ /**
+ * Returns description of submit_user_enrolment_form() result value
+ *
+ * @return external_description
+ */
+ public static function submit_user_enrolment_form_returns() {
+ return new external_single_structure([
+ 'result' => new external_value(PARAM_BOOL, 'True if the user\'s enrolment was successfully updated'),
+ 'validationerror' => new external_value(PARAM_BOOL, 'Indicates invalid form data', VALUE_DEFAULT, false),
+ ]);
+ }
+
/**
* Returns description of unenrol_user_enrolment() parameters
*
$this->assertEquals(ENROL_USER_SUSPENDED, $ue->status);
}
+ /**
+ * dataProvider for test_submit_user_enrolment_form().
+ */
+ public function submit_user_enrolment_form_provider() {
+ $now = new DateTime();
+
+ $nextmonth = clone($now);
+ $nextmonth->add(new DateInterval('P1M'));
+
+ return [
+ 'Invalid data' => [
+ 'customdata' => [
+ 'status' => ENROL_USER_ACTIVE,
+ 'timestart' => [
+ 'day' => $now->format('j'),
+ 'month' => $now->format('n'),
+ 'year' => $now->format('Y'),
+ 'hour' => $now->format('G'),
+ 'minute' => 0,
+ 'enabled' => 1,
+ ],
+ 'timeend' => [
+ 'day' => $now->format('j'),
+ 'month' => $now->format('n'),
+ 'year' => $now->format('Y'),
+ 'hour' => $now->format('G'),
+ 'minute' => 0,
+ 'enabled' => 1,
+ ],
+ ],
+ 'expectedresult' => false,
+ 'validationerror' => true,
+ ],
+ 'Valid data' => [
+ 'customdata' => [
+ 'status' => ENROL_USER_ACTIVE,
+ 'timestart' => [
+ 'day' => $now->format('j'),
+ 'month' => $now->format('n'),
+ 'year' => $now->format('Y'),
+ 'hour' => $now->format('G'),
+ 'minute' => 0,
+ 'enabled' => 1,
+ ],
+ 'timeend' => [
+ 'day' => $nextmonth->format('j'),
+ 'month' => $nextmonth->format('n'),
+ 'year' => $nextmonth->format('Y'),
+ 'hour' => $nextmonth->format('G'),
+ 'minute' => 0,
+ 'enabled' => 1,
+ ],
+ ],
+ 'expectedresult' => true,
+ 'validationerror' => false
+ ],
+ 'Suspend user' => [
+ 'customdata' => [
+ 'status' => ENROL_USER_SUSPENDED,
+ ],
+ 'expectedresult' => true,
+ 'validationerror' => false
+ ],
+ ];
+ }
+
+ /**
+ * @param array $customdata The data we are providing to the webservice.
+ * @param bool $expectedresult The result we are expecting to receive from the webservice.
+ * @param bool $validationerror The validationerror we are expecting to receive from the webservice.
+ * @dataProvider submit_user_enrolment_form_provider
+ */
+ public function test_submit_user_enrolment_form($customdata, $expectedresult, $validationerror) {
+ global $CFG, $DB;
+
+ $this->resetAfterTest(true);
+ $datagen = $this->getDataGenerator();
+
+ /** @var enrol_manual_plugin $manualplugin */
+ $manualplugin = enrol_get_plugin('manual');
+
+ $studentroleid = $DB->get_field('role', 'id', ['shortname' => 'student'], MUST_EXIST);
+ $teacherroleid = $DB->get_field('role', 'id', ['shortname' => 'editingteacher'], MUST_EXIST);
+ $course = $datagen->create_course();
+ $user = $datagen->create_user();
+ $teacher = $datagen->create_user();
+
+ $instanceid = null;
+ $instances = enrol_get_instances($course->id, true);
+ foreach ($instances as $inst) {
+ if ($inst->enrol == 'manual') {
+ $instanceid = (int)$inst->id;
+ break;
+ }
+ }
+ if (empty($instanceid)) {
+ $instanceid = $manualplugin->add_default_instance($course);
+ if (empty($instanceid)) {
+ $instanceid = $manualplugin->add_instance($course);
+ }
+ }
+ $this->assertNotNull($instanceid);
+
+ $instance = $DB->get_record('enrol', ['id' => $instanceid], '*', MUST_EXIST);
+ $manualplugin->enrol_user($instance, $user->id, $studentroleid, 0, 0, ENROL_USER_ACTIVE);
+ $manualplugin->enrol_user($instance, $teacher->id, $teacherroleid, 0, 0, ENROL_USER_ACTIVE);
+ $ueid = (int) $DB->get_field(
+ 'user_enrolments',
+ 'id',
+ ['enrolid' => $instance->id, 'userid' => $user->id],
+ MUST_EXIST
+ );
+
+ // Login as teacher.
+ $teacher->ignoresesskey = true;
+ $this->setUser($teacher);
+
+ $formdata = [
+ 'ue' => $ueid,
+ 'ifilter' => 0,
+ 'status' => null,
+ 'timestart' => null,
+ 'duration' => null,
+ 'timeend' => null,
+ ];
+
+ $formdata = array_merge($formdata, $customdata);
+
+ require_once("$CFG->dirroot/enrol/editenrolment_form.php");
+ $formdata = enrol_user_enrolment_form::mock_generate_submit_keys($formdata);
+
+ $querystring = http_build_query($formdata, '', '&');
+
+ $result = external_api::clean_returnvalue(
+ core_enrol_external::submit_user_enrolment_form_returns(),
+ core_enrol_external::submit_user_enrolment_form($querystring)
+ );
+
+ $this->assertEquals(
+ ['result' => $expectedresult, 'validationerror' => $validationerror],
+ $result,
+ '', 0.0, 10, true);
+
+ if ($result['result']) {
+ $ue = $DB->get_record('user_enrolments', ['id' => $ueid], '*', MUST_EXIST);
+ $this->assertEquals($formdata['status'], $ue->status);
+ }
+ }
+
/**
* Test for core_enrol_external::unenrol_user_enrolment().
*/
'classname' => 'core_enrol_external',
'methodname' => 'edit_user_enrolment',
'classpath' => 'enrol/externallib.php',
- 'description' => 'External function that updates a given user enrolment',
+ 'description' => '** DEPRECATED ** Please do not call this function any more.
+ External function that updates a given user enrolment',
+ 'type' => 'write',
+ 'ajax' => true,
+ ),
+ 'core_enrol_submit_user_enrolment_form' => array(
+ 'classname' => 'core_enrol_external',
+ 'methodname' => 'submit_user_enrolment_form',
+ 'classpath' => 'enrol/externallib.php',
+ 'description' => 'Submit form data for enrolment form',
'type' => 'write',
'ajax' => true,
),
* A new setting 'Cache templates' was added (see MDL-66367). This setting determines if templates are cached or not.
This setting can be set via the UI or by defining $CFG->cachetemplates in your config.php file. It is a boolean
and should be set to either false or true. Developers will probably want to set this to false.
+* The core_enrol_edit_user_enrolment webservice has been deprecated. Please use core_enrol_submit_user_enrolment_form instead.
=== 3.7 ===
// User enrolment ID.
var ueid = $(form).find('[name="ue"]').val();
- // Status.
- var status = $(form).find('[name="status"]').val();
-
- var params = {
- 'courseid': this.courseid,
- 'ueid': ueid,
- 'status': status
- };
-
- // Enrol time start.
- var timeStartEnabled = $(form).find('[name="timestart[enabled]"]');
- if (timeStartEnabled.is(':checked')) {
- var timeStartYear = $(form).find('[name="timestart[year]"]').val();
- var timeStartMonth = $(form).find('[name="timestart[month]"]').val() - 1;
- var timeStartDay = $(form).find('[name="timestart[day]"]').val();
- var timeStartHour = $(form).find('[name="timestart[hour]"]').val();
- var timeStartMinute = $(form).find('[name="timestart[minute]"]').val();
- var timeStart = new Date(timeStartYear, timeStartMonth, timeStartDay, timeStartHour, timeStartMinute);
- params.timestart = timeStart.getTime() / 1000;
- }
-
- // Enrol time end.
- var timeEndEnabled = $(form).find('[name="timeend[enabled]"]');
- if (timeEndEnabled.is(':checked')) {
- var timeEndYear = $(form).find('[name="timeend[year]"]').val();
- var timeEndMonth = $(form).find('[name="timeend[month]"]').val() - 1;
- var timeEndDay = $(form).find('[name="timeend[day]"]').val();
- var timeEndHour = $(form).find('[name="timeend[hour]"]').val();
- var timeEndMinute = $(form).find('[name="timeend[minute]"]').val();
- var timeEnd = new Date(timeEndYear, timeEndMonth, timeEndDay, timeEndHour, timeEndMinute);
- params.timeend = timeEnd.getTime() / 1000;
- }
-
- // Enrol duration.
- var enrolDuration = $(form).find('[name="duration"]');
- if (enrolDuration.is(':enabled')) {
- params.timeend = params.timestart + parseInt(enrolDuration.val());
- }
var request = {
- methodname: 'core_enrol_edit_user_enrolment',
- args: params
+ methodname: 'core_enrol_submit_user_enrolment_form',
+ args: {
+ formdata: form.serialize()
+ }
};
Ajax.call([request])[0].done(function(data) {
}).fail(Notification.exception);
};
- /**
+ /**
* Private method
*
* @method submitUnenrolFormAjax
defined('MOODLE_INTERNAL') || die();
-$version = 2019090500.01; // YYYYMMDD = weekly release date of this DEV branch.
+$version = 2019090500.02; // YYYYMMDD = weekly release date of this DEV branch.
// RR = release increments - 00 in DEV branches.
// .XX = incremental changes.