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