diff --git a/blocks/recentlyaccesseditems/classes/external/recentlyaccesseditems_item_exporter.php b/blocks/recentlyaccesseditems/classes/external/recentlyaccesseditems_item_exporter.php index e9323f018e6..4836dd6dfc8 100644 --- a/blocks/recentlyaccesseditems/classes/external/recentlyaccesseditems_item_exporter.php +++ b/blocks/recentlyaccesseditems/classes/external/recentlyaccesseditems_item_exporter.php @@ -53,6 +53,9 @@ class recentlyaccesseditems_item_exporter extends \core\external\exporter { require_once($CFG->libdir.'/modinfolib.php'); $iconurl = get_fast_modinfo($this->data->courseid)->cms[$this->data->cmid]->get_icon_url(); $iconclass = $iconurl->get_param('filtericon') ? '' : 'nofilter'; + + $isbranded = component_callback('mod_' . $this->data->modname, 'is_branded') !== null ? : false; + return array( 'viewurl' => (new moodle_url('/mod/'.$this->data->modname.'/view.php', array('id' => $this->data->cmid)))->out(false), @@ -63,6 +66,7 @@ class recentlyaccesseditems_item_exporter extends \core\external\exporter { ['title' => get_string('pluginname', $this->data->modname), 'class' => "icon $iconclass"] ), 'purpose' => plugin_supports('mod', $this->data->modname, FEATURE_MOD_PURPOSE, MOD_PURPOSE_OTHER), + 'branded' => $isbranded, ); } @@ -118,7 +122,11 @@ class recentlyaccesseditems_item_exporter extends \core\external\exporter { ), 'purpose' => array( 'type' => PARAM_ALPHA, - ) + ), + 'branded' => [ + 'type' => PARAM_BOOL, + 'optional' => true, + ], ); } } diff --git a/blocks/recentlyaccesseditems/tests/externallib_test.php b/blocks/recentlyaccesseditems/tests/externallib_test.php index 16b10af6380..6857a237fa1 100644 --- a/blocks/recentlyaccesseditems/tests/externallib_test.php +++ b/blocks/recentlyaccesseditems/tests/externallib_test.php @@ -42,6 +42,7 @@ class externallib_test extends externallib_advanced_testcase { $this->resetAfterTest(); $generator = $this->getDataGenerator(); + $this->setAdminUser(); // Add courses. $courses = array(); @@ -59,6 +60,7 @@ class externallib_test extends externallib_advanced_testcase { $forum[] = $this->getDataGenerator()->create_module('forum', array('course' => $course)); $glossary[] = $this->getDataGenerator()->create_module('glossary', array('course' => $course)); $assign[] = $this->getDataGenerator()->create_module('assign', ['course' => $course]); + $h5pactivity[] = $this->getDataGenerator()->create_module('h5pactivity', ['course' => $course]); } $generator->enrol_user($teacher->id, $courses[0]->id, 'teacher'); @@ -88,24 +90,39 @@ class externallib_test extends externallib_advanced_testcase { $this->waitForSecond(); } + // Student access all h5p. + foreach ($h5pactivity as $module) { + $event = \mod_h5pactivity\event\course_module_viewed::create( + ['context' => \context_module::instance($module->cmid), 'objectid' => $module->id] + ); + $event->trigger(); + $this->waitForSecond(); + } + // Test that results are sorted by timeaccess DESC (default). $result = \block_recentlyaccesseditems\external::get_recent_items(); - $this->assertCount((count($forum) + count($assign)), $result); + $this->assertCount((count($forum) + count($assign) + count($h5pactivity)), $result); foreach ($result as $key => $record) { if ($key == 0) { continue; } $this->assertTrue($record->timeaccess < $result[$key - 1]->timeaccess); + // Check that the branded property is set correctly. + if ($record->modname == 'h5pactivity') { + $this->assertTrue($record->branded); + } else { + $this->assertFalse($record->branded); + } } // Delete a course and confirm it's activities don't get returned. delete_course($courses[0], false); $result = \block_recentlyaccesseditems\external::get_recent_items(); - $this->assertCount((count($forum) + count($assign)) - 2, $result); + $this->assertCount((count($forum) + count($assign) + count($h5pactivity)) - 3, $result); // Delete a single course module should still return. course_delete_module($forum[1]->cmid); $result = \block_recentlyaccesseditems\external::get_recent_items(); - $this->assertCount((count($forum) + count($assign)) - 3, $result); + $this->assertCount((count($forum) + count($assign) + count($h5pactivity)) - 4, $result); } } diff --git a/blocks/recentlyaccesseditems/upgrade.txt b/blocks/recentlyaccesseditems/upgrade.txt index c9f8430e070..c5952a450a5 100644 --- a/blocks/recentlyaccesseditems/upgrade.txt +++ b/blocks/recentlyaccesseditems/upgrade.txt @@ -1,5 +1,9 @@ This file describes API changes in the recentlyaccesseditems block code. +=== 4.4 === +* The external function \block_recentlyaccesseditems\external\get_recent_items() now returns + a field called "branded" indicating whether the module is branded or not. + === 3.7 === * The 'block/recentlyaccesseditems:addinstance' capability has been removed. It has never been used in code. \ No newline at end of file diff --git a/calendar/classes/external/event_exporter_base.php b/calendar/classes/external/event_exporter_base.php index dc638cd5b74..1aff3b5e5f5 100644 --- a/calendar/classes/external/event_exporter_base.php +++ b/calendar/classes/external/event_exporter_base.php @@ -293,6 +293,10 @@ class event_exporter_base extends exporter { 'purpose' => [ 'type' => PARAM_TEXT ], + 'branded' => [ + 'type' => PARAM_BOOL, + 'optional' => true, + ], ]; } @@ -335,10 +339,13 @@ class event_exporter_base extends exporter { $values['normalisedeventtypetext'] = $stringexists ? get_string($identifier, 'calendar') : ''; $purpose = 'none'; + $isbranded = false; if ($moduleproxy) { $purpose = plugin_supports('mod', $moduleproxy->get('modname'), FEATURE_MOD_PURPOSE, 'none'); + $isbranded = component_callback('mod_' . $moduleproxy->get('modname'), 'is_branded') !== null ? : false; } $values['purpose'] = $purpose; + $values['branded'] = $isbranded; $values['icon'] = $iconexporter->export($output); diff --git a/calendar/tests/externallib_test.php b/calendar/tests/externallib_test.php index e0921c05db8..054b1329587 100644 --- a/calendar/tests/externallib_test.php +++ b/calendar/tests/externallib_test.php @@ -3257,4 +3257,39 @@ class externallib_test extends externallib_advanced_testcase { $this->assertEquals($expectedtimestamps[$data['key']], $data['timestamp']); } } + + /** + * Test for checking if we receive the correct icon branding. + * + * @covers \core_calendar_external::get_calendar_action_events_by_timesort + */ + public function test_get_calendar_event_branded(): void { + + $this->resetAfterTest(true); + + $user = $this->getDataGenerator()->create_user(); + $course = $this->getDataGenerator()->create_course(); + $this->getDataGenerator()->enrol_user($user->id, $course->id); + + $this->setUser($user); + $generator = $this->getDataGenerator()->get_plugin_generator('mod_assign'); + $assign = $generator->create_instance(['course' => $course->id]); + + $params = [ + 'type' => CALENDAR_EVENT_TYPE_ACTION, + 'instance' => $assign->id, + 'courseid' => $course->id, + 'modulename' => 'assign', + 'timesort' => 1, + ]; + $event1 = $this->create_calendar_event('Event 1', $user->id, 'user', 0, 1, $params); + $result = core_calendar_external::get_calendar_action_events_by_timesort(0); + $result = external_api::clean_returnvalue( + core_calendar_external::get_calendar_action_events_by_timesort_returns(), + $result + ); + + $this->assertCount(1, $result['events']); + $this->assertFalse($result['events'][0]['branded']); + } } diff --git a/calendar/upgrade.txt b/calendar/upgrade.txt index 3076c3fba4e..89855aa4093 100644 --- a/calendar/upgrade.txt +++ b/calendar/upgrade.txt @@ -5,6 +5,17 @@ information provided here is intended especially for developers. * The following previously deprecated methods have been removed and can no longer be used: - `calendar_process_subscription_row` - `calendar_import_icalendar_events` +* The event_exporter_base class now returns a field called "branded" indicating whether the module is branded or not. + All the external functions using the exporter will now return the new field: + - core_calendar_get_action_events_by_course + - core_calendar_get_action_events_by_courses + - core_calendar_get_action_events_by_timesort + - core_calendar_get_calendar_day_view + - core_calendar_get_calendar_event_by_id + - core_calendar_get_calendar_monthly_view + - core_calendar_get_calendar_upcoming_view + - core_calendar_submit_create_update_form + - core_calendar_update_event_start_day === 4.3 === * The `navigation` property has been removed from `\core_calendar\external\day_exporter` as it is not being used by any of the