mirror of
https://github.com/moodle/moodle.git
synced 2025-08-07 18:06:51 +02:00
MDL-52206 core: Add completion criteria to course_modules
This commit is contained in:
parent
663137748e
commit
90acd8d381
19 changed files with 113 additions and 17 deletions
|
@ -2867,6 +2867,7 @@ class core_course_external extends external_api {
|
|||
'visibleoncoursepage' => new external_value(PARAM_INT, 'If visible on course page', VALUE_OPTIONAL),
|
||||
'visibleold' => new external_value(PARAM_INT, 'Visible old', VALUE_OPTIONAL),
|
||||
'completiongradeitemnumber' => new external_value(PARAM_INT, 'Completion grade item', VALUE_OPTIONAL),
|
||||
'completionpassgrade' => new external_value(PARAM_INT, 'Completion pass grade setting', VALUE_OPTIONAL),
|
||||
'completionview' => new external_value(PARAM_INT, 'Completion view setting', VALUE_OPTIONAL),
|
||||
'completionexpected' => new external_value(PARAM_INT, 'Completion time expected', VALUE_OPTIONAL),
|
||||
'showdescription' => new external_value(PARAM_INT, 'If the description is showed', VALUE_OPTIONAL),
|
||||
|
|
|
@ -461,6 +461,7 @@ function get_array_of_activities($courseid) {
|
|||
$mod[$seq]->extra = "";
|
||||
$mod[$seq]->completiongradeitemnumber =
|
||||
$rawmods[$seq]->completiongradeitemnumber;
|
||||
$mod[$seq]->completionpassgrade = $rawmods[$seq]->completionpassgrade;
|
||||
$mod[$seq]->completionview = $rawmods[$seq]->completionview;
|
||||
$mod[$seq]->completionexpected = $rawmods[$seq]->completionexpected;
|
||||
$mod[$seq]->showdescription = $rawmods[$seq]->showdescription;
|
||||
|
|
|
@ -72,6 +72,7 @@ function add_moduleinfo($moduleinfo, $course, $mform = null) {
|
|||
$completion = new completion_info($course);
|
||||
if ($completion->is_enabled()) {
|
||||
$newcm->completion = $moduleinfo->completion;
|
||||
$newcm->completionpassgrade = $moduleinfo->completionpassgrade ?? 0;
|
||||
if ($moduleinfo->completiongradeitemnumber === '') {
|
||||
$newcm->completiongradeitemnumber = null;
|
||||
} else {
|
||||
|
@ -432,6 +433,8 @@ function set_moduleinfo_defaults($moduleinfo) {
|
|||
if (isset($moduleinfo->completionusegrade) && $moduleinfo->completionusegrade) {
|
||||
$moduleinfo->completiongradeitemnumber = 0;
|
||||
} else if (!isset($moduleinfo->completiongradeitemnumber)) {
|
||||
// If there is no gradeitemnumber set, make sure to disable completionpassgrade.
|
||||
$moduleinfo->completionpassgrade = 0;
|
||||
$moduleinfo->completiongradeitemnumber = null;
|
||||
}
|
||||
|
||||
|
@ -544,6 +547,7 @@ function update_moduleinfo($cm, $moduleinfo, $course, $mform = null) {
|
|||
// the activity may be locked; if so, these should not be updated.
|
||||
if (!empty($moduleinfo->completionunlocked)) {
|
||||
$cm->completion = $moduleinfo->completion;
|
||||
$cm->completionpassgrade = $moduleinfo->completionpassgrade ?? 0;
|
||||
if ($moduleinfo->completiongradeitemnumber === '') {
|
||||
$cm->completiongradeitemnumber = null;
|
||||
} else {
|
||||
|
@ -712,6 +716,7 @@ function get_moduleinfo_data($cm, $course) {
|
|||
$data->completionview = $cm->completionview;
|
||||
$data->completionexpected = $cm->completionexpected;
|
||||
$data->completionusegrade = is_null($cm->completiongradeitemnumber) ? 0 : 1;
|
||||
$data->completionpassgrade = $cm->completionpassgrade;
|
||||
$data->completiongradeitemnumber = $cm->completiongradeitemnumber;
|
||||
$data->showdescription = $cm->showdescription;
|
||||
$data->tags = core_tag_tag::get_item_tags_array('core', 'course_modules', $cm->id);
|
||||
|
|
|
@ -372,6 +372,12 @@ abstract class moodleform_mod extends moodleform {
|
|||
}
|
||||
if ($mform->elementExists('completionpassgrade')) {
|
||||
$mform->freeze('completionpassgrade');
|
||||
|
||||
// Has the completion pass grade completion criteria been set?
|
||||
// If it has then we shouldn't change the gradepass field.
|
||||
if ($mform->exportValue('completionpassgrade')) {
|
||||
$mform->freeze('gradepass');
|
||||
}
|
||||
}
|
||||
if ($mform->elementExists('completiongradeitemnumber')) {
|
||||
$mform->freeze('completiongradeitemnumber');
|
||||
|
|
|
@ -221,6 +221,7 @@ class core_course_courselib_testcase extends advanced_testcase {
|
|||
$moduleinfo->completion = COMPLETION_TRACKING_AUTOMATIC;
|
||||
$moduleinfo->completionview = COMPLETION_VIEW_REQUIRED;
|
||||
$moduleinfo->completiongradeitemnumber = 1;
|
||||
$moduleinfo->completionpassgrade = 0;
|
||||
$moduleinfo->completionexpected = time() + (7 * 24 * 3600);
|
||||
|
||||
// Conditional activity.
|
||||
|
@ -283,6 +284,7 @@ class core_course_courselib_testcase extends advanced_testcase {
|
|||
$this->assertEquals($moduleinfo->completion, $dbcm->completion);
|
||||
$this->assertEquals($moduleinfo->completionview, $dbcm->completionview);
|
||||
$this->assertEquals($moduleinfo->completiongradeitemnumber, $dbcm->completiongradeitemnumber);
|
||||
$this->assertEquals($moduleinfo->completionpassgrade, $dbcm->completionpassgrade);
|
||||
$this->assertEquals($moduleinfo->completionexpected, $dbcm->completionexpected);
|
||||
$this->assertEquals($moduleinfo->availability, $dbcm->availability);
|
||||
$this->assertEquals($moduleinfo->showdescription, $dbcm->showdescription);
|
||||
|
@ -504,6 +506,7 @@ class core_course_courselib_testcase extends advanced_testcase {
|
|||
$moduleinfo->completion = COMPLETION_TRACKING_AUTOMATIC;
|
||||
$moduleinfo->completionview = COMPLETION_VIEW_REQUIRED;
|
||||
$moduleinfo->completiongradeitemnumber = 1;
|
||||
$moduleinfo->completionpassgrade = 0;
|
||||
$moduleinfo->completionexpected = time() + (7 * 24 * 3600);
|
||||
$moduleinfo->completionunlocked = 1;
|
||||
|
||||
|
@ -561,6 +564,7 @@ class core_course_courselib_testcase extends advanced_testcase {
|
|||
$this->assertEquals($moduleinfo->completion, $dbcm->completion);
|
||||
$this->assertEquals($moduleinfo->completionview, $dbcm->completionview);
|
||||
$this->assertEquals($moduleinfo->completiongradeitemnumber, $dbcm->completiongradeitemnumber);
|
||||
$this->assertEquals($moduleinfo->completionpassgrade, $dbcm->completionpassgrade);
|
||||
$this->assertEquals($moduleinfo->completionexpected, $dbcm->completionexpected);
|
||||
$this->assertEquals($moduleinfo->availability, $dbcm->availability);
|
||||
$this->assertEquals($moduleinfo->showdescription, $dbcm->showdescription);
|
||||
|
|
|
@ -2306,14 +2306,17 @@ class externallib_test extends externallib_advanced_testcase {
|
|||
$this->resetAfterTest(true);
|
||||
|
||||
$this->setAdminUser();
|
||||
$course = self::getDataGenerator()->create_course();
|
||||
$course = self::getDataGenerator()->create_course(['enablecompletion' => 1]);
|
||||
$record = array(
|
||||
'course' => $course->id,
|
||||
'name' => 'First Assignment'
|
||||
);
|
||||
$options = array(
|
||||
'idnumber' => 'ABC',
|
||||
'visible' => 0
|
||||
'visible' => 0,
|
||||
'completion' => COMPLETION_TRACKING_AUTOMATIC,
|
||||
'completiongradeitemnumber' => 0,
|
||||
'completionpassgrade' => 1,
|
||||
);
|
||||
// Hidden activity.
|
||||
$assign = self::getDataGenerator()->create_module('assign', $record, $options);
|
||||
|
@ -2370,7 +2373,7 @@ class externallib_test extends externallib_advanced_testcase {
|
|||
|
||||
$this->assertCount(0, $result['warnings']);
|
||||
// Test we retrieve all the fields.
|
||||
$this->assertCount(28, $result['cm']);
|
||||
$this->assertCount(29, $result['cm']);
|
||||
$this->assertEquals($record['name'], $result['cm']['name']);
|
||||
$this->assertEquals($options['idnumber'], $result['cm']['idnumber']);
|
||||
$this->assertEquals(100, $result['cm']['grade']);
|
||||
|
@ -2438,7 +2441,7 @@ class externallib_test extends externallib_advanced_testcase {
|
|||
|
||||
$this->assertCount(0, $result['warnings']);
|
||||
// Test we retrieve all the fields.
|
||||
$this->assertCount(26, $result['cm']);
|
||||
$this->assertCount(27, $result['cm']);
|
||||
$this->assertEquals($record['name'], $result['cm']['name']);
|
||||
$this->assertEquals($record['grade'], $result['cm']['grade']);
|
||||
$this->assertEquals($options['idnumber'], $result['cm']['idnumber']);
|
||||
|
|
|
@ -112,6 +112,7 @@ class core_course_modlib_testcase extends advanced_testcase {
|
|||
$expecteddata->completionview = $assigncm->completionview;
|
||||
$expecteddata->completionexpected = $assigncm->completionexpected;
|
||||
$expecteddata->completionusegrade = is_null($assigncm->completiongradeitemnumber) ? 0 : 1;
|
||||
$expecteddata->completionpassgrade = $assigncm->completionpassgrade;
|
||||
$expecteddata->completiongradeitemnumber = null;
|
||||
$expecteddata->showdescription = $assigncm->showdescription;
|
||||
$expecteddata->tags = core_tag_tag::get_item_tags_array('core', 'course_modules', $assigncm->id);
|
||||
|
@ -138,6 +139,7 @@ class core_course_modlib_testcase extends advanced_testcase {
|
|||
}
|
||||
}
|
||||
$expecteddata->gradepass = '0.00';
|
||||
$expecteddata->completionpassgrade = $assigncm->completionpassgrade;
|
||||
|
||||
// Unset untestable.
|
||||
unset($expecteddata->cmid);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue