diff --git a/blog/classes/external/get_access_information.php b/blog/classes/external/get_access_information.php new file mode 100644 index 00000000000..b619b0d1f80 --- /dev/null +++ b/blog/classes/external/get_access_information.php @@ -0,0 +1,89 @@ +. + +namespace core_blog\external; + +use context_system; +use core_external\external_api; +use core_external\external_function_parameters; +use core_external\external_single_structure; +use core_external\external_value; +use core_external\external_warnings; + + +/** + * External blog API implementation + * + * @package core_blog + * @copyright 2024 Juan Leyva + * @category external + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + */ +class get_access_information extends external_api { + + /** + * Returns description of method parameters. + * + * @return external_function_parameters. + * @since Moodle 4.4 + */ + public static function execute_parameters(): external_function_parameters { + return new external_function_parameters([]); + } + + /** + * Convenience function to retrieve some permissions information for the blogs system. + * + * @return array The access information + * @since Moodle 4.4 + */ + public static function execute(): array { + + $context = context_system::instance(); + self::validate_context($context); + + return [ + 'canview' => has_capability('moodle/blog:view', $context), + 'cansearch' => has_capability('moodle/blog:search', $context), + 'canviewdrafts' => has_capability('moodle/blog:viewdrafts', $context), + 'cancreate' => has_capability('moodle/blog:create', $context), + 'canmanageentries' => has_capability('moodle/blog:manageentries', $context), + 'canmanageexternal' => has_capability('moodle/blog:manageexternal', $context), + 'warnings' => [], + ]; + } + + /** + * Returns description of method result value. + * + * @return external_single_structure. + * @since Moodle 4.4 + */ + public static function execute_returns(): external_single_structure { + + return new external_single_structure( + [ + 'canview' => new external_value(PARAM_BOOL, 'Whether the user can view blogs'), + 'cansearch' => new external_value(PARAM_BOOL, 'Whether the user can search blogs'), + 'canviewdrafts' => new external_value(PARAM_BOOL, 'Whether the user can view drafts'), + 'cancreate' => new external_value(PARAM_BOOL, 'Whether the user can create blog entries'), + 'canmanageentries' => new external_value(PARAM_BOOL, 'Whether the user can manage blog entries'), + 'canmanageexternal' => new external_value(PARAM_BOOL, 'Whether the user can manage external blogs'), + 'warnings' => new external_warnings(), + ] + ); + } +} diff --git a/blog/tests/external/external_test.php b/blog/tests/external/external_test.php index 04feb2e44a4..7e6f7f23bad 100644 --- a/blog/tests/external/external_test.php +++ b/blog/tests/external/external_test.php @@ -641,4 +641,35 @@ class external_test extends \advanced_testcase { $this->assertEventContextNotUsed($event); $this->assertNotEmpty($event->get_name()); } + + /** + * Test get_access_information + */ + public function test_get_access_information() { + global $CFG; + + $this->setAdminUser(); + $result = get_access_information::execute(); + $result = external_api::clean_returnvalue(get_access_information::execute_returns(), $result); + + $this->assertTrue($result['canview']); + $this->assertTrue($result['cansearch']); + $this->assertTrue($result['canviewdrafts']); + $this->assertTrue($result['cancreate']); + $this->assertTrue($result['canmanageentries']); + $this->assertTrue($result['canmanageexternal']); + $this->assertEmpty($result['warnings']); + + $this->setUser($this->userid); + $result = get_access_information::execute(); + $result = external_api::clean_returnvalue(get_access_information::execute_returns(), $result); + + $this->assertTrue($result['canview']); + $this->assertTrue($result['cansearch']); + $this->assertFalse($result['canviewdrafts']); + $this->assertTrue($result['cancreate']); + $this->assertFalse($result['canmanageentries']); + $this->assertTrue($result['canmanageexternal']); + $this->assertEmpty($result['warnings']); + } } diff --git a/lib/db/services.php b/lib/db/services.php index a86c651d1f7..f79046fd489 100644 --- a/lib/db/services.php +++ b/lib/db/services.php @@ -151,6 +151,12 @@ $functions = array( 'ajax' => true, 'loginrequired' => false, ), + 'core_blog_get_access_information' => [ + 'classname' => '\core_blog\external\get_access_information', + 'description' => 'Retrieves permission information for the current user.', + 'type' => 'read', + 'services' => [MOODLE_OFFICIAL_MOBILE_SERVICE], + ], 'core_calendar_get_calendar_monthly_view' => array( 'classname' => 'core_calendar_external', 'methodname' => 'get_calendar_monthly_view',