| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103 | <?phpnamespace Grav\Plugin;use \Grav\Common\Plugin;use \Grav\Common\Uri;use Grav\Common\User\DataUser\User;class AdvancedPageCachePlugin extends Plugin{    /** @var Config $config */    protected $config;    protected $pagecache_key;    /**     * @return array     */    public static function getSubscribedEvents()    {        return [            'onPluginsInitialized' => ['onPluginsInitialized', 0]        ];    }    /**     * Return `true` if the page has no extension, or has the default page extension.     * Return `false` if for example is a RSS version of the page     */    private function isValidExtension() {        /** @var Uri $uri */        $uri = $this->grav['uri'];        $extension = $uri->extension();        if (!$extension) {            return true;        }        $disabled_extensions = $this->grav['config']->get('plugins.advanced-pagecache.disabled_extensions');        if (in_array($extension, (array) $disabled_extensions)) {            return false;        }        return true;    }    /**     * Initialize configuration     */    public function onPluginsInitialized()    {        $config = $this->grav['config']->get('plugins.advanced-pagecache');        /** @var Uri $uri */        $uri = $this->grav['uri'];        $full_route = $uri->uri();        $route = str_replace($uri->baseIncludingLanguage(), '', $full_route);        $params = $uri->params(null, true);        $query = $uri->query(null, true);        $user = $this->grav['user'] ?? new User();        $lang = $this->grav['language']->getLanguageURLPrefix();        // Definitely don't run in admin plugin or is not a valid extension        if ($this->isAdmin() || !$this->isValidExtension()) {            return;        }        // If this url is not whitelisted try some other tests        if (!in_array($route, (array)$config['whitelist'])) {            // do not run in these scenarios            if ($config['disabled_with_params'] && !empty($params) ||                $config['disabled_with_query'] && !empty($query) ||                $config['disabled_on_login'] && $user["authenticated"] ||                in_array($route, (array)$config['blacklist'])) {                return;            }        }        if ($config['per_user_caching']) {            $this->pagecache_key = md5('adv-pc-' . $lang . $full_route . $user["username"]);        } else {            $this->pagecache_key = md5('adv-pc-' . $lang . $full_route);        }        // Should run and store page        $this->enable([            'onOutputGenerated' => ['onOutputGenerated', 0]        ]);        $pagecache = $this->grav['cache']->fetch($this->pagecache_key);        if ($pagecache) {            echo $pagecache;            exit;        }    }    /**     * Save the page to the cache     */    public function onOutputGenerated()    {        $this->grav['cache']->save($this->pagecache_key, $this->grav->output);    }}
 |