mirror of
https://github.com/getgrav/grav-plugin-admin.git
synced 2026-05-07 12:07:33 +02:00
Merge pull request #74 from getgrav/feature/translate-admin
Merge the feature/translate branch. - Adds translation of the whole admin interface, blueprints included. - Adds editing of content in multiple languages.
This commit is contained in:
10
admin.php
10
admin.php
@@ -291,6 +291,7 @@ class AdminPlugin extends Plugin
|
||||
protected function initializeAdmin()
|
||||
{
|
||||
$this->enable([
|
||||
'onTwigExtensions' => ['onTwigExtensions', 1000],
|
||||
'onPagesInitialized' => ['onPagesInitialized', 1000],
|
||||
'onTwigTemplatePaths' => ['onTwigTemplatePaths', 1000],
|
||||
'onTwigSiteVariables' => ['onTwigSiteVariables', 1000],
|
||||
@@ -335,4 +336,13 @@ class AdminPlugin extends Plugin
|
||||
// Get theme for admin
|
||||
$this->theme = $this->config->get('plugins.admin.theme', 'grav');
|
||||
}
|
||||
|
||||
/**
|
||||
* Add Twig Extensions
|
||||
*/
|
||||
public function onTwigExtensions()
|
||||
{
|
||||
require_once(__DIR__.'/twig/AdminTwigExtension.php');
|
||||
$this->grav['twig']->twig->addExtension(new AdminTwigExtension());
|
||||
}
|
||||
}
|
||||
|
||||
@@ -69,6 +69,11 @@ class Admin
|
||||
*/
|
||||
public $user;
|
||||
|
||||
/**
|
||||
* @var Lang
|
||||
*/
|
||||
protected $lang;
|
||||
|
||||
/**
|
||||
* @var Grav\Common\GPM\GPM
|
||||
*/
|
||||
@@ -88,10 +93,28 @@ class Admin
|
||||
$this->base = $base;
|
||||
$this->location = $location;
|
||||
$this->route = $route;
|
||||
|
||||
$this->uri = $this->grav['uri'];
|
||||
$this->session = $this->grav['session'];
|
||||
$this->user = $this->grav['user'];
|
||||
|
||||
$language = $this->grav['language'];
|
||||
if ($language->enabled()) {
|
||||
$this->multilang = true;
|
||||
$this->languages_enabled = $this->grav['config']->get('system.languages.supported', []);
|
||||
|
||||
//Set the currently active language for the admin
|
||||
$language = $this->grav['uri']->param('lang');
|
||||
if (!$language) {
|
||||
$language = $this->session->admin_lang;
|
||||
}
|
||||
$this->grav['language']->setActive($language ?: 'en');
|
||||
|
||||
|
||||
} else {
|
||||
$this->grav['language']->setActive('en');
|
||||
$this->multilang = false;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -155,9 +178,7 @@ class Admin
|
||||
/** @var Grav $grav */
|
||||
$grav = $this->grav;
|
||||
|
||||
$l = $this->grav['language'];
|
||||
|
||||
$this->setMessage($l->translate('LOGIN_LOGGED_IN'), 'info');
|
||||
$this->setMessage($this->grav['language']->translate('PLUGIN_ADMIN.LOGIN_LOGGED_IN', [$this->user->language]), 'info');
|
||||
|
||||
$redirect_route = $this->uri->route();
|
||||
$grav->redirect($redirect_route);
|
||||
@@ -573,6 +594,11 @@ class Admin
|
||||
return $page;
|
||||
}
|
||||
|
||||
/**
|
||||
* Return the languages available in the admin
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public static function adminLanguages()
|
||||
{
|
||||
$languages = [];
|
||||
@@ -583,6 +609,22 @@ class Admin
|
||||
return $languages;
|
||||
}
|
||||
|
||||
/**
|
||||
* Return the languages available in the site
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public static function siteLanguages()
|
||||
{
|
||||
$languages = [];
|
||||
$lang_data = Grav::instance()['config']->get('system.languages.supported', []);
|
||||
|
||||
foreach ($lang_data as $index => $lang) {
|
||||
$languages[$lang] = LanguageCodes::getNativeName($lang);
|
||||
}
|
||||
return $languages;
|
||||
}
|
||||
|
||||
/**
|
||||
* Static helper method to return current route.
|
||||
*
|
||||
@@ -609,6 +651,11 @@ class Admin
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Renders phpinfo
|
||||
*
|
||||
* @return string The phpinfo() output
|
||||
*/
|
||||
function phpinfo() {
|
||||
ob_start();
|
||||
phpinfo();
|
||||
@@ -618,4 +665,51 @@ class Admin
|
||||
$pinfo = preg_replace( '%^.*<body>(.*)</body>.*$%ms','$1',$pinfo);
|
||||
return $pinfo;
|
||||
}
|
||||
|
||||
/**
|
||||
* Translate a string to the user-defined language
|
||||
*
|
||||
* @param $string the string to translate
|
||||
*/
|
||||
public function translate($string) {
|
||||
return $this->_translate($string, [$this->grav['user']->authenticated ? $this->grav['user']->language : 'en']);
|
||||
}
|
||||
|
||||
public function _translate($args, Array $languages = null, $array_support = false, $html_out = false)
|
||||
{
|
||||
if (is_array($args)) {
|
||||
$lookup = array_shift($args);
|
||||
} else {
|
||||
$lookup = $args;
|
||||
$args = [];
|
||||
}
|
||||
|
||||
if ($lookup) {
|
||||
if (empty($languages)) {
|
||||
if ($this->grav['config']->get('system.languages.translations_fallback', true)) {
|
||||
$languages = $this->grav['language']->getFallbackLanguages();
|
||||
} else {
|
||||
$languages = (array)$this->grav['language']->getDefault();
|
||||
}
|
||||
} else {
|
||||
$languages = ['en'];
|
||||
}
|
||||
} else {
|
||||
$languages = ['en'];
|
||||
}
|
||||
|
||||
foreach ((array)$languages as $lang) {
|
||||
$translation = $this->grav['language']->getTranslation($lang, $lookup, $array_support);
|
||||
|
||||
if ($translation) {
|
||||
if (count($args) >= 1) {
|
||||
return vsprintf($translation, $args);
|
||||
} else {
|
||||
return $translation;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return $lookup;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -129,12 +129,10 @@ class AdminController
|
||||
*/
|
||||
protected function taskLogin()
|
||||
{
|
||||
$l = $this->grav['language'];
|
||||
|
||||
if ($this->admin->authenticate($this->post)) {
|
||||
// should never reach here, redirects first
|
||||
} else {
|
||||
$this->admin->setMessage($l->translate('LOGIN_FAILED'), 'error');
|
||||
$this->admin->setMessage($this->admin->translate('PLUGIN_ADMIN.LOGIN_FAILED'), 'error');
|
||||
}
|
||||
|
||||
return true;
|
||||
@@ -147,10 +145,8 @@ class AdminController
|
||||
*/
|
||||
protected function taskLogout()
|
||||
{
|
||||
$l = $this->grav['language'];
|
||||
|
||||
$this->admin->session()->invalidate()->start();
|
||||
$this->admin->setMessage($l->translate('LOGGED_OUT'), 'info');
|
||||
$this->admin->setMessage($this->admin->translate('PLUGIN_ADMIN.LOGGED_OUT'), 'info');
|
||||
$this->setRedirect('/logout');
|
||||
|
||||
return true;
|
||||
@@ -163,27 +159,25 @@ class AdminController
|
||||
*/
|
||||
protected function taskForgot()
|
||||
{
|
||||
$l = $this->grav['language'];
|
||||
|
||||
$data = $this->post;
|
||||
|
||||
$username = isset($data['username']) ? $data['username'] : '';
|
||||
$user = !empty($username) ? User::load($username) : null;
|
||||
|
||||
if (!isset($this->grav['Email'])) {
|
||||
$this->admin->setMessage($l->translate('FORGOT_EMAIL_NOT_CONFIGURED'), 'error');
|
||||
$this->admin->setMessage($this->admin->translate('PLUGIN_ADMIN.FORGOT_EMAIL_NOT_CONFIGURED'), 'error');
|
||||
$this->setRedirect('/');
|
||||
return true;
|
||||
}
|
||||
|
||||
if (!$user || !$user->exists()) {
|
||||
$this->admin->setMessage($l->translate(['FORGOT_USERNAME_DOES_NOT_EXIST', $username]), 'error');
|
||||
$this->admin->setMessage($this->admin->translate(['PLUGIN_ADMIN.FORGOT_USERNAME_DOES_NOT_EXIST', $username]), 'error');
|
||||
$this->setRedirect('/forgot');
|
||||
return true;
|
||||
}
|
||||
|
||||
if (empty($user->email)) {
|
||||
$this->admin->setMessage($l->translate(['FORGOT_CANNOT_RESET_EMAIL_NO_EMAIL', $username]), 'error');
|
||||
$this->admin->setMessage($this->admin->translate(['PLUGIN_ADMIN.FORGOT_CANNOT_RESET_EMAIL_NO_EMAIL', $username]), 'error');
|
||||
$this->setRedirect('/forgot');
|
||||
return true;
|
||||
}
|
||||
@@ -202,8 +196,8 @@ class AdminController
|
||||
$from = $this->grav['config']->get('plugins.email.from', 'noreply@getgrav.org');
|
||||
$to = $user->email;
|
||||
|
||||
$subject = $l->translate(['FORGOT_EMAIL_SUBJECT', $sitename]);
|
||||
$content = $l->translate(['FORGOT_EMAIL_BODY', $fullname, $reset_link, $author, $sitename]);
|
||||
$subject = $this->admin->translate(['PLUGIN_ADMIN.FORGOT_EMAIL_SUBJECT', $sitename]);
|
||||
$content = $this->admin->translate(['PLUGIN_ADMIN.FORGOT_EMAIL_BODY', $fullname, $reset_link, $author, $sitename]);
|
||||
|
||||
$body = $this->grav['twig']->processTemplate('email/base.html.twig', ['content' => $content]);
|
||||
|
||||
@@ -214,9 +208,9 @@ class AdminController
|
||||
$sent = $this->grav['Email']->send($message);
|
||||
|
||||
if ($sent < 1) {
|
||||
$this->admin->setMessage($l->translate('FORGOT_FAILED_TO_EMAIL'), 'error');
|
||||
$this->admin->setMessage($this->admin->translate('PLUGIN_ADMIN.FORGOT_FAILED_TO_EMAIL'), 'error');
|
||||
} else {
|
||||
$this->admin->setMessage($l->translate(['FORGOT_INSTRUCTIONS_SENT_VIA_EMAIL', $to]), 'info');
|
||||
$this->admin->setMessage($this->admin->translate(['PLUGIN_ADMIN.FORGOT_INSTRUCTIONS_SENT_VIA_EMAIL', $to]), 'info');
|
||||
}
|
||||
|
||||
$this->setRedirect('/');
|
||||
@@ -230,8 +224,6 @@ class AdminController
|
||||
*/
|
||||
public function taskReset()
|
||||
{
|
||||
$l = $this->grav['language'];
|
||||
|
||||
$data = $this->post;
|
||||
|
||||
if (isset($data['password'])) {
|
||||
@@ -245,7 +237,7 @@ class AdminController
|
||||
|
||||
if ($good_token === $token) {
|
||||
if (time() > $expire) {
|
||||
$this->admin->setMessage($l->translate('RESET_LINK_EXPIRED'), 'error');
|
||||
$this->admin->setMessage($this->admin->translate('PLUGIN_ADMIN.RESET_LINK_EXPIRED'), 'error');
|
||||
$this->setRedirect('/forgot');
|
||||
return true;
|
||||
}
|
||||
@@ -258,13 +250,13 @@ class AdminController
|
||||
$user->filter();
|
||||
$user->save();
|
||||
|
||||
$this->admin->setMessage($l->translate('RESET_PASSWORD_RESET'), 'info');
|
||||
$this->admin->setMessage($this->admin->translate('PLUGIN_ADMIN.RESET_PASSWORD_RESET'), 'info');
|
||||
$this->setRedirect('/');
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
$this->admin->setMessage($l->translate('RESET_INVALID_LINK'), 'error');
|
||||
$this->admin->setMessage($this->admin->translate('PLUGIN_ADMIN.RESET_INVALID_LINK'), 'error');
|
||||
$this->setRedirect('/forgot');
|
||||
return true;
|
||||
|
||||
@@ -273,7 +265,7 @@ class AdminController
|
||||
$token = $this->grav['uri']->param('token');
|
||||
|
||||
if (empty($user) || empty($token)) {
|
||||
$this->admin->setMessage($l->translate('RESET_INVALID_LINK'), 'error');
|
||||
$this->admin->setMessage($this->admin->translate('PLUGIN_ADMIN.RESET_INVALID_LINK'), 'error');
|
||||
$this->setRedirect('/forgot');
|
||||
return true;
|
||||
}
|
||||
@@ -306,9 +298,9 @@ class AdminController
|
||||
|
||||
$results = Cache::clearCache($clear);
|
||||
if (count($results) > 0) {
|
||||
$this->admin->json_response = ['status' => 'success', 'message' => 'Cache cleared <br />Method: ' . $clear . ''];
|
||||
$this->admin->json_response = ['status' => 'success', 'message' => $this->admin->translate('PLUGIN_ADMIN.CACHE_CLEARED') . ' <br />' . $this->admin->translate('PLUGIN_ADMIN.METHOD') . ': ' . $clear . ''];
|
||||
} else {
|
||||
$this->admin->json_response = ['status' => 'error', 'message' => 'Error clearing cache'];
|
||||
$this->admin->json_response = ['status' => 'error', 'message' => $this->admin->translate('PLUGIN_ADMIN.ERROR_CLEARING_CACHE')];
|
||||
}
|
||||
|
||||
return true;
|
||||
@@ -338,7 +330,7 @@ class AdminController
|
||||
} catch (\Exception $e) {
|
||||
$this->admin->json_response = [
|
||||
'status' => 'error',
|
||||
'message' => 'An error occured. '. $e->getMessage()
|
||||
'message' => $this->admin->translate('PLUGIN_ADMIN.AN_ERROR_OCCURRED') . '. '. $e->getMessage()
|
||||
];
|
||||
|
||||
return true;
|
||||
@@ -355,7 +347,7 @@ class AdminController
|
||||
|
||||
$this->admin->json_response = [
|
||||
'status' => 'success',
|
||||
'message' => 'Your backup is ready for download. <a href="'.$url.'" class="button">Download backup</a>',
|
||||
'message' => $this->admin->translate('PLUGIN_ADMIN.YOUR_BACKUP_IS_READY_FOR_DOWNLOAD') . '. <a href="'.$url.'" class="button">' . $this->admin->translate('PLUGIN_ADMIN.DOWNLOAD_BACKUP') .'</a>',
|
||||
'toastr' => [
|
||||
'timeOut' => 0,
|
||||
'closeButton' => true
|
||||
@@ -412,7 +404,7 @@ class AdminController
|
||||
|
||||
$this->admin->json_response = [
|
||||
'status' => 'success',
|
||||
'message' => 'Pages filtered',
|
||||
'message' => $this->admin->translate('PLUGIN_ADMIN.PAGES_FILTERED'),
|
||||
'results' => $results
|
||||
];
|
||||
$this->admin->collection = $collection;
|
||||
@@ -432,7 +424,7 @@ class AdminController
|
||||
$page = $this->admin->page(true);
|
||||
|
||||
if (!$page) {
|
||||
$this->admin->json_response = ['status' => 'error', 'message' => 'No Page found'];
|
||||
$this->admin->json_response = ['status' => 'error', 'message' => $this->admin->translate('PLUGIN_ADMIN.NO_PAGE_FOUND')];
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -460,7 +452,7 @@ class AdminController
|
||||
$config = $this->grav['config'];
|
||||
|
||||
if (!isset($_FILES['file']['error']) || is_array($_FILES['file']['error'])) {
|
||||
$this->admin->json_response = ['status' => 'error', 'message' => 'Invalid Parameters'];
|
||||
$this->admin->json_response = ['status' => 'error', 'message' => $this->admin->translate('PLUGIN_ADMIN.INVALID_PARAMETERS')];
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -469,21 +461,21 @@ class AdminController
|
||||
case UPLOAD_ERR_OK:
|
||||
break;
|
||||
case UPLOAD_ERR_NO_FILE:
|
||||
$this->admin->json_response = ['status' => 'error', 'message' => 'No files sent'];
|
||||
$this->admin->json_response = ['status' => 'error', 'message' => $this->admin->translate('PLUGIN_ADMIN.NO_FILES_SENT')];
|
||||
return;
|
||||
case UPLOAD_ERR_INI_SIZE:
|
||||
case UPLOAD_ERR_FORM_SIZE:
|
||||
$this->admin->json_response = ['status' => 'error', 'message' => 'Exceeded filesize limit.'];
|
||||
$this->admin->json_response = ['status' => 'error', 'message' => $this->admin->translate('PLUGIN_ADMIN.EXCEEDED_FILESIZE_LIMIT')];
|
||||
return;
|
||||
default:
|
||||
$this->admin->json_response = ['status' => 'error', 'message' => 'Unkown errors'];
|
||||
$this->admin->json_response = ['status' => 'error', 'message' => $this->admin->translate('PLUGIN_ADMIN.UNKNOWN_ERRORS')];
|
||||
return;
|
||||
}
|
||||
|
||||
$grav_limit = $config->get('system.media.upload_limit', 0);
|
||||
// You should also check filesize here.
|
||||
if ($grav_limit > 0 && $_FILES['file']['size'] > grav_limit) {
|
||||
$this->admin->json_response = ['status' => 'error', 'message' => 'Exceeded Grav filesize limit.'];
|
||||
$this->admin->json_response = ['status' => 'error', 'message' => $this->admin->translate('PLUGIN_ADMIN.EXCEEDED_GRAV_FILESIZE_LIMIT')];
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -494,18 +486,18 @@ class AdminController
|
||||
|
||||
// If not a supported type, return
|
||||
if (!$config->get("media.{$fileExt}")) {
|
||||
$this->admin->json_response = ['status' => 'error', 'message' => 'Unsupported file type: '.$fileExt];
|
||||
$this->admin->json_response = ['status' => 'error', 'message' => $this->admin->translate('PLUGIN_ADMIN.UNSUPPORTED_FILE_TYPE') . ': '.$fileExt];
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
// Upload it
|
||||
if (!move_uploaded_file($_FILES['file']['tmp_name'], sprintf('%s/%s', $page->path(), $_FILES['file']['name']))) {
|
||||
$this->admin->json_response = ['status' => 'error', 'message' => 'Failed to move uploaded file.'];
|
||||
$this->admin->json_response = ['status' => 'error', 'message' => $this->admin->translate('PLUGIN_ADMIN.FAILED_TO_MOVE_UPLOADED_FILE')];
|
||||
return;
|
||||
}
|
||||
|
||||
$this->admin->json_response = ['status' => 'success', 'message' => 'File uploaded successfully'];
|
||||
$this->admin->json_response = ['status' => 'success', 'message' => $this->admin->translate('PLUGIN_ADMIN.FILE_UPLOADED_SUCCESSFULLY')];
|
||||
|
||||
return;
|
||||
}
|
||||
@@ -524,7 +516,7 @@ class AdminController
|
||||
$page = $this->admin->page(true);
|
||||
|
||||
if (!$page) {
|
||||
$this->admin->json_response = ['status' => 'error', 'message' => 'No Page found'];
|
||||
$this->admin->json_response = ['status' => 'error', 'message' => $this->admin->translate('PLUGIN_ADMIN.NO_PAGE_FOUND')];
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -534,15 +526,15 @@ class AdminController
|
||||
|
||||
if (file_exists($targetPath)) {
|
||||
if (unlink($targetPath)) {
|
||||
$this->admin->json_response = ['status' => 'success', 'message' => 'File deleted: '.$filename];
|
||||
$this->admin->json_response = ['status' => 'success', 'message' => $this->admin->translate('PLUGIN_ADMIN.FILE_DELETED') . ': '.$filename];
|
||||
} else {
|
||||
$this->admin->json_response = ['status' => 'error', 'message' => 'File could not be deleted: '.$filename];
|
||||
$this->admin->json_response = ['status' => 'error', 'message' => $this->admin->translate('PLUGIN_ADMIN.FILE_COULD_NOT_BE_DELETED') . ': '.$filename];
|
||||
}
|
||||
} else {
|
||||
$this->admin->json_response = ['status' => 'error', 'message' => 'File not found: '.$filename];
|
||||
$this->admin->json_response = ['status' => 'error', 'message' => $this->admin->translate('PLUGIN_ADMIN.FILE_NOT_FOUND') . ': '.$filename];
|
||||
}
|
||||
} else {
|
||||
$this->admin->json_response = ['status' => 'error', 'message' => 'No file found'];
|
||||
$this->admin->json_response = ['status' => 'error', 'message' => $this->admin->translate('PLUGIN_ADMIN.NO_FILE_FOUND')];
|
||||
}
|
||||
|
||||
return true;
|
||||
@@ -561,7 +553,7 @@ class AdminController
|
||||
$page = $this->admin->page(true);
|
||||
|
||||
if (!$page) {
|
||||
$this->admin->json_response = ['status' => 'error', 'message' => 'No Page found'];
|
||||
$this->admin->json_response = ['status' => 'error', 'message' => $this->admin->translate('PLUGIN_ADMIN.NO_PAGE_FOUND')];
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -596,7 +588,7 @@ class AdminController
|
||||
$this->post = array('enabled' => 1, '_redirect' => 'plugins');
|
||||
$obj = $this->prepareData();
|
||||
$obj->save();
|
||||
$this->admin->setMessage('Successfully enabled plugin', 'info');
|
||||
$this->admin->setMessage($this->admin->translate('PLUGIN_ADMIN.SUCCESSFULLY_ENABLED_PLUGIN'), 'info');
|
||||
|
||||
return true;
|
||||
}
|
||||
@@ -620,7 +612,7 @@ class AdminController
|
||||
$this->post = array('enabled' => 0, '_redirect' => 'plugins');
|
||||
$obj = $this->prepareData();
|
||||
$obj->save();
|
||||
$this->admin->setMessage('Successfully disabled plugin', 'info');
|
||||
$this->admin->setMessage($this->admin->translate('PLUGIN_ADMIN.SUCCESSFULLY_DISABLED_PLUGIN'), 'info');
|
||||
|
||||
return true;
|
||||
}
|
||||
@@ -659,7 +651,7 @@ class AdminController
|
||||
// TODO: find out why reload and save doesn't always update the object itself (and remove this workaround).
|
||||
$config->set('system.pages.theme', $name);
|
||||
|
||||
$this->admin->setMessage('Successfully changed default theme.', 'info');
|
||||
$this->admin->setMessage($this->admin->translate('PLUGIN_ADMIN.SUCCESSFULLY_CHANGED_THEME'), 'info');
|
||||
|
||||
return true;
|
||||
}
|
||||
@@ -683,9 +675,9 @@ class AdminController
|
||||
$result = \Grav\Plugin\Admin\Gpm::install($package, []);
|
||||
|
||||
if ($result) {
|
||||
$this->admin->setMessage("Installation successful.", 'info');
|
||||
$this->admin->setMessage($this->admin->translate('PLUGIN_ADMIN.INSTALLATION_SUCCESSFUL'), 'info');
|
||||
} else {
|
||||
$this->admin->setMessage("Installation failed.", 'error');
|
||||
$this->admin->setMessage($this->admin->translate('PLUGIN_ADMIN.INSTALLATION_FAILED'), 'error');
|
||||
}
|
||||
|
||||
$this->post = array('_redirect' => $this->view . '/' . $this->route);
|
||||
@@ -709,9 +701,9 @@ class AdminController
|
||||
$result = \Grav\Plugin\Admin\Gpm::selfupgrade();
|
||||
|
||||
if ($result) {
|
||||
$this->admin->json_response = ['status' => 'success', 'message' => 'Grav was successfully updated to '];
|
||||
$this->admin->json_response = ['status' => 'success', 'message' => $this->admin->translate('PLUGIN_ADMIN.GRAV_WAS_SUCCESSFULLY_UPDATED_TO') . ' '];
|
||||
} else {
|
||||
$this->admin->json_response = ['status' => 'error', 'message' => 'Grav update failed <br>' . Installer::lastErrorMsg()];
|
||||
$this->admin->json_response = ['status' => 'error', 'message' => $this->admin->translate('PLUGIN_ADMIN.GRAV_UPDATE_FAILED') . ' <br>' . Installer::lastErrorMsg()];
|
||||
}
|
||||
|
||||
return true;
|
||||
@@ -755,16 +747,16 @@ class AdminController
|
||||
if ($this->view === 'update') {
|
||||
|
||||
if ($result) {
|
||||
$this->admin->json_response = ['status' => 'success', 'message' => 'Everything updated'];
|
||||
$this->admin->json_response = ['status' => 'success', 'message' => $this->admin->translate('PLUGIN_ADMIN.EVERYTHING_UPDATED')];
|
||||
} else {
|
||||
$this->admin->json_response = ['status' => 'error', 'message' => 'Updates failed'];
|
||||
$this->admin->json_response = ['status' => 'error', 'message' => $this->admin->translate('PLUGIN_ADMIN.UPDATES_FAILED')];
|
||||
}
|
||||
|
||||
} else {
|
||||
if ($result) {
|
||||
$this->admin->setMessage("Installation successful.", 'info');
|
||||
$this->admin->setMessage($this->admin->translate('PLUGIN_ADMIN.INSTALLATION_SUCCESSFUL'), 'info');
|
||||
} else {
|
||||
$this->admin->setMessage("Installation failed.", 'error');
|
||||
$this->admin->setMessage($this->admin->translate('PLUGIN_ADMIN.INSTALLATION_FAILED'), 'error');
|
||||
}
|
||||
|
||||
$this->post = array('_redirect' => $this->view . '/' . $this->route);
|
||||
@@ -792,9 +784,9 @@ class AdminController
|
||||
$result = \Grav\Plugin\Admin\Gpm::uninstall($package, []);
|
||||
|
||||
if ($result) {
|
||||
$this->admin->setMessage("Uninstall successful.", 'info');
|
||||
$this->admin->setMessage($this->admin->translate('PLUGIN_ADMIN.INSTALLATION_SUCCESSFUL'), 'info');
|
||||
} else {
|
||||
$this->admin->setMessage("Uninstall failed.", 'error');
|
||||
$this->admin->setMessage($this->admin->translate('PLUGIN_ADMIN.INSTALLATION_FAILED'), 'error');
|
||||
}
|
||||
|
||||
$this->post = array('_redirect' => $this->view);
|
||||
@@ -866,7 +858,7 @@ class AdminController
|
||||
|
||||
if ($obj) {
|
||||
$obj->save(true);
|
||||
$this->admin->setMessage('Successfully saved', 'info');
|
||||
$this->admin->setMessage($this->admin->translate('PLUGIN_ADMIN.SUCCESSFULLY_SAVED'), 'info');
|
||||
}
|
||||
|
||||
if ($this->view != 'pages') {
|
||||
@@ -970,7 +962,7 @@ class AdminController
|
||||
$page->save();
|
||||
|
||||
// Enqueue message and redirect to new location.
|
||||
$this->admin->setMessage('Successfully copied', 'info');
|
||||
$this->admin->setMessage($this->admin->translate('PLUGIN_ADMIN.SUCCESSFULLY_COPIED'), 'info');
|
||||
$this->setRedirect($this->view . '/' . $parent->route() . '/'. $page->slug());
|
||||
|
||||
} catch (\Exception $e) {
|
||||
@@ -996,7 +988,7 @@ class AdminController
|
||||
return false;
|
||||
}
|
||||
|
||||
$this->admin->setMessage('Reordering was successful', 'info');
|
||||
$this->admin->setMessage($this->admin->translate('PLUGIN_ADMIN.REORDERING_WAS_SUCCESSFUL'), 'info');
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -1032,7 +1024,7 @@ class AdminController
|
||||
$redirect = 'pages';
|
||||
}
|
||||
|
||||
$this->admin->setMessage('Successfully deleted', 'info');
|
||||
$this->admin->setMessage($this->admin->translate('PLUGIN_ADMIN.SUCCESSFULLY_DELETED'), 'info');
|
||||
$this->setRedirect($redirect);
|
||||
|
||||
} catch (\Exception $e) {
|
||||
@@ -1042,6 +1034,21 @@ class AdminController
|
||||
return true;
|
||||
}
|
||||
|
||||
protected function taskSwitchlanguage() {
|
||||
$language = $this->grav['uri']->param('lang');
|
||||
|
||||
if ($language) {
|
||||
$this->grav['session']->admin_lang = $language ?: 'en';
|
||||
}
|
||||
|
||||
$redirect = 'pages';
|
||||
|
||||
$this->admin->setMessage($this->admin->translate('PLUGIN_ADMIN.SUCCESSFULLY_SWITCHED_LANGUAGE'), 'info');
|
||||
$this->setRedirect($redirect);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* Prepare and return POST data.
|
||||
*
|
||||
@@ -1155,7 +1162,12 @@ class AdminController
|
||||
|
||||
if (isset($input['type']) && !empty($input['type'])) {
|
||||
$type = (string) strtolower($input['type']);
|
||||
$name = preg_replace('|.*/|', '', $type) . '.md';
|
||||
$name = preg_replace('|.*/|', '', $type);
|
||||
$language = $this->grav['language'];
|
||||
if ($language->enabled()) {
|
||||
$name .= '.' . $language->getLanguage();
|
||||
}
|
||||
$name .= '.md';
|
||||
$page->name($name);
|
||||
$page->template($type);
|
||||
}
|
||||
@@ -1213,9 +1225,9 @@ class AdminController
|
||||
{
|
||||
if (!$this->admin->authorise($permissions)) {
|
||||
if ($this->grav['uri']->extension() === 'json')
|
||||
$this->admin->json_response = ['status' => 'unauthorized', 'message' => 'You have insufficient permissions for task ' . $task . '.'];
|
||||
$this->admin->json_response = ['status' => 'unauthorized', 'message' => $this->admin->translate('PLUGIN_ADMIN.INSUFFICIENT_PERMISSIONS_FOR_TASK') . ' ' . $task . '.'];
|
||||
else
|
||||
$this->admin->setMessage('You have insufficient permissions for task ' . $task . '.', 'error');
|
||||
$this->admin->setMessage($this->admin->translate('PLUGIN_ADMIN.INSUFFICIENT_PERMISSIONS_FOR_TASK') . ' ' . $task . '.', 'error');
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -118,7 +118,7 @@ class Popularity
|
||||
$data = array();
|
||||
|
||||
foreach ($chart_data as $date => $count) {
|
||||
$labels[] = date('D', strtotime($date));
|
||||
$labels[] = self::getGrav()['grav']['admin']->translate(['PLUGIN_ADMIN.' . strtoupper(date('D', strtotime($date)))]);
|
||||
$data[] = $count;
|
||||
}
|
||||
|
||||
|
||||
670
languages.yaml
670
languages.yaml
@@ -1,29 +1,424 @@
|
||||
en:
|
||||
ADMIN_BETA_MSG: This is a Beta release! Use this in production at your own risk...
|
||||
ADMIN_REPORT_ISSUE: Found an issue? Please report it on GitHub.
|
||||
EMAIL_FOOTER: <a href="http://getgrav.org">Powered by Grav</a> - The Modern Flat File CMS
|
||||
LOGIN_BTN: Login
|
||||
LOGIN_BTN_FORGOT: Forgot
|
||||
LOGIN_BTN_RESET: Reset Password
|
||||
LOGIN_BTN_SEND_INSTRUCTIONS: Send Reset Instructions
|
||||
LOGIN_LOGGED_IN: You have been successfully logged in
|
||||
LOGIN_FAILED: Login failed
|
||||
LOGGED_OUT: You have been logged out
|
||||
RESET_LINK_EXPIRED: Reset link has expired, please try again
|
||||
RESET_PASSWORD_RESET: Password has been reset
|
||||
RESET_INVALID_LINK: Invalid reset link used, please try again
|
||||
FORGOT_INSTRUCTIONS_SENT_VIA_EMAIL: Instructions to reset your password have been sent via email to %s
|
||||
FORGOT_FAILED_TO_EMAIL: Failed to email instructions, please try again later
|
||||
FORGOT_CANNOT_RESET_EMAIL_NO_EMAIL: Cannot reset password for %s, no email address is set
|
||||
FORGOT_USERNAME_DOES_NOT_EXIST: User with username <b>%s</b> does not exist
|
||||
FORGOT_EMAIL_NOT_CONFIGURED: Cannot reset password. This site is not configured to send emails
|
||||
FORGOT_EMAIL_SUBJECT: %s Password Reset Request
|
||||
FORGOT_EMAIL_BODY: <h1>Password Reset</h1><p>Dear %1$s,</p><p>A request was made on <b>%4$s</b> to reset your password.</p><p><br /><a href="%2$s" class="btn-primary">Click this to reset your password</a><br /><br /></p><p>Alternatively, copy the following URL into your browser's address bar:</p> <p>%2$s</p><p><br />Kind regards,<br /><br />%3$s</p>
|
||||
PLUGIN_ADMIN:
|
||||
ADMIN_BETA_MSG: This is a Beta release! Use this in production at your own risk...
|
||||
ADMIN_REPORT_ISSUE: Found an issue? Please report it on GitHub.
|
||||
EMAIL_FOOTER: <a href="http://getgrav.org">Powered by Grav</a> - The Modern Flat File CMS
|
||||
LOGIN_BTN: Login
|
||||
LOGIN_BTN_FORGOT: Forgot
|
||||
LOGIN_BTN_RESET: Reset Password
|
||||
LOGIN_BTN_SEND_INSTRUCTIONS: Send Reset Instructions
|
||||
LOGIN_LOGGED_IN: You have been successfully logged in
|
||||
LOGIN_FAILED: Login failed
|
||||
LOGGED_OUT: You have been logged out
|
||||
RESET_LINK_EXPIRED: Reset link has expired, please try again
|
||||
RESET_PASSWORD_RESET: Password has been reset
|
||||
RESET_INVALID_LINK: Invalid reset link used, please try again
|
||||
FORGOT_INSTRUCTIONS_SENT_VIA_EMAIL: Instructions to reset your password have been sent via email to %s
|
||||
FORGOT_FAILED_TO_EMAIL: Failed to email instructions, please try again later
|
||||
FORGOT_CANNOT_RESET_EMAIL_NO_EMAIL: Cannot reset password for %s, no email address is set
|
||||
FORGOT_USERNAME_DOES_NOT_EXIST: User with username <b>%s</b> does not exist
|
||||
FORGOT_EMAIL_NOT_CONFIGURED: Cannot reset password. This site is not configured to send emails
|
||||
FORGOT_EMAIL_SUBJECT: %s Password Reset Request
|
||||
FORGOT_EMAIL_BODY: <h1>Password Reset</h1><p>Dear %1$s,</p><p>A request was made on <b>%4$s</b> to reset your password.</p><p><br /><a href="%2$s" class="btn-primary">Click this to reset your password</a><br /><br /></p><p>Alternatively, copy the following URL into your browser's address bar:</p> <p>%2$s</p><p><br />Kind regards,<br /><br />%3$s</p>
|
||||
MANAGE_PAGES: Manage Pages
|
||||
CONFIGURATION: Configuration
|
||||
PAGES: Pages
|
||||
PLUGINS: Plugins
|
||||
PLUGIN: Plugin
|
||||
THEMES: Themes
|
||||
LOGOUT: Logout
|
||||
BACK: Back
|
||||
ADD_PAGE: Add Page
|
||||
ADD_MODULAR: Add Modular
|
||||
MOVE: Move
|
||||
DELETE: Delete
|
||||
SAVE: Save
|
||||
NORMAL: Normal
|
||||
EXPERT: Expert
|
||||
EXPAND_ALL: Expand All
|
||||
COLLAPSE_ALL: Collapse All
|
||||
ERROR: Error
|
||||
CLOSE: Close
|
||||
CANCEL: Cancel
|
||||
CONTINUE: Continue
|
||||
MODAL_DELETE_PAGE_CONFIRMATION_REQUIRED_TITLE: Confirmation Required
|
||||
MODAL_DELETE_PAGE_CONFIRMATION_REQUIRED_DESC: Are you sure you want to delete this page and all it's children? This action cannot be undone.
|
||||
MODAL_CHANGED_DETECTED_TITLE: Changes Detected
|
||||
MODAL_CHANGED_DETECTED_DESC: You have unsaved changes. Are you sure you want to leave without saving?
|
||||
MODAL_DELETE_FILE_CONFIRMATION_REQUIRED_TITLE: Confirmation Required
|
||||
MODAL_DELETE_FILE_CONFIRMATION_REQUIRED_DESC: Are you sure you want to delete this file? This action cannot be undone.
|
||||
ADD_FILTERS: Add Filters
|
||||
SEARCH_PAGES: Search Pages
|
||||
VERSION: Version
|
||||
WAS_MADE_WITH: Was made with
|
||||
BY: By
|
||||
UPDATE_THEME: Update Theme
|
||||
UPDATE_PLUGIN: Update Plugin
|
||||
OF_THIS_THEME_IS_NOW_AVAILABLE: of this theme is now available
|
||||
OF_THIS_PLUGIN_IS_NOW_AVAILABLE: of this plugin is now available
|
||||
VERSION: Version
|
||||
AUTHOR: Author
|
||||
HOMEPAGE: Homepage
|
||||
DEMO: Demo
|
||||
BUG_TRACKER: Bug Tracker
|
||||
KEYWORDS: Keywords
|
||||
LICENCE: Licence
|
||||
DESCRIPTION: Description
|
||||
README: Readme
|
||||
REMOVE_THEME: Remove Theme
|
||||
INSTALL_THEME: Install Theme
|
||||
THEME: Theme
|
||||
BACK_TO_THEMES: Back to Themes
|
||||
BACK_TO_PLUGINS: Back to Plugins
|
||||
CHECK_FOR_UPDATES: Check for Updates
|
||||
ADD: Add
|
||||
CLEAR_CACHE: Clear Cache
|
||||
CLEAR_CACHE_ALL_CACHE: All Cache
|
||||
CLEAR_CACHE_ASSETS_ONLY: Assets Only
|
||||
CLEAR_CACHE_IMAGES_ONLY: Images Only
|
||||
CLEAR_CACHE_CACHE_ONLY: Cache Only
|
||||
CHECK_FOR_UPDATES: Check for Updates
|
||||
DASHBOARD: Dashboard
|
||||
UPDATES_AVAILABLE: Updates Available
|
||||
DAYS: Days
|
||||
UPDATE: Update
|
||||
BACKUP: Backup
|
||||
STATISTICS: Statistics
|
||||
TODAY: Today
|
||||
WEEK: Week
|
||||
MONTH: Month
|
||||
LATEST_PAGE_UPDATES: Latest Page Updates
|
||||
MAINTENANCE: Maintenance
|
||||
UPDATED: Updated
|
||||
MON: Mon
|
||||
TUE: Tue
|
||||
WED: Wed
|
||||
THU: Thu
|
||||
FRI: Fri
|
||||
SAT: Sat
|
||||
SUN: Sun
|
||||
COPY: Copy
|
||||
EDIT: Edit
|
||||
CREATE: Create
|
||||
GRAV_ADMIN: Grav Admin
|
||||
GRAV_OFFICIAL_PLUGIN: Grav Official Plugin
|
||||
GRAV_OFFICIAL_THEME: Grav Official Theme
|
||||
PLUGIN_SYMBOLICALLY_LINKED: This plugin is symbolically linked. Updates won't be detected.
|
||||
THEME_SYMBOLICALLY_LINKED: This theme is symbolically linked. Updates won't be detected
|
||||
REMOVE_PLUGIN: Remove Plugin
|
||||
INSTALL_PLUGIN: Install Plugin
|
||||
AVAILABLE: Available
|
||||
INSTALLED: Installed
|
||||
INSTALL: Install
|
||||
ACTIVE_THEME: Active Theme
|
||||
SWITCHING_TO: Switching to
|
||||
SWITCHING_TO_DESCRIPTION: By switching to a different theme, there is no guarantee that all the layout pages are supported, potentially causing errors when trying to load said pages.
|
||||
SWITCHING_TO_CONFIRMATION: Do you want to continue and switch to the theme
|
||||
CREATE_NEW_USER: Create New User
|
||||
REMOVE_USER: Remove User
|
||||
ACCESS_DENIED: Access denied
|
||||
ACCOUNT_NOT_ADMIN: your account does not have administrator permissions
|
||||
PHP_INFO: PHP Info
|
||||
INSTALLER: Installer
|
||||
AVAILABLE_THEMES: Available Themes
|
||||
AVAILABLE_PLUGINS: Available Plugins
|
||||
INSTALLED_THEMES: Installed Themes
|
||||
INSTALLED_PLUGINS: Installed Plugins
|
||||
BROWSE_ERROR_LOGS: Browse Error Logs
|
||||
SITE: Site
|
||||
INFO: Info
|
||||
SYSTEM: System
|
||||
USER: User
|
||||
ADD_ACCOUNT: Add Account
|
||||
SWITCH_LANGUAGE: Switch Language
|
||||
SUCCESSFULLY_ENABLED_PLUGIN: Successfully enabled plugin
|
||||
SUCCESSFULLY_DISABLED_PLUGIN: Successfully disabled plugin
|
||||
SUCCESSFULLY_CHANGED_THEME: Successfully changed default theme
|
||||
INSTALLATION_FAILED: Installation failed
|
||||
INSTALLATION_SUCCESSFUL: Installation successful
|
||||
SUCCESSFULLY_SAVED: Successfully saved
|
||||
SUCCESSFULLY_COPIED: Successfully copied
|
||||
REORDERING_WAS_SUCCESSFUL: Reordering was successful
|
||||
SUCCESSFULLY_DELETED: Successfully deleted
|
||||
SUCCESSFULLY_SWITCHED_LANGUAGE: Successfully switched language
|
||||
INSUFFICIENT_PERMISSIONS_FOR_TASK: You have insufficient permissions for task
|
||||
CACHE_CLEARED: Cache cleared
|
||||
METHOD: Method
|
||||
ERROR_CLEARING_CACHE: Error clearing cache
|
||||
AN_ERROR_OCCURRED: An error occurred
|
||||
YOUR_BACKUP_IS_READY_FOR_DOWNLOAD: Your backup is ready for download
|
||||
DOWNLOAD_BACKUP: Download backup
|
||||
PAGES_FILTERED: Pages filtered
|
||||
NO_PAGE_FOUND: No Page found
|
||||
INVALID_PARAMETERS: Invalid Parameters
|
||||
NO_FILES_SENT: No files sent
|
||||
EXCEEDED_FILESIZE_LIMIT: Exceeded filesize limit
|
||||
UNKNOWN_ERRORS: Unkown errors
|
||||
EXCEEDED_GRAV_FILESIZSE_LIMIT: Exceeded Grav filesize limit.
|
||||
UNSUPPORTED_FILE_TYPE: Unsupported file type
|
||||
FAILED_TO_MOVE_UPLOADED_FILE: Failed to move uploaded file.
|
||||
FILE_UPLOADED_SUCCESSFULLY: File uploaded successfully
|
||||
FILE_DELETED: File deleted
|
||||
FILE_COULD_NOT_BE_DELETED: File could not be deleted
|
||||
FILE_NOT_FOUND: File not found
|
||||
NO_FILE_FOUND: No file found
|
||||
GRAV_WAS_SUCCESSFULLY_UPDATED_TO: Grav was successfully updated to
|
||||
GRAV_UPDATE_FAILED: Grav update failed
|
||||
EVERYTHING_UPDATED: Everything updated
|
||||
UPDATES_FAILED: Updates failed
|
||||
AVATAR_BY: Avatar by
|
||||
LAST_BACKUP: Last Backup
|
||||
FULL_NAME: Full name
|
||||
USERNAME: Username
|
||||
EMAIL: Email
|
||||
PASSWORD: Password
|
||||
TITLE: Title
|
||||
LANGUAGE: Language
|
||||
ACCOUNT: Account
|
||||
EMAIL_VALIDATION_MESSAGE: Must be a valid email address
|
||||
PASSWORD_VALIDATION_MESSAGE: Password must contain at least one number and one uppercase and lowercase letter, and at least 8 or more characters
|
||||
LANGUAGE_HELP: Set the favorite language
|
||||
ADD_ACCOUNT: Add Account
|
||||
MEDIA: Media
|
||||
SITE: Site
|
||||
DEFAULTS: Defaults
|
||||
SITE_TITLE: Site Title
|
||||
SITE_TITLE_PLACEHOLDER: Site wide title
|
||||
SITE_TITLE_HELP: Default title for your site, often used in themes
|
||||
DEFAULT_AUTHOR: Default Author
|
||||
DEFAULT_AUTHOR_HELP: "A default author name, often used in themes or page content"
|
||||
DEFAULT_EMAIL: Default Email
|
||||
DEFAULT_EMAIL_HELP: "A default email to reference in themes or pages"
|
||||
TAXONOMY_TYPES: Taxonomy Types
|
||||
TAXONOMY_TYPES_HELP: "Taxonomy types must be defined here if you wish to use them in pages"
|
||||
PAGE_SUMMARY: Page Summary
|
||||
ENABLED: Enabled
|
||||
ENABLED_HELP: "Enable page summary (the summary returns the same as the page content)"
|
||||
YES: Yes
|
||||
NO: No
|
||||
SUMMARY_SIZE: Summary Size
|
||||
SUMMARY_SIZE_HELP: "The amount of characters of a page to use as a content summary"
|
||||
FORMAT: Format
|
||||
FORMAT_HELP: short = use the first occurrence of delimiter or size; long = summary delimiter will be ignored
|
||||
SHORT: Short
|
||||
LONG: Long
|
||||
DELIMITER: Delimiter
|
||||
DELIMITER_HELP: "The summary delimiter (default '===')"
|
||||
METADATA: Metadata
|
||||
METADATA_HELP: "Default metadata values that will be displayed on every page unless overridden by the page"
|
||||
NAME: Name
|
||||
CONTENT: Content
|
||||
REDIRECTS_AND_ROUTES: Redirects & Routes
|
||||
CUSTOM_REDIRECTS: Custom Redirects
|
||||
CUSTOM_REDIRECTS_HELP: "routes to redirect to other pages. Standard Regex replacement is valid"
|
||||
CUSTOM_REDIRECTS_PLACEHOLDER_KEY: /your/alias
|
||||
CUSTOM_REDIRECTS_PLACEHOLDER_VALUE: /your/redirect
|
||||
CUSTOM_ROUTES: Custom Routes
|
||||
CUSTOM_ROUTES_HELP: "routes to alias to other pages. Standard Regex replacement is valid"
|
||||
CUSTOM_ROUTES_PLACEHOLDER_KEY: /your/alias
|
||||
CUSTOM_ROUTES_PLACEHOLDER_VALUE: /your/route
|
||||
FILE_STREAMS: File Streams
|
||||
DEFAULT: Default
|
||||
TITLE: Title
|
||||
PAGE_MEDIA: Page Media
|
||||
OPTIONS: Options
|
||||
PUBLISHED: Published
|
||||
PUBLISHED_HELP: "By default, a page is published unless you explicitly set published: false or via a publish_date being in the future, or unpublish_date in the past"
|
||||
DATE: Date
|
||||
DATE_HELP: "The date variable allows you to specifically set a date associated with this page."
|
||||
PUBLISHED_DATE: Published Date
|
||||
PUBLISHED_DATE_HELP: "Can provide a date to automatically trigger publication."
|
||||
UNPUBLISHED_DATE: Unpublished Date
|
||||
UNPUBLISHED_DATE_HELP: "can provide a date to automatically trigger un-publication."
|
||||
ROBOTS: Robots
|
||||
TAXONOMIES: Taxonomies
|
||||
TAXONOMY: Taxonomy
|
||||
ADVANCED: Advanced
|
||||
SETTINGS: Settings
|
||||
FOLDER_NUMERIC_PREFIX: Folder Numeric Prefix
|
||||
FOLDER_NUMERIC_PREFIX_HELP: Numeric prefix that provides manual ordering and implies visibility
|
||||
FOLDER_NAME: Folder Name
|
||||
FOLDER_NAME_HELP: "The folder name that will be stored in the filesystem for this page"
|
||||
PARENT: Parent
|
||||
DEFAULT_OPTION_ROOT: '- Root -'
|
||||
DEFAULT_OPTION_SELECT: '- Select -'
|
||||
DISPLAY_TEMPLATE: Display Template
|
||||
DISPLAY_TEMPLATE_HELP: "The page type that translates into which twig template renders the page"
|
||||
BODY_CLASSES: Body Classes
|
||||
ORDERING: Ordering
|
||||
PAGE_ORDER: Page Order
|
||||
OVERRIDES: Overrides
|
||||
MENU: Menu
|
||||
MENU_HELP: "The string to be used in a menu. If not set, <b>Title</b> will be used."
|
||||
SLUG: Slug
|
||||
SLUG_HELP: "The slug variable allows you to specifically set the page's portion of the URL"
|
||||
SLUG_VALIDATE_MESSAGE: A slug must contain only lowercase alphanumeric characters and dashes
|
||||
PROCESS: Process
|
||||
PROCESS_HELP: "Control how pages are processed. Can be set per-page rather than globally"
|
||||
DEFAULT_CHILD_TYPE: Default Child Type
|
||||
USE_GLOBAL: Use Global
|
||||
ROUTABLE: Routable
|
||||
ROUTABLE_HELP: If this page is reachable by a URL
|
||||
CACHING: Caching
|
||||
VISIBLE: Visible
|
||||
VISIBLE_HELP: "Determines if a page is visible in the navigation."
|
||||
DISABLED: Disabled
|
||||
ITEMS: Items
|
||||
ORDER_BY: Order By
|
||||
FOLDER: Folder
|
||||
TITLE: Title
|
||||
DATE: Date
|
||||
DEFAULT: Default
|
||||
ORDER: Order
|
||||
ASCENDING: Ascending
|
||||
DESCENDING: Descending
|
||||
ADD_MODULAR_CONTENT: Add Modular Content
|
||||
PAGE_TITLE: Page Title
|
||||
PAGE_TITLE_HELP: "The title of the page"
|
||||
PAGE: Page
|
||||
MODULAR_TEMPLATE: Modular Template
|
||||
FRONTMATTER: Frontmatter
|
||||
FILENAME: Filename
|
||||
PARENT_PAGE: Parent Page
|
||||
HOME_PAGE: Home page
|
||||
HOME_PAGE_HELP: "The page that Grav will use as the default landing page"
|
||||
DEFAULT_THEME: Default theme
|
||||
DEFAULT_THEME_HELP: "Set the default theme for Grav to use (default is Antimatter)"
|
||||
TIMEZONE: Timezone
|
||||
TIMEZONE_HELP: "Override the default timezone the server"
|
||||
SHORT_DATE_FORMAT: Short date format
|
||||
SHORT_DATE_FORMAT_HELP: "Set the short date format that can be used by themes"
|
||||
LONG_DATE_FORMAT: Long date format
|
||||
LONG_DATE_FORMAT_HELP: "Set the long date format that can be used by themes"
|
||||
DEFAULT_ORDERING: Default ordering
|
||||
DEFAULT_ORDERING_HELP: "Pages in a list will render using this order unless it is overridden"
|
||||
DEFAULT_ORDERING_DEFAULT: Default - based on folder name
|
||||
DEFAULT_ORDERING_FOLDER: Folder - based on prefix-less folder name
|
||||
DEFAULT_ORDERING_TITLE: Title - based on title field in header
|
||||
DEFAULT_ORDERING_DATE: Date - based on date field in header
|
||||
DEFAULT_ORDER_DIRECTION: Default order direction
|
||||
DEFAULT_ORDER_DIRECTION_HELP: "The direction of pages in a list"
|
||||
DEFAULT_PAGE_COUNT: Default page count
|
||||
DEFAULT_PAGE_COUNT_HELP: "Default maximum pages count in a list"
|
||||
DATE_BASED_PUBLISHING: Date-based publishing
|
||||
DATE_BASED_PUBLISHING_HELP: "Automatically (un)publish posts based on their date"
|
||||
EVENTS: Events
|
||||
EVENTS_HELP: "Enable or Disable specific events. Disabling these can break plugins"
|
||||
REDIRECT_DEFAULT_ROUTE: Redirect default route
|
||||
REDIRECT_DEFAULT_ROUTE_HELP: "Automatically redirect to a page's default route"
|
||||
LANGUAGES: Languages
|
||||
SUPPORTED: Supported
|
||||
SUPPORTED_HELP: "Comma separated list of 2 letter language codes (for example 'en,fr,de')"
|
||||
TRANSLATIONS_ENABLED: Translations enabled
|
||||
TRANSLATIONS_ENABLED_HELP: "Support translations in Grav, plugins and extensions"
|
||||
TRANSLATIONS_FALLBACK: Translations fallback
|
||||
TRANSLATIONS_FALLBACK_HELP: "Fallback through supported translations if active language doesn't exist"
|
||||
ACTIVE_LANGUAGE_IN_SESSION: Active language in session
|
||||
ACTIVE_LANGUAGE_IN_SESSION_HELP: "Store the active language in the session"
|
||||
HOME_REDIRECT_INCLUDE_LANGUAGE: Home redirect include language
|
||||
HOME_REDIRECT_INCLUDE_LANGUAGE_HELP : "Include language in home redirect (/en)"
|
||||
HOME_REDIRECT_INCLUDE_ROUTE: Home redirect include route
|
||||
HOME_REDIRECT_INCLUDE_ROUTE: "Include route in home redirect (/blog)"
|
||||
HTTP_HEADERS: HTTP Headers
|
||||
EXPIRES: Expires
|
||||
EXPIRES_HELP: "Sets the expires header. The value is in seconds."
|
||||
LAST_MODIFIED: Last modified
|
||||
LAST_MODIFIED_HELP: "Sets the last modified header that can help optimize proxy and browser caching"
|
||||
ETAG: ETag
|
||||
ETAG_HELP: "Sets the etag header to help identify when a page has been modified"
|
||||
VARY_ACCEPT_ENCODING: Vary accept encoding
|
||||
VARY_ACCEPT_ENCODING_HELP: "Sets the `Vary: Accept Encoding` header to help with proxy and CDN caching"
|
||||
MARKDOWN_EXTRA_HELP: "Enable default support for Markdown Extra - https://michelf.ca/projects/php-markdown/extra/"
|
||||
AUTO_LINE_BREAKS: Auto line breaks
|
||||
AUTO_LINE_BREAKS_HELP: "Enable support for automatic line breaks in markdown"
|
||||
AUTO_URL_LINKS: Auto URL links
|
||||
AUTO_URL_LINKS_HELP: "Enable automatic conversion of URLs into HTML hyperlinks"
|
||||
ESCAPE_MARKUP: Escape markup
|
||||
ESCAPE_MARKUP_HELP: "Escape markup tags into HTML entities"
|
||||
CACHING_HELP: "Global ON/OFF switch to enable/disable Grav caching"
|
||||
CACHE_CHECK_METHOD: Cache check method
|
||||
CACHE_CHECK_METHOD: "Select the method that Grav uses to check if page files have been modified."
|
||||
CACHE_DRIVER: Cache driver
|
||||
CACHE_DRIVER_HELP: "Choose which cache driver Grav should use. 'Auto Detect' attempts to find the best for you"
|
||||
CACHE_PREFIX: Cache prefix
|
||||
CACHE_PREFIX_HELP: "An identifier for part of the Grav key. Don't change unless you know what your doing."
|
||||
CACHE_PREFIX_PLACEHOLDER: "Derived from base URL (override by entering random string)"
|
||||
LIFETIME: Lifetime
|
||||
LIFETIME_HELP: "Sets the cache lifetime in seconds. 0 = infinite"
|
||||
GZIP_COMPRESSION: Gzip compression
|
||||
GZIP_COMPRESSION_HELP: "Enable GZip compression of the Grav page for increased performance."
|
||||
TWIG_TEMPLATING: Twig Templating
|
||||
TWIG_CACHING: Twig caching
|
||||
TWIG_CACHING_HELP: "Control the Twig caching mechanism. Leave this enabled for best performance."
|
||||
TWIG_DEBUG: Twig debug
|
||||
TWIG_DEBUG_HELP: "Allows the option of not loading the Twig Debugger extension"
|
||||
DETECT_CHANGES: Detect changes
|
||||
DETECT_CHANGES_HELP: "Twig will automatically recompile the Twig cache if it detects any changes in Twig templates"
|
||||
AUTOESCAPE_VARIABLES: Autoescape variables
|
||||
AUTOESCAPE_VARIABLES_HELP: "Autoescapes all variables. This will break your site most likely"
|
||||
ASSETS: Assets
|
||||
CSS_PIPELINE: CSS pipeline
|
||||
CSS_PIPELINE_HELP: "The CSS pipeline is the unification of multiple CSS resources into one file"
|
||||
CSS_MINIFY: CSS minify
|
||||
CSS_MINIFY_HELP: "Minify the CSS during pipelining"
|
||||
CSS_MINIFY_WINDOWS_OVERRIDE: CSS minify Windows override
|
||||
CSS_MINIFY_WINDOWS_OVERRIDE_HELP: "Minify Override for Windows platforms. False by default due to ThreadStackSize"
|
||||
CSS_REWRITE: CSS rewrite
|
||||
CSS_REWRITE_HELP: "Rewrite any CSS relative URLs during pipelining"
|
||||
JAVASCRIPT_PIPELINE: JavaScript pipeline
|
||||
JAVASCRIPT_PIPELINE_HELP: "The JS pipeline is the unification of multiple JS resources into one file"
|
||||
JAVASCRIPT_MINIFY: JavaScript minify
|
||||
JAVASCRIPT_MINIFY_HELP: "Minify the JS during pipelining"
|
||||
ENABLED_TIMESTAMPS_ON_ASSETS: Enable timestamps on assets
|
||||
ENABLED_TIMESTAMPS_ON_ASSETS_HELP: "Enable asset timestamps"
|
||||
COLLECTIONS: Collections
|
||||
ERROR_HANDLER: Error handler
|
||||
DISPLAY_ERRORS: Display errors
|
||||
DISPLAY_ERRORS_HELP: "Display full backtrace-style error page"
|
||||
LOG_ERRORS: Log errors
|
||||
LOG_ERRORS_HELP: "Log errors to /logs folder"
|
||||
DEBUGGER: Debugger
|
||||
DEBUGGER_HELP: "Enable Grav debugger and following settings"
|
||||
DEBUG_TWIG: Debug Twig
|
||||
DEBUG_TWIG_HELP: "Enable debugging of Twig templates"
|
||||
SHUTDOWN_CLOSE_CONNECTION: Shutdown close connection
|
||||
SHUTDOWN_CLOSE_CONNECTION_HELP: "Close the connection before calling onShutdown(). false for debugging"
|
||||
DEFAULT_IMAGE_QUALITY: Default image quality
|
||||
DEFAULT_IMAGE_QUALITY_HELP: "Default image quality to use when resampling or caching images (85%)"
|
||||
CACHE_ALL: Cache all images
|
||||
CACHE_ALL_HELP: "Run all images through Grav's cache system even if they have no media manipulations"
|
||||
IMAGES_DEBUG: Image debug watermark
|
||||
IMAGES_DEBUG_HELP: "Show an overlay over images indicating the pixel depth of the image when working with retina for example"
|
||||
UPLOAD_LIMIT: File upload limit
|
||||
UPLOAD_LIMIT_HELP: "Set maximum upload size in bytes (0 is unlimited)"
|
||||
ENABLE_MEDIA_TIMESTAMP: Enable timestamps on media
|
||||
ENABLE_MEDIA_TIMESTAMP_HELP: "Appends a timestamp based on last modified date to each media item"
|
||||
SESSION: Session
|
||||
SESSION_ENABLED_HELP: "Enable session support within Grav"
|
||||
TIMEOUT: Timeout
|
||||
TIMEOUT_HELP: "Sets the session timeout in seconds"
|
||||
SESSION_NAME_HELP: "An identifier used to form the name of the session cookie"
|
||||
ABSOLUTE_URLS: Absolute URLs
|
||||
ABSOLUTE_URLS_HELP: "Absolute or relative URLs for `base_url`"
|
||||
PARAMETER_SEPARATOR: Parameter separator
|
||||
PARAMETER_SEPARATOR_HELP: "Separater for passed parameters that can be changed for Apache on Windows"
|
||||
TASK_COMPLETED: Task completed
|
||||
EVERYTHING_UP_TO_DATE: Everything is up to date
|
||||
UPDATES_ARE_AVAILABLE: updates are available
|
||||
IS_AVAILABLE_FOR_UPDATE: is available for update
|
||||
IS_NOW_AVAILABLE: is now available
|
||||
CURRENT: Current
|
||||
UPDATE_GRAV_NOW: Update Grav Now
|
||||
GRAV_SYMBOLICALLY_LINKED: Grav is symbolically linked. Upgrade won\'t be available
|
||||
UPDATING_PLEASE_WAIT: Updating... please wait, downloading
|
||||
OF_THIS: of this
|
||||
OF_YOUR: of your
|
||||
HAVE_AN_UPDATE_AVAILABLE: have an update available
|
||||
|
||||
es:
|
||||
ADMIN_BETA_MSG: ¡Está es una versión Beta! Utilízala bajo tu propio riesgo...
|
||||
ADMIN_REPORT_ISSUE: ¿Encontraste algún problema de funcionamiento? Por favor, repórtalo en GitHub.
|
||||
EMAIL_FOOTER: <a href="http://getgrav.org">Funcionando con Grav</a> - El CMS de archivos planos moderno
|
||||
EMAIL_FOOTER: <a href="http://getgrav.org">Funcionando con Grav</a> - El CMS de archivos planos moderno
|
||||
LOGIN_BTN: Login
|
||||
LOGIN_BTN_FORGOT: Me olvidé
|
||||
LOGIN_BTN_RESET: Restablecer contraseña
|
||||
@@ -43,23 +438,216 @@ es:
|
||||
FORGOT_EMAIL_BODY: <h1>Restablecimiento de contraseña</h1><p>Estimado %1$s,</p><p>Se ha realizado una petición el <b>%4$s</b> para restablecer tu contraseña.</p><p><br /><a href="%2$s" class="btn-primary">Pincha aquí para restablecer tu contraseña</a><br /><br /></p><p>Alternativamente, copia la siguiente URL en la barra de direcciones de tu navegador:</p> <p>%2$s</p><p><br />Atentamente,<br /><br />%3$s</p>
|
||||
|
||||
it:
|
||||
ADMIN_BETA_MSG: Questa è una versione beta! Usare in produzione a proprio rischio e pericolo…
|
||||
ADMIN_REPORT_ISSUE: Trovato un problema? Per favore, apri un ticket su GitHub
|
||||
EMAIL_FOOTER: <a href="http://getgrav.org">Powered by Grav</a> - The Modern Flat File CMS
|
||||
LOGIN_BTN: Login
|
||||
LOGIN_BTN_FORGOT: Reset password
|
||||
LOGIN_BTN_RESET: Resetta la password
|
||||
LOGIN_BTN_SEND_INSTRUCTIONS: Invia istruzioni di reset
|
||||
LOGIN_LOGGED_IN: Login effettuato con successo
|
||||
LOGIN_FAILED: Login fallito
|
||||
LOGGED_OUT: Sei stato disconnesso
|
||||
RESET_LINK_EXPIRED: Il link di reset è scaduto, ritenta per favore
|
||||
RESET_PASSWORD_RESET: La password è stata resettata
|
||||
RESET_INVALID_LINK: Il link di reset non è valido, ritenta per favore
|
||||
FORGOT_INSTRUCTIONS_SENT_VIA_EMAIL: Le istruzioni per resettare la password sono state inviate via email a %s
|
||||
FORGOT_FAILED_TO_EMAIL: Invio della email fallito, per favore ritenta più tardi
|
||||
FORGOT_CANNOT_RESET_EMAIL_NO_EMAIL: Impossibile resettare la password per %s, nessun indirizzo email impostato
|
||||
FORGOT_USERNAME_DOES_NOT_EXIST: L'utente con username <b>%s</b> non esiste
|
||||
FORGOT_EMAIL_NOT_CONFIGURED: Impossibile resettare la password. Il sito non è configurato per inviare email
|
||||
FORGOT_EMAIL_SUBJECT: %s Richiesta di reset password
|
||||
FORGOT_EMAIL_BODY: <h1>Reset password</h1><p>Caro %1$s,</p><p>Una richiesta di reset password è stata effettuata su <b>%4$s</b>.</p><p><br /><a href="%2$s" class="btn-primary">Clicca qui per resettare la tua password</a><br /><br /></p><p>In alternativa, copia il seguente URL nella barra indirizzi del tuo browser:</p> <p>%2$s</p><p><br />Cordiali saluti,<br /><br />%3$s</p>
|
||||
PLUGIN_ADMIN:
|
||||
ADMIN_BETA_MSG: Questa è una versione beta! Usare in produzione a proprio rischio e pericolo…
|
||||
ADMIN_REPORT_ISSUE: Trovato un problema? Per favore, apri un ticket su GitHub
|
||||
EMAIL_FOOTER: <a href="http://getgrav.org">Powered by Grav</a> - The Modern Flat File CMS
|
||||
LOGIN_BTN_SEND_INSTRUCTIONS: Invia istruzioni di reset
|
||||
LOGIN_LOGGED_IN: Login effettuato con successo
|
||||
LOGIN_FAILED: Login fallito
|
||||
LOGGED_OUT: Sei stato disconnesso
|
||||
RESET_LINK_EXPIRED: Il link di reset è scaduto, ritenta per favore
|
||||
RESET_PASSWORD_RESET: La password è stata resettata
|
||||
RESET_INVALID_LINK: Il link di reset non è valido, ritenta per favore
|
||||
FORGOT_INSTRUCTIONS_SENT_VIA_EMAIL: Le istruzioni per resettare la password sono state inviate via email a %s
|
||||
FORGOT_FAILED_TO_EMAIL: Invio della email fallito, per favore ritenta più tardi
|
||||
FORGOT_CANNOT_RESET_EMAIL_NO_EMAIL: Impossibile resettare la password per %s, nessun indirizzo email impostato
|
||||
FORGOT_USERNAME_DOES_NOT_EXIST: L'utente con username <b>%s</b> non esiste
|
||||
FORGOT_EMAIL_NOT_CONFIGURED: Impossibile resettare la password. Il sito non è configurato per inviare email
|
||||
FORGOT_EMAIL_SUBJECT: %s Richiesta di reset password
|
||||
FORGOT_EMAIL_BODY: <h1>Reset password</h1><p>Caro %1$s,</p><p>Una richiesta di reset password è stata effettuata su <b>%4$s</b>.</p><p><br /><a href="%2$s" class="btn-primary">Clicca qui per resettare la tua password</a><br /><br /></p><p>In alternativa, copia il seguente URL nella barra indirizzi del tuo browser:</p> <p>%2$s</p><p><br />Cordiali saluti,<br /><br />%3$s</p>
|
||||
LOGIN_BTN: Login
|
||||
LOGIN_BTN_FORGOT: Reset password
|
||||
LOGIN_BTN_RESET: Resetta la password
|
||||
MANAGE_PAGES: Gestione Pagine
|
||||
CONFIGURATION: Settaggi
|
||||
PAGES: Pagine
|
||||
PLUGINS: Plugin
|
||||
PLUGINS: Plugin
|
||||
THEMES: Temi
|
||||
LOGOUT: Logout
|
||||
BACK: Indietro
|
||||
ADD_PAGE: Aggiungi Pagina
|
||||
ADD_MODULAR: Aggiungi Modular
|
||||
MOVE: Sposta
|
||||
DELETE: Elimina
|
||||
SAVE: Salva
|
||||
NORMAL: Normale
|
||||
EXPERT: Esperto
|
||||
EXPAND_ALL: Espandi tutto
|
||||
COLLAPSE_ALL: Comprimi tutto
|
||||
ERROR: Errore
|
||||
CLOSE: Chiudi
|
||||
CANCEL: Cancella
|
||||
CONTINUE: Continua
|
||||
MODAL_DELETE_PAGE_CONFIRMATION_REQUIRED_TITLE: Conferma richiesta
|
||||
MODAL_DELETE_PAGE_CONFIRMATION_REQUIRED_DESC: Sicuro di voler eliminare questa pagina e tutte le sue sottopagine? Questa azione non può essere annullata.
|
||||
MODAL_CHANGED_DETECTED_TITLE: Rilevate modifiche
|
||||
MODAL_CHANGED_DETECTED_DESC: Vi sono cambiamenti non salvati. Sicuro di voler lasciare la pagina senza salvare?
|
||||
MODAL_DELETE_FILE_CONFIRMATION_REQUIRED_TITLE: Conferma richiesta
|
||||
MODAL_DELETE_FILE_CONFIRMATION_REQUIRED_DESC: Sicuro di voler eliminare questo file? Questa azione non può essere annullata.
|
||||
ADD_FILTERS: Aggiungi filtro
|
||||
SEARCH_PAGES: Cerca pagine
|
||||
VERSION: Versione
|
||||
WAS_MADE_WITH: Prodotta con il
|
||||
BY: Da
|
||||
UPDATE_THEME: Aggiorna tema
|
||||
OF_THIS_THEME_IS_NOW_AVAILABLE: di questo tema è ora disponibile
|
||||
VERSION: Versione
|
||||
AUTHOR: Autore
|
||||
HOMEPAGE: Homepage
|
||||
DEMO: Demo
|
||||
BUG_TRACKER: Bug Tracker
|
||||
KEYWORDS: Parole chiave
|
||||
LICENCE: Licenza
|
||||
DESCRIPTION: Descrizione
|
||||
README: Readme
|
||||
REMOVE_THEME: Rimuovo tema
|
||||
INSTALL_THEME: Installa tema
|
||||
THEME: Tema
|
||||
BACK_TO_THEMES: Torna ai temi
|
||||
BACK_TO_PLUGINS: Torna ai plugin
|
||||
CHECK_FOR_UPDATES: Controlla aggiornamenti
|
||||
ADD: Aggiungi
|
||||
CLEAR_CACHE: Pulisci cache
|
||||
CLEAR_CACHE_ALL_CACHE: Tutta la cache
|
||||
CLEAR_CACHE_ASSETS_ONLY: Solo asset
|
||||
CLEAR_CACHE_IMAGES_ONLY: Solo immagini
|
||||
CLEAR_CACHE_CACHE_ONLY: Solo cache
|
||||
CHECK_FOR_UPDATES: Controlla aggiornamenti
|
||||
DASHBOARD: Dashboard
|
||||
UPDATES_AVAILABLE: Aggiornamenti disponibili
|
||||
DAYS: Giorni
|
||||
UPDATE: Aggiorna
|
||||
BACKUP: Backup
|
||||
STATISTICS: Statistiche
|
||||
TODAY: Oggi
|
||||
WEEK: Settimana
|
||||
MONTH: Mese
|
||||
LATEST_PAGE_UPDATES: Ultimi aggiornamenti pagine
|
||||
MAINTENANCE: Manutenzione
|
||||
UPDATED: Aggiornato
|
||||
MON: Lun
|
||||
TUE: Mar
|
||||
WED: Mer
|
||||
THU: Gio
|
||||
FRI: Ven
|
||||
SAT: Sab
|
||||
SUN: Dom
|
||||
COPY: Copia
|
||||
EDIT: Modifica
|
||||
CREATE: Crea
|
||||
GRAV_ADMIN: Grav Admin
|
||||
GRAV_OFFICIAL_PLUGIN: Plugin Ufficiale Grav
|
||||
GRAV_OFFICIAL_THEME: Tema Ufficiale Grav
|
||||
PLUGIN_SYMBOLICALLY_LINKED: Questo plugin ha un link simbolico. Gli aggiornamenti non possono essere installati da qui
|
||||
THEME_SYMBOLICALLY_LINKED: Questo tema ha un link simbolico. Gli aggiornamenti non possono essere installati da qui
|
||||
REMOVE_PLUGIN: Rimuovi Plugin
|
||||
INSTALL_PLUGIN: Installa Plugin
|
||||
AVAILABLE: Disponibile
|
||||
INSTALLED: Installato
|
||||
INSTALL: Installa
|
||||
ACTIVE_THEME: Tema attivo
|
||||
SWITCHING_TO: Passare a
|
||||
SWITCHING_TO_DESCRIPTION: Cambiando il tema, non è garantito che tutti i layout di pagina siano supportati, potenzialmente causando errori quando si tenta di caricare tali pagine.
|
||||
SWITCHING_TO_CONFIRMATION: Vuoi continuare e passare al tema
|
||||
CREATE_NEW_USER: Crea nuovo utente
|
||||
REMOVE_USER: Rimuovi utente
|
||||
ACCESS_DENIED: Accesso negato
|
||||
ACCOUNT_NOT_ADMIN: il tuo account non ha permessi di amministratore
|
||||
PHP_INFO: PHP Info
|
||||
INSTALLER: Installazione
|
||||
AVAILABLE_THEMES: Temi disponibili
|
||||
AVAILABLE_PLUGINS: Plugin disponibili
|
||||
INSTALLED_THEMES: Temi installati
|
||||
INSTALLED_PLUGINS: Plugin installati
|
||||
BROWSE_ERROR_LOGS: Vedi log errori
|
||||
SITE: Sito
|
||||
INFO: Info
|
||||
SYSTEM: Sistema
|
||||
USER: Utente
|
||||
ADD_ACCOUNT: Aggiungi utente
|
||||
SWITCH_LANGUAGE: Cambia lingua
|
||||
SUCCESSFULLY_ENABLED_PLUGIN: Plugin abilitato con successo
|
||||
SUCCESSFULLY_DISABLED_PLUGIN: Plugin disabilitato con successo
|
||||
SUCCESSFULLY_CHANGED_THEME: Tema cambiato con successo
|
||||
INSTALLATION_FAILED: Intallazione fallita
|
||||
INSTALLATION_SUCCESSFUL: Installazione avvenuta con successo
|
||||
SUCCESSFULLY_SAVED: Salvato con successo
|
||||
SUCCESSFULLY_COPIED: Copiato con successo
|
||||
REORDERING_WAS_SUCCESSFUL: Riordinato con successo
|
||||
SUCCESSFULLY_DELETED: Eliminato con successo
|
||||
SUCCESSFULLY_SWITCHED_LANGUAGE: Lingua cambiata con successo
|
||||
INSUFFICIENT_PERMISSIONS_FOR_TASK: Permissi insufficenti per l'operazione
|
||||
CACHE_CLEARED: Cache pulita
|
||||
METHOD: Metodo
|
||||
ERROR_CLEARING_CACHE: Errore nella pulizia della cache
|
||||
AN_ERROR_OCCURRED: Errore rilevato
|
||||
YOUR_BACKUP_IS_READY_FOR_DOWNLOAD: Il tuo backup è pronto per il download
|
||||
DOWNLOAD_BACKUP: Scarica backup
|
||||
PAGES_FILTERED: Pagine filtrate
|
||||
NO_PAGE_FOUND: Nessuna pagina trovata
|
||||
INVALID_PARAMETERS: Parametri invalidi
|
||||
NO_FILES_SENT: Nessun file inviato
|
||||
EXCEEDED_FILESIZE_LIMIT: Superati i limiti di dimensione file
|
||||
UNKNOWN_ERRORS: Errore sconosciuto
|
||||
EXCEEDED_GRAV_FILESIZE_LIMIT: Superato il limite di upload file
|
||||
UNSUPPORTED_FILE_TYPE: Tipo di file non supportato
|
||||
FAILED_TO_MOVE_UPLOADED_FILE: Fallito lo spostamento del file caricato
|
||||
FILE_UPLOADED_SUCCESSFULLY: File caricato con successo
|
||||
FILE_DELETED: File eliminato
|
||||
FILE_COULD_NOT_BE_DELETED: Il file non può essere eliminato
|
||||
FILE_NOT_FOUND: File non trovato
|
||||
NO_FILE_FOUND: Nessun file trovato
|
||||
GRAV_WAS_SUCCESSFULLY_UPDATED_TO: Grav è stato correttamente aggiornato a
|
||||
GRAV_UPDATE_FAILED: Aggiornamento di Grav fallito
|
||||
EVERYTHING_UPDATED: Tutto aggiornato
|
||||
UPDATES_FAILED: Aggiornamento fallito
|
||||
AVATAR_BY: Avatar da
|
||||
LAST_BACKUP: Ultimo Backup
|
||||
FULL_NAME: Nome completo
|
||||
USERNAME: Nome utente
|
||||
EMAIL: Email
|
||||
PASSWORD: Password
|
||||
TITLE: Titolo
|
||||
LANGUAGE: Lingua
|
||||
ACCOUNT: Account
|
||||
EMAIL_VALIDATION_MESSAGE: Deve essere un indirizzo email valido
|
||||
PASSWORD_VALIDATION_MESSAGE: La password deve contenere almeno un numero, una lettera maiuscola e una minuscola, ed essere lunga almeno 8 caratteri
|
||||
LANGUAGE_HELP: Imposta la lingua preferita
|
||||
DEFAULTS: Defaults
|
||||
SITE_TITLE: Titolo del sito
|
||||
SITE_TITLE_PLACEHOLDER: Titolo di tutto il sito
|
||||
SITE_TITLE_HELP: Il titolo di default per il tuo sito, usato soprattutto dai temi
|
||||
DEFAULT_AUTHOR: Autore predefinito
|
||||
DEFAULT_AUTHOR_HELP: Un nome autore di default, usato dai temi o dal contenuto delle pagine
|
||||
DEFAULT_EMAIL: Email predefinita
|
||||
DEFAULT_EMAIL_HELP: Una email predefinita, usata dal tema o dalle pagine
|
||||
TAXONOMY_TYPES: Tassonomie
|
||||
TAXONOMY_TYPES_HELP: Le tassonomie devono essere definite qui per essere utilizzate nelle pagine
|
||||
PAGE_SUMMARY: Sommario pagina
|
||||
ENABLED: Abilitato
|
||||
ENABLED_HELP: Abilita il sommario pagina (il sommario viene preso dal contenuto della pagina)
|
||||
YES: Si
|
||||
NO: No
|
||||
SUMMARY_SIZE: Dimensione del sommario
|
||||
SUMMARY_SIZE_HELP: Il numero di caratteri del contenuto della pagina da usare come sommario
|
||||
FORMAT: Formato
|
||||
FORMAT_HELP: corto = usa la prima occorrenza di un delimitatore o strings; lungo = il delimitatore di sommario verrà ignorato
|
||||
SHORT: Corto
|
||||
LONG: Lungo
|
||||
DELIMITER: Delimitatore
|
||||
DELIMITER_HELP: Il delimitatore di sommario (default '===')
|
||||
METADATA: Metadata
|
||||
METADATA_HELP: I valori metadata di default che saranno mostrati in ogni pagina se non vi è un override nella pagina
|
||||
NAME: Nome
|
||||
CONTENT: Contenuto
|
||||
REDIRECTS_AND_ROUTES: Redirect & Route
|
||||
CUSTOM_REDIRECTS: Redirect custom
|
||||
CUSTOM_REDIRECTS_HELP: route impostate per redirigere gli alias indicati verso altre pagine. Regex accettate.
|
||||
CUSTOM_REDIRECTS_PLACEHOLDER_KEY: /il-tuo/alias
|
||||
CUSTOM_REDIRECTS_PLACEHOLDER_VALUE: /il-tuo/redirect
|
||||
CUSTOM_ROUTES: Route custom
|
||||
CUSTOM_ROUTES_HELP: route impostate per essere alias di altre pagine. Regex accettate.
|
||||
CUSTOM_ROUTES_PLACEHOLDER_KEY: /il-tuo/alias
|
||||
CUSTOM_ROUTES_PLACEHOLDER_VALUE: /la-tua/route
|
||||
|
||||
@@ -737,13 +737,19 @@ form .checkboxes {
|
||||
z-index: 10000; }
|
||||
|
||||
table,
|
||||
tbody {
|
||||
tbody,
|
||||
thead {
|
||||
display: inline-block;
|
||||
width: 100%; }
|
||||
|
||||
.gpm-details {
|
||||
width: 100%;
|
||||
-webkit-box-flex: auto;
|
||||
-moz-box-flex: auto;
|
||||
box-flex: auto;
|
||||
-webkit-flex: auto;
|
||||
-moz-flex: auto;
|
||||
-ms-flex: auto;
|
||||
flex: auto; }
|
||||
|
||||
td {
|
||||
@@ -907,6 +913,8 @@ tr {
|
||||
color: #fff;
|
||||
text-decoration: none;
|
||||
background-color: #349886; }
|
||||
.button-group .dropdown-menu.language-switcher a.active {
|
||||
background-color: #349886; }
|
||||
|
||||
.open > .dropdown-menu {
|
||||
display: block; }
|
||||
@@ -1358,6 +1366,11 @@ tr {
|
||||
left: 4px; }
|
||||
.pages-list .row .hint:after, .pages-list .row [data-hint]:after {
|
||||
border-radius: 2px; }
|
||||
.pages-list .row .badge.lang {
|
||||
background-color: gray;
|
||||
color: white;
|
||||
border-radius: 20%;
|
||||
margin-left: 8px; }
|
||||
.pages-list .page-tools {
|
||||
display: inline-block;
|
||||
float: right;
|
||||
|
||||
File diff suppressed because one or more lines are too long
@@ -484,9 +484,12 @@ $(function () {
|
||||
input.prop('checked', on);
|
||||
input.prop('value', on ? 1 : 0);
|
||||
$(this).css('opacity', on ? 1 : 0.7);
|
||||
input.siblings('label').css('opacity', on ? 1 : 0.7);
|
||||
$(this).parents('.form-label').siblings('.form-data').css('opacity', on ? 1 : 0.7);
|
||||
|
||||
});
|
||||
|
||||
// Thems Switcher Warning
|
||||
// Themes Switcher Warning
|
||||
$(document).on('mousedown', '[data-remodal-target="theme-switch-warn"]', function(e){
|
||||
var name = $(e.target).closest('[data-gpm-theme]').find('.gpm-name a').text(),
|
||||
remodal = $('.remodal.theme-switcher');
|
||||
|
||||
@@ -100,6 +100,12 @@
|
||||
background-color: $secondary-accent-bg;
|
||||
}
|
||||
}
|
||||
|
||||
&.language-switcher {
|
||||
a.active {
|
||||
background-color: #349886
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -114,4 +120,4 @@
|
||||
bottom: 0;
|
||||
left: 0;
|
||||
z-index: 990;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -43,6 +43,13 @@
|
||||
.hint:after, [data-hint]:after {
|
||||
border-radius: 2px;
|
||||
}
|
||||
|
||||
.badge.lang {
|
||||
background-color: gray;
|
||||
color: white;
|
||||
border-radius: 20%;
|
||||
margin-left: 8px;
|
||||
}
|
||||
}
|
||||
|
||||
.page-tools {
|
||||
|
||||
@@ -1,13 +1,13 @@
|
||||
table,
|
||||
tbody {
|
||||
tbody,
|
||||
thead {
|
||||
display: inline-block;
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.gpm-details {
|
||||
width: 100%;
|
||||
-webkit-flex: auto;
|
||||
flex: auto;
|
||||
@include flex(auto);
|
||||
}
|
||||
|
||||
td {
|
||||
|
||||
@@ -3,20 +3,20 @@
|
||||
{% block titlebar %}
|
||||
<div class="button-bar">
|
||||
<div class="button-group">
|
||||
<button data-clear-cache="{{ base_url_relative }}/cache.json/task{{ config.system.param_sep }}clearCache" class="button"><i class="fa fa-trash"></i> Clear Cache</button>
|
||||
<button data-clear-cache="{{ base_url_relative }}/cache.json/task{{ config.system.param_sep }}clearCache" class="button"><i class="fa fa-trash"></i> {{ "PLUGIN_ADMIN.CLEAR_CACHE"|tu }}</button>
|
||||
<button type="button" class="button dropdown-toggle" data-toggle="dropdown">
|
||||
<i class="fa fa-caret-down"></i>
|
||||
</button>
|
||||
<ul class="dropdown-menu">
|
||||
<li><a data-clear-cache="{{ base_url_relative }}/cache.json/task{{ config.system.param_sep }}clearCache/cleartype:all" href="#">All Cache</a></li>
|
||||
<li><a data-clear-cache="{{ base_url_relative }}/cache.json/task{{ config.system.param_sep }}clearCache/cleartype:assets-only" href="#">Assets Only</a></li>
|
||||
<li><a data-clear-cache="{{ base_url_relative }}/cache.json/task{{ config.system.param_sep }}clearCache/cleartype:images-only" href="#">Images Only</a></li>
|
||||
<li><a data-clear-cache="{{ base_url_relative }}/cache.json/task{{ config.system.param_sep }}clearCache/cleartype:cache-only" href="#">Cache Only</a></li>
|
||||
<li><a data-clear-cache="{{ base_url_relative }}/cache.json/task{{ config.system.param_sep }}clearCache/cleartype:all" href="#">{{ "PLUGIN_ADMIN.CLEAR_CACHE_ALL_CACHE"|tu }}</a></li>
|
||||
<li><a data-clear-cache="{{ base_url_relative }}/cache.json/task{{ config.system.param_sep }}clearCache/cleartype:assets-only" href="#">{{ "PLUGIN_ADMIN.CLEAR_CACHE_ASSETS_ONLY"|tu }}</a></li>
|
||||
<li><a data-clear-cache="{{ base_url_relative }}/cache.json/task{{ config.system.param_sep }}clearCache/cleartype:images-only" href="#">{{ "PLUGIN_ADMIN.CLEAR_CACHE_IMAGES_ONLY"|tu }}</a></li>
|
||||
<li><a data-clear-cache="{{ base_url_relative }}/cache.json/task{{ config.system.param_sep }}clearCache/cleartype:cache-only" href="#">{{ "PLUGIN_ADMIN.CLEAR_CACHE_CACHE_ONLY"|tu }}</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
<button data-gpm-checkupdates="" class="button"><i class="fa fa-refresh"></i> Check for Updates</button>
|
||||
<button data-gpm-checkupdates="" class="button"><i class="fa fa-refresh"></i> {{ "PLUGIN_ADMIN.CHECK_FOR_UPDATES"|tu }}</button>
|
||||
</div>
|
||||
<h1><i class="fa fa-fw fa-th"></i> Dashboard</h1>
|
||||
<h1><i class="fa fa-fw fa-th"></i> {{ "PLUGIN_ADMIN.DASHBOARD"|tu }}</h1>
|
||||
{% endblock %}
|
||||
|
||||
{% block messages %}{% endblock %}
|
||||
@@ -30,14 +30,14 @@
|
||||
<div id="admin-dashboard">
|
||||
<div id="updates" class="dashboard-item dashboard-left">
|
||||
<div class="tertiary-accent default-box-shadow">
|
||||
<h1>Maintenance</h1>
|
||||
<h1>{{ "PLUGIN_ADMIN.MAINTENANCE"|tu }}</h1>
|
||||
<div class="admin-update-charts">
|
||||
<div class="updates-chart">
|
||||
<div class="chart-wrapper">
|
||||
<div class="ct-chart"></div>
|
||||
<span class="numeric"><span>-</span><em>updated</em></span>
|
||||
<span class="numeric"><span>-</span><em>{{ "PLUGIN_ADMIN.UPDATED"|tu|lower }}</em></span>
|
||||
</div>
|
||||
<p>Updates Available</p>
|
||||
<p>{{ "PLUGIN_ADMIN.UPDATES_AVAILABLE"|tu }}</p>
|
||||
</div>
|
||||
<div class="backups-chart">
|
||||
<div class="chart-wrapper">
|
||||
@@ -56,20 +56,20 @@
|
||||
};
|
||||
Chartist.Pie('.backups-chart .ct-chart', data, options);
|
||||
</script>
|
||||
<span class="numeric">{{ backup.days }}<em>days</em></span>
|
||||
<span class="numeric">{{ backup.days }}<em>{{ "PLUGIN_ADMIN.DAYS"|tu|lower }}</em></span>
|
||||
</div>
|
||||
<p>Last Backup</p>
|
||||
<p>{{ "PLUGIN_ADMIN.LAST_BACKUP"|tu }}</p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="flush-bottom button-bar">
|
||||
<button data-maintenance-update="{{ base_url_relative }}/update.json/task{{ config.system.param_sep }}update" class="button"><i class="fa fa-cloud-download"></i> Update</button>
|
||||
<button data-ajax="{{ base_url_relative }}/backup.json/task{{ config.system.param_sep }}backup" class="button"><i class="fa fa-database"></i> Backup</button>
|
||||
<button data-maintenance-update="{{ base_url_relative }}/update.json/task{{ config.system.param_sep }}update" class="button"><i class="fa fa-cloud-download"></i> {{ "PLUGIN_ADMIN.UPDATE"|tu }}</button>
|
||||
<button data-ajax="{{ base_url_relative }}/backup.json/task{{ config.system.param_sep }}backup" class="button"><i class="fa fa-database"></i> {{ "PLUGIN_ADMIN.BACKUP"|tu }}</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div id="popularity" class="dashboard-item dashboard-right">
|
||||
<div class="secondary-accent default-box-shadow">
|
||||
<h1>Statistics</h1>
|
||||
<h1>{{ "PLUGIN_ADMIN.STATISTICS"|tu }}</h1>
|
||||
<div class="ct-chart"></div>
|
||||
<script>
|
||||
var data = {
|
||||
@@ -105,15 +105,15 @@
|
||||
<div class="flush-bottom button-bar stats-bar">
|
||||
<span class="stat">
|
||||
<b>{{ popularity.getDailyTotal }}</b>
|
||||
<i>Today</i>
|
||||
<i>{{ "PLUGIN_ADMIN.TODAY"|tu }}</i>
|
||||
</span>
|
||||
<span class="stat">
|
||||
<b>{{ popularity.getWeeklyTotal }}</b>
|
||||
<i>Week</i>
|
||||
<i>{{ "PLUGIN_ADMIN.WEEK"|tu }}</i>
|
||||
</span>
|
||||
<span class="stat">
|
||||
<b>{{ popularity.getMonthlyTotal }}</b>
|
||||
<i>Month</i>
|
||||
<i>{{ "PLUGIN_ADMIN.MONTH"|tu }}</i>
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
@@ -125,13 +125,13 @@
|
||||
|
||||
{% include 'partials/messages.html.twig' %}
|
||||
{% if config.plugins.admin.show_beta_msg %}
|
||||
<div class="error alert"><i class="fa fa-exclamation-circle"></i> {{ 'ADMIN_BETA_MSG'|t }}</div>
|
||||
<div class="error alert"><i class="fa fa-exclamation-circle"></i> {{ 'PLUGIN_ADMIN.ADMIN_BETA_MSG'|tu }}</div>
|
||||
{% endif %}
|
||||
<div id="latest">
|
||||
<div class="button-bar">
|
||||
<a class="button" href="{{ uri.route(true) }}/pages"><i class="fa fa-fw fa-file-text-o"></i>Manage Pages</a>
|
||||
<a class="button" href="{{ uri.route(true) }}/pages"><i class="fa fa-fw fa-file-text-o"></i>{{ "PLUGIN_ADMIN.MANAGE_PAGES"|tu }}</a>
|
||||
</div>
|
||||
<h1>Latest Page Updates</h1>
|
||||
<h1>{{ "PLUGIN_ADMIN.LATEST_PAGE_UPDATES"|tu }}</h1>
|
||||
<table>
|
||||
{% for latest in admin.latestPages %}
|
||||
<tr><td class="double"><a href="{{ base_url }}/pages/{{ latest.route|trim('/') }}"><i class="fa fa-fw fa-file-o"></i> {{ latest.title }}</a></td><td class="double">{{ latest.route }}</td><td><b>{{ latest.modified|nicetime }}</b></td></tr>
|
||||
|
||||
@@ -3,12 +3,12 @@
|
||||
{% block content %}
|
||||
<div class="admin-block">
|
||||
<h1>
|
||||
Access denied
|
||||
{{ "PLUGIN_ADMIN.ACCESS_DENIED"|tu }}
|
||||
</h1>
|
||||
|
||||
{% include 'partials/messages.html.twig' %}
|
||||
|
||||
<p>{{ admin.user.fullname }}, your account does not have administrator permissions. <a href="{{ base_url_relative }}/task{{ config.system.param_sep }}logout">Logout</a></p>
|
||||
<p>{{ admin.user.fullname }}, {{ "PLUGIN_ADMIN.ACCOUNT_NOT_ADMIN"|tu }}. <a href="{{ base_url_relative }}/task{{ config.system.param_sep }}logout">{{ "PLUGIN_ADMIN.LOGOUT"|tu }}</a></p>
|
||||
</div>
|
||||
{% endblock %}
|
||||
|
||||
|
||||
@@ -179,7 +179,7 @@
|
||||
<table>
|
||||
<tr>
|
||||
<td align="center">
|
||||
{{ 'EMAIL_FOOTER'|t }}
|
||||
{{ 'PLUGIN_ADMIN.EMAIL_FOOTER'|tu }}
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
@@ -9,7 +9,7 @@
|
||||
{% endif %}
|
||||
{% endfor %}
|
||||
<div class="form-actions secondary-accent">
|
||||
<button type="submit" class="button primary" name="task" value="forgot"><i class="fa fa-paper-plane"></i> {{ "LOGIN_BTN_SEND_INSTRUCTIONS"|t }}</button>
|
||||
<button type="submit" class="button primary" name="task" value="forgot"><i class="fa fa-paper-plane"></i> {{ "PLUGIN_ADMIN.LOGIN_BTN_SEND_INSTRUCTIONS"|tu }}</button>
|
||||
</div>
|
||||
{% endblock %}
|
||||
|
||||
|
||||
@@ -20,9 +20,9 @@
|
||||
<label class="{{ field.toggleable ? 'toggleable' : '' }}">
|
||||
{% block label %}
|
||||
{% if field.help %}
|
||||
<span class="hint--bottom" data-hint="{{ field.help|e }}">{{ field.label }}</span>
|
||||
<span class="hint--bottom" data-hint="{{ field.help|e }}">{{ field.label|tu }}</span>
|
||||
{% else %}
|
||||
{{ field.label }}
|
||||
{{ field.label|tu }}
|
||||
{% endif %}
|
||||
{{ field.validate.required in ['on', 'true', 1] ? '<span class="required">*</span>' }}
|
||||
{% endblock %}
|
||||
|
||||
@@ -4,9 +4,9 @@
|
||||
<div class="form-label block size-1-3 pure-u-1-3">
|
||||
<label>
|
||||
{% if field.help %}
|
||||
<span class="tooltip" data-asTooltip-position="w" title="{{ field.help|e }}">{{ field.label }}</span>
|
||||
<span class="tooltip" data-asTooltip-position="w" title="{{ field.help|e }}">{{ field.label|tu }}</span>
|
||||
{% else %}
|
||||
{{ field.label }}
|
||||
{{ field.label|tu }}
|
||||
{% endif %}
|
||||
{{ field.validate.required in ['on', 'true', 1] ? '<span class="required">*</span>' }}
|
||||
</label>
|
||||
|
||||
@@ -4,9 +4,9 @@
|
||||
<div class="form-label">
|
||||
<label>
|
||||
{% if field.help %}
|
||||
<span class="tooltip" data-asTooltip-position="w" title="{{ field.help|e }}">{{ field.label }}</span>
|
||||
<span class="tooltip" data-asTooltip-position="w" title="{{ field.help|e }}">{{ field.label|tu }}</span>
|
||||
{% else %}
|
||||
{{ field.label }}
|
||||
{{ field.label|tu }}
|
||||
{% endif %}
|
||||
{{ field.validate.required in ['on', 'true', 1] ? '<span class="required">*</span>' }}
|
||||
</label>
|
||||
|
||||
@@ -7,9 +7,9 @@
|
||||
<div class="form-label block size-1-4 pure-u-1-4">
|
||||
<label>
|
||||
{% if field.help %}
|
||||
<span class="tooltip" data-asTooltip-position="w" title="{{ field.help|e }}">{{ field.label }}</span>
|
||||
<span class="tooltip" data-asTooltip-position="w" title="{{ field.help|e }}">{{ field.label|tu }}</span>
|
||||
{% else %}
|
||||
{{ field.label }}
|
||||
{{ field.label|tu }}
|
||||
{% endif %}
|
||||
{{ field.validate.required in ['on', 'true', 1] ? '<span class="required">*</span>' }}
|
||||
</label>
|
||||
|
||||
@@ -6,9 +6,9 @@
|
||||
<div class="form-label block size-1-3 pure-u-1-3">
|
||||
<label>
|
||||
{% if field.help %}
|
||||
<span class="tooltip" data-asTooltip-position="w" title="{{ field.help|e }}">{{ field.label }}</span>
|
||||
<span class="tooltip" data-asTooltip-position="w" title="{{ field.help|e }}">{{ field.label|tu }}</span>
|
||||
{% else %}
|
||||
{{ field.label }}
|
||||
{{ field.label|tu }}
|
||||
{% endif %}
|
||||
{{ field.validate.required in ['on', 'true', 1] ? '<span class="required">*</span>' }}
|
||||
</label>
|
||||
|
||||
@@ -4,9 +4,9 @@
|
||||
<div class="form-label block size-1-3 pure-u-1-3">
|
||||
<label>
|
||||
{% if field.help %}
|
||||
<span class="tooltip" data-asTooltip-position="w" title="{{ field.help|e }}">{{ field.label }}</span>
|
||||
<span class="tooltip" data-asTooltip-position="w" title="{{ field.help|e }}">{{ field.label|tu }}</span>
|
||||
{% else %}
|
||||
{{ field.label }}
|
||||
{{ field.label|tu }}
|
||||
{% endif %}
|
||||
{{ field.validate.required in ['on', 'true', 1] ? '<span class="required">*</span>' }}
|
||||
</label>
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
{% if field.title %}
|
||||
<h1 {% if not field.underline %}class="no_underline"{% endif %}>{{ field.title }}</h1>
|
||||
<h1 {% if not field.underline %}class="no_underline"{% endif %}>{{ field.title|tu }}</h1>
|
||||
{% endif %}
|
||||
|
||||
{% if field.text %}
|
||||
<p>{{ field.text }}<p>
|
||||
<p>{{ field.text|tu }}<p>
|
||||
{% endif %}
|
||||
|
||||
{% if field.fields %}
|
||||
|
||||
@@ -15,7 +15,7 @@
|
||||
{% if field.form %}form="{{ field.form }}"{% endif %}
|
||||
>
|
||||
{% for key, text in field.options %}
|
||||
<option {% if key == value or text in value %}selected="selected"{% endif %} value="{{ field.multiple ? text : key }}">{{ text }}</option>
|
||||
<option {% if key == value or text in value %}selected="selected"{% endif %} value="{{ field.multiple ? text : key }}">{{ text|tu }}</option>
|
||||
{% endfor %}
|
||||
</select>
|
||||
</div>
|
||||
|
||||
@@ -9,7 +9,7 @@
|
||||
{% endif %}
|
||||
|
||||
{% if field.fields %}
|
||||
{% for tab in field.fields %}<input type="radio" name="tab" id="tab{{ loop.index }}" class="tab-head" {{ active == loop.index ? 'checked="checked"' : '' }}/><label for="tab{{ loop.index }}">{{ tab.title }}</label>{% endfor %}
|
||||
{% for tab in field.fields %}<input type="radio" name="tab" id="tab{{ loop.index }}" class="tab-head" {{ active == loop.index ? 'checked="checked"' : '' }}/><label for="tab{{ loop.index }}">{{ tab.title|tu }}</label>{% endfor %}
|
||||
<div class="tab-body-wrapper">
|
||||
{% for field in field.fields %}
|
||||
{% set value = data.value(field.name) %}
|
||||
|
||||
@@ -36,7 +36,7 @@
|
||||
{% endif %}
|
||||
{% if field.validate.required in ['on', 'true', 1] %}required="required"{% endif %}
|
||||
/>
|
||||
<label for="{{ id }}">{{ text }}</label>
|
||||
<label for="{{ id }}">{{ text|tu }}</label>
|
||||
{% endfor %}
|
||||
<a></a>
|
||||
</div>
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
{% if exists %}
|
||||
<div class="form-field">
|
||||
<div class="form-data form-uploads-wrapper">
|
||||
<h3>{{ field.label }}</h3>
|
||||
<h3>{{ field.label|tu }}</h3>
|
||||
<div id="gravDropzone" class="dropzone"></div>
|
||||
<span>{{ value|join("\n") }}</span>
|
||||
<script>
|
||||
|
||||
@@ -2,9 +2,9 @@
|
||||
|
||||
{% block titlebar %}
|
||||
<div class="button-bar">
|
||||
<a class="button" href="{{ base_url }}"><i class="fa fa-reply"></i> Back</a>
|
||||
<a class="button" href="{{ base_url }}"><i class="fa fa-reply"></i> {{ "PLUGIN_ADMIN.BACK"|tu }}</a>
|
||||
</div>
|
||||
<h1><i class="fa fa-fw fa-th"></i> Configuration - PHP Info</h1>
|
||||
<h1><i class="fa fa-fw fa-th"></i> {{ "PLUGIN_ADMIN.CONFIGURATION"|tu }} - {{ "PLUGIN_ADMIN.PHP_INFO"|tu }}</h1>
|
||||
{% endblock %}
|
||||
|
||||
{% block content_top %}
|
||||
|
||||
@@ -1,11 +1,9 @@
|
||||
{% extends 'partials/base.html.twig' %}
|
||||
|
||||
|
||||
{% block content %}
|
||||
|
||||
<div class="admin-block">
|
||||
<h1>
|
||||
Installer
|
||||
{{ "PLUGIN_ADMIN.INSTALLER"|tu }}
|
||||
</h1>
|
||||
|
||||
{% include 'partials/messages.html.twig' %}
|
||||
|
||||
@@ -9,8 +9,8 @@
|
||||
{% endif %}
|
||||
{% endfor %}
|
||||
<div class="form-actions secondary-accent">
|
||||
<a class="button secondary" href="{{ base_url_relative }}/forgot"><i class="fa fa-exclamation-circle"></i> {{ 'LOGIN_BTN_FORGOT'|t }}</a>
|
||||
<button type="submit" class="button primary" name="task" value="login"><i class="fa fa-sign-in"></i> {{ 'LOGIN_BTN'|t }}</button>
|
||||
<a class="button secondary" href="{{ base_url_relative }}/forgot"><i class="fa fa-exclamation-circle"></i> {{ 'PLUGIN_ADMIN.LOGIN_BTN_FORGOT'|tu }}</a>
|
||||
<button type="submit" class="button primary" name="task" value="login"><i class="fa fa-sign-in"></i> {{ 'PLUGIN_ADMIN.LOGIN_BTN'|tu }}</button>
|
||||
</div>
|
||||
{% endblock %}
|
||||
|
||||
|
||||
@@ -10,7 +10,7 @@
|
||||
{{ title }}
|
||||
</h1>
|
||||
|
||||
<div class="info alert">{{ 'LOGGED_OUT'|t }}</div>
|
||||
<div class="info alert">{{ 'PLUGIN_ADMIN.LOGGED_OUT'|tu }}</div>
|
||||
{% include 'partials/messages.html.twig' %}
|
||||
</section>
|
||||
{% endblock %}
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
|
||||
<div class="admin-block">
|
||||
<h1>
|
||||
Browse Error Logs
|
||||
{{ 'PLUGIN_ADMIN.BROWSE_ERROR_LOGS'|tu }}
|
||||
</h1>
|
||||
|
||||
<table>
|
||||
|
||||
@@ -19,6 +19,8 @@
|
||||
|
||||
{% set warn = config.plugins.admin.warnings.delete_page %}
|
||||
|
||||
{% set admin_lang = admin.session.admin_lang ?: 'en' %}
|
||||
|
||||
{% block stylesheets %}
|
||||
{% if mode == 'edit' %}
|
||||
{% do assets.addCss(theme_url~'/css/codemirror/codemirror.css') %}
|
||||
@@ -38,7 +40,7 @@
|
||||
|
||||
{% set preview_link = '<a class="preview" href="'~ base_url_relative_frontend ~ (context.home ? '' : context.route) ~'"><i class="fa fa-fw fa-angle-double-right"></i></a>' %}
|
||||
|
||||
{% macro loop(page, base_url, depth, warn, separator) %}
|
||||
{% macro loop(page, base_url, depth, warn, separator, admin_lang, default_site_lang) %}
|
||||
{% for p in page.children() %}
|
||||
{% set description = (not p.page ? 'Folder • ' : 'Page • ') ~
|
||||
(p.modular ? 'Modular • ' : '') ~
|
||||
@@ -50,13 +52,19 @@
|
||||
<span {{ p.children(0).count > 0 ? 'data-toggle="children"' : ''}} data-hint="{{ description|trim(' • ') }}" class="hint--bottom">
|
||||
<i class="page-icon fa fa-fw fa-circle-o {{ p.children(0).count > 0 ? 'children-closed' : ''}} {{ p.modular ? 'modular' : (not p.routable ? 'not-routable' : (not p.visible ? 'not-visible' : (not p.page ? 'folder' : ''))) }}"></i>
|
||||
</span>
|
||||
<a href="{{ base_url }}/pages/{{ p.route|trim('/') }}" class="page-edit">{{ p.menu }}</a>
|
||||
{% if p.language == admin_lang %}
|
||||
<a href="{{ base_url }}/pages/{{ p.route|trim('/') }}" class="page-edit">{{ p.menu }}</a>
|
||||
{% else %}
|
||||
{{ p.menu }} <span class="badge lang">{{p.language ?: default_site_lang}}</span>
|
||||
{% endif %}
|
||||
<span class="page-home">{{ p.home ? '<i class="fa fa-home"></i>' }}</span>
|
||||
<span class="page-tools">
|
||||
{% if warn %}
|
||||
<a href="#delete" data-remodal-target="delete" data-delete-url="{{ base_url }}/pages/{{ p.route|trim('/') }}/task{{ separator }}delete" class="page-delete" ><i class="fa fa-close"></i></a>
|
||||
{% else %}
|
||||
<a href="{{ base_url }}/pages/{{ p.route|trim('/') }}/task{{ separator }}delete" class="page-delete" ><i class="fa fa-close"></i></a>
|
||||
{% if p.language == admin_lang %}
|
||||
{% if warn %}
|
||||
<a href="#delete" data-remodal-target="delete" data-delete-url="{{ base_url }}/pages/{{ p.route|trim('/') }}/task{{ separator }}delete" class="page-delete" ><i class="fa fa-close"></i></a>
|
||||
{% else %}
|
||||
<a href="{{ base_url }}/pages/{{ p.route|trim('/') }}/task{{ separator }}delete" class="page-delete" ><i class="fa fa-close"></i></a>
|
||||
{% endif %}
|
||||
{% endif %}
|
||||
</span>
|
||||
<p class="page-route">{{ p.route }}</p>
|
||||
@@ -64,7 +72,7 @@
|
||||
{% if p.children().count > 0 %}
|
||||
|
||||
<ul class="depth-{{ depth + 1 }}" style="display:none;">
|
||||
{{ _self.loop(p, base_url, depth + 1, warn, separator) }}
|
||||
{{ _self.loop(p, base_url, depth + 1, warn, separator, admin_lang, default_site_lang) }}
|
||||
</ul>
|
||||
{% endif %}
|
||||
</li>
|
||||
@@ -75,36 +83,52 @@
|
||||
{% block titlebar %}
|
||||
<div class="button-bar">
|
||||
{% if mode == 'list' %}
|
||||
<a class="button" href="{{ base_url }}"><i class="fa fa-reply"></i> Back</a>
|
||||
<a class="button" href="#modal" data-remodal-target="modal"><i class="fa fa-plus"></i> Add Page</a>
|
||||
<a class="button" href="#modular" data-remodal-target="modular"><i class="fa fa-plus"></i> Add Modular</a>
|
||||
<a class="button" href="{{ base_url }}"><i class="fa fa-reply"></i> {{ "PLUGIN_ADMIN.BACK"|tu }}</a>
|
||||
<a class="button" href="#modal" data-remodal-target="modal"><i class="fa fa-plus"></i> {{ "PLUGIN_ADMIN.ADD_PAGE"|tu }}</a>
|
||||
<a class="button" href="#modular" data-remodal-target="modular"><i class="fa fa-plus"></i> {{ "PLUGIN_ADMIN.ADD_MODULAR"|tu }}</a>
|
||||
|
||||
{% if admin.multilang %}
|
||||
<div class="button-group">
|
||||
<button type="button" class="button dropdown-toggle" data-toggle="dropdown">
|
||||
<i class="fa fa-language"></i> {{ "PLUGIN_ADMIN.SWITCH_LANGUAGE"|tu }} <i class="fa fa-caret-down"></i>
|
||||
</button>
|
||||
<ul class="dropdown-menu language-switcher">
|
||||
{% for language in admin.languages_enabled %}
|
||||
<li><a class="button {% if admin_lang == language %}active{% endif %}" href="{{ base_url_relative }}{{ theme.slug }}/pages/task{{ config.system.param_sep }}switchlanguage/lang{{ config.system.param_sep }}{{language}}">{{ admin.siteLanguages[language]|capitalize }}</a></li>
|
||||
{% endfor %}
|
||||
</ul>
|
||||
</div>
|
||||
{% endif %}
|
||||
|
||||
{% elseif mode == 'edit' %}
|
||||
<a class="button" href="{{ base_url }}/pages"><i class="fa fa-reply"></i> Back</a>
|
||||
<a class="button" href="{{ base_url }}/pages"><i class="fa fa-reply"></i> {{ "PLUGIN_ADMIN.BACK"|tu }}</a>
|
||||
{% if exists %}
|
||||
<a class="button" href="{{ uri.route(true) }}/task{{ config.system.param_sep }}copy" class="page-copy" ><i class="fa fa-copy"></i> Copy</a>
|
||||
<a class="button" href="#" data-remodal-target="move"><i class="fa fa-arrows"></i> Move</a>
|
||||
<a class="button" href="{{ uri.route(true) }}/task{{ config.system.param_sep }}copy" class="page-copy" ><i class="fa fa-copy"></i> {{ "PLUGIN_ADMIN.COPY"|tu }}</a>
|
||||
<a class="button" href="#" data-remodal-target="move"><i class="fa fa-arrows"></i> {{ "PLUGIN_ADMIN.MOVE"|tu }}</a>
|
||||
{% if warn %}
|
||||
<a class="button" href="#delete" data-remodal-target="delete" data-delete-url="{{ uri.route(true) }}/task{{ config.system.param_sep }}delete"><i class="fa fa-close"></i> Delete</a>
|
||||
<a class="button" href="#delete" data-remodal-target="delete" data-delete-url="{{ uri.route(true) }}/task{{ config.system.param_sep }}delete"><i class="fa fa-close"></i> {{ "PLUGIN_ADMIN.DELETE"|tu }}</a>
|
||||
{% else %}
|
||||
<a class="button" href="{{ uri.route(true) }}/task{{ config.system.param_sep }}delete" class="page-delete" ><i class="fa fa-close"></i></a>
|
||||
{% endif %}
|
||||
{% endif %}
|
||||
<button class="button" name="task" value="save" form="blueprints"><i class="fa fa-check"></i> Save</button>
|
||||
<button class="button" name="task" value="save" form="blueprints"><i class="fa fa-check"></i> {{ "PLUGIN_ADMIN.SAVE"|tu }}</button>
|
||||
|
||||
{% endif %}
|
||||
</div>
|
||||
{% if mode == 'new' %}
|
||||
<h1><i class="fa fa-fw fa-file-text-o"></i> Add Page</h1>
|
||||
<h1><i class="fa fa-fw fa-file-text-o"></i> {{ "PLUGIN_ADMIN.ADD_PAGE"|tu }}</h1>
|
||||
{% elseif mode == 'edit' %}
|
||||
<h1><i class="fa fa-fw fa-file-text-o"></i>
|
||||
{{ context.exists ? "Edit '#{context.menu}'" ~ preview_link : "Create '#{context.menu}'" }}
|
||||
{{ context.exists ? "PLUGIN_ADMIN.EDIT"|tu ~ " '#{context.menu}'" ~ preview_link : "PLUGIN_ADMIN.CREATE"|tu ~ " '#{context.menu}'" }}
|
||||
</h1>
|
||||
{% else %}
|
||||
<h1><i class="fa fa-fw fa-file-text-o"></i> Manage Pages</h1>
|
||||
<h1><i class="fa fa-fw fa-file-text-o"></i> {{ "PLUGIN_ADMIN.MANAGE_PAGES"|tu }}</h1>
|
||||
{% endif %}
|
||||
{% endblock %}
|
||||
|
||||
{% block content %}
|
||||
|
||||
{% set default_site_lang = grav.config.system.languages|first|first %}
|
||||
<div class="admin-block clear">
|
||||
{% include 'partials/messages.html.twig' %}
|
||||
{% if mode == 'new' %}
|
||||
@@ -115,9 +139,9 @@
|
||||
<form id="admin-mode-toggle">
|
||||
<div class="switch-toggle switch-grav">
|
||||
<input type="radio" value="normal" data-leave-url="{{ uri.route(true) }}/mode:normal" id="normal" name="mode-switch" class="highlight" {% if admin.session.expert == '0' %} checked="checked"{% endif %}>
|
||||
<label for="normal">Normal</label>
|
||||
<label for="normal">{{ "PLUGIN_ADMIN.NORMAL"|tu }}</label>
|
||||
<input type="radio" value="expert" data-leave-url="{{ uri.route(true) }}/mode:expert" id="expert" name="mode-switch" class="highlight" {% if admin.session.expert == '1' %} checked="checked"{% endif %}>
|
||||
<label for="expert">Expert</label>
|
||||
<label for="expert">{{ "PLUGIN_ADMIN.EXPERT"|tu }}</label>
|
||||
<a></a>
|
||||
</div>
|
||||
</form>
|
||||
@@ -132,28 +156,28 @@
|
||||
{% else %}
|
||||
<form id="page-filtering">
|
||||
<div class="page-filters">
|
||||
<input type="text" placeholder="Add Filters" class="page-filter" name="page-filter" />
|
||||
<input type="text" placeholder="{{ "PLUGIN_ADMIN.ADD_FILTERS"|tu }}" class="page-filter" name="page-filter" />
|
||||
</div>
|
||||
<div class="page-search">
|
||||
<input type="text" placeholder="Search Pages" name="page-search" />
|
||||
<input type="text" placeholder="{{ "PLUGIN_ADMIN.SEARCH_PAGES"|tu }}" name="page-search" />
|
||||
</div>
|
||||
<div class="page-shortcuts">
|
||||
<span class="button button-x-small" data-page-toggleall="expand"><i class="fa fa-fw fa-plus-circle"></i> Expand All</span>
|
||||
<span class="button button-x-small" data-page-toggleall="collapse"><i class="fa fa-fw fa-minus-circle"></i> Collapse All</span>
|
||||
<span class="button button-x-small" data-page-toggleall="expand"><i class="fa fa-fw fa-plus-circle"></i> {{ "PLUGIN_ADMIN.EXPAND_ALL"|tu }}</span>
|
||||
<span class="button button-x-small" data-page-toggleall="collapse"><i class="fa fa-fw fa-minus-circle"></i> {{ "PLUGIN_ADMIN.COLLAPSE_ALL"|tu }}</span>
|
||||
</div>
|
||||
</form>
|
||||
<ul class="pages-list depth-0">
|
||||
{{ _self.loop(pages, base_url_relative, 0, warn, config.system.param_sep) }}
|
||||
{{ _self.loop(pages, base_url_relative, 0, warn, config.system.param_sep, admin.session.admin_lang, default_site_lang) }}
|
||||
</ul>
|
||||
{% endif %}
|
||||
</div>
|
||||
|
||||
<div class="remodal" data-remodal-id="generic" data-remodal-options="hashTracking: false">
|
||||
<form>
|
||||
<h1>Error</h1>
|
||||
<h1>{{ "PLUGIN_ADMIN.ERROR"|tu }}</h1>
|
||||
<div class="error-content"></div>
|
||||
<div class="button-bar">
|
||||
<a class="button remodal-confirm" href="#">Close</a>
|
||||
<a class="button remodal-confirm" href="#">{{ "PLUGIN_ADMIN.CLOSE"|tu }}</a>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
@@ -177,14 +201,14 @@
|
||||
|
||||
<div class="remodal" data-remodal-id="delete" data-remodal-options="hashTracking: false">
|
||||
<form>
|
||||
<h1>Confirmation Required</h1>
|
||||
<h1>{{ "PLUGIN_ADMIN.MODAL_DELETE_PAGE_CONFIRMATION_REQUIRED_TITLE"|tu }}</h1>
|
||||
<p class="bigger">
|
||||
Are you sure you want to delete this page and all it's children? This action cannot be undone.
|
||||
{{ "PLUGIN_ADMIN.MODAL_DELETE_PAGE_CONFIRMATION_REQUIRED_DESC"|tu }}
|
||||
</p>
|
||||
<br>
|
||||
<div class="button-bar">
|
||||
<a class="button secondary remodal-cancel" href="#"><i class="fa fa-fw fa-close"></i> Cancel</a>
|
||||
<a class="button" data-delete-action href="#"><i class="fa fa-fw fa-check"></i>Continue</a>
|
||||
<a class="button secondary remodal-cancel" href="#"><i class="fa fa-fw fa-close"></i> {{ "PLUGIN_ADMIN.CANCEL"|tu }}</a>
|
||||
<a class="button" data-delete-action href="#"><i class="fa fa-fw fa-check"></i> {{ "PLUGIN_ADMIN.CONTINUE"|tu }}</a>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
@@ -192,28 +216,28 @@
|
||||
|
||||
<div class="remodal" data-remodal-id="changes">
|
||||
<form>
|
||||
<h1>Changes Detected</h1>
|
||||
<h1>{{ "PLUGIN_ADMIN.MODAL_CHANGED_DETECTED_TITLE"|tu }}</h1>
|
||||
<p class="bigger">
|
||||
You have unsaved changes. Are you sure you want to leave without saving?
|
||||
{{ "PLUGIN_ADMIN.MODAL_CHANGED_DETECTED_DESC"|tu }}
|
||||
</p>
|
||||
<br>
|
||||
<div class="button-bar">
|
||||
<a class="button secondary" data-leave-action="cancel" href="#"><i class="fa fa-fw fa-close"></i> Cancel</a>
|
||||
<a class="button" data-leave-action="continue" href="#"><i class="fa fa-fw fa-check"></i>Continue</a>
|
||||
<a class="button secondary" data-leave-action="cancel" href="#"><i class="fa fa-fw fa-close"></i> {{ "PLUGIN_ADMIN.CANCEL"|tu }}</a>
|
||||
<a class="button" data-leave-action="continue" href="#"><i class="fa fa-fw fa-check"></i> {{ "PLUGIN_ADMIN.CONTINUE"|tu }}</a>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
|
||||
<div class="remodal" data-remodal-id="delete-media" data-remodal-options="hashTracking: false">
|
||||
<form>
|
||||
<h1>Confirmation Required</h1>
|
||||
<h1>{{ "PLUGIN_ADMIN.MODAL_DELETE_FILE_CONFIRMATION_REQUIRED_TITLE"|tu }}</h1>
|
||||
<p class="bigger">
|
||||
Are you sure you want to delete this file? This action cannot be undone.
|
||||
{{ "PLUGIN_ADMIN.MODAL_DELETE_FILE_CONFIRMATION_REQUIRED_DESC"|tu }}
|
||||
</p>
|
||||
<br>
|
||||
<div class="button-bar">
|
||||
<a class="button secondary remodal-cancel" href="#"><i class="fa fa-fw fa-close"></i> Cancel</a>
|
||||
<a class="button remodal-confirm" href="#"><i class="fa fa-fw fa-check"></i>Continue</a>
|
||||
<a class="button secondary remodal-cancel" href="#"><i class="fa fa-fw fa-close"></i> {{ "PLUGIN_ADMIN.CANCEL"|tu }}</a>
|
||||
<a class="button remodal-confirm" href="#"><i class="fa fa-fw fa-check"></i> {{ "PLUGIN_ADMIN.CONTINUE"|tu }}</a>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
|
||||
@@ -90,12 +90,12 @@
|
||||
{% block content %}{% endblock %}
|
||||
</div>
|
||||
{% if config.plugins.admin.show_beta_msg %}
|
||||
<div class="notice alert"><i class="fa fa-github"></i> <a href="https://github.com/getgrav/grav-plugin-admin/issues" target="_blank">{{ 'ADMIN_REPORT_ISSUE'|t }}</a></div>
|
||||
<div class="notice alert"><i class="fa fa-github"></i> <a href="https://github.com/getgrav/grav-plugin-admin/issues" target="_blank">{{ 'PLUGIN_ADMIN.ADMIN_REPORT_ISSUE'|tu }}</a></div>
|
||||
{% endif %}
|
||||
{% block content_bottom %}{% endblock %}
|
||||
</div>
|
||||
<footer id="footer">
|
||||
<a href="http://getgrav.org">Grav</a> version <span class="grav-version">{{ constant('GRAV_VERSION') }}</span> was made with <i class="fa fa-heart"></i> by <a href="http://www.rockettheme.com">RocketTheme</a>.
|
||||
<a href="http://getgrav.org">Grav</a> {{ "PLUGIN_ADMIN.VERSION"|tu|lower }} <span class="grav-version">{{ constant('GRAV_VERSION') }}</span> {{ "PLUGIN_ADMIN.WAS_MADE_WITH"|tu|lower }} <i class="fa fa-heart"></i> {{ "PLUGIN_ADMIN.BY"|tu|lower }} <a href="http://www.rockettheme.com">RocketTheme</a>.
|
||||
</footer>
|
||||
</div>
|
||||
|
||||
|
||||
@@ -11,6 +11,6 @@
|
||||
{% endfor %}
|
||||
|
||||
<div class="button-bar">
|
||||
<button class="button primary" name="task" value="continue">Continue</button>
|
||||
<button class="button primary" name="task" value="continue">{{ "PLUGIN_ADMIN.CONTINUE"|tu }}</button>
|
||||
</div>
|
||||
</form>
|
||||
|
||||
@@ -11,8 +11,6 @@
|
||||
{% endif %}
|
||||
{% endfor %}
|
||||
|
||||
|
||||
|
||||
{% if data.extra %}
|
||||
{% for name, value in data.extra %}
|
||||
{% set field = {name: '_json.' ~ name} %}
|
||||
|
||||
@@ -2,6 +2,6 @@
|
||||
window.GravAdmin = window.GravAdmin || {};
|
||||
window.GravAdmin.config = {
|
||||
base_url_relative: '{{ base_url_relative }}',
|
||||
param_sep: '{{ config.system.param_sep }}'
|
||||
param_sep: '{{ config.system.param_sep }}'
|
||||
};
|
||||
</script>
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
<nav id="admin-sidebar">
|
||||
<div id="admin-logo">
|
||||
<h3><a href="{{ base_url_relative }}">Grav Admin</a> <a target="_blank" href="{{ base_url_relative_frontend }}"><i class="fa fa-fw fa-angle-double-right"></i></a></h3>
|
||||
<h3><a href="{{ base_url_relative }}">{{ "PLUGIN_ADMIN.GRAV_ADMIN"|tu }}</a> <a target="_blank" href="{{ base_url_relative_frontend }}"><i class="fa fa-fw fa-angle-double-right"></i></a></h3>
|
||||
</div>
|
||||
|
||||
{#{% if admin.authorise %}#}
|
||||
@@ -18,14 +18,14 @@
|
||||
|
||||
<ul id="admin-menu">
|
||||
<li class="{{ (location == 'dashboard') ? 'selected' : '' }}">
|
||||
<a href="{{ base_url_relative }}"><i class="fa fa-fw fa-th"></i> Dashboard</a>
|
||||
<a href="{{ base_url_relative }}"><i class="fa fa-fw fa-th"></i> {{ "PLUGIN_ADMIN.DASHBOARD"|tu }}</a>
|
||||
</li>
|
||||
<li class="{{ (location == 'system' or location == 'site') ? 'selected' : '' }}">
|
||||
<a href="{{ base_url_relative }}/system"><i class="fa fa-fw fa-wrench"></i> Configuration</a>
|
||||
<a href="{{ base_url_relative }}/system"><i class="fa fa-fw fa-wrench"></i> {{ "PLUGIN_ADMIN.CONFIGURATION"|tu }}</a>
|
||||
</li>
|
||||
<li class="{{ (location == 'pages') ? 'selected' : '' }}">
|
||||
<a href="{{ base_url_relative }}/pages">
|
||||
<i class="fa fa-fw fa-file-text-o"></i> Pages
|
||||
<i class="fa fa-fw fa-file-text-o"></i> {{ "PLUGIN_ADMIN.PAGES"|tu }}
|
||||
<span class="badges">
|
||||
<span class="badge count">{{ admin.routes|length }}</span>
|
||||
</span>
|
||||
@@ -33,7 +33,7 @@
|
||||
</li>
|
||||
<li class="{{ (location == 'plugins') ? 'selected' : '' }}">
|
||||
<a href="{{ base_url_relative }}/plugins">
|
||||
<i class="fa fa-fw fa-plug"></i> Plugins
|
||||
<i class="fa fa-fw fa-plug"></i> {{ "PLUGIN_ADMIN.PLUGINS"|tu }}
|
||||
<span class="badges">
|
||||
<span class="badge updates"></span>
|
||||
<span class="badge count">{{ admin.plugins|length }}</span>
|
||||
@@ -43,7 +43,7 @@
|
||||
</li>
|
||||
<li class="{{ (location == 'themes') ? 'selected' : '' }}">
|
||||
<a href="{{ base_url_relative }}/themes">
|
||||
<i class="fa fa-fw fa-tint"></i> Themes
|
||||
<i class="fa fa-fw fa-tint"></i> {{ "PLUGIN_ADMIN.THEMES"|tu }}
|
||||
<span class="badges">
|
||||
<span class="badge updates"></span>
|
||||
<span class="badge count">{{ admin.themes|length }}</span>
|
||||
@@ -62,7 +62,7 @@
|
||||
</a>
|
||||
</li> -->
|
||||
<li>
|
||||
<a href="{{ base_url_relative }}/task{{ config.system.param_sep }}logout"><i class="fa fa-fw fa-sign-out"></i> Logout</a>
|
||||
<a href="{{ base_url_relative }}/task{{ config.system.param_sep }}logout"><i class="fa fa-fw fa-sign-out"></i> {{ "PLUGIN_ADMIN.LOGOUT"|tu }}</a>
|
||||
</li>
|
||||
</ul>
|
||||
</nav>
|
||||
|
||||
@@ -11,7 +11,7 @@
|
||||
{% endfor %}
|
||||
|
||||
<div class="button-bar">
|
||||
<a class="button secondary remodal-cancel" href="#"><i class="fa fa-fw fa-close"></i> Cancel</a>
|
||||
<button class="button primary" name="task" value="continue" form="blueprints">Continue</button>
|
||||
<a class="button secondary remodal-cancel" href="#"><i class="fa fa-fw fa-close"></i> {{ "PLUGIN_ADMIN.CANCEL"|tu }}</a>
|
||||
<button class="button primary" name="task" value="continue" form="blueprints">{{ "PLUGIN_ADMIN.CONTINUE"|tu }}</button>
|
||||
</div>
|
||||
</form>
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
<table>
|
||||
{% if plugin.author %}
|
||||
<tr>
|
||||
<td>Author:</td>
|
||||
<td>{{ "PLUGIN_ADMIN.AUTHOR"|tu }}:</td>
|
||||
<td>
|
||||
{% if plugin.author.url %}
|
||||
<a href="{{ plugin.author.url }}" target="_blank">{{ plugin.author.name }}</a>
|
||||
@@ -16,38 +16,38 @@
|
||||
{% endif %}
|
||||
{% if plugin.homepage %}
|
||||
<tr>
|
||||
<td>Homepage:</td>
|
||||
<td>{{ "PLUGIN_ADMIN.HOMEPAGE"|tu }}:</td>
|
||||
<td><a href="{{ plugin.homepage }}" target="_blank">{{ plugin.homepage }}</a></td>
|
||||
</tr>
|
||||
{% endif %}
|
||||
{% if plugin.demo %}
|
||||
<tr>
|
||||
<td>Demo:</td>
|
||||
<td>{{ "PLUGIN_ADMIN.DEMO"|tu }}:</td>
|
||||
<td><a href="{{ plugin.demo }}" target="_blank">{{ plugin.demo }}</a></td>
|
||||
</tr>
|
||||
{% endif %}
|
||||
{% if plugin.bugs %}
|
||||
<tr>
|
||||
<td>Bug Tracker:</td>
|
||||
<td>{{ "PLUGIN_ADMIN.BUG_TRACKER"|tu }}:</td>
|
||||
<td><a href="{{ plugin.bugs }}" target="_blank">{{ plugin.bugs }}</a></td>
|
||||
</tr>
|
||||
{% endif %}
|
||||
{% if plugin.keywords %}
|
||||
<tr>
|
||||
<td>Keywords:</td>
|
||||
<td>{{ "PLUGIN_ADMIN.KEYWORDS"|tu }}:</td>
|
||||
<td>{{ plugin.keywords|join(', ') }}</td>
|
||||
</tr>
|
||||
{% endif %}
|
||||
{% if plugin.license %}
|
||||
<tr>
|
||||
<td>License:</td>
|
||||
<td>{{ "PLUGIN_ADMIN.LICENSE"|tu }}:</td>
|
||||
<td>{{ plugin.license }}</td>
|
||||
</tr>
|
||||
{% endif %}
|
||||
|
||||
{% if plugin.description %}
|
||||
<tr>
|
||||
<td>Description:</td>
|
||||
<td>{{ "PLUGIN_ADMIN.DESCRIPTION"|tu }}:</td>
|
||||
<td>{{ plugin.description_html }}</td>
|
||||
</tr>
|
||||
{% endif %}
|
||||
@@ -55,7 +55,7 @@
|
||||
{% if plugin.readme or plugin.homepage %}
|
||||
{% set readme_link = plugin.readme ?: plugin.homepage ~ '/blob/develop/README.md' %}
|
||||
<tr>
|
||||
<td>Readme:</td>
|
||||
<td>{{ "PLUGIN_ADMIN.README"|tu }}:</td>
|
||||
<td><a href="{{ readme_link }}" target="_blank">{{ readme_link }}</a></td>
|
||||
</tr>
|
||||
{% endif %}
|
||||
|
||||
@@ -6,8 +6,8 @@
|
||||
{% set remote = gpm.getRepositoryPlugin(admin.route) %}
|
||||
<p>
|
||||
<i class="fa fa-bullhorn"></i>
|
||||
<strong>v{{ remote.available }}</strong> of this plugin is now available!
|
||||
<button class="button button-small secondary" data-download="{{ remote.zipball_url }}">Update Plugin</button>
|
||||
<strong>v{{ remote.available }}</strong> {{ "PLUGIN_ADMIN.OF_THIS_PLUGIN_IS_NOW_AVAILABLE"|tu }}!
|
||||
<button class="button button-small secondary" data-download="{{ remote.zipball_url }}">{{ "PLUGIN_ADMIN.UPDATE_PLUGIN"|tu }}</button>
|
||||
</p>
|
||||
{% endif %}
|
||||
</div>
|
||||
@@ -15,17 +15,17 @@
|
||||
<h1>
|
||||
{{ plugin.name|e }}
|
||||
{% if admin.isTeamGrav(plugin) %}
|
||||
<small><span class="info-reverse"><i class="fa fa-check-circle" title="Grav Official Plugin"></i></span></small>
|
||||
<small><span class="info-reverse"><i class="fa fa-check-circle" title="{{ "PLUGIN_ADMIN.GRAV_OFFICIAL_PLUGIN"|tu }}"></i></span></small>
|
||||
{% endif %}
|
||||
{% if plugin.symlink %}
|
||||
<small class="hint--bottom" data-hint="This plugin is symbolically linked. Updates won't be detected.">
|
||||
<small class="hint--bottom" data-hint="{{ "PLUGIN_ADMIN.PLUGIN_SYMBOLICALLY_LINKED"|tu }}">
|
||||
<i class="fa fa-fw fa-link"></i>
|
||||
</small>
|
||||
{% endif %}
|
||||
<small>{{ plugin.version ? 'v' ~ plugin.version|e }}</small>
|
||||
</h1>
|
||||
<div class="gpm-item-info">
|
||||
<i class="gpm-item-icon fa fa-fw fa-{{ plugin.icon }}"></i>
|
||||
<i class="gpm-item-icon fa fa-fw fa-{{ plugin.icon }}"></i>
|
||||
{% include 'partials/plugin-data.html.twig' with { plugin: plugin } %}
|
||||
</div>
|
||||
|
||||
@@ -35,10 +35,10 @@
|
||||
|
||||
<div class="button-bar danger">
|
||||
<span class="danger-zone"></span>
|
||||
<a class="button" href="{{ base_url_relative }}/plugins/{{ plugin.slug }}/task{{ config.system.param_sep }}uninstall"><i class="fa fa-fw fa-warning"></i>Remove Plugin</a>
|
||||
<a class="button" href="{{ base_url_relative }}/plugins/{{ plugin.slug }}/task{{ config.system.param_sep }}uninstall"><i class="fa fa-fw fa-warning"></i>{{ "PLUGIN_ADMIN.REMOVE_PLUGIN"|tu }}</a>
|
||||
</div>
|
||||
{% else %}
|
||||
<div class="button-bar success">
|
||||
<a class="button" href="{{ base_url_relative }}/plugins/{{ plugin.slug }}/task{{ config.system.param_sep }}install"><i class="fa fa-fw fa-plus"></i>Install Plugin</a>
|
||||
<a class="button" href="{{ base_url_relative }}/plugins/{{ plugin.slug }}/task{{ config.system.param_sep }}install"><i class="fa fa-fw fa-plus"></i>{{ "PLUGIN_ADMIN.INSTALL_PLUGIN"|tu }}</a>
|
||||
</div>
|
||||
{% endif %}
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
<div class="grav-update plugins"></div>
|
||||
|
||||
<h1>
|
||||
{{ installing ? 'Available' : 'Installed' }} Plugins
|
||||
{{ installing ? "PLUGIN_ADMIN.AVAILABLE_PLUGINS"|tu : "PLUGIN_ADMIN.INSTALLED_PLUGINS"|tu }}
|
||||
</h1>
|
||||
|
||||
<table>
|
||||
@@ -14,7 +14,7 @@
|
||||
<i class="fa fa-fw fa-{{ plugin.icon }}"></i>
|
||||
<a href="{{ base_url_relative }}/plugins/{{ slug|url_encode }}">{{ plugin.name }}</a>
|
||||
{% if admin.isTeamGrav(plugin) %}
|
||||
<small><span class="info-reverse"><i class="fa fa-check-circle" title="Grav Official Plugin"></i></span></small>
|
||||
<small><span class="info-reverse"><i class="fa fa-check-circle" title="{{ "PLUGIN_ADMIN.GRAV_OFFICIAL_PLUGIN"|tu }}"></i></span></small>
|
||||
{% endif %}
|
||||
{% if plugin.symlink %}
|
||||
<span class="hint--bottom" data-hint="This plugin is symbolically linked. Updates won't be detected.">
|
||||
|
||||
@@ -6,8 +6,8 @@
|
||||
{% set remote = gpm.getRepositoryTheme(admin.route) %}
|
||||
<p>
|
||||
<i class="fa fa-bullhorn"></i>
|
||||
<strong>v{{ remote.available }}</strong> of this theme is now available!
|
||||
<button class="button button-small secondary" data-download="{{ remote.zipball_url }}">Update Theme</button>
|
||||
<strong>v{{ remote.available }}</strong> {{ "PLUGIN_ADMIN.OF_THIS_THEME_IS_NOW_AVAILABLE"|tu }}!
|
||||
<button class="button button-small secondary" data-download="{{ remote.zipball_url }}">{{ "PLUGIN_ADMIN.UPDATE_THEME"|tu }}</button>
|
||||
</p>
|
||||
{% endif %}
|
||||
</div>
|
||||
@@ -29,13 +29,13 @@
|
||||
<table>
|
||||
{% if theme.version %}
|
||||
<tr>
|
||||
<td>Version:</td>
|
||||
<td>{{ "PLUGIN_ADMIN.VERSION"|tu }}:</td>
|
||||
<td>{{ theme.version }}</td>
|
||||
</tr>
|
||||
{% endif %}
|
||||
{% if theme.author %}
|
||||
<tr>
|
||||
<td>Author:</td>
|
||||
<td>{{ "PLUGIN_ADMIN.AUTHOR"|tu }}:</td>
|
||||
<td>
|
||||
{% if theme.author.url %}
|
||||
<a href="{{ theme.author.url }}" target="_blank">{{ theme.author.name }}</a>
|
||||
@@ -50,37 +50,37 @@
|
||||
{% endif %}
|
||||
{% if theme.homepage %}
|
||||
<tr>
|
||||
<td>Homepage:</td>
|
||||
<td>{{ "PLUGIN_ADMIN.HOMEPAGE"|tu }}:</td>
|
||||
<td><a href="{{ theme.homepage }}" target="_blank">{{ theme.homepage }}</a></td>
|
||||
</tr>
|
||||
{% endif %}
|
||||
{% if theme.demo %}
|
||||
<tr>
|
||||
<td>Demo:</td>
|
||||
<td>{{ "PLUGIN_ADMIN.DEMO"|tu }}:</td>
|
||||
<td><a href="{{ theme.demo }}" target="_blank">{{ theme.demo }}</a></td>
|
||||
</tr>
|
||||
{% endif %}
|
||||
{% if theme.bugs %}
|
||||
<tr>
|
||||
<td>Bug Tracker:</td>
|
||||
<td>{{ "PLUGIN_ADMIN.BUG_TRACKER"|tu }}:</td>
|
||||
<td><a href="{{ theme.bugs }}" target="_blank">{{ theme.bugs }}</a></td>
|
||||
</tr>
|
||||
{% endif %}
|
||||
{% if theme.keywords %}
|
||||
<tr>
|
||||
<td>Keywords:</td>
|
||||
<td>{{ "PLUGIN_ADMIN.KEYWORDS"|tu }}:</td>
|
||||
<td>{{ theme.keywords }}</td>
|
||||
</tr>
|
||||
{% endif %}
|
||||
{% if theme.license %}
|
||||
<tr>
|
||||
<td>License:</td>
|
||||
<td>{{ "PLUGIN_ADMIN.LICENCE"|tu }}:</td>
|
||||
<td>{{ theme.license }}</td>
|
||||
</tr>
|
||||
{% endif %}
|
||||
{% if theme.description %}
|
||||
<tr>
|
||||
<td>Description:</td>
|
||||
<td>{{ "PLUGIN_ADMIN.DESCRIPTION"|tu }}:</td>
|
||||
<td>{{ theme.description_html }}</td>
|
||||
</tr>
|
||||
{% endif %}
|
||||
@@ -88,7 +88,7 @@
|
||||
{% if theme.readme or theme.homepage %}
|
||||
{% set readme_link = theme.readme ?: theme.homepage ~ '/blob/develop/README.md' %}
|
||||
<tr>
|
||||
<td>Readme:</td>
|
||||
<td>{{ "PLUGIN_ADMIN.README"|tu }}:</td>
|
||||
<td><a href="{{ readme_link }}" target="_blank">{{ readme_link }}</a></td>
|
||||
</tr>
|
||||
{% endif %}
|
||||
@@ -102,12 +102,12 @@
|
||||
{% if (config.get('system.pages.theme') != admin.route) %}
|
||||
<div class="button-bar danger">
|
||||
<span class="danger-zone"></span>
|
||||
<a class="button" href="{{ base_url_relative }}/themes/{{ theme.slug }}/task{{ config.system.param_sep }}uninstall"><i class="fa fa-fw fa-warning"></i>Remove Theme</a>
|
||||
<a class="button" href="{{ base_url_relative }}/themes/{{ theme.slug }}/task{{ config.system.param_sep }}uninstall"><i class="fa fa-fw fa-warning"></i>{{ "PLUGIN_ADMIN.REMOVE_THEME"|tu }}</a>
|
||||
</div>
|
||||
{% endif %}
|
||||
{% else %}
|
||||
<div class="button-bar success">
|
||||
<a class="button" href="{{ base_url_relative }}/themes/{{ theme.slug }}/task{{ config.system.param_sep }}install"><i class="fa fa-fw fa-plus"></i>Install Theme</a>
|
||||
<a class="button" href="{{ base_url_relative }}/themes/{{ theme.slug }}/task{{ config.system.param_sep }}install"><i class="fa fa-fw fa-plus"></i>{{ "PLUGIN_ADMIN.INSTALL_THEME"|tu }}</a>
|
||||
</div>
|
||||
{% endif %}
|
||||
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
<div class="grav-update themes"></div>
|
||||
|
||||
<h1>
|
||||
{{ installing ? 'Available' : 'Installed' }} Themes
|
||||
{{ installing ? "PLUGIN_ADMIN.AVAILABLE_THEMES"|tu : "PLUGIN_ADMIN.INSTALLED_THEMES"|tu }}
|
||||
</h1>
|
||||
|
||||
<div class="themes card-row grid fixed-blocks pure-g">
|
||||
@@ -16,10 +16,10 @@
|
||||
<i class="fa fa-fw fa-{{ theme.icon }}"></i>
|
||||
<a href="{{ base_url_relative }}/themes/{{ slug|url_encode }}">{{ theme.name }}</a>
|
||||
{% if admin.isTeamGrav(theme) %}
|
||||
<small><span class="info-reverse"><i class="fa fa-check-circle" title="Grav Official Theme"></i></span></small>
|
||||
<small><span class="info-reverse"><i class="fa fa-check-circle" title="{{ "PLUGIN_ADMIN.GRAV_OFFICIAL_THEME"|tu }}"></i></span></small>
|
||||
{% endif %}
|
||||
{% if theme.symlink %}
|
||||
<span class="hint--bottom" data-hint="This theme is symbolically linked. Updates won't be detected.">
|
||||
<span class="hint--bottom" data-hint="{{ "PLUGIN_ADMIN.THEME_SYMBOLICALLY_LINKED"|tu }}">
|
||||
<i class="fa fa-fw fa-link"></i>
|
||||
</span>
|
||||
{% endif %}
|
||||
@@ -31,11 +31,11 @@
|
||||
</div>
|
||||
{% if (state == 'installing') %}
|
||||
<div class="gpm-actions">
|
||||
<a class="button" href="{{ base_url_relative }}/themes/{{ slug }}/task{{ config.system.param_sep }}install"><i class="fa fa-plus"></i> Install</a>
|
||||
<a class="button" href="{{ base_url_relative }}/themes/{{ slug }}/task{{ config.system.param_sep }}install"><i class="fa fa-plus"></i> {{ "PLUGIN_ADMIN.INSTALL"|tu }}</a>
|
||||
</div>
|
||||
{% elseif state == 'active' %}
|
||||
<div class="gpm-actions">
|
||||
<i class="fa fa-star"></i> Active Theme
|
||||
<i class="fa fa-star"></i> {{ "PLUGIN_ADMIN.ACTIVE_THEME"|tu }}
|
||||
</div>
|
||||
{% else %}
|
||||
<a data-remodal-target="theme-switch-warn" href="{{ base_url_relative }}/themes/{{ slug }}/task{{ config.system.param_sep }}activate" class="gpm-actions">
|
||||
@@ -51,16 +51,16 @@
|
||||
|
||||
<div class="remodal theme-switcher" data-remodal-id="theme-switch-warn" data-remodal-options="hashTracking: false">
|
||||
<form>
|
||||
<h1>Switching to <strong>{theme_name}</strong></h1>
|
||||
<h1>{{ "PLUGIN_ADMIN.SWITCHING_TO"|tu }} <strong>{theme_name}</strong></h1>
|
||||
<p class="bigger">
|
||||
By switching to a different theme, there is no guarantee that all the layout pages are supported, potentially causing errors when trying to load said pages.
|
||||
{{ "PLUGIN_ADMIN.SWITCHING_TO_DESCRIPTION"|tu }}
|
||||
</p>
|
||||
<p class="bigger">
|
||||
Do you want to continue and switch to the theme <strong>{theme_name}</strong>?
|
||||
{{ "PLUGIN_ADMIN.SWITCHING_TO_CONFIRMATION"|tu }} <strong>{theme_name}</strong>?
|
||||
</p>
|
||||
<br>
|
||||
<div class="button-bar">
|
||||
<a class="button secondary remodal-cancel" href="#"><i class="fa fa-fw fa-close"></i> Cancel</a>
|
||||
<a class="button continue" href="#"><i class="fa fa-fw fa-check"></i>Continue</a>
|
||||
<a class="button secondary remodal-cancel" href="#"><i class="fa fa-fw fa-close"></i> {{ "PLUGIN_ADMIN.CANCEL"|tu }}</a>
|
||||
<a class="button continue" href="#"><i class="fa fa-fw fa-check"></i>{{ "PLUGIN_ADMIN.CONTINUE"|tu }}</a>
|
||||
</form>
|
||||
</div>
|
||||
|
||||
@@ -10,6 +10,6 @@
|
||||
|
||||
{% if admin.authorise %}
|
||||
<span class="user-details">
|
||||
<img src="http://www.gravatar.com/avatar/{{ admin.user.email|md5 }}?s=50" /><span class="badge">6</span><span class="hide-small">Hi, {{ admin.user.fullname }}<span> <a href="{{ base_url_relative }}/task{{ config.system.param_sep }}logout">Logout</a>
|
||||
<img src="http://www.gravatar.com/avatar/{{ admin.user.email|md5 }}?s=50" /><span class="badge">6</span><span class="hide-small">Hi, {{ admin.user.fullname }}<span> <a href="{{ base_url_relative }}/task{{ config.system.param_sep }}logout">{{ "PLUGIN_ADMIN.LOGOUT"|tu }}</a>
|
||||
</span>
|
||||
{% endif %}
|
||||
|
||||
@@ -1,12 +1,12 @@
|
||||
{% if user.exists %}
|
||||
<div class="user-details">
|
||||
<img src="http://www.gravatar.com/avatar/{{ user.email|md5 }}?s=128" />
|
||||
<p class="gravatar">Avatar by <a href="http://gravatar.com" target="_blank">gravatar.com</a></p>
|
||||
<p class="gravatar">{{ "PLUGIN_ADMIN.AVATAR_BY"|tu }} <a href="http://gravatar.com" target="_blank">gravatar.com</a></p>
|
||||
<h2>{{ user.fullname }}</h2>
|
||||
{% if user.title %}<h5>{{ user.title }}</h5>{% endif %}
|
||||
</div>
|
||||
{% else %}
|
||||
<h1>Create new user</h1>
|
||||
<h1>{{ "PLUGIN_ADMIN.CREATE_NEW_USER"|tu }}</h1>
|
||||
{% endif %}
|
||||
|
||||
{% include 'partials/blueprints.html.twig' with { data: user, blueprints: user.blueprints } %}
|
||||
@@ -14,6 +14,6 @@
|
||||
{% if user.exists and admin.user.username != user.username %}
|
||||
<div class="button-bar danger">
|
||||
<span class="danger-zone"></span>
|
||||
<a class="button" href="#"><i class="fa fa-fw fa-warning"></i>Remove User</a>
|
||||
<a class="button" href="#"><i class="fa fa-fw fa-warning"></i>{{ "PLUGIN_ADMIN.REMOVE_USER"|tu }}</a>
|
||||
</div>
|
||||
{% endif %}
|
||||
|
||||
@@ -18,27 +18,27 @@
|
||||
{% if not admin.route or installing %}
|
||||
<div class="button-bar">
|
||||
{% if (installing) %}
|
||||
<a class="button" href="{{ base_url_relative }}/plugins"><i class="fa fa-reply"></i> Back</a>
|
||||
<a class="button" href="{{ base_url_relative }}/plugins"><i class="fa fa-reply"></i> {{ "PLUGIN_ADMIN.BACK"|tu }}</a>
|
||||
{% else %}
|
||||
<a class="button" href="{{ base_url }}"><i class="fa fa-reply"></i> Back</a>
|
||||
<a class="button" href="{{ base_url_relative }}/plugins/install"><i class="fa fa-plus"></i> Add</a>
|
||||
<button data-gpm-checkupdates="" class="button"><i class="fa fa-refresh"></i> Check for Updates</button>
|
||||
<a class="button" href="{{ base_url }}"><i class="fa fa-reply"></i> {{ "PLUGIN_ADMIN.BACK"|tu }}</a>
|
||||
<a class="button" href="{{ base_url_relative }}/plugins/install"><i class="fa fa-plus"></i> {{ "PLUGIN_ADMIN.ADD"|tu }}</a>
|
||||
<button data-gpm-checkupdates="" class="button"><i class="fa fa-refresh"></i> {{ "PLUGIN_ADMIN.CHECK_FOR_UPDATES"|tu }}</button>
|
||||
{% endif %}
|
||||
</div>
|
||||
<h1><i class="fa fa-fw fa-plug"></i> Plugins</h1>
|
||||
<h1><i class="fa fa-fw fa-plug"></i> {{ "PLUGIN_ADMIN.PLUGINS"|tu }}</h1>
|
||||
{% else %}
|
||||
{% if (installed) %}
|
||||
<div class="button-bar">
|
||||
<a class="button" href="{{ base_url_relative }}/plugins"><i class="fa fa-arrow-left"></i> Back to Plugins</a>
|
||||
<button class="button" type="submit" name="task" value="save" form="blueprints"><i class="fa fa-check"></i> Save</button>
|
||||
<a class="button" href="{{ base_url_relative }}/plugins"><i class="fa fa-arrow-left"></i> {{ "PLUGIN_ADMIN.BACK_TO_PLUGINS"|tu }}</a>
|
||||
<button class="button" type="submit" name="task" value="save" form="blueprints"><i class="fa fa-check"></i> {{ "PLUGIN_ADMIN.SAVE"|tu }}</button>
|
||||
</div>
|
||||
{% else %}
|
||||
<div class="button-bar">
|
||||
<a class="button" href="{{ base_url_relative }}/plugins/install"><i class="fa fa-arrow-left"></i> Back to Plugins</a>
|
||||
<a class="button" href="{{ base_url_relative }}/plugins/install"><i class="fa fa-arrow-left"></i> {{ "PLUGIN_ADMIN.BACK_TO_PLUGINS"|tu }}</a>
|
||||
</div>
|
||||
{% endif %}
|
||||
|
||||
<h1><i class="fa fa-fw fa-plug"></i> Plugin: {{ plugin.name|e }}</h1>
|
||||
<h1><i class="fa fa-fw fa-plug"></i> {{ "PLUGIN_ADMIN.PLUGIN"|tu }}: {{ plugin.name|e }}</h1>
|
||||
|
||||
{% endif %}
|
||||
{% endblock %}
|
||||
|
||||
@@ -11,7 +11,7 @@
|
||||
{% endif %}
|
||||
{% endfor %}
|
||||
<div class="form-actions secondary-accent">
|
||||
<button type="submit" class="button primary" name="task" value="reset"><i class="fa fa-key"></i> {{ 'LOGIN_BTN_RESET'|t }}</button>
|
||||
<button type="submit" class="button primary" name="task" value="reset"><i class="fa fa-key"></i> {{ 'PLUGIN_ADMIN.LOGIN_BTN_RESET'|tu }}</button>
|
||||
</div>
|
||||
{% endblock %}
|
||||
|
||||
|
||||
@@ -2,17 +2,17 @@
|
||||
|
||||
{% block titlebar %}
|
||||
<div class="button-bar">
|
||||
<a class="button" href="{{ base_url }}"><i class="fa fa-reply"></i> Back</a>
|
||||
<a class="button" href="{{ base_url }}"><i class="fa fa-reply"></i> {{ "PLUGIN_ADMIN.BACK"|tu }}</a>
|
||||
<button class="button" type="submit" name="task" value="save" form="blueprints"><i class="fa fa-check"></i> Save</button>
|
||||
</div>
|
||||
<h1><i class="fa fa-fw fa-th"></i> Configuration - Site</h1>
|
||||
<h1><i class="fa fa-fw fa-th"></i> {{ "PLUGIN_ADMIN.CONFIGURATION"|tu }} - {{ "PLUGIN_ADMIN.SITE"|tu }}</h1>
|
||||
{% endblock %}
|
||||
|
||||
{% block content_top %}
|
||||
<ul class="tab-bar">
|
||||
<li><a href="{{ base_url_relative }}/system">System</a></li>
|
||||
<li class="active"><span>Site</span></li>
|
||||
<li><a href="{{ base_url_relative }}/info">Info</a></li>
|
||||
<li><a href="{{ base_url_relative }}/system">{{ "PLUGIN_ADMIN.SYSTEM"|tu }}</a></li>
|
||||
<li class="active"><span>{{ "PLUGIN_ADMIN.SITE"|tu }}</span></li>
|
||||
<li><a href="{{ base_url_relative }}/info">{{ "PLUGIN_ADMIN.INFO"|tu }}</a></li>
|
||||
</ul>
|
||||
{% endblock %}
|
||||
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
|
||||
<div class="admin-block">
|
||||
<h1>
|
||||
Statistics
|
||||
{{ "PLUGIN_ADMIN.STATISTICS"|tu }}
|
||||
</h1>
|
||||
|
||||
{% include 'partials/messages.html.twig' %}
|
||||
|
||||
@@ -2,17 +2,17 @@
|
||||
|
||||
{% block titlebar %}
|
||||
<div class="button-bar">
|
||||
<a class="button" href="{{ base_url }}"><i class="fa fa-reply"></i> Back</a>
|
||||
<a class="button" href="{{ base_url }}"><i class="fa fa-reply"></i> {{ "PLUGIN_ADMIN.BACK"|tu }}</a>
|
||||
<button class="button" type="submit" name="task" value="save" form="blueprints"><i class="fa fa-check"></i> Save</button>
|
||||
</div>
|
||||
<h1><i class="fa fa-fw fa-th"></i> Configuration - System</h1>
|
||||
<h1><i class="fa fa-fw fa-th"></i> {{ "PLUGIN_ADMIN.CONFIGURATION"|tu }} - {{ "PLUGIN_ADMIN.SYSTEM"|tu }}</h1>
|
||||
{% endblock %}
|
||||
|
||||
{% block content_top %}
|
||||
<ul class="tab-bar">
|
||||
<li class="active"><span>System</span></li>
|
||||
<li><a href="{{ base_url_relative }}/site">Site</a></li>
|
||||
<li><a href="{{ base_url_relative }}/info">Info</a></li>
|
||||
<li class="active"><span>{{ "PLUGIN_ADMIN.SYSTEM"|tu }}</span></li>
|
||||
<li><a href="{{ base_url_relative }}/site">{{ "PLUGIN_ADMIN.SITE"|tu }}</a></li>
|
||||
<li><a href="{{ base_url_relative }}/info">{{ "PLUGIN_ADMIN.INFO"|tu }}</a></li>
|
||||
</ul>
|
||||
{% endblock %}
|
||||
|
||||
|
||||
@@ -18,26 +18,26 @@
|
||||
{% if not admin.route or installing %}
|
||||
<div class="button-bar">
|
||||
{% if (installing) %}
|
||||
<a class="button" href="{{ base_url_relative }}/themes"><i class="fa fa-reply"></i> Back</a>
|
||||
<a class="button" href="{{ base_url_relative }}/themes"><i class="fa fa-reply"></i> {{ "PLUGIN_ADMIN.BACK"|tu }}</a>
|
||||
{% else %}
|
||||
<a class="button" href="{{ base_url }}/"><i class="fa fa-reply"></i> Back</a>
|
||||
<a class="button" href="{{ base_url_relative }}/themes/install"><i class="fa fa-plus"></i> Add</a>
|
||||
<button data-gpm-checkupdates="" class="button"><i class="fa fa-refresh"></i> Check for Updates</button>
|
||||
<a class="button" href="{{ base_url }}/"><i class="fa fa-reply"></i> {{ "PLUGIN_ADMIN.BACK"|tu }}</a>
|
||||
<a class="button" href="{{ base_url_relative }}/themes/install"><i class="fa fa-plus"></i> {{ "PLUGIN_ADMIN.ADD"|tu }}</a>
|
||||
<button data-gpm-checkupdates="" class="button"><i class="fa fa-refresh"></i> {{ "PLUGIN_ADMIN.CHECK_FOR_UPDATES"|tu }}</button>
|
||||
{% endif %}
|
||||
</div>
|
||||
<h1><i class="fa fa-fw fa-plug"></i> Themes</h1>
|
||||
<h1><i class="fa fa-fw fa-plug"></i> {{ "PLUGIN_ADMIN.THEMES"|tu }}</h1>
|
||||
{% else %}
|
||||
{% if (installed) %}
|
||||
<div class="button-bar">
|
||||
<a class="button" href="{{ base_url_relative }}/themes"><i class="fa fa-arrow-left"></i> Back to Themes</a>
|
||||
<button class="button" type="submit" name="task" value="save" form="blueprints"><i class="fa fa-check"></i> Save</button>
|
||||
<a class="button" href="{{ base_url_relative }}/themes"><i class="fa fa-arrow-left"></i> {{ "PLUGIN_ADMIN.BACK_TO_THEMES"|tu }}</a>
|
||||
<button class="button" type="submit" name="task" value="save" form="blueprints"><i class="fa fa-check"></i> {{ "PLUGIN_ADMIN.SAVE"|tu }}</button>
|
||||
</div>
|
||||
{% else %}
|
||||
<div class="button-bar">
|
||||
<a class="button" href="{{ base_url_relative }}/themes/install"><i class="fa fa-arrow-left"></i> Back to Themes</a>
|
||||
<a class="button" href="{{ base_url_relative }}/themes/install"><i class="fa fa-arrow-left"></i> {{ "PLUGIN_ADMIN.BACK_TO_THEMES"|tu }}</a>
|
||||
</div>
|
||||
{% endif %}
|
||||
<h1><i class="fa fa-fw fa-plug"></i> Theme: {{ theme.name|e }}</h1>
|
||||
<h1><i class="fa fa-fw fa-plug"></i> {{ "PLUGIN_ADMIN.THEME"|tu }}: {{ theme.name|e }}</h1>
|
||||
{% endif %}
|
||||
{% endblock %}
|
||||
|
||||
|
||||
@@ -7,15 +7,15 @@
|
||||
{% block titlebar %}
|
||||
{% if not admin.route %}
|
||||
<div class="button-bar">
|
||||
<a class="button" href="#modal" data-remodal-target="modal"><i class="fa fa-plus"></i> Add Account</a>
|
||||
<a class="button" href="#modal" data-remodal-target="modal"><i class="fa fa-plus"></i> {{ "PLUGIN_ADMIN.ADD_ACCOUNT"|tu }}</a>
|
||||
</div>
|
||||
<h1><i class="fa fa-fw fa-child"></i> Users</h1>
|
||||
{% else %}
|
||||
<div class="button-bar">
|
||||
<a class="button" href="{{ base_url }}"><i class="fa fa-reply"></i> Back</a>
|
||||
<button class="button" type="submit" name="task" value="save" form="blueprints"><i class="fa fa-check"></i> Save</button>
|
||||
<a class="button" href="{{ base_url }}"><i class="fa fa-reply"></i> {{ "PLUGIN_ADMIN.BACK"|tu }}</a>
|
||||
<button class="button" type="submit" name="task" value="save" form="blueprints"><i class="fa fa-check"></i> {{ "PLUGIN_ADMIN.SAVE"|tu }}</button>
|
||||
</div>
|
||||
<h1><i class="fa fa-fw fa-user"></i> User: {{ user.username|e }}</h1>
|
||||
<h1><i class="fa fa-fw fa-user"></i> {{ "PLUGIN_ADMIN.USER"|tu }}: {{ user.username|e }}</h1>
|
||||
{% endif %}
|
||||
{% endblock %}
|
||||
|
||||
@@ -26,7 +26,6 @@
|
||||
{% if not admin.route %}
|
||||
{% include 'partials/users-list.html.twig' %}
|
||||
|
||||
|
||||
<div class="remodal" data-remodal-id="modal" data-remodal-options="hashTracking: false">
|
||||
{% include 'partials/blueprints-new.html.twig' with { blueprints: admin.blueprints('user/account_new') } %}
|
||||
</div>
|
||||
|
||||
38
twig/AdminTwigExtension.php
Normal file
38
twig/AdminTwigExtension.php
Normal file
@@ -0,0 +1,38 @@
|
||||
<?php
|
||||
namespace Grav\Plugin;
|
||||
|
||||
use \Grav\Common\Grav;
|
||||
|
||||
class AdminTwigExtension extends \Twig_Extension
|
||||
{
|
||||
protected $grav;
|
||||
|
||||
public function __construct()
|
||||
{
|
||||
$this->grav = Grav::instance();
|
||||
$this->lang = $this->grav['user']->language;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns extension name.
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public function getName()
|
||||
{
|
||||
return 'AdminTwigExtension';
|
||||
}
|
||||
|
||||
public function getFilters()
|
||||
{
|
||||
return [
|
||||
new \Twig_SimpleFilter('tu', [$this, 'tuFilter']),
|
||||
|
||||
];
|
||||
}
|
||||
|
||||
public function tuFilter()
|
||||
{
|
||||
return $this->grav['admin']->translate(func_get_args(), [$this->grav['user']->authenticated ? $this->lang : 'en']);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user