diff --git a/public/course/classes/course_request.php b/public/course/classes/course_request.php index 1a2df4e9c18..73599a56696 100644 --- a/public/course/classes/course_request.php +++ b/public/course/classes/course_request.php @@ -16,6 +16,7 @@ namespace core_course; +use core\{clock, di}; use core\context; use core\context\course as context_course; use core\context\coursecat as context_coursecat; @@ -324,6 +325,7 @@ class course_request { $data->newsitems = $courseconfig->newsitems; $data->showgrades = $courseconfig->showgrades; $data->showreports = $courseconfig->showreports; + $data->showactivitydates = $courseconfig->showactivitydates; $data->maxbytes = $courseconfig->maxbytes; $data->groupmode = $courseconfig->groupmode; $data->groupmodeforce = $courseconfig->groupmodeforce; @@ -332,9 +334,9 @@ class course_request { $data->lang = $courseconfig->lang; $data->enablecompletion = $courseconfig->enablecompletion; $data->numsections = $courseconfig->numsections; - $data->startdate = usergetmidnight(time()); + $data->startdate = usergetmidnight(di::get(clock::class)->time()); if ($courseconfig->courseenddateenabled) { - $data->enddate = usergetmidnight(time()) + $courseconfig->courseduration; + $data->enddate = $data->startdate + $courseconfig->courseduration; } [$data->fullname, $data->shortname] = restore_dbops::calculate_course_names(0, $data->fullname, $data->shortname); diff --git a/public/course/tests/course_request_test.php b/public/course/tests/course_request_test.php index 005370ad4f9..409692bd6ff 100644 --- a/public/course/tests/course_request_test.php +++ b/public/course/tests/course_request_test.php @@ -77,9 +77,12 @@ final class course_request_test extends \advanced_testcase { public function test_approve_request(): void { global $DB; + $this->resetAfterTest(true); $this->preventResetByRollback(); + $this->mock_clock_with_frozen(1622502000); + $defaultcategory = $DB->get_field_select('course_categories', "MIN(id)", "parent=0"); set_config('enablecourserequests', 1); set_config('lockrequestcategory', 1); @@ -116,6 +119,7 @@ final class course_request_test extends \advanced_testcase { $id = $cr->approve(); $this->assertCount(1, $sink->get_messages_by_component_and_type('core', 'courserequestapproved')); $sink->close(); + $course = $DB->get_record('course', ['id' => $id]); $this->assertEquals($data->fullname, $course->fullname); $this->assertEquals($data->shortname, $course->shortname); @@ -136,8 +140,49 @@ final class course_request_test extends \advanced_testcase { $id = $cr->approve(); $this->assertCount(1, $sink->get_messages_by_component_and_type('core', 'courserequestapproved')); $sink->close(); + $course = $DB->get_record('course', ['id' => $id]); $this->assertEquals($data->category, $course->category); + + // Test with default course settings. + set_config('format', 'weeks', 'moodlecourse'); + set_config('newsitems', 2, 'moodlecourse'); + set_config('showgrades', false, 'moodlecourse'); + set_config('showreports', true, 'moodlecourse'); + set_config('showactivitydates', 0, 'moodlecourse'); + set_config('maxbytes', 10240, 'moodlecourse'); + set_config('groupmode', SEPARATEGROUPS, 'moodlecourse'); + set_config('groupmodeforce', true, 'moodlecourse'); + set_config('visible', false, 'moodlecourse'); + set_config('lang', 'es', 'moodlecourse'); + set_config('enablecompletion', false, 'moodlecourse'); + set_config('courseenddateenabled', true, 'moodlecourse'); + set_config('courseduration', WEEKSECS * 4, 'moodlecourse'); + + $data->shortname .= ' 3rd'; + $this->setUser($requester); + $cr = course_request::create($data); + $this->setAdminUser(); + $sink = $this->redirectMessages(); + $id = $cr->approve(); + $this->assertCount(1, $sink->get_messages_by_component_and_type('core', 'courserequestapproved')); + $sink->close(); + + $course = $DB->get_record('course', ['id' => $id]); + + $this->assertEquals('weeks', $course->format); + $this->assertEquals(2, $course->newsitems); + $this->assertEquals(0, $course->showgrades); + $this->assertEquals(1, $course->showreports); + $this->assertEquals(0, $course->showactivitydates); + $this->assertEquals(10240, $course->maxbytes); + $this->assertEquals(SEPARATEGROUPS, $course->groupmode); + $this->assertEquals(1, $course->groupmodeforce); + $this->assertEquals(0, $course->visible); + $this->assertEquals('es', $course->lang); + $this->assertEquals(0, $course->enablecompletion); + $this->assertEquals(1622476800, $course->startdate); + $this->assertEquals($course->startdate + (WEEKSECS * 4), $course->enddate); } public function test_reject_request(): void { diff --git a/public/lib/db/install.xml b/public/lib/db/install.xml index a972b8e3a06..ad41b759c08 100644 --- a/public/lib/db/install.xml +++ b/public/lib/db/install.xml @@ -103,7 +103,7 @@ - + diff --git a/public/lib/db/upgrade.php b/public/lib/db/upgrade.php index 8562517c66c..5e03b90f685 100644 --- a/public/lib/db/upgrade.php +++ b/public/lib/db/upgrade.php @@ -1618,5 +1618,17 @@ function xmldb_main_upgrade($oldversion) { upgrade_main_savepoint(true, 2025121200.01); } + if ($oldversion < 2025121900.01) { + // Changing the default of field showactivitydates on table course to 1. + $table = new xmldb_table('course'); + $field = new xmldb_field('showactivitydates', XMLDB_TYPE_INTEGER, '1', null, XMLDB_NOTNULL, null, '1', 'originalcourseid'); + + // Launch change of default for field showactivitydates. + $dbman->change_field_default($table, $field); + + // Main savepoint reached. + upgrade_main_savepoint(true, 2025121900.01); + } + return true; } diff --git a/public/version.php b/public/version.php index ca1c4179be2..ffc7584d780 100644 --- a/public/version.php +++ b/public/version.php @@ -29,7 +29,7 @@ defined('MOODLE_INTERNAL') || die(); -$version = 2025121900.00; // YYYYMMDD = weekly release date of this DEV branch. +$version = 2025121900.01; // YYYYMMDD = weekly release date of this DEV branch. // RR = release increments - 00 in DEV branches. // .XX = incremental changes. $release = '5.2dev (Build: 20251219)'; // Human-friendly version name