From 426bca739f41d1ada13f8a71968276383252dc09 Mon Sep 17 00:00:00 2001 From: Demian Katz <demian.katz@villanova.edu> Date: Thu, 30 Jan 2014 13:41:21 -0500 Subject: [PATCH] Added @parent_ini feature. --- .../I18n/Translator/Loader/ExtendedIni.php | 21 ++++++++- .../tests/fixtures/language/base/child1.ini | 2 + .../tests/fixtures/language/base/child2.ini | 2 + .../fixtures/language/base/self-parent.ini | 2 + .../Translator/Loader/ExtendedIniTest.php | 44 +++++++++++++++++++ 5 files changed, 70 insertions(+), 1 deletion(-) create mode 100644 module/VuFind/tests/fixtures/language/base/child1.ini create mode 100644 module/VuFind/tests/fixtures/language/base/child2.ini create mode 100644 module/VuFind/tests/fixtures/language/base/self-parent.ini diff --git a/module/VuFind/src/VuFind/I18n/Translator/Loader/ExtendedIni.php b/module/VuFind/src/VuFind/I18n/Translator/Loader/ExtendedIni.php index bd5c631eb92..4c6f922b7cc 100644 --- a/module/VuFind/src/VuFind/I18n/Translator/Loader/ExtendedIni.php +++ b/module/VuFind/src/VuFind/I18n/Translator/Loader/ExtendedIni.php @@ -159,7 +159,26 @@ class ExtendedIni implements FileLoaderInterface if ($data === false) { throw new InvalidArgumentException("Ini file '{$filename}' not found"); } - return $data; + + // Load parent data, if necessary: + return $this->loadParentData($data); + } + + /** + * Support method for loadLanguageFile: retrieve parent data. + * + * @param TextDomain $data TextDomain to populate with parent information. + * + * @return TextDomain + */ + protected function loadParentData($data) + { + if (!isset($data['@parent_ini'])) { + return $data; + } + $parent = $this->loadLanguageFile($data['@parent_ini']); + $parent->merge($data); + return $parent; } /** diff --git a/module/VuFind/tests/fixtures/language/base/child1.ini b/module/VuFind/tests/fixtures/language/base/child1.ini new file mode 100644 index 00000000000..9ec420aee08 --- /dev/null +++ b/module/VuFind/tests/fixtures/language/base/child1.ini @@ -0,0 +1,2 @@ +@parent_ini = "fake.ini" +test2 = "test 2" \ No newline at end of file diff --git a/module/VuFind/tests/fixtures/language/base/child2.ini b/module/VuFind/tests/fixtures/language/base/child2.ini new file mode 100644 index 00000000000..07c80798314 --- /dev/null +++ b/module/VuFind/tests/fixtures/language/base/child2.ini @@ -0,0 +1,2 @@ +@parent_ini = "child1.ini" +test1 = "test 1" \ No newline at end of file diff --git a/module/VuFind/tests/fixtures/language/base/self-parent.ini b/module/VuFind/tests/fixtures/language/base/self-parent.ini new file mode 100644 index 00000000000..2babc6e38cf --- /dev/null +++ b/module/VuFind/tests/fixtures/language/base/self-parent.ini @@ -0,0 +1,2 @@ +@parent_ini = "self-parent.ini" +string = "bad" \ No newline at end of file diff --git a/module/VuFind/tests/unit-tests/src/VuFindTest/I18n/Translator/Loader/ExtendedIniTest.php b/module/VuFind/tests/unit-tests/src/VuFindTest/I18n/Translator/Loader/ExtendedIniTest.php index c229eb24525..3ea6e2ec610 100644 --- a/module/VuFind/tests/unit-tests/src/VuFindTest/I18n/Translator/Loader/ExtendedIniTest.php +++ b/module/VuFind/tests/unit-tests/src/VuFindTest/I18n/Translator/Loader/ExtendedIniTest.php @@ -108,6 +108,50 @@ class ExtendedIniTest extends \VuFindTest\Unit\TestCase ); } + /** + * Test file with self as parent. + * + * @return void + */ + public function testSelfAsParent() + { + $pathStack = array( + realpath(__DIR__ . '/../../../../../../fixtures/language/base'), + ); + $loader = new ExtendedIni($pathStack); + $result = $loader->load('self-parent', null); + $this->assertEquals( + array( + '@parent_ini' => 'self-parent.ini', + 'string' => 'bad', + ), + (array)$result + ); + } + + /** + * Test file with a chain of parents. + * + * @return void + */ + public function testParentChain() + { + $pathStack = array( + realpath(__DIR__ . '/../../../../../../fixtures/language/base'), + ); + $loader = new ExtendedIni($pathStack); + $result = $loader->load('child2', null); + $this->assertEquals( + array( + '@parent_ini' => 'child1.ini', + 'test1' => 'test 1', + 'test2' => 'test 2', + 'test3' => 'test three', + ), + (array)$result + ); + } + /** * Test missing path stack. * -- GitLab