Code cleanup

This commit is contained in:
Matias Griese
2018-05-10 10:14:18 +03:00
parent 939eee0d3f
commit 12cf325518
5 changed files with 360 additions and 366 deletions

View File

@@ -16,6 +16,7 @@ use Grav\Plugin\Admin\AdminTwigExtension;
use Grav\Plugin\Admin\Popularity; use Grav\Plugin\Admin\Popularity;
use Grav\Plugin\Admin\Themes; use Grav\Plugin\Admin\Themes;
use Grav\Plugin\Admin\AdminController; use Grav\Plugin\Admin\AdminController;
use Grav\Plugin\Admin\Twig\AdminTwigExtension;
use Grav\Plugin\Login\Login; use Grav\Plugin\Login\Login;
use RocketTheme\Toolbox\Event\Event; use RocketTheme\Toolbox\Event\Event;
use RocketTheme\Toolbox\Session\Session; use RocketTheme\Toolbox\Session\Session;
@@ -118,7 +119,7 @@ class AdminPlugin extends Plugin
// Autoloader // Autoloader
spl_autoload_register(function ($class) { spl_autoload_register(function ($class) {
if (Utils::startsWith($class, 'Grav\Plugin\Admin')) { if (Utils::startsWith($class, 'Grav\Plugin\Admin')) {
require_once __DIR__ .'/classes/' . strtolower(basename(str_replace("\\", "/", $class))) . '.php'; require_once __DIR__ .'/classes/' . strtolower(basename(str_replace("\\", '/', $class))) . '.php';
} }
}); });
@@ -220,7 +221,7 @@ class AdminPlugin extends Plugin
$data = []; $data = [];
$username = $form->value('username'); $username = $form->value('username');
if ($form->value('password1') != $form->value('password2')) { if ($form->value('password1') !== $form->value('password2')) {
$this->grav->fireEvent('onFormValidationError', new Event([ $this->grav->fireEvent('onFormValidationError', new Event([
'form' => $form, 'form' => $form,
'message' => $this->grav['language']->translate('PLUGIN_LOGIN.PASSWORDS_DO_NOT_MATCH') 'message' => $this->grav['language']->translate('PLUGIN_LOGIN.PASSWORDS_DO_NOT_MATCH')
@@ -245,11 +246,8 @@ class AdminPlugin extends Plugin
} }
} }
unset($data['password1']); // Don't store plain text password or username (part of the filename).
unset($data['password2']); unset($data['password1'], $data['password2'], $data['username']);
// Don't store the username: that is part of the filename
unset($data['username']);
// Extra lowercase to ensure file is saved lowercase // Extra lowercase to ensure file is saved lowercase
$username = strtolower($username); $username = strtolower($username);
@@ -313,7 +311,7 @@ class AdminPlugin extends Plugin
} }
// Turn on Twig autoescaping // Turn on Twig autoescaping
if (method_exists($this->grav['twig'], 'setAutoescape') && $this->grav['uri']->param('task') != 'processmarkdown') { if (method_exists($this->grav['twig'], 'setAutoescape') && $this->grav['uri']->param('task') !== 'processmarkdown') {
$this->grav['twig']->setAutoescape(true); $this->grav['twig']->setAutoescape(true);
} }
@@ -361,9 +359,9 @@ class AdminPlugin extends Plugin
$this->session->expert = $this->session->expert ?: false; $this->session->expert = $this->session->expert ?: false;
// set session variable if it's passed via the url // set session variable if it's passed via the url
if ($this->uri->param('mode') == 'expert') { if ($this->uri->param('mode') === 'expert') {
$this->session->expert = true; $this->session->expert = true;
} elseif ($this->uri->param('mode') == 'normal') { } elseif ($this->uri->param('mode') === 'normal') {
$this->session->expert = false; $this->session->expert = false;
} }
@@ -391,7 +389,7 @@ class AdminPlugin extends Plugin
$this->admin->task = $task = !empty($post['task']) ? $post['task'] : $this->uri->param('task'); $this->admin->task = $task = !empty($post['task']) ? $post['task'] : $this->uri->param('task');
if ($task) { if ($task) {
$this->initializeController($task, $post); $this->initializeController($task, $post);
} elseif ($this->template == 'logs' && $this->route) { } elseif ($this->template === 'logs' && $this->route) {
// Display RAW error message. // Display RAW error message.
echo $this->admin->logEntry(); echo $this->admin->logEntry();
exit(); exit();
@@ -637,7 +635,7 @@ class AdminPlugin extends Plugin
} }
// Can't access path directly... // Can't access path directly...
if ($path && $path != 'register') { if ($path && $path !== 'register') {
$array = explode('/', $path, 2); $array = explode('/', $path, 2);
$this->template = array_shift($array); $this->template = array_shift($array);
$this->route = array_shift($array); $this->route = array_shift($array);
@@ -768,8 +766,9 @@ class AdminPlugin extends Plugin
*/ */
public function onTwigExtensions() public function onTwigExtensions()
{ {
require_once(__DIR__ . '/twig/AdminTwigExtension.php'); require_once __DIR__ . '/classes/Twig/AdminTwigExtension.php';
$this->grav['twig']->twig->addExtension(new AdminTwigExtension());
$this->grav['twig']->twig->addExtension(new AdminTwigExtension);
} }
/** /**
@@ -779,23 +778,19 @@ class AdminPlugin extends Plugin
*/ */
public function isAdminPath() public function isAdminPath()
{ {
if ($this->uri->route() == $this->base || substr($this->uri->route(), 0, $route = $this->uri->route();
strlen($this->base) + 1) == $this->base . '/'
) {
return true;
}
return false; return $route === $this->base || 0 === strpos($route, $this->base . '/');
} }
public function onAdminAfterSave(Event $event) public function onAdminAfterSave(Event $event)
{ {
// Special case to redirect after changing the admin route to avoid 'breaking' // Special case to redirect after changing the admin route to avoid 'breaking'
$obj = $event['object']; $obj = $event['object'];
if (!is_null($event['object'])) { if (null !== $obj) {
$blueprint = $obj->blueprints()->getFilename(); $blueprint = $obj->blueprints()->getFilename();
if ($blueprint == 'admin/blueprints' && isset($obj->route) && $this->admin_route !== $obj->route) { if ($blueprint === 'admin/blueprints' && isset($obj->route) && $this->admin_route !== $obj->route) {
$redirect = preg_replace('/^' . str_replace('/','\/',$this->admin_route) . '/',$obj->route,$this->uri->path()); $redirect = preg_replace('/^' . str_replace('/','\/',$this->admin_route) . '/',$obj->route,$this->uri->path());
$this->grav->redirect($redirect); $this->grav->redirect($redirect);
} }
@@ -827,7 +822,7 @@ class AdminPlugin extends Plugin
// Clear flash objects for previously uploaded files // Clear flash objects for previously uploaded files
// whenever the user switches page / reloads // whenever the user switches page / reloads
// ignoring any JSON / extension call // ignoring any JSON / extension call
if (is_null($this->uri->extension()) && $this->admin->task !== 'save') { if ($this->admin->task !== 'save' && empty($this->uri->extension())) {
// Discard any previously uploaded files session. // Discard any previously uploaded files session.
// and if there were any uploaded file, remove them from the filesystem // and if there were any uploaded file, remove them from the filesystem
if ($flash = $this->session->getFlashObject('files-upload')) { if ($flash = $this->session->getFlashObject('files-upload')) {
@@ -884,7 +879,7 @@ class AdminPlugin extends Plugin
// First filter by configuration // First filter by configuration
$hideTypes = Grav::instance()['config']->get('plugins.admin.hide_page_types', []); $hideTypes = Grav::instance()['config']->get('plugins.admin.hide_page_types', []);
foreach ($hideTypes as $type) { foreach ((array) $hideTypes as $type) {
unset($types[$type]); unset($types[$type]);
} }
@@ -908,7 +903,7 @@ class AdminPlugin extends Plugin
$types = Pages::modularTypes(); $types = Pages::modularTypes();
// First filter by configuration // First filter by configuration
$hideTypes = Grav::instance()['config']->get('plugins.admin.hide_modular_page_types', []); $hideTypes = (array) Grav::instance()['config']->get('plugins.admin.hide_modular_page_types', []);
foreach ($hideTypes as $type) { foreach ($hideTypes as $type) {
unset($types[$type]); unset($types[$type]);
} }

View File

@@ -0,0 +1,175 @@
<?php
namespace Grav\Plugin\Admin\Twig;
use Grav\Common\Grav;
use Grav\Common\Language\Language;
use Symfony\Component\Yaml\Yaml;
use Symfony\Component\Yaml\Parser;
class AdminTwigExtension extends \Twig_Extension
{
/**
* @var Grav
*/
protected $grav;
/**
* @var Language $lang
*/
protected $lang;
public function __construct()
{
$this->grav = Grav::instance();
$this->lang = $this->grav['user']->language;
}
public function getFilters()
{
return [
new \Twig_SimpleFilter('tu', [$this, 'tuFilter']),
new \Twig_SimpleFilter('toYaml', [$this, 'toYamlFilter']),
new \Twig_SimpleFilter('fromYaml', [$this, 'fromYamlFilter']),
new \Twig_SimpleFilter('adminNicetime', [$this, 'adminNicetimeFilter']),
];
}
public function getFunctions()
{
return [
new \Twig_SimpleFunction('getPageUrl', [$this, 'getPageUrl'], ['needs_context' => true]),
new \Twig_SimpleFunction('clone', [$this, 'cloneFunc']),
];
}
public function cloneFunc($obj)
{
return clone $obj;
}
public function getPageUrl($context, $page)
{
$page_route = trim($page->rawRoute(), '/');
$page_lang = $page->language();
$base_url = $context['base_url'];
$base_url_simple = $context['base_url_simple'];
$admin_lang = Grav::instance()['session']->admin_lang ?: 'en';
if ($page_lang && $page_lang != $admin_lang) {
$page_url = $base_url_simple . '/' . $page_lang . '/' . $context['admin_route'] . '/pages/' . $page_route;
} else {
$page_url = $base_url . '/pages/' . $page_route;
}
return $page_url;
}
public function tuFilter()
{
$args = func_get_args();
$numargs = count($args);
$lang = null;
if (($numargs === 3 && is_array($args[1])) || ($numargs === 2 && !is_array($args[1]))) {
$lang = array_pop($args);
} elseif ($numargs === 2 && is_array($args[1])) {
$subs = array_pop($args);
$args = array_merge($args, $subs);
}
return $this->grav['admin']->translate($args, $lang);
}
public function toYamlFilter($value, $inline = true)
{
return Yaml::dump($value, $inline);
}
public function fromYamlFilter($value)
{
$yaml = new Parser();
return $yaml->parse($value);
}
public function adminNicetimeFilter($date, $long_strings = true)
{
if (empty($date)) {
return $this->grav['admin']->translate('NICETIME.NO_DATE_PROVIDED', null, true);
}
if ($long_strings) {
$periods = [
'NICETIME.SECOND',
'NICETIME.MINUTE',
'NICETIME.HOUR',
'NICETIME.DAY',
'NICETIME.WEEK',
'NICETIME.MONTH',
'NICETIME.YEAR',
'NICETIME.DECADE'
];
} else {
$periods = [
'NICETIME.SEC',
'NICETIME.MIN',
'NICETIME.HR',
'NICETIME.DAY',
'NICETIME.WK',
'NICETIME.MO',
'NICETIME.YR',
'NICETIME.DEC'
];
}
$lengths = ['60', '60', '24', '7', '4.35', '12', '10'];
$now = time();
// check if unix timestamp
if ((string)(int)$date === (string)$date) {
$unix_date = $date;
} else {
$unix_date = strtotime($date);
}
// check validity of date
if (empty($unix_date)) {
return $this->grav['admin']->translate('NICETIME.BAD_DATE', null, true);
}
// is it future date or past date
if ($now > $unix_date) {
$difference = $now - $unix_date;
$tense = $this->grav['admin']->translate('NICETIME.AGO', null, true);
} else {
$difference = $unix_date - $now;
$tense = $this->grav['admin']->translate('NICETIME.FROM_NOW', null, true);
}
$len = count($lengths) - 1;
for ($j = 0; $difference >= $lengths[$j] && $j < $len; $j++) {
$difference /= $lengths[$j];
}
$difference = round($difference);
if ($difference !== 1) {
$periods[$j] .= '_PLURAL';
}
if ($this->grav['language']->getTranslation($this->grav['user']->language,
$periods[$j] . '_MORE_THAN_TWO')
) {
if ($difference > 2) {
$periods[$j] .= '_MORE_THAN_TWO';
}
}
$periods[$j] = $this->grav['admin']->translate($periods[$j], null, true);
return "$difference $periods[$j] {$tense}";
}
}

View File

@@ -9,6 +9,7 @@ use Grav\Common\GPM\Licenses;
use Grav\Common\GPM\Response; use Grav\Common\GPM\Response;
use Grav\Common\Grav; use Grav\Common\Grav;
use Grav\Common\Language\LanguageCodes; use Grav\Common\Language\LanguageCodes;
use Grav\Common\Page\Collection;
use Grav\Common\Page\Page; use Grav\Common\Page\Page;
use Grav\Common\Page\Pages; use Grav\Common\Page\Pages;
use Grav\Common\Plugins; use Grav\Common\Plugins;
@@ -16,6 +17,7 @@ use Grav\Common\Themes;
use Grav\Common\Uri; use Grav\Common\Uri;
use Grav\Common\User\User; use Grav\Common\User\User;
use Grav\Common\Utils; use Grav\Common\Utils;
use Grav\Plugin\Admin\Twig\AdminTwigExtension;
use Grav\Plugin\Admin\Utils as AdminUtils; use Grav\Plugin\Admin\Utils as AdminUtils;
use RocketTheme\Toolbox\Event\Event; use RocketTheme\Toolbox\Event\Event;
use RocketTheme\Toolbox\File\File; use RocketTheme\Toolbox\File\File;
@@ -214,7 +216,7 @@ class Admin
public static function tools() public static function tools()
{ {
$tools = []; $tools = [];
$event = Grav::instance()->fireEvent('onAdminTools', new Event(['tools' => &$tools])); Grav::instance()->fireEvent('onAdminTools', new Event(['tools' => &$tools]));
return $tools; return $tools;
} }
@@ -227,7 +229,7 @@ class Admin
public static function siteLanguages() public static function siteLanguages()
{ {
$languages = []; $languages = [];
$lang_data = Grav::instance()['config']->get('system.languages.supported', []); $lang_data = (array) Grav::instance()['config']->get('system.languages.supported', []);
foreach ($lang_data as $index => $lang) { foreach ($lang_data as $index => $lang) {
$languages[$lang] = LanguageCodes::getNativeName($lang); $languages[$lang] = LanguageCodes::getNativeName($lang);
@@ -282,6 +284,7 @@ class Admin
$page = $pages->dispatch($route); $page = $pages->dispatch($route);
$parent_route = null; $parent_route = null;
if ($page) { if ($page) {
/** @var Page $parent */
$parent = $page->parent(); $parent = $page->parent();
$parent_route = $parent->rawRoute(); $parent_route = $parent->rawRoute();
} }
@@ -351,6 +354,7 @@ class Admin
* @param array $post Additional form fields. * @param array $post Additional form fields.
* *
* @return bool * @return bool
* @TODO LOGIN
*/ */
public function authenticate($data, $post) public function authenticate($data, $post)
{ {
@@ -365,7 +369,7 @@ class Admin
} }
if (!$this->user->authenticated && isset($data['username']) && isset($data['password'])) { if (!$this->user->authenticated && isset($data['username'], $data['password'])) {
// Perform RegEX check on submitted username to check for emails // Perform RegEX check on submitted username to check for emails
if (filter_var($data['username'], FILTER_VALIDATE_EMAIL)) { if (filter_var($data['username'], FILTER_VALIDATE_EMAIL)) {
$user = AdminUtils::findUserByEmail($data['username']); $user = AdminUtils::findUserByEmail($data['username']);
@@ -420,6 +424,19 @@ class Admin
return false; return false;
} }
/**
* @return bool
* @todo LOGIN
*/
public static function doAnyUsersExist()
{
// check for existence of a user account
$account_dir = $file_path = Grav::instance()['locator']->findResource('account://');
$user_check = glob($account_dir . '/*.yaml');
return $user_check ? true : false;
}
/** /**
* Add message into the session queue. * Add message into the session queue.
* *
@@ -490,9 +507,9 @@ class Admin
if ($translation) { if ($translation) {
if (count($args) >= 1) { if (count($args) >= 1) {
return vsprintf($translation, $args); return vsprintf($translation, $args);
} else {
return $translation;
} }
return $translation;
} }
} }
@@ -502,7 +519,7 @@ class Admin
/** /**
* Checks user authorisation to the action. * Checks user authorisation to the action.
* *
* @param string $action * @param string|string[] $action
* *
* @return bool * @return bool
*/ */
@@ -734,9 +751,9 @@ class Admin
{ {
if (method_exists($this->grav['pages'], 'accessLevels')) { if (method_exists($this->grav['pages'], 'accessLevels')) {
return $this->grav['pages']->accessLevels(); return $this->grav['pages']->accessLevels();
} else {
return [];
} }
return [];
} }
public function license($package_slug) public function license($package_slug)
@@ -773,7 +790,7 @@ class Admin
$dependency = $dependency['name']; $dependency = $dependency['name'];
} }
if (!in_array($dependency, $dependencies)) { if (!in_array($dependency, $dependencies, true)) {
if (!in_array($dependency, ['admin', 'form', 'login', 'email', 'php'])) { if (!in_array($dependency, ['admin', 'form', 'login', 'email', 'php'])) {
$dependencies[] = $dependency; $dependencies[] = $dependency;
} }
@@ -829,20 +846,17 @@ class Admin
if ($local) { if ($local) {
return $gpm->getInstalledPlugins(); return $gpm->getInstalledPlugins();
} else { }
$plugins = $gpm->getRepositoryPlugins(); $plugins = $gpm->getRepositoryPlugins();
if ($plugins) { if ($plugins) {
return $plugins->filter(function ( return $plugins->filter(function ($package, $slug) use ($gpm) {
$package,
$slug
) use ($gpm) {
return !$gpm->isPluginInstalled($slug); return !$gpm->isPluginInstalled($slug);
}); });
} else { }
return []; return [];
} }
}
}
/** /**
* Get all themes. * Get all themes.
@@ -861,20 +875,17 @@ class Admin
if ($local) { if ($local) {
return $gpm->getInstalledThemes(); return $gpm->getInstalledThemes();
} else { }
$themes = $gpm->getRepositoryThemes(); $themes = $gpm->getRepositoryThemes();
if ($themes) { if ($themes) {
return $themes->filter(function ( return $themes->filter(function ($package, $slug) use ($gpm) {
$package,
$slug
) use ($gpm) {
return !$gpm->isThemeInstalled($slug); return !$gpm->isThemeInstalled($slug);
}); });
} else { }
return []; return [];
} }
}
}
/** /**
* Get list of packages that depend on the passed package slug * Get list of packages that depend on the passed package slug
@@ -928,9 +939,7 @@ class Admin
return false; return false;
} }
$dependencies = $this->gpm->getDependencies($packages); return $this->gpm->getDependencies($packages);
return $dependencies;
} }
/** /**
@@ -948,7 +957,7 @@ class Admin
$latest = []; $latest = [];
if (is_null($pages->routes())) { if (null === $pages->routes()) {
return null; return null;
} }
@@ -986,6 +995,7 @@ class Admin
{ {
$file = File::instance($this->grav['locator']->findResource("log://{$this->route}.html")); $file = File::instance($this->grav['locator']->findResource("log://{$this->route}.html"));
$content = $file->content(); $content = $file->content();
$file->free();
return $content; return $content;
} }
@@ -1030,11 +1040,7 @@ class Admin
*/ */
public function isTeamGrav($info) public function isTeamGrav($info)
{ {
if (isset($info['author']['name']) && ($info['author']['name'] == 'Team Grav' || Utils::contains($info['author']['name'], 'Trilby Media'))) { return isset($info['author']['name']) && ($info['author']['name'] === 'Team Grav' || Utils::contains($info['author']['name'], 'Trilby Media'));
return true;
} else {
return false;
}
} }
/** /**
@@ -1046,11 +1052,7 @@ class Admin
*/ */
public function isPremiumProduct($info) public function isPremiumProduct($info)
{ {
if (isset($info['premium'])) { return isset($info['premium']);
return true;
} else {
return false;
}
} }
/** /**
@@ -1069,9 +1071,9 @@ class Admin
$pinfo = preg_replace('%^.*<body>(.*)</body>.*$%ms', '$1', $pinfo); $pinfo = preg_replace('%^.*<body>(.*)</body>.*$%ms', '$1', $pinfo);
return $pinfo; return $pinfo;
} else {
return 'phpinfo() method is not available on this server.';
} }
return 'phpinfo() method is not available on this server.';
} }
/** /**
@@ -1107,7 +1109,8 @@ class Admin
if ($this->validateDate($date, "$date_format $time_format")) { if ($this->validateDate($date, "$date_format $time_format")) {
$guess[$date] = "$date_format $time_format"; $guess[$date] = "$date_format $time_format";
break 2; break 2;
} elseif ($this->validateDate($date, "$time_format $date_format")) { }
if ($this->validateDate($date, "$time_format $date_format")) {
$guess[$date] = "$time_format $date_format"; $guess[$date] = "$time_format $date_format";
break 2; break 2;
} }
@@ -1182,9 +1185,10 @@ class Admin
'r' => 'llll ZZ', 'r' => 'llll ZZ',
'U' => 'X' 'U' => 'X'
]; ];
$js_format = ""; $js_format = '';
$escaping = false; $escaping = false;
for ($i = 0; $i < strlen($php_format); $i++) { $len = strlen($php_format);
for ($i = 0; $i < $len; $i++) {
$char = $php_format[$i]; $char = $php_format[$i];
if ($char === '\\') // PHP date format escaping character if ($char === '\\') // PHP date format escaping character
{ {
@@ -1251,18 +1255,18 @@ class Admin
$notifications = array_reverse($notifications); $notifications = array_reverse($notifications);
// Make adminNicetimeFilter available // Make adminNicetimeFilter available
require_once(__DIR__ . '/../twig/AdminTwigExtension.php'); require_once __DIR__ . '/../classes/Twig/AdminTwigExtension.php';
$adminTwigExtension = new AdminTwigExtension(); $adminTwigExtension = new AdminTwigExtension;
$filename = $this->grav['locator']->findResource('user://data/notifications/' . $this->grav['user']->username . YAML_EXT, $filename = $this->grav['locator']->findResource('user://data/notifications/' . $this->grav['user']->username . YAML_EXT,
true, true); true, true);
$read_notifications = CompiledYamlFile::instance($filename)->content(); $read_notifications = (array)CompiledYamlFile::instance($filename)->content();
$notifications_processed = []; $notifications_processed = [];
foreach ($notifications as $key => $notification) { foreach ($notifications as $key => $notification) {
$is_valid = true; $is_valid = true;
if (in_array($notification->id, $read_notifications)) { if (in_array($notification->id, $read_notifications, true)) {
$notification->read = true; $notification->read = true;
} }
@@ -1272,7 +1276,7 @@ class Admin
if ($is_valid && isset($notification->dependencies)) { if ($is_valid && isset($notification->dependencies)) {
foreach ($notification->dependencies as $dependency => $constraints) { foreach ($notification->dependencies as $dependency => $constraints) {
if ($dependency == 'grav') { if ($dependency === 'grav') {
if (!Semver::satisfies(GRAV_VERSION, $constraints)) { if (!Semver::satisfies(GRAV_VERSION, $constraints)) {
$is_valid = false; $is_valid = false;
} }
@@ -1369,7 +1373,7 @@ class Admin
/** @var Pages $pages */ /** @var Pages $pages */
$pages = $this->grav['pages']; $pages = $this->grav['pages'];
if ($path && $path[0] != '/') { if ($path && $path[0] !== '/') {
$path = "/{$path}"; $path = "/{$path}";
} }
@@ -1378,14 +1382,14 @@ class Admin
if (!$page) { if (!$page) {
$slug = basename($path); $slug = basename($path);
if ($slug == '') { if ($slug === '') {
return null; return null;
} }
$ppath = str_replace('\\', '/', dirname($path)); $ppath = str_replace('\\', '/', dirname($path));
// Find or create parent(s). // Find or create parent(s).
$parent = $this->getPage($ppath != '/' ? $ppath : ''); $parent = $this->getPage($ppath !== '/' ? $ppath : '');
// Create page. // Create page.
$page = new Page; $page = new Page;
@@ -1396,7 +1400,7 @@ class Admin
$pages->addPage($page, $path); $pages->addPage($page, $path);
// Set if Modular // Set if Modular
$page->modularTwig($slug[0] == '_'); $page->modularTwig($slug[0] === '_');
// Determine page type. // Determine page type.
if (isset($this->session->{$page->route()})) { if (isset($this->session->{$page->route()})) {
@@ -1407,13 +1411,14 @@ class Admin
$header = ['title' => $data['title']]; $header = ['title' => $data['title']];
if (isset($data['visible'])) { if (isset($data['visible'])) {
if ($data['visible'] == '' || $data['visible']) { if ($data['visible'] === '' || $data['visible']) {
// if auto (ie '') // if auto (ie '')
$children = $page->parent()->children(); $pageParent = $page->parent();
$children = $pageParent ? $pageParent->children() : [];
foreach ($children as $child) { foreach ($children as $child) {
if ($child->order()) { if ($child->order()) {
// set page order // set page order
$page->order(AdminController::getNextOrderInFolder($page->parent()->path())); $page->order(AdminController::getNextOrderInFolder($pageParent->path()));
break; break;
} }
} }
@@ -1424,7 +1429,7 @@ class Admin
} }
if ($data['name'] == 'modular') { if ($data['name'] === 'modular') {
$header['body_classes'] = 'modular'; $header['body_classes'] = 'modular';
} }
@@ -1446,7 +1451,7 @@ class Admin
$page->name($type . CONTENT_EXT); $page->name($type . CONTENT_EXT);
$page->header(); $page->header();
} }
$page->modularTwig($slug[0] == '_'); $page->modularTwig($slug[0] === '_');
} }
return $page; return $page;
@@ -1466,9 +1471,7 @@ class Admin
$reader = new Reader(); $reader = new Reader();
$parser = $reader->getParser($feed_url, $body, 'utf-8'); $parser = $reader->getParser($feed_url, $body, 'utf-8');
$feed = $parser->execute(); return $parser->execute();
return $feed;
} }
@@ -1593,20 +1596,19 @@ class Admin
* Get all the media of a type ('images' | 'audios' | 'videos' | 'files') * Get all the media of a type ('images' | 'audios' | 'videos' | 'files')
* *
* @param string $type * @param string $type
* @param Page\Page $page * @param Page|null $page
* @param array $files * @param array $files
* *
* @return array * @return array
*/ */
private function getMediaOfType($type, $page, $page_files) { private function getMediaOfType($type, Page $page = null, array $files)
{
if ($page) { if ($page) {
// $path = $page->path();
$media = $page->media(); $media = $page->media();
$mediaOfType = $media->$type(); $mediaOfType = $media->$type();
foreach($mediaOfType as $title => $file) { foreach($mediaOfType as $title => $file) {
$page_files[] = [ $files[] = [
'title' => $title, 'title' => $title,
'type' => $type, 'type' => $type,
'page_route' => $page->route(), 'page_route' => $page->route(),
@@ -1614,10 +1616,10 @@ class Admin
]; ];
} }
return $page_files; return $files;
} else {
return [];
} }
return [];
} }
/** /**
@@ -1722,10 +1724,11 @@ class Admin
*/ */
public function pages() public function pages()
{ {
/** @var Collection $pages */
$pages = $this->grav['pages']->all(); $pages = $this->grav['pages']->all();
$pagesWithFiles = []; $pagesWithFiles = [];
if ($pages) foreach ($pages as $page) { foreach ($pages as $page) {
if (count($page->media()->all())) { if (count($page->media()->all())) {
$pagesWithFiles[] = $page; $pagesWithFiles[] = $page;
} }
@@ -1799,7 +1802,6 @@ class Admin
*/ */
public function getReferrer() public function getReferrer()
{ {
$referrer = isset($_SERVER['HTTP_REFERER']) ? $_SERVER['HTTP_REFERER'] : null; return isset($_SERVER['HTTP_REFERER']) ? $_SERVER['HTTP_REFERER'] : null;
return $referrer;
} }
} }

View File

@@ -10,6 +10,7 @@ use Grav\Common\GPM\Installer;
use Grav\Common\Grav; use Grav\Common\Grav;
use Grav\Common\Data; use Grav\Common\Data;
use Grav\Common\Page\Media; use Grav\Common\Page\Media;
use Grav\Common\Page\Medium\Medium;
use Grav\Common\Page\Page; use Grav\Common\Page\Page;
use Grav\Common\Page\Pages; use Grav\Common\Page\Pages;
use Grav\Common\Page\Collection; use Grav\Common\Page\Collection;
@@ -193,7 +194,7 @@ class AdminController extends AdminBaseController
return false; return false;
} }
if ($this->view != 'plugins') { if ($this->view !== 'plugins') {
return false; return false;
} }
@@ -234,7 +235,7 @@ class AdminController extends AdminBaseController
return false; return false;
} }
if ($this->view != 'plugins') { if ($this->view !== 'plugins') {
return false; return false;
} }
@@ -260,7 +261,7 @@ class AdminController extends AdminBaseController
return false; return false;
} }
if ($this->view != 'themes') { if ($this->view !== 'themes') {
return false; return false;
} }
@@ -363,7 +364,7 @@ class AdminController extends AdminBaseController
$data = (array)$this->data; $data = (array)$this->data;
if ($data['route'] == '/') { if ($data['route'] === '/') {
$path = $this->grav['locator']->findResource('page://'); $path = $this->grav['locator']->findResource('page://');
} else { } else {
$path = $this->grav['page']->find($data['route'])->path(); $path = $this->grav['page']->find($data['route'])->path();
@@ -403,7 +404,7 @@ class AdminController extends AdminBaseController
preg_match(PAGE_ORDER_PREFIX_REGEX, $file, $order); preg_match(PAGE_ORDER_PREFIX_REGEX, $file, $order);
if (isset($order[0])) { if (isset($order[0])) {
$theOrder = intval(trim($order[0], '.')); $theOrder = (int)trim($order[0], '.');
} else { } else {
$theOrder = 0; $theOrder = 0;
} }
@@ -436,10 +437,8 @@ class AdminController extends AdminBaseController
$reorder = true; $reorder = true;
$data = (array)$this->data; $data = (array)$this->data;
$config = $this->grav['config'];
// Special handler for user data. // Special handler for user data.
if ($this->view == 'user') { if ($this->view === 'user') {
if (!$this->admin->authorize(['admin.super', 'admin.users'])) { if (!$this->admin->authorize(['admin.super', 'admin.users'])) {
//not admin.super or admin.users //not admin.super or admin.users
if ($this->prepareData($data)->username !== $this->grav['user']->username) { if ($this->prepareData($data)->username !== $this->grav['user']->username) {
@@ -452,7 +451,7 @@ class AdminController extends AdminBaseController
} }
// Special handler for pages data. // Special handler for pages data.
if ($this->view == 'pages') { if ($this->view === 'pages') {
/** @var Pages $pages */ /** @var Pages $pages */
$pages = $this->grav['pages']; $pages = $this->grav['pages'];
@@ -478,8 +477,8 @@ class AdminController extends AdminBaseController
} }
$parent = $route && $route != '/' && $route != '.' && $route != '/.' ? $pages->dispatch($route, true) : $pages->root(); $parent = $route && $route !== '/' && $route !== '.' && $route !== '/.' ? $pages->dispatch($route, true) : $pages->root();
$original_order = intval(trim($obj->order(), '.')); $original_order = (int)trim($obj->order(), '.');
try { try {
// Change parent if needed and initialize move (might be needed also on ordering/folder change). // Change parent if needed and initialize move (might be needed also on ordering/folder change).
@@ -495,7 +494,7 @@ class AdminController extends AdminBaseController
$obj->filter(); $obj->filter();
// rename folder based on visible // rename folder based on visible
if ($original_order == 1000) { if ($original_order === 1000) {
// increment order to force reshuffle // increment order to force reshuffle
$obj->order($original_order + 1); $obj->order($original_order + 1);
} }
@@ -539,14 +538,14 @@ class AdminController extends AdminBaseController
$this->grav->fireEvent('onAdminAfterSave', new Event(['object' => $obj])); $this->grav->fireEvent('onAdminAfterSave', new Event(['object' => $obj]));
} }
if ($this->view != 'pages') { if ($this->view !== 'pages') {
// Force configuration reload. // Force configuration reload.
/** @var Config $config */ /** @var Config $config */
$config = $this->grav['config']; $config = $this->grav['config'];
$config->reload(); $config->reload();
if ($this->view === 'user') { if ($this->view === 'user') {
if ($obj->username == $this->grav['user']->username) { if ($obj->username === $this->grav['user']->username) {
//Editing current user. Reload user object //Editing current user. Reload user object
unset($this->grav['user']->avatar); unset($this->grav['user']->avatar);
$this->grav['user']->merge(User::load($this->admin->route)->toArray()); $this->grav['user']->merge(User::load($this->admin->route)->toArray());
@@ -610,27 +609,27 @@ class AdminController extends AdminBaseController
{ {
$data = (array)$this->data; $data = (array)$this->data;
if ($this->view == 'users') { if ($this->view === 'users') {
$username = strip_tags(strtolower($data['username'])); $username = strip_tags(strtolower($data['username']));
$this->setRedirect("{$this->view}/{$username}"); $this->setRedirect("{$this->view}/{$username}");
return true; return true;
} }
if ($this->view == 'groups') { if ($this->view === 'groups') {
$this->setRedirect("{$this->view}/{$data['groupname']}"); $this->setRedirect("{$this->view}/{$data['groupname']}");
return true; return true;
} }
if ($this->view != 'pages') { if ($this->view !== 'pages') {
return false; return false;
} }
$route = $data['route'] != '/' ? $data['route'] : ''; $route = $data['route'] !== '/' ? $data['route'] : '';
$folder = $data['folder']; $folder = $data['folder'];
// Handle @slugify-{field} value, automatically slugifies the specified field // Handle @slugify-{field} value, automatically slugifies the specified field
if (substr($folder, 0, 9) == '@slugify-') { if (0 === strpos($folder, '@slugify-')) {
$folder = \Grav\Plugin\Admin\Utils::slug($data[substr($folder, 9)]); $folder = \Grav\Plugin\Admin\Utils::slug($data[substr($folder, 9)]);
} }
$folder = ltrim($folder, '_'); $folder = ltrim($folder, '_');
@@ -716,7 +715,7 @@ class AdminController extends AdminBaseController
$reload = false; $reload = false;
// Get the testing release value if set // Get the testing release value if set
if ($this->post['release'] == 'testing') { if ($this->post['release'] === 'testing') {
$release = 'testing'; $release = 'testing';
} }
@@ -724,12 +723,12 @@ class AdminController extends AdminBaseController
$current_release = $config->get('system.gpm.releases'); $current_release = $config->get('system.gpm.releases');
// If the releases setting is different, save it in the system config // If the releases setting is different, save it in the system config
if ($current_release != $release) { if ($current_release !== $release) {
$data = new Data\Data($config->get('system')); $data = new Data\Data($config->get('system'));
$data->set('gpm.releases', $release); $data->set('gpm.releases', $release);
// Get the file location // Get the file location
$file = CompiledYamlFile::instance($this->grav['locator']->findResource("config://system.yaml")); $file = CompiledYamlFile::instance($this->grav['locator']->findResource('config://system.yaml'));
$data->file($file); $data->file($file);
// Save the configuration // Save the configuration
@@ -755,7 +754,7 @@ class AdminController extends AdminBaseController
{ {
$cache = $this->grav['cache']; $cache = $this->grav['cache'];
if ($this->post['refresh'] == 'true') { if ($this->post['refresh'] === 'true') {
$cache->delete('news-feed'); $cache->delete('news-feed');
} }
@@ -766,8 +765,8 @@ class AdminController extends AdminBaseController
$feed = $this->admin->getFeed(); $feed = $this->admin->getFeed();
if (is_object($feed)) { if (is_object($feed)) {
require_once(__DIR__ . '/../twig/AdminTwigExtension.php'); require_once __DIR__ . '/../classes/Twig/AdminTwigExtension.php';
$adminTwigExtension = new AdminTwigExtension(); $adminTwigExtension = new AdminTwigExtension;
$feed_items = $feed->getItems(); $feed_items = $feed->getItems();
@@ -802,7 +801,7 @@ class AdminController extends AdminBaseController
protected function taskGetUpdates() protected function taskGetUpdates()
{ {
$data = $this->post; $data = $this->post;
$flush = isset($data['flush']) && $data['flush'] == true ? true : false; $flush = (isset($data['flush']) && $data['flush'] == true) ? true : false;
if (isset($this->grav['session'])) { if (isset($this->grav['session'])) {
$this->grav['session']->close(); $this->grav['session']->close();
@@ -814,29 +813,29 @@ class AdminController extends AdminBaseController
$resources_updates = $gpm->getUpdatable(); $resources_updates = $gpm->getUpdatable();
if ($gpm->grav != null) { if ($gpm->grav != null) {
$grav_updates = [ $grav_updates = [
"isUpdatable" => $gpm->grav->isUpdatable(), 'isUpdatable' => $gpm->grav->isUpdatable(),
"assets" => $gpm->grav->getAssets(), 'assets' => $gpm->grav->getAssets(),
"version" => GRAV_VERSION, 'version' => GRAV_VERSION,
"available" => $gpm->grav->getVersion(), 'available' => $gpm->grav->getVersion(),
"date" => $gpm->grav->getDate(), 'date' => $gpm->grav->getDate(),
"isSymlink" => $gpm->grav->isSymlink() 'isSymlink' => $gpm->grav->isSymlink()
]; ];
$this->admin->json_response = [ $this->admin->json_response = [
"status" => "success", 'status' => 'success',
"payload" => [ 'payload' => [
"resources" => $resources_updates, 'resources' => $resources_updates,
"grav" => $grav_updates, 'grav' => $grav_updates,
"installed" => $gpm->countInstalled(), 'installed' => $gpm->countInstalled(),
'flushed' => $flush 'flushed' => $flush
] ]
]; ];
} else { } else {
$this->admin->json_response = ["status" => "error", "message" => "Cannot connect to the GPM"]; $this->admin->json_response = ['status' => 'error', 'message' => 'Cannot connect to the GPM'];
} }
} catch (\Exception $e) { } catch (\Exception $e) {
$this->admin->json_response = ["status" => "error", "message" => $e->getMessage()]; $this->admin->json_response = ['status' => 'error', 'message' => $e->getMessage()];
} }
} }
@@ -966,7 +965,7 @@ class AdminController extends AdminBaseController
return false; return false;
} }
$result = Gpm::install(array_keys($dependencies), ['theme' => ($type == 'theme')]); $result = Gpm::install(array_keys($dependencies), ['theme' => $type === 'theme']);
if ($result) { if ($result) {
$this->admin->json_response = ['status' => 'success', 'message' => 'Dependencies installed successfully']; $this->admin->json_response = ['status' => 'success', 'message' => 'Dependencies installed successfully'];
@@ -996,7 +995,7 @@ class AdminController extends AdminBaseController
} }
try { try {
$result = Gpm::install($package, ['theme' => ($type == 'theme')]); $result = Gpm::install($package, ['theme' => $type === 'theme']);
} catch (\Exception $e) { } catch (\Exception $e) {
$this->admin->json_response = ['status' => 'error', 'message' => $e->getMessage()]; $this->admin->json_response = ['status' => 'error', 'message' => $e->getMessage()];
@@ -1043,11 +1042,11 @@ class AdminController extends AdminBaseController
$dependent_packages = $this->admin->getPackagesThatDependOnPackage($package); $dependent_packages = $this->admin->getPackagesThatDependOnPackage($package);
if (count($dependent_packages) > 0) { if (count($dependent_packages) > 0) {
if (count($dependent_packages) > 1) { if (count($dependent_packages) > 1) {
$message = "The installed packages <cyan>" . implode('</cyan>, <cyan>', $message = 'The installed packages <cyan>' . implode('</cyan>, <cyan>',
$dependent_packages) . "</cyan> depends on this package. Please remove those first."; $dependent_packages) . '</cyan> depends on this package. Please remove those first.';
} else { } else {
$message = "The installed package <cyan>" . implode('</cyan>, <cyan>', $message = 'The installed package <cyan>' . implode('</cyan>, <cyan>',
$dependent_packages) . "</cyan> depends on this package. Please remove it first."; $dependent_packages) . '</cyan> depends on this package. Please remove it first.';
} }
$json_response = ['status' => 'error', 'message' => $message]; $json_response = ['status' => 'error', 'message' => $message];
@@ -1072,7 +1071,8 @@ class AdminController extends AdminBaseController
]; ];
echo json_encode($json_response); echo json_encode($json_response);
exit; exit;
} else { }
$json_response = [ $json_response = [
'status' => 'error', 'status' => 'error',
'message' => $this->admin->translate('PLUGIN_ADMIN.UNINSTALL_FAILED') 'message' => $this->admin->translate('PLUGIN_ADMIN.UNINSTALL_FAILED')
@@ -1081,9 +1081,6 @@ class AdminController extends AdminBaseController
exit; exit;
} }
return true;
}
/** /**
* Handle reinstalling a package * Handle reinstalling a package
*/ */
@@ -1301,7 +1298,7 @@ class AdminController extends AdminBaseController
$file = base64_decode(urldecode($download)); $file = base64_decode(urldecode($download));
$backups_root_dir = $this->grav['locator']->findResource('backup://', true); $backups_root_dir = $this->grav['locator']->findResource('backup://', true);
if (substr($file, 0, strlen($backups_root_dir)) !== $backups_root_dir) { if (0 !== strpos($file, $backups_root_dir)) {
header('HTTP/1.1 401 Unauthorized'); header('HTTP/1.1 401 Unauthorized');
exit(); exit();
} }
@@ -1348,7 +1345,7 @@ class AdminController extends AdminBaseController
protected function taskGetChildTypes() protected function taskGetChildTypes()
{ {
if (!$this->authorizeTask('get childtypes', ['admin.pages', 'admin.super'])) { if (!$this->authorizeTask('get childtypes', ['admin.pages', 'admin.super'])) {
return; return false;
} }
$data = $this->post; $data = $this->post;
@@ -1356,6 +1353,7 @@ class AdminController extends AdminBaseController
$rawroute = !empty($data['rawroute']) ? $data['rawroute'] : null; $rawroute = !empty($data['rawroute']) ? $data['rawroute'] : null;
if ($rawroute) { if ($rawroute) {
/** @var Page $page */
$page = $this->grav['pages']->dispatch($rawroute); $page = $this->grav['pages']->dispatch($rawroute);
if ($page) { if ($page) {
@@ -1411,46 +1409,46 @@ class AdminController extends AdminBaseController
]; ];
if (count(array_intersect($pageStates, $flags)) > 0) { if (count(array_intersect($pageStates, $flags)) > 0) {
if (in_array('modular', $flags)) { if (in_array('modular', $flags, true)) {
$collection = $collection->modular(); $collection = $collection->modular();
} }
if (in_array('nonmodular', $flags)) { if (in_array('nonmodular', $flags, true)) {
$collection = $collection->nonModular(); $collection = $collection->nonModular();
} }
if (in_array('visible', $flags)) { if (in_array('visible', $flags, true)) {
$collection = $collection->visible(); $collection = $collection->visible();
} }
if (in_array('nonvisible', $flags)) { if (in_array('nonvisible', $flags, true)) {
$collection = $collection->nonVisible(); $collection = $collection->nonVisible();
} }
if (in_array('routable', $flags)) { if (in_array('routable', $flags, true)) {
$collection = $collection->routable(); $collection = $collection->routable();
} }
if (in_array('nonroutable', $flags)) { if (in_array('nonroutable', $flags, true)) {
$collection = $collection->nonRoutable(); $collection = $collection->nonRoutable();
} }
if (in_array('published', $flags)) { if (in_array('published', $flags, true)) {
$collection = $collection->published(); $collection = $collection->published();
} }
if (in_array('nonpublished', $flags)) { if (in_array('nonpublished', $flags, true)) {
$collection = $collection->nonPublished(); $collection = $collection->nonPublished();
} }
} }
foreach ($pageStates as $pageState) { foreach ($pageStates as $pageState) {
if (($pageState = array_search($pageState, $flags)) !== false) { if (($pageState = array_search($pageState, $flags, true)) !== false) {
unset($flags[$pageState]); unset($flags[$pageState]);
} }
} }
// Filter by page type // Filter by page type
if (count($flags)) { if ($flags) {
$types = []; $types = [];
$pageTypes = array_keys(Pages::pageTypes()); $pageTypes = array_keys(Pages::pageTypes());
@@ -1467,7 +1465,7 @@ class AdminController extends AdminBaseController
} }
// Filter by page type // Filter by page type
if (count($flags)) { if ($flags) {
$accessLevels = $flags; $accessLevels = $flags;
$collection = $collection->ofOneOfTheseAccessLevels($accessLevels); $collection = $collection->ofOneOfTheseAccessLevels($accessLevels);
} }
@@ -1522,6 +1520,10 @@ class AdminController extends AdminBaseController
} }
$media_list = []; $media_list = [];
/**
* @var string $name
* @var Medium $medium
*/
foreach ($media->all() as $name => $medium) { foreach ($media->all() as $name => $medium) {
$metadata = []; $metadata = [];
@@ -1542,7 +1544,7 @@ class AdminController extends AdminBaseController
} }
/** /**
* @return bool * @return Media
*/ */
protected function getMedia() protected function getMedia()
{ {
@@ -1845,14 +1847,14 @@ class AdminController extends AdminBaseController
{ {
$input = (array)$this->data; $input = (array)$this->data;
if (isset($input['folder']) && $input['folder'] != $page->value('folder')) { if (isset($input['folder']) && $input['folder'] !== $page->value('folder')) {
$order = $page->value('order'); $order = $page->value('order');
$ordering = $order ? sprintf('%02d.', $order) : ''; $ordering = $order ? sprintf('%02d.', $order) : '';
$page->folder($ordering . $input['folder']); $page->folder($ordering . $input['folder']);
} }
if (isset($input['name']) && !empty($input['name'])) { if (isset($input['name']) && !empty($input['name'])) {
$type = (string)strtolower($input['name']); $type = strtolower($input['name']);
$name = preg_replace('|.*/|', '', $type); $name = preg_replace('|.*/|', '', $type);
if ($language) { if ($language) {
$name .= '.' . $language; $name .= '.' . $language;
@@ -1868,7 +1870,7 @@ class AdminController extends AdminBaseController
} }
// Special case for Expert mode: build the raw, unset content // Special case for Expert mode: build the raw, unset content
if (isset($input['frontmatter']) && isset($input['content'])) { if (isset($input['frontmatter'], $input['content'])) {
$page->raw("---\n" . (string)$input['frontmatter'] . "\n---\n" . (string)$input['content']); $page->raw("---\n" . (string)$input['frontmatter'] . "\n---\n" . (string)$input['content']);
unset($input['content']); unset($input['content']);
// Handle header normally // Handle header normally
@@ -1876,13 +1878,13 @@ class AdminController extends AdminBaseController
$header = $input['header']; $header = $input['header'];
foreach ($header as $key => $value) { foreach ($header as $key => $value) {
if ($key == 'metadata' && is_array($header[$key])) { if ($key === 'metadata' && is_array($header[$key])) {
foreach ($header['metadata'] as $key2 => $value2) { foreach ($header['metadata'] as $key2 => $value2) {
if (isset($input['toggleable_header']['metadata'][$key2]) && !$input['toggleable_header']['metadata'][$key2]) { if (isset($input['toggleable_header']['metadata'][$key2]) && !$input['toggleable_header']['metadata'][$key2]) {
$header['metadata'][$key2] = ''; $header['metadata'][$key2] = '';
} }
} }
} elseif ($key == 'taxonomy' && is_array($header[$key])) { } elseif ($key === 'taxonomy' && is_array($header[$key])) {
foreach ($header[$key] as $taxkey => $taxonomy) { foreach ($header[$key] as $taxkey => $taxonomy) {
if (is_array($taxonomy) && count($taxonomy) == 1 && trim($taxonomy[0]) == '') { if (is_array($taxonomy) && count($taxonomy) == 1 && trim($taxonomy[0]) == '') {
unset($header[$key][$taxkey]); unset($header[$key][$taxkey]);
@@ -1896,7 +1898,7 @@ class AdminController extends AdminBaseController
} }
if ($clean_header) { if ($clean_header) {
$header = Utils::arrayFilterRecursive($header, function ($k, $v) { $header = Utils::arrayFilterRecursive($header, function ($k, $v) {
return !(is_null($v) || $v === ''); return !(null === $v || $v === '');
}); });
} }
$page->header((object)$header); $page->header((object)$header);
@@ -1921,7 +1923,7 @@ class AdminController extends AdminBaseController
} }
// Only applies to pages. // Only applies to pages.
if ($this->view != 'pages') { if ($this->view !== 'pages') {
return false; return false;
} }
@@ -2069,7 +2071,7 @@ class AdminController extends AdminBaseController
} }
// Only applies to pages. // Only applies to pages.
if ($this->view != 'pages') { if ($this->view !== 'pages') {
return false; return false;
} }
@@ -2091,7 +2093,7 @@ class AdminController extends AdminBaseController
} }
// Only applies to pages. // Only applies to pages.
if ($this->view != 'pages') { if ($this->view !== 'pages') {
return false; return false;
} }
@@ -2210,11 +2212,11 @@ class AdminController extends AdminBaseController
*/ */
public function determineFilenameIncludingLanguage($current_filename, $language) public function determineFilenameIncludingLanguage($current_filename, $language)
{ {
$filename = substr($current_filename, 0, -(strlen('.md'))); $filename = substr($current_filename, 0, -strlen('.md'));
if (substr($filename, -3, 1) == '.') { if (substr($filename, -3, 1) === '.') {
$filename = str_replace(substr($filename, -2), $language, $filename); $filename = str_replace(substr($filename, -2), $language, $filename);
} elseif (substr($filename, -6, 1) == '.') { } elseif (substr($filename, -6, 1) === '.') {
$filename = str_replace(substr($filename, -5), $language, $filename); $filename = str_replace(substr($filename, -5), $language, $filename);
} else { } else {
$filename .= '.' . $language; $filename .= '.' . $language;

View File

@@ -1,184 +1,4 @@
<?php <?php
namespace Grav\Plugin\Admin; require_once __DIR__ . '../classes/Twig\AdminTwigExtension.php';
use Grav\Common\Grav; class_alias(\Grav\Plugin\Admin\AdminTwigExtension::class, 'Grav\\Plugin\\Admin\\AdminTwigExtension');
use Grav\Common\Language\Language;
use Symfony\Component\Yaml\Yaml;
use Symfony\Component\Yaml\Parser;
class AdminTwigExtension extends \Twig_Extension
{
/**
* @var Grav
*/
protected $grav;
/**
* @var Language $lang
*/
protected $lang;
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']),
new \Twig_SimpleFilter('toYaml', [$this, 'toYamlFilter']),
new \Twig_SimpleFilter('fromYaml', [$this, 'fromYamlFilter']),
new \Twig_SimpleFilter('adminNicetime', [$this, 'adminNicetimeFilter']),
];
}
public function getFunctions()
{
return [
new \Twig_SimpleFunction('getPageUrl', [$this, 'getPageUrl'], ['needs_context' => true]),
new \Twig_SimpleFunction('clone', [$this, 'cloneFunc']),
];
}
public function cloneFunc($obj)
{
return clone $obj;
}
public function getPageUrl($context, $page)
{
$page_route = trim($page->rawRoute(), '/');
$page_lang = $page->language();
$base_url = $context['base_url'];
$base_url_simple = $context['base_url_simple'];
$admin_lang = Grav::instance()['session']->admin_lang ?: 'en';
if ($page_lang && $page_lang != $admin_lang) {
$page_url = $base_url_simple . '/' . $page_lang . '/' . $context['admin_route'] . '/pages/' . $page_route;
} else {
$page_url = $base_url . '/pages/' . $page_route;
}
return $page_url;
}
public function tuFilter()
{
$args = func_get_args();
$numargs = count($args);
$lang = null;
if (($numargs == 3 && is_array($args[1])) || ($numargs == 2 && !is_array($args[1]))) {
$lang = array_pop($args);
} elseif ($numargs == 2 && is_array($args[1])) {
$subs = array_pop($args);
$args = array_merge($args, $subs);
}
return $this->grav['admin']->translate($args, $lang);
}
public function toYamlFilter($value, $inline = true)
{
return Yaml::dump($value, $inline);
}
public function fromYamlFilter($value)
{
$yaml = new Parser();
return $yaml->parse($value);
}
public function adminNicetimeFilter($date, $long_strings = true)
{
if (empty($date)) {
return $this->grav['admin']->translate('NICETIME.NO_DATE_PROVIDED', null, true);
}
if ($long_strings) {
$periods = [
"NICETIME.SECOND",
"NICETIME.MINUTE",
"NICETIME.HOUR",
"NICETIME.DAY",
"NICETIME.WEEK",
"NICETIME.MONTH",
"NICETIME.YEAR",
"NICETIME.DECADE"
];
} else {
$periods = [
"NICETIME.SEC",
"NICETIME.MIN",
"NICETIME.HR",
"NICETIME.DAY",
"NICETIME.WK",
"NICETIME.MO",
"NICETIME.YR",
"NICETIME.DEC"
];
}
$lengths = ["60", "60", "24", "7", "4.35", "12", "10"];
$now = time();
// check if unix timestamp
if ((string)(int)$date == $date) {
$unix_date = $date;
} else {
$unix_date = strtotime($date);
}
// check validity of date
if (empty($unix_date)) {
return $this->grav['admin']->translate('NICETIME.BAD_DATE', null, true);
}
// is it future date or past date
if ($now > $unix_date) {
$difference = $now - $unix_date;
$tense = $this->grav['admin']->translate('NICETIME.AGO', null, true);
} else {
$difference = $unix_date - $now;
$tense = $this->grav['admin']->translate('NICETIME.FROM_NOW', null, true);
}
for ($j = 0; $difference >= $lengths[$j] && $j < count($lengths) - 1; $j++) {
$difference /= $lengths[$j];
}
$difference = round($difference);
if ($difference != 1) {
$periods[$j] .= '_PLURAL';
}
if ($this->grav['language']->getTranslation($this->grav['user']->language,
$periods[$j] . '_MORE_THAN_TWO')
) {
if ($difference > 2) {
$periods[$j] .= '_MORE_THAN_TWO';
}
}
$periods[$j] = $this->grav['admin']->translate($periods[$j], null, true);
return "$difference $periods[$j] {$tense}";
}
}