diff --git a/privacy/classes/local/metadata/types/plugintype_link.php b/privacy/classes/local/metadata/types/plugintype_link.php index 54b29cf3ee1..a60fa58e9b0 100644 --- a/privacy/classes/local/metadata/types/plugintype_link.php +++ b/privacy/classes/local/metadata/types/plugintype_link.php @@ -78,7 +78,7 @@ class plugintype_link implements type { * @return array */ public function get_privacy_fields() : array { - return null; + return []; } /** diff --git a/privacy/classes/local/metadata/types/subsystem_link.php b/privacy/classes/local/metadata/types/subsystem_link.php index 88eedb57d2d..4ee260e6532 100644 --- a/privacy/classes/local/metadata/types/subsystem_link.php +++ b/privacy/classes/local/metadata/types/subsystem_link.php @@ -78,7 +78,7 @@ class subsystem_link implements type { * @return array */ public function get_privacy_fields() : array { - return null; + return []; } /** diff --git a/privacy/classes/manager.php b/privacy/classes/manager.php index cc8da79ad41..0889f4a331b 100644 --- a/privacy/classes/manager.php +++ b/privacy/classes/manager.php @@ -131,6 +131,20 @@ class manager { return false; } + /** + * Retrieve the reason for implementing the null provider interface. + * + * @param string $component Frankenstyle component name. + * @return string The key to retrieve the language string for the null provider reason. + */ + public function get_null_provider_reason(string $component) : string { + if ($this->component_implements($component, \core_privacy\local\metadata\null_provider::class)) { + return $this->get_provider_classname($component)::get_reason(); + } else { + throw new \coding_exception('Call to undefined method', 'Please only call this method on a null provider.'); + } + } + /** * Get the privacy metadata for all components. * diff --git a/privacy/tests/manager_test.php b/privacy/tests/manager_test.php index 9f341c54bf4..8ef4a543ced 100644 --- a/privacy/tests/manager_test.php +++ b/privacy/tests/manager_test.php @@ -201,4 +201,16 @@ class privacy_manager_testcase extends advanced_testcase { $metadata = $manager->get_metadata_for_components(); $this->assertNotEmpty($metadata); } + + /** + * Test that the reason for the null provider is returned. + */ + public function test_get_null_provider_reason() { + $manager = new \core_privacy\manager(); + // Null providers return the reason string. + $this->assertEquals('testcomponent2 null provider reason', $manager->get_null_provider_reason('mod_testcomponent2')); + // Throw an exception if the wrong type of provider is given. + $this->expectException(\coding_exception::class); + $string = $manager->get_null_provider_reason('mod_testcomponent'); + } }