diff --git a/classes/controller.php b/classes/controller.php index 0c9b5548..cbe02428 100644 --- a/classes/controller.php +++ b/classes/controller.php @@ -2361,21 +2361,9 @@ class AdminController $file = $obj->file(); if ($file) { - $filename = substr($obj->name(), 0, -(strlen('.' . $language . '.md'))); + $filename = $this->determineFilenameIncludingLanguage($obj->name(), $language); - if (substr($filename, -3, 1) == '.') { - if (substr($filename, -2) == substr($language, 0, 2)) { - $filename = str_replace(substr($filename, -2), $language, $filename); - } - } elseif (substr($filename, -6, 1) == '.') { - if (substr($filename, -5) == substr($language, 0, 5)) { - $filename = str_replace(substr($filename, -5), $language, $filename); - } - } else { - $filename .= '.' . $language; - } - - $path = $obj->path() . DS . $filename . '.md'; + $path = $obj->path() . DS . $filename; $aFile = File::instance($path); $aFile->save(); @@ -2394,6 +2382,29 @@ class AdminController return true; } + /** + * The what should be the new filename when saving as a new language + * + * @param string $current_filename the current file name, including .md. Example: default.en.md + * @param string $language The new language it will be saved as. Example: 'it' or 'en-GB'. + * + * @return string The new filename. Example: 'default.it' + */ + public function determineFilenameIncludingLanguage($current_filename, $language) + { + $filename = substr($current_filename, 0, -(strlen('.md'))); + + if (substr($filename, -3, 1) == '.') { + $filename = str_replace(substr($filename, -2), $language, $filename); + } elseif (substr($filename, -6, 1) == '.') { + $filename = str_replace(substr($filename, -5), $language, $filename); + } else { + $filename .= '.' . $language; + } + + return $filename . '.md'; + } + /** * Determine if the user can edit media * diff --git a/tests/unit/classes/controllerTest.php b/tests/unit/classes/controllerTest.php new file mode 100644 index 00000000..329768ba --- /dev/null +++ b/tests/unit/classes/controllerTest.php @@ -0,0 +1,41 @@ +controller = new AdminController(); + } + + protected function _after() + { + + } + + public function testDetermineFilenameIncludingLanguage() + { + $language = 'en-GB'; + + $this->assertSame('testing.en-GB.md', $this->controller->determineFilenameIncludingLanguage('testing.md', $language)); + $this->assertSame('testing.en-GB.md', $this->controller->determineFilenameIncludingLanguage('testing.en.md', $language)); + $this->assertSame('testing.en-GB.md', $this->controller->determineFilenameIncludingLanguage('testing.it.md', $language)); + $this->assertSame('testing.en-GB.md', $this->controller->determineFilenameIncludingLanguage('testing.en-GB.md', $language)); + + $language = 'it'; + + $this->assertSame('testing.it.md', $this->controller->determineFilenameIncludingLanguage('testing.md', $language)); + $this->assertSame('testing.it.md', $this->controller->determineFilenameIncludingLanguage('testing.en.md', $language)); + $this->assertSame('testing.it.md', $this->controller->determineFilenameIncludingLanguage('testing.it.md', $language)); + $this->assertSame('testing.it.md', $this->controller->determineFilenameIncludingLanguage('testing.en-GB.md', $language)); + } +} +