| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184 | 
							- <?php
 
- namespace Grav\Plugin\Admin;
 
- 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;
 
-     }
 
-     /**
 
-      * 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}";
 
-     }
 
- }
 
 
  |