diff --git a/backup/util/ui/classes/copy/copy.php b/backup/util/ui/classes/copy/copy.php index 3e2d269fd70..496cf0268b5 100644 --- a/backup/util/ui/classes/copy/copy.php +++ b/backup/util/ui/classes/copy/copy.php @@ -111,8 +111,8 @@ class copy { * Take the validated form data and extract the required information for copy operations. * * @param \stdClass $formdata Data from the validated course copy form. - * @throws \moodle_exception * @return \stdClass $copydata Data required for course copy operations. + * @throws \moodle_exception If one of the required copy fields is missing */ private final function get_copy_data(\stdClass $formdata): \stdClass { $copydata = new \stdClass(); @@ -121,7 +121,7 @@ class copy { if (isset($formdata->{$field})) { $copydata->{$field} = $formdata->{$field}; } else { - throw new \moodle_exception('copy_class_field_not_found'); + throw new \moodle_exception('copyfieldnotfound', 'backup', '', null, $field); } } diff --git a/backup/util/ui/classes/output/copy_form.php b/backup/util/ui/classes/output/copy_form.php index ff7a55dea63..a24413e9729 100644 --- a/backup/util/ui/classes/output/copy_form.php +++ b/backup/util/ui/classes/output/copy_form.php @@ -162,15 +162,17 @@ class copy_form extends \moodleform { } // Keep source course user data. + $mform->addElement('select', 'userdata', get_string('userdata', 'backup'), + [0 => get_string('no'), 1 => get_string('yes')]); + $mform->setDefault('userdata', 0); + $mform->addHelpButton('userdata', 'userdata', 'backup'); + $requiredcapabilities = array( 'moodle/restore:createuser', 'moodle/backup:userinfo', 'moodle/restore:userinfo' ); - if (has_all_capabilities($requiredcapabilities, $coursecontext)) { - $dataarray = array(); - $dataarray[] = $mform->createElement('advcheckbox', 'userdata', - get_string('enable'), '', array('group' => 1), array(0, 1)); - $mform->addGroup($dataarray, 'dataarray', get_string('userdata', 'backup'), ' ', false); - $mform->addHelpButton('dataarray', 'userdata', 'backup'); + if (!has_all_capabilities($requiredcapabilities, $coursecontext)) { + $mform->hardFreeze('userdata'); + $mform->setConstants('userdata', 0); } // Keep manual enrolments. diff --git a/lang/en/backup.php b/lang/en/backup.php index 4ff7fceeabb..fe79d5ac3ea 100644 --- a/lang/en/backup.php +++ b/lang/en/backup.php @@ -169,6 +169,7 @@ $string['copycoursetitle'] = 'Copy course: {$a}'; $string['copydest'] = 'Destination'; $string['copyingcourse'] = 'Course copying in progress'; $string['copyingcourseshortname'] = 'copying'; +$string['copyfieldnotfound'] = 'A required field was not found'; $string['copyformfail'] = 'AJAX submission of course copy form has failed.'; $string['copyop'] = 'Current operation'; $string['copyprogressheading'] = 'Course copies in progress'; diff --git a/lib/classes/task/asynchronous_copy_task.php b/lib/classes/task/asynchronous_copy_task.php index 6504d408cdc..0f7bb41806b 100644 --- a/lib/classes/task/asynchronous_copy_task.php +++ b/lib/classes/task/asynchronous_copy_task.php @@ -72,14 +72,16 @@ class asynchronous_copy_task extends adhoc_task { $keepuserdata = (bool)$copyinfo->userdata; $keptroles = $copyinfo->keptroles; - $backupplan->get_setting('users')->set_value('1'); $bc->set_kept_roles($keptroles); // If we are not keeping user data don't include users or data in the backup. // In this case we'll add the user enrolments at the end. // Also if we have no roles to keep don't backup users. if (empty($keptroles) || !$keepuserdata) { + $backupplan->get_setting('users')->set_status(\backup_setting::NOT_LOCKED); $backupplan->get_setting('users')->set_value('0'); + } else { + $backupplan->get_setting('users')->set_value('1'); } // Do some preflight checks on the backup.