1<?php
2/**
3 * DokuWiki Plugin pagestats (Action Component)
4 * Counts the number of pages and media files and calculates their total size.
5 */
6
7if (!defined('DOKU_INC')) die();
8
9class action_plugin_pagestats extends DokuWiki_Action_Plugin {
10
11    /**
12     * Register hooks
13     */
14    public function register(Doku_Event_Handler $controller) {
15        $controller->register_hook('TPL_METAHEADER_OUTPUT', 'BEFORE', $this, 'add_stats_to_page');
16        $controller->register_hook('IO_WIKIPAGE_WRITE', 'AFTER', $this, 'clear_cache_on_change');
17        $controller->register_hook('MEDIA_UPLOAD_FINISH', 'AFTER', $this, 'clear_cache_on_change');
18        $controller->register_hook('MEDIA_DELETE_FILE', 'AFTER', $this, 'clear_cache_on_change');
19    }
20
21    /**
22     * Add page stats to meta headers
23     */
24    public function add_stats_to_page(Doku_Event $event, $param) {
25        /** @var helper_plugin_pagestats $helper */
26        $helper = plugin_load('helper', 'pagestats');
27        if (!$helper) return;
28
29        $stats = $helper->getStats();
30
31        foreach ($stats as $name => $value) {
32            $event->data['meta'][] = ['name' => strtolower($name), 'content' => $value];
33        }
34    }
35
36    /**
37     * Clear cache when pages or media files change
38     */
39    public function clear_cache_on_change(Doku_Event $event, $param) {
40        /** @var helper_plugin_pagestats $helper */
41        $helper = plugin_load('helper', 'pagestats');
42        if ($helper) {
43            $helper->clearCache();
44
45            // Bei manueller Cache-Leerung über das Admin-Formular eine Meldung ausgeben
46            if ($event->name == 'ACTION_ACT_PREPROCESS' && isset($_REQUEST['action']) && $_REQUEST['action'] == 'clearCache') {
47                msg($helper->getLang('admin_cache_cleared'), 1);
48            }
49        }
50    }
51}