build_pagename($name); $source = rawWiki($page); if (!$source) { throw new \Twig\Error\LoaderError(sprintf('Template "%s" does not exist.', $name)); } return new \Twig\Source($source, $name); } public function getCacheKey(string $name): string { return $this->build_pagename($name); } public function isFresh(string $name, int $time): bool { $page = $this->build_pagename($name); $last_change = p_get_metadata($page, 'last_change date'); return $last_change < $time; } public function exists(string $name) { $page = $this->build_pagename($name); return page_exists($page); } } class Hostinfo_Twig_Extension extends AbstractExtension { public function getFilters() { return array( new TwigFilter('contact_info', function($value) { if (is_array($value)) { return '[[' . current($value) . '|' . key($value) . ']]'; } return '[[' . $value . '@spline.inf.fu-berlin.de' . '|' . $value . ']]'; }), new TwigFilter('parse_service', function($value) { if (is_array($value)) { return array( 'port' => current($value), 'name' => key($value), ); } return array( 'name' => $value, 'port' => null, ); }), new TwigFilter('group_by', function($value, $key) { $array = array(); foreach ($value as $k => $v) { if (array_key_exists($key, $v)) { if (is_array($v[$key])) { foreach ($v[$key] as $key_part) { $array[$key_part][$k] = $v; } } else { $array[$v[$key]][$k] = $v; } } } return $array; }), new TwigFilter('key_not_exists', function($value, $key) { if (!is_array($value)) { return array(); } return array_filter($value, function($v) use ($key) { return !array_key_exists($key, $v); }); }), new TwigFilter('count', function($value) { return count($value); }), new TwigFilter('length', function($value) { return strlen($value); }), ); } public function getName() { return 'hostinfo'; } } class Twig { function __construct() { $loader = new Twig_Loader_Dokuwiki(); $this->twig = new Environment($loader, array( 'cache' => __DIR__ . '/../templates_c/', 'auto_reload' => true, )); $this->twig->addExtension(new Hostinfo_Twig_Extension()); } public function render(string $template, $vars=null) { $tmpl = $this->twig->load($template . '.tpl'); return $tmpl->render($vars); } } // vim: set ts=4 sw=4 tw=0 et :