From 59ebca88bbda5092537c6aeb5a67d824d3f7fd11 Mon Sep 17 00:00:00 2001 From: Dani Palou Date: Wed, 21 Aug 2024 11:04:41 +0200 Subject: [PATCH] MDL-82844 ws: Return home page url in get_site_info WebService --- .upgradenotes/MDL-82844-2024082109131896.yml | 7 ++++ webservice/externallib.php | 5 +++ webservice/tests/externallib_test.php | 41 ++++++++++++++++++++ 3 files changed, 53 insertions(+) create mode 100644 .upgradenotes/MDL-82844-2024082109131896.yml diff --git a/.upgradenotes/MDL-82844-2024082109131896.yml b/.upgradenotes/MDL-82844-2024082109131896.yml new file mode 100644 index 00000000000..e33ff9c628e --- /dev/null +++ b/.upgradenotes/MDL-82844-2024082109131896.yml @@ -0,0 +1,7 @@ +issueNumber: MDL-82844 +notes: + core_external: + - message: >- + The external function core_webservice_external::get_site_info now + returns the default home page URL when needed. + type: changed diff --git a/webservice/externallib.php b/webservice/externallib.php index b9389ff58b8..e944b04e644 100644 --- a/webservice/externallib.php +++ b/webservice/externallib.php @@ -194,6 +194,9 @@ class core_webservice_external extends \core_external\external_api { // User home page. $siteinfo['userhomepage'] = get_home_page(); + if ($siteinfo['userhomepage'] === HOMEPAGE_URL) { + $siteinfo['userhomepageurl'] = (string) get_default_home_page_url(); + } // Calendar. $siteinfo['sitecalendartype'] = $CFG->calendartype; @@ -280,6 +283,8 @@ class core_webservice_external extends \core_external\external_api { 'userhomepage' => new external_value(PARAM_INT, 'the default home page for the user: 0 for the site home, 1 for dashboard', VALUE_OPTIONAL), + 'userhomepageurl' => new external_value(PARAM_LOCALURL, + 'The URL of default home page when userhomepage is 4 (HOMEPAGE_URL).', VALUE_OPTIONAL), 'userprivateaccesskey' => new external_value(PARAM_ALPHANUM, 'Private user access key for fetching files.', VALUE_OPTIONAL), 'siteid' => new external_value(PARAM_INT, 'Site course ID', VALUE_OPTIONAL), diff --git a/webservice/tests/externallib_test.php b/webservice/tests/externallib_test.php index 3b41439d389..4466a69f481 100644 --- a/webservice/tests/externallib_test.php +++ b/webservice/tests/externallib_test.php @@ -30,6 +30,7 @@ require_once($CFG->dirroot . '/webservice/tests/helpers.php'); * External course functions unit tests * * @package core_webservice + * @covers \core_webservice_external::get_site_info * @category external * @copyright 2012 Paul Charsley * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later @@ -44,6 +45,9 @@ final class externallib_test extends externallib_advanced_testcase { set_config('enablewebservices', '1'); } + /** + * Test get_site_info. + */ public function test_get_site_info(): void { global $DB, $USER, $CFG, $PAGE; @@ -281,4 +285,41 @@ final class externallib_test extends externallib_advanced_testcase { $this->assertEquals('core_user_get_users', $result['functions'][0]['name']); } + + /** + * Test get_site_info returns the default home page URL when needed. + */ + public function test_get_site_info_default_home_page(): void { + global $CFG; + + $this->resetAfterTest(); + $this->setAdminUser(); + + // Site configuration. + $CFG->defaulthomepage = HOMEPAGE_MY; + + $result = \core_webservice_external::get_site_info(); + $result = external_api::clean_returnvalue(\core_webservice_external::get_site_info_returns(), $result); + $this->assertEquals(HOMEPAGE_MY, $result['userhomepage']); + $this->assertArrayNotHasKey('userhomepageurl', $result); + + $CFG->defaulthomepage = "{$CFG->wwwroot}/home"; + + $result = \core_webservice_external::get_site_info(); + $result = external_api::clean_returnvalue(\core_webservice_external::get_site_info_returns(), $result); + $this->assertEquals(HOMEPAGE_URL, $result['userhomepage']); + $this->assertEquals($CFG->defaulthomepage, $result['userhomepageurl']); + + // User preference. + $CFG->defaulthomepage = HOMEPAGE_USER; + + $userpreference = "{$CFG->wwwroot}/about"; + set_user_preference('user_home_page_preference', $userpreference); + + $result = \core_webservice_external::get_site_info(); + $result = external_api::clean_returnvalue(\core_webservice_external::get_site_info_returns(), $result); + $this->assertEquals(HOMEPAGE_URL, $result['userhomepage']); + $this->assertEquals($userpreference, $result['userhomepageurl']); + } + }