Add taskSaveas() to save a page in a new language

This commit is contained in:
Flavio Copes
2015-08-19 17:28:39 +02:00
parent 8d2440d238
commit 616b896cfd

View File

@@ -16,6 +16,7 @@ use Grav\Common\Utils;
use Grav\Common\Backup\ZipBackup;
use Grav\Common\Markdown\Parsedown;
use Grav\Common\Markdown\ParsedownExtra;
use RocketTheme\Toolbox\File\File;
use RocketTheme\Toolbox\File\JsonFile;
use Symfony\Component\Yaml\Yaml;
@@ -1039,6 +1040,11 @@ class AdminController
return true;
}
/**
* Switch the content language. Optionally redirect to a different page.
*
* @return bool True if the action was performed.
*/
protected function taskSwitchlanguage() {
$language = $this->grav['uri']->param('lang');
$redirect = $this->grav['uri']->param('redirect') ? 'pages/' . $this->grav['uri']->param('redirect') : 'pages';
@@ -1053,6 +1059,53 @@ class AdminController
return true;
}
/**
* Save the current page in a different language. Automatically switches to that language.
*
* @return bool True if the action was performed.
*/
protected function taskSaveas() {
if (!$this->authoriseTask('save', $this->dataPermissions())) {
return;
}
// $reorder = false;
$data = $this->post;
$language = $data['lang'];
if ($language) {
$this->grav['session']->admin_lang = $language ?: 'en';
}
// /** @var Page\Pages $pages */
$pages = $this->grav['pages'];
$uri = $this->grav['uri'];
$obj = $this->admin->page($uri->route());
$this->preparePage($obj, false, $language);
$file = $obj->file();
if ($file) {
$filename = substr($obj->name(), 0, -(strlen($obj->extension())));
$path = $obj->path() . DS . $filename . '.' . $language .'.md';
$aFile = File::instance($path);
$aFile->save();
$aPage = new Page\Page();
$aPage->init(new \SplFileInfo($path), $language .'.md');
$aPage->header($obj->header());
$aPage->rawMarkdown($obj->rawMarkdown());
$aPage->validate();
$aPage->filter();
$aPage->save();
}
$this->admin->setMessage($this->admin->translate('PLUGIN_ADMIN.SUCCESSFULLY_SWITCHED_LANGUAGE'), 'info');
$this->setRedirect($this->view . $aPage->route());
return true;
}
/**
* Prepare and return POST data.
*
@@ -1153,7 +1206,7 @@ class AdminController
* @param \Grav\Common\Page\Page $page
* @param bool $clean_header
*/
protected function preparePage(\Grav\Common\Page\Page $page, $clean_header = false)
protected function preparePage(\Grav\Common\Page\Page $page, $clean_header = false, $language = null)
{
$input = $this->post;
@@ -1167,9 +1220,13 @@ class AdminController
if (isset($input['type']) && !empty($input['type'])) {
$type = (string) strtolower($input['type']);
$name = preg_replace('|.*/|', '', $type);
$language = $this->grav['language'];
if ($language->enabled()) {
$name .= '.' . $language->getLanguage();
if ($language) {
$name .= '.' . $language;
} else {
$language = $this->grav['language'];
if ($language->enabled()) {
$name .= '.' . $language->getLanguage();
}
}
$name .= '.md';
$page->name($name);