From 11e5003bd6217b8f6eaab787f0433377bbedf4e7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20Mudr=C3=A1k?= Date: Thu, 24 Sep 2020 13:41:59 +0200 Subject: [PATCH] MDL-69772 lang: Ignore misconfigured allcountrycodes filter If the allcountrycodes filter contains only invalid values, ignore the whole filter setting and make get_list_of_countries() return the full list of all known countries, rather than empty list. --- lib/classes/string_manager_standard.php | 6 ++- lib/tests/string_manager_standard_test.php | 51 ++++++++++++++++++++++ 2 files changed, 56 insertions(+), 1 deletion(-) diff --git a/lib/classes/string_manager_standard.php b/lib/classes/string_manager_standard.php index d34c09ea34c..1a3f36400c8 100644 --- a/lib/classes/string_manager_standard.php +++ b/lib/classes/string_manager_standard.php @@ -427,6 +427,7 @@ class core_string_manager_standard implements core_string_manager { $countries = $this->load_component_strings('core_countries', $lang); core_collator::asort($countries); + if (!$returnall and !empty($CFG->allcountrycodes)) { $enabled = explode(',', $CFG->allcountrycodes); $return = array(); @@ -435,7 +436,10 @@ class core_string_manager_standard implements core_string_manager { $return[$c] = $countries[$c]; } } - return $return; + + if (!empty($return)) { + return $return; + } } return $countries; diff --git a/lib/tests/string_manager_standard_test.php b/lib/tests/string_manager_standard_test.php index 54b48bbf034..aa73a0e6a9d 100644 --- a/lib/tests/string_manager_standard_test.php +++ b/lib/tests/string_manager_standard_test.php @@ -143,6 +143,57 @@ class core_string_manager_standard_testcase extends advanced_testcase { set_config('langlist', ''); get_string_manager(true); } + + /** + * Test {@see core_string_manager_standard::get_list_of_countries()} under different conditions. + */ + public function test_get_list_of_countries() { + + $this->resetAfterTest(); + $stringman = get_string_manager(); + + $countries = $stringman->get_list_of_countries(true); + $this->assertIsArray($countries); + $this->assertArrayHasKey('AU', $countries); + $this->assertArrayHasKey('BE', $countries); + $this->assertArrayHasKey('CZ', $countries); + $this->assertArrayHasKey('ES', $countries); + $this->assertGreaterThan(4, count($countries)); + + set_config('allcountrycodes', ''); + $countries = $stringman->get_list_of_countries(false); + $this->assertArrayHasKey('AU', $countries); + $this->assertArrayHasKey('BE', $countries); + $this->assertArrayHasKey('CZ', $countries); + $this->assertArrayHasKey('ES', $countries); + $this->assertGreaterThan(4, count($countries)); + + set_config('allcountrycodes', 'CZ,BE'); + $countries = $stringman->get_list_of_countries(true); + $this->assertArrayHasKey('AU', $countries); + $this->assertArrayHasKey('BE', $countries); + $this->assertArrayHasKey('CZ', $countries); + $this->assertArrayHasKey('ES', $countries); + $this->assertGreaterThan(4, count($countries)); + + $countries = $stringman->get_list_of_countries(false); + $this->assertEquals(2, count($countries)); + $this->assertArrayHasKey('BE', $countries); + $this->assertArrayHasKey('CZ', $countries); + + set_config('allcountrycodes', 'CZ,UVWXYZ'); + $countries = $stringman->get_list_of_countries(); + $this->assertArrayHasKey('CZ', $countries); + $this->assertEquals(1, count($countries)); + + set_config('allcountrycodes', 'UVWXYZ'); + $countries = $stringman->get_list_of_countries(); + $this->assertArrayHasKey('AU', $countries); + $this->assertArrayHasKey('BE', $countries); + $this->assertArrayHasKey('CZ', $countries); + $this->assertArrayHasKey('ES', $countries); + $this->assertGreaterThan(4, count($countries)); + } } /**