mirror of
https://github.com/getgrav/grav-plugin-admin.git
synced 2025-10-30 18:06:16 +01:00
Fix #821 issue in saving a page to a new language when the filename does not contain the filename yet.
Also extract determineFilenameIncludingLanguage() method and add corresponding test.
This commit is contained in:
@@ -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
|
||||
*
|
||||
|
||||
41
tests/unit/classes/controllerTest.php
Normal file
41
tests/unit/classes/controllerTest.php
Normal file
@@ -0,0 +1,41 @@
|
||||
<?php
|
||||
|
||||
namespace Grav\Plugin;
|
||||
|
||||
/**
|
||||
* Class ControllerTest
|
||||
*/
|
||||
class ControllerTest extends \Codeception\TestCase\Test
|
||||
{
|
||||
protected $controller;
|
||||
|
||||
|
||||
protected function _before()
|
||||
{
|
||||
require_once(__DIR__ . '/../../../classes/controller.php');
|
||||
$this->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));
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user