2018-05-10 10:14:18 +03:00
|
|
|
<?php
|
2019-03-20 12:52:16 +02:00
|
|
|
|
2018-05-10 10:14:18 +03:00
|
|
|
namespace Grav\Plugin\Admin\Twig;
|
|
|
|
|
|
2019-07-19 13:42:40 +03:00
|
|
|
use Grav\Common\Data\Data;
|
2018-05-10 10:14:18 +03:00
|
|
|
use Grav\Common\Grav;
|
2019-03-05 15:46:55 +02:00
|
|
|
use Grav\Common\Page\Interfaces\PageInterface;
|
2019-11-11 20:30:18 +02:00
|
|
|
use Grav\Common\Utils;
|
2018-08-22 12:45:39 -06:00
|
|
|
use Grav\Common\Yaml;
|
2018-05-10 10:14:18 +03:00
|
|
|
use Grav\Common\Language\Language;
|
2019-06-02 15:21:24 +03:00
|
|
|
use Twig\Extension\AbstractExtension;
|
|
|
|
|
use Twig\TwigFilter;
|
|
|
|
|
use Twig\TwigFunction;
|
2019-06-27 13:19:30 +03:00
|
|
|
use Grav\Plugin\Admin\Admin;
|
2018-05-10 10:14:18 +03:00
|
|
|
|
2019-06-02 15:21:24 +03:00
|
|
|
class AdminTwigExtension extends AbstractExtension
|
2018-05-10 10:14:18 +03:00
|
|
|
{
|
2019-06-02 15:21:24 +03:00
|
|
|
/** @var Grav */
|
2018-05-10 10:14:18 +03:00
|
|
|
protected $grav;
|
|
|
|
|
|
2019-06-02 15:21:24 +03:00
|
|
|
/** @var Language $lang */
|
2018-05-10 10:14:18 +03:00
|
|
|
protected $lang;
|
|
|
|
|
|
|
|
|
|
public function __construct()
|
|
|
|
|
{
|
|
|
|
|
$this->grav = Grav::instance();
|
|
|
|
|
$this->lang = $this->grav['user']->language;
|
|
|
|
|
}
|
|
|
|
|
|
2019-06-02 15:21:24 +03:00
|
|
|
public function getFilters(): array
|
2018-05-10 10:14:18 +03:00
|
|
|
{
|
|
|
|
|
return [
|
2019-06-02 15:21:24 +03:00
|
|
|
new TwigFilter('tu', [$this, 'tuFilter']),
|
|
|
|
|
new TwigFilter('toYaml', [$this, 'toYamlFilter']),
|
|
|
|
|
new TwigFilter('fromYaml', [$this, 'fromYamlFilter']),
|
|
|
|
|
new TwigFilter('adminNicetime', [$this, 'adminNicetimeFilter']),
|
|
|
|
|
new TwigFilter('nested', [$this, 'nestedFilter']),
|
2019-11-11 20:30:18 +02:00
|
|
|
new TwigFilter('flatten', [$this, 'flattenFilter']),
|
2018-05-10 10:14:18 +03:00
|
|
|
];
|
|
|
|
|
}
|
|
|
|
|
|
2019-06-02 15:21:24 +03:00
|
|
|
public function getFunctions(): array
|
2018-05-10 10:14:18 +03:00
|
|
|
{
|
|
|
|
|
return [
|
2019-06-29 14:57:22 +03:00
|
|
|
new TwigFunction('admin_route', [$this, 'adminRouteFunc']),
|
|
|
|
|
new TwigFunction('getPageUrl', [$this, 'getPageUrl']),
|
2019-06-02 15:21:24 +03:00
|
|
|
new TwigFunction('clone', [$this, 'cloneFunc']),
|
2019-07-19 13:42:40 +03:00
|
|
|
new TwigFunction('data', [$this, 'dataFunc']),
|
2018-05-10 10:14:18 +03:00
|
|
|
];
|
|
|
|
|
}
|
|
|
|
|
|
2018-10-26 12:56:07 -06:00
|
|
|
public function nestedFilter($current, $name)
|
|
|
|
|
{
|
|
|
|
|
$path = explode('.', trim($name, '.'));
|
|
|
|
|
|
|
|
|
|
foreach ($path as $field) {
|
|
|
|
|
if (is_object($current) && isset($current->{$field})) {
|
|
|
|
|
$current = $current->{$field};
|
|
|
|
|
} elseif (is_array($current) && isset($current[$field])) {
|
|
|
|
|
$current = $current[$field];
|
|
|
|
|
} else {
|
|
|
|
|
return null;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return $current;
|
|
|
|
|
}
|
|
|
|
|
|
2019-11-11 20:30:18 +02:00
|
|
|
public function flattenFilter($array)
|
|
|
|
|
{
|
|
|
|
|
return Utils::arrayFlattenDotNotation($array);
|
|
|
|
|
}
|
|
|
|
|
|
2018-05-10 10:14:18 +03:00
|
|
|
public function cloneFunc($obj)
|
|
|
|
|
{
|
|
|
|
|
return clone $obj;
|
|
|
|
|
}
|
|
|
|
|
|
2019-06-27 13:19:30 +03:00
|
|
|
public function adminRouteFunc(string $route = '', string $languageCode = null)
|
2018-05-10 10:14:18 +03:00
|
|
|
{
|
2019-06-27 13:19:30 +03:00
|
|
|
/** @var Admin $admin */
|
|
|
|
|
$admin = Grav::instance()['admin'];
|
|
|
|
|
|
|
|
|
|
return $admin->getAdminRoute($route, $languageCode)->toString(true);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function getPageUrl(PageInterface $page)
|
|
|
|
|
{
|
|
|
|
|
/** @var Admin $admin */
|
|
|
|
|
$admin = Grav::instance()['admin'];
|
2018-05-10 10:14:18 +03:00
|
|
|
|
2019-06-27 13:19:30 +03:00
|
|
|
return $admin->getAdminRoute('/pages' . $page->rawRoute(), $page->language())->toString(true);
|
2018-05-10 10:14:18 +03:00
|
|
|
}
|
|
|
|
|
|
2019-02-04 13:01:33 -07:00
|
|
|
public static function tuFilter()
|
2018-05-10 10:14:18 +03:00
|
|
|
{
|
|
|
|
|
$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);
|
|
|
|
|
}
|
|
|
|
|
|
2019-02-04 13:01:33 -07:00
|
|
|
return Grav::instance()['admin']->translate($args, $lang);
|
2018-05-10 10:14:18 +03:00
|
|
|
}
|
|
|
|
|
|
2018-08-22 12:45:39 -06:00
|
|
|
public function toYamlFilter($value, $inline = null)
|
2018-05-10 10:14:18 +03:00
|
|
|
{
|
|
|
|
|
return Yaml::dump($value, $inline);
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function fromYamlFilter($value)
|
|
|
|
|
{
|
2018-08-22 12:45:39 -06:00
|
|
|
return Yaml::parse($value);
|
2018-05-10 10:14:18 +03:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function adminNicetimeFilter($date, $long_strings = true)
|
|
|
|
|
{
|
2019-02-08 17:17:05 -07:00
|
|
|
return Grav::instance()['admin']->adminNiceTime($date, $long_strings);
|
2018-05-10 10:14:18 +03:00
|
|
|
}
|
|
|
|
|
|
2019-07-19 13:42:40 +03:00
|
|
|
public function dataFunc(array $data, $blueprints = null)
|
|
|
|
|
{
|
|
|
|
|
return new Data($data, $blueprints);
|
|
|
|
|
}
|
2018-05-10 10:14:18 +03:00
|
|
|
}
|