diff --git a/mod/h5pactivity/classes/external/get_h5pactivities_by_courses.php b/mod/h5pactivity/classes/external/get_h5pactivities_by_courses.php index adf69ae8bc1..0b5353deb26 100644 --- a/mod/h5pactivity/classes/external/get_h5pactivities_by_courses.php +++ b/mod/h5pactivity/classes/external/get_h5pactivities_by_courses.php @@ -96,8 +96,16 @@ class get_h5pactivities_by_courses extends external_api { } } + $h5pglobalsettings = [ + 'enablesavestate' => get_config('mod_h5pactivity', 'enablesavestate'), + ]; + if (!empty($h5pglobalsettings['enablesavestate'])) { + $h5pglobalsettings['savestatefreq'] = get_config('mod_h5pactivity', 'savestatefreq'); + } + $result = [ 'h5pactivities' => $returnedh5pactivities, + 'h5pglobalsettings' => $h5pglobalsettings, 'warnings' => $warnings ]; return $result; @@ -115,6 +123,14 @@ class get_h5pactivities_by_courses extends external_api { 'h5pactivities' => new external_multiple_structure( h5pactivity_summary_exporter::get_read_structure() ), + 'h5pglobalsettings' => new external_single_structure( + [ + 'enablesavestate' => new external_value(PARAM_BOOL, 'Whether saving state is enabled.'), + 'savestatefreq' => new external_value(PARAM_INT, 'How often (in seconds) state is saved.', VALUE_OPTIONAL), + ], + 'H5P global settings', + VALUE_OPTIONAL, + ), 'warnings' => new external_warnings(), ] ); diff --git a/mod/h5pactivity/tests/external/get_h5pactivities_by_courses_test.php b/mod/h5pactivity/tests/external/get_h5pactivities_by_courses_test.php index e8170526c52..90cb9fc9aed 100644 --- a/mod/h5pactivity/tests/external/get_h5pactivities_by_courses_test.php +++ b/mod/h5pactivity/tests/external/get_h5pactivities_by_courses_test.php @@ -104,6 +104,10 @@ class get_h5pactivities_by_courses_test extends externallib_advanced_testcase { $manual->enrol_user($maninstance1, $user->id, $studentrole->id); $manual->enrol_user($maninstance2, $user->id, $studentrole->id); + // Set admin settings. + set_config('enablesavestate', 1, 'mod_h5pactivity'); + set_config('savestatefreq', 120, 'mod_h5pactivity'); + // Check the activities returned by the first course. $this->setUser($user); $courseids = [$course1->id]; @@ -114,6 +118,8 @@ class get_h5pactivities_by_courses_test extends externallib_advanced_testcase { $this->assert_activities($activities, $result); $this->assertNotContains('deployedfile', $result['h5pactivities'][0]); $this->assertNotContains('deployedfile', $result['h5pactivities'][1]); + $this->assertEquals(1, $result['h5pglobalsettings']['enablesavestate']); + $this->assertEquals(120, $result['h5pglobalsettings']['savestatefreq']); // Call the external function without passing course id. // Expected result, all the courses, course1 and course2. @@ -136,18 +142,25 @@ class get_h5pactivities_by_courses_test extends externallib_advanced_testcase { $this->assertEquals($deployedfile['timemodified'], $result['h5pactivities'][2]['deployedfile']['timemodified']); $this->assertEquals($deployedfile['mimetype'], $result['h5pactivities'][2]['deployedfile']['mimetype']); $this->assertEquals($deployedfile['fileurl'], $result['h5pactivities'][2]['deployedfile']['fileurl']); + $this->assertEquals(1, $result['h5pglobalsettings']['enablesavestate']); + $this->assertEquals(120, $result['h5pglobalsettings']['savestatefreq']); // Unenrol user from second course. $manual->unenrol_user($maninstance2, $user->id); // Remove the last activity from the array. array_pop($activities); + // Disable save state. + set_config('enablesavestate', 0, 'mod_h5pactivity'); + // Call the external function without passing course id. $result = get_h5pactivities_by_courses::execute([]); $result = external_api::clean_returnvalue(get_h5pactivities_by_courses::execute_returns(), $result); $this->assertCount(0, $result['warnings']); $this->assertCount(2, $result['h5pactivities']); $this->assert_activities($activities, $result); + $this->assertEquals(0, $result['h5pglobalsettings']['enablesavestate']); + $this->assertNotContains('savestatefreq', $result['h5pglobalsettings']); // Call for the second course we unenrolled the user from, expected warning. $result = get_h5pactivities_by_courses::execute([$course2->id]); @@ -166,7 +179,7 @@ class get_h5pactivities_by_courses_test extends externallib_advanced_testcase { */ protected function assert_activities(array $activities, array $result): void { - $total = count($result); + $total = count($result['h5pactivities']); for ($i = 0; $i < $total; $i++) { $this->assertEquals($activities[$i]->id, $result['h5pactivities'][$i]['id']); $this->assertEquals($activities[$i]->course, $result['h5pactivities'][$i]['course']); diff --git a/mod/h5pactivity/upgrade.txt b/mod/h5pactivity/upgrade.txt index 28a668624f7..ed81c384701 100644 --- a/mod/h5pactivity/upgrade.txt +++ b/mod/h5pactivity/upgrade.txt @@ -1,6 +1,10 @@ This files describes API changes in /mod/h5pactivity/*, information provided here is intended especially for developers. +=== 4.2 === + +* The WebService mod_h5pactivity_get_h5pactivities_by_courses now returns a `h5pglobalsettings` property that includes the global settings for H5P activities. + === 4.1 === * The following methods now accept an optional `$currentgroup` parameter in order to better support groups: