xref: /plugin/openlayersmap/admin/purge.php (revision a760825c0aa6eee7ec491397b3516b6237e4ad78)
1c37fbc86SMark Prins<?php
2*a760825cSgithub-actions[bot]
3*a760825cSgithub-actions[bot]use dokuwiki\Extension\AdminPlugin;
4*a760825cSgithub-actions[bot]
5c37fbc86SMark Prins/*
6ee422996SMark Prins * Copyright (c) 2008-2015 Mark C. Prins <mprins@users.sf.net>
7c37fbc86SMark Prins *
8c37fbc86SMark Prins * Permission to use, copy, modify, and distribute this software for any
9c37fbc86SMark Prins * purpose with or without fee is hereby granted, provided that the above
10c37fbc86SMark Prins * copyright notice and this permission notice appear in all copies.
11c37fbc86SMark Prins *
12c37fbc86SMark Prins * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
13c37fbc86SMark Prins * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
14c37fbc86SMark Prins * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
15c37fbc86SMark Prins * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
16c37fbc86SMark Prins * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
17c37fbc86SMark Prins * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
18c37fbc86SMark Prins * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
1957f8d5bbSMark Prins *
2057f8d5bbSMark Prins * @phpcs:disable Squiz.Classes.ValidClassName.NotCamelCaps
21c37fbc86SMark Prins */
22c37fbc86SMark Prins/**
23c37fbc86SMark Prins * DokuWiki Plugin openlayersmap (Admin Component).
24c37fbc86SMark Prins * This component purges the cached tiles and maps.
25c37fbc86SMark Prins *
26c37fbc86SMark Prins * @author Mark Prins
27c37fbc86SMark Prins */
28*a760825cSgithub-actions[bot]class admin_plugin_openlayersmap_purge extends AdminPlugin
29*a760825cSgithub-actions[bot]{
30c37fbc86SMark Prins    /**
31c37fbc86SMark Prins     * (non-PHPdoc)
32c37fbc86SMark Prins     * @see DokuWiki_Admin_Plugin::getMenuSort()
33c37fbc86SMark Prins     */
34*a760825cSgithub-actions[bot]    public function getMenuSort(): int
35*a760825cSgithub-actions[bot]    {
36c37fbc86SMark Prins        return 800;
37c37fbc86SMark Prins    }
3857f8d5bbSMark Prins
39*a760825cSgithub-actions[bot]    public function getMenuIcon(): string
40*a760825cSgithub-actions[bot]    {
4157f8d5bbSMark Prins        $plugin = $this->getPluginName();
4257f8d5bbSMark Prins        return DOKU_PLUGIN . $plugin . '/admin/purge.svg';
43c37fbc86SMark Prins    }
44c37fbc86SMark Prins
45c37fbc86SMark Prins    /**
46c37fbc86SMark Prins     * (non-PHPdoc)
47c37fbc86SMark Prins     * @see DokuWiki_Admin_Plugin::handle()
48c37fbc86SMark Prins     */
49*a760825cSgithub-actions[bot]    public function handle(): void
50*a760825cSgithub-actions[bot]    {
51c37fbc86SMark Prins        global $conf;
5257f8d5bbSMark Prins        if (!isset($_REQUEST['continue']) || !checkSecurityToken()) {
5357f8d5bbSMark Prins            return;
5457f8d5bbSMark Prins        }
55c37fbc86SMark Prins        if (isset($_REQUEST['purgetiles'])) {
56c37fbc86SMark Prins            $path = $conf['cachedir'] . '/olmaptiles';
5757f8d5bbSMark Prins            if ($this->rrmdir($path)) {
5857f8d5bbSMark Prins                msg($this->getLang('admin_purged_tiles'), 0);
5957f8d5bbSMark Prins            }
60c37fbc86SMark Prins        }
61c37fbc86SMark Prins        if (isset($_REQUEST['purgemaps'])) {
62c37fbc86SMark Prins            $path = $conf['mediadir'] . '/olmapmaps';
6357f8d5bbSMark Prins            if ($this->rrmdir($path)) {
6457f8d5bbSMark Prins                msg($this->getLang('admin_purged_maps'), 0);
65c37fbc86SMark Prins            }
66c37fbc86SMark Prins        }
67c37fbc86SMark Prins    }
68c37fbc86SMark Prins
69c37fbc86SMark Prins    /**
70c37fbc86SMark Prins     * Recursively delete the directory.
71c37fbc86SMark Prins     * @param string $sDir directory path
72c37fbc86SMark Prins     * @return boolean true when succesful
73c37fbc86SMark Prins     */
74*a760825cSgithub-actions[bot]    private function rrmdir(string $sDir): bool
75*a760825cSgithub-actions[bot]    {
76c37fbc86SMark Prins        if (is_dir($sDir)) {
77c37fbc86SMark Prins            dbglog($sDir, 'admin_plugin_openlayersmap_purge::rrmdir: recursively removing path: ');
78c37fbc86SMark Prins            $sDir = rtrim($sDir, '/');
79c37fbc86SMark Prins            $oDir = dir($sDir);
80c37fbc86SMark Prins            while (($sFile = $oDir->read()) !== false) {
8157f8d5bbSMark Prins                if ($sFile !== '.' && $sFile !== '..') {
8257f8d5bbSMark Prins                    (!is_link("$sDir/$sFile") && is_dir("$sDir/$sFile")) ?
8357f8d5bbSMark Prins                        $this->rrmdir("$sDir/$sFile") : unlink("$sDir/$sFile");
84c37fbc86SMark Prins                }
85c37fbc86SMark Prins            }
86c37fbc86SMark Prins            $oDir->close();
87c37fbc86SMark Prins            rmdir($sDir);
88c37fbc86SMark Prins            return true;
89c37fbc86SMark Prins        }
90c37fbc86SMark Prins        return false;
91c37fbc86SMark Prins    }
9257f8d5bbSMark Prins
9357f8d5bbSMark Prins    /**
9457f8d5bbSMark Prins     * (non-PHPdoc)
9557f8d5bbSMark Prins     * @see DokuWiki_Admin_Plugin::html()
9657f8d5bbSMark Prins     */
97*a760825cSgithub-actions[bot]    public function html(): void
98*a760825cSgithub-actions[bot]    {
9957f8d5bbSMark Prins        echo $this->locale_xhtml('admin_intro');
100*a760825cSgithub-actions[bot]        $form = new Doku_Form(['id' => 'olmap_purgeform', 'method' => 'post']);
10157f8d5bbSMark Prins        $form->addHidden('continue', 'go');
10257f8d5bbSMark Prins
10357f8d5bbSMark Prins        $form->startFieldset($this->getLang('admin_tiles'));
10457f8d5bbSMark Prins        $form->addElement('<p>');
10557f8d5bbSMark Prins        $form->addElement(
10657f8d5bbSMark Prins            '<input id="purgetiles" name="purgetiles" type="checkbox" value="1" class="checkbox" />'
10757f8d5bbSMark Prins        );
10857f8d5bbSMark Prins        $form->addElement(
10957f8d5bbSMark Prins            '<label for="purgetiles" class="label">' . $this->getLang('admin_purge_tiles')
11057f8d5bbSMark Prins            . '</label>'
11157f8d5bbSMark Prins        );
11257f8d5bbSMark Prins        $form->addElement('</p>');
11357f8d5bbSMark Prins        $form->endFieldset();
11457f8d5bbSMark Prins
11557f8d5bbSMark Prins        $form->startFieldset($this->getLang('admin_maps'));
11657f8d5bbSMark Prins        $form->addElement('<p>');
11757f8d5bbSMark Prins        $form->addElement('<input id="purgemaps" name="purgemaps" type="checkbox" value="1" class="checkbox" />');
11857f8d5bbSMark Prins        $form->addElement(
11957f8d5bbSMark Prins            '<label for="purgemaps" class="label">' . $this->getLang('admin_purge_maps') . '</label>'
12057f8d5bbSMark Prins        );
12157f8d5bbSMark Prins        $form->addElement('</p>');
12257f8d5bbSMark Prins        $form->endFieldset();
12357f8d5bbSMark Prins
12457f8d5bbSMark Prins        $form->addElement(
12557f8d5bbSMark Prins            form_makeButton(
126*a760825cSgithub-actions[bot]                'submit',
127*a760825cSgithub-actions[bot]                'admin',
128*a760825cSgithub-actions[bot]                $this->getLang('admin_submit'),
129*a760825cSgithub-actions[bot]                ['accesskey' => 'p', 'title' => $this->getLang('admin_submit')]
13057f8d5bbSMark Prins            )
13157f8d5bbSMark Prins        );
13257f8d5bbSMark Prins        $form->printForm();
13357f8d5bbSMark Prins    }
134c37fbc86SMark Prins}
135