xref: /plugin/openlayersmap/admin/purge.php (revision 57f8d5bb7862220bc86367226edbe0c27b689270)
1c37fbc86SMark Prins<?php
2c37fbc86SMark Prins/*
3ee422996SMark Prins * Copyright (c) 2008-2015 Mark C. Prins <mprins@users.sf.net>
4c37fbc86SMark Prins *
5c37fbc86SMark Prins * Permission to use, copy, modify, and distribute this software for any
6c37fbc86SMark Prins * purpose with or without fee is hereby granted, provided that the above
7c37fbc86SMark Prins * copyright notice and this permission notice appear in all copies.
8c37fbc86SMark Prins *
9c37fbc86SMark Prins * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
10c37fbc86SMark Prins * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
11c37fbc86SMark Prins * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
12c37fbc86SMark Prins * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
13c37fbc86SMark Prins * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
14c37fbc86SMark Prins * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
15c37fbc86SMark Prins * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
16*57f8d5bbSMark Prins *
17*57f8d5bbSMark Prins * @phpcs:disable Squiz.Classes.ValidClassName.NotCamelCaps
18c37fbc86SMark Prins */
19*57f8d5bbSMark Prins
20c37fbc86SMark Prins/**
21c37fbc86SMark Prins * DokuWiki Plugin openlayersmap (Admin Component).
22c37fbc86SMark Prins * This component purges the cached tiles and maps.
23c37fbc86SMark Prins *
24c37fbc86SMark Prins * @author Mark Prins
25c37fbc86SMark Prins */
26c37fbc86SMark Prinsclass admin_plugin_openlayersmap_purge extends DokuWiki_Admin_Plugin {
27c37fbc86SMark Prins    /**
28c37fbc86SMark Prins     * (non-PHPdoc)
29c37fbc86SMark Prins     * @see DokuWiki_Admin_Plugin::getMenuSort()
30c37fbc86SMark Prins     */
31*57f8d5bbSMark Prins    public function getMenuSort(): int {
32c37fbc86SMark Prins        return 800;
33c37fbc86SMark Prins    }
34*57f8d5bbSMark Prins
35*57f8d5bbSMark Prins    public function getMenuIcon(): string {
36*57f8d5bbSMark Prins        $plugin = $this->getPluginName();
37*57f8d5bbSMark Prins        return DOKU_PLUGIN . $plugin . '/admin/purge.svg';
38c37fbc86SMark Prins    }
39c37fbc86SMark Prins
40c37fbc86SMark Prins    /**
41c37fbc86SMark Prins     * (non-PHPdoc)
42c37fbc86SMark Prins     * @see DokuWiki_Admin_Plugin::handle()
43c37fbc86SMark Prins     */
44*57f8d5bbSMark Prins    public function handle(): void {
45c37fbc86SMark Prins        global $conf;
46*57f8d5bbSMark Prins        if(!isset($_REQUEST['continue']) || !checkSecurityToken()) {
47*57f8d5bbSMark Prins            return;
48*57f8d5bbSMark Prins        }
49c37fbc86SMark Prins        if(isset($_REQUEST['purgetiles'])) {
50c37fbc86SMark Prins            $path = $conf['cachedir'] . '/olmaptiles';
51*57f8d5bbSMark Prins            if($this->rrmdir($path)) {
52*57f8d5bbSMark Prins                msg($this->getLang('admin_purged_tiles'), 0);
53*57f8d5bbSMark Prins            }
54c37fbc86SMark Prins        }
55c37fbc86SMark Prins        if(isset($_REQUEST['purgemaps'])) {
56c37fbc86SMark Prins            $path = $conf['mediadir'] . '/olmapmaps';
57*57f8d5bbSMark Prins            if($this->rrmdir($path)) {
58*57f8d5bbSMark Prins                msg($this->getLang('admin_purged_maps'), 0);
59c37fbc86SMark Prins            }
60c37fbc86SMark Prins        }
61c37fbc86SMark Prins    }
62c37fbc86SMark Prins
63c37fbc86SMark Prins    /**
64c37fbc86SMark Prins     * Recursively delete the directory.
65c37fbc86SMark Prins     * @param string $sDir directory path
66c37fbc86SMark Prins     * @return boolean true when succesful
67c37fbc86SMark Prins     */
68*57f8d5bbSMark Prins    private function rrmdir(string $sDir): bool {
69c37fbc86SMark Prins        if(is_dir($sDir)) {
70c37fbc86SMark Prins            dbglog($sDir, 'admin_plugin_openlayersmap_purge::rrmdir: recursively removing path: ');
71c37fbc86SMark Prins            $sDir = rtrim($sDir, '/');
72c37fbc86SMark Prins            $oDir = dir($sDir);
73c37fbc86SMark Prins            while(($sFile = $oDir->read()) !== false) {
74*57f8d5bbSMark Prins                if($sFile !== '.' && $sFile !== '..') {
75*57f8d5bbSMark Prins                    (!is_link("$sDir/$sFile") && is_dir("$sDir/$sFile")) ?
76*57f8d5bbSMark Prins                        $this->rrmdir("$sDir/$sFile") : unlink("$sDir/$sFile");
77c37fbc86SMark Prins                }
78c37fbc86SMark Prins            }
79c37fbc86SMark Prins            $oDir->close();
80c37fbc86SMark Prins            rmdir($sDir);
81c37fbc86SMark Prins            return true;
82c37fbc86SMark Prins        }
83c37fbc86SMark Prins        return false;
84c37fbc86SMark Prins    }
85*57f8d5bbSMark Prins
86*57f8d5bbSMark Prins    /**
87*57f8d5bbSMark Prins     * (non-PHPdoc)
88*57f8d5bbSMark Prins     * @see DokuWiki_Admin_Plugin::html()
89*57f8d5bbSMark Prins     */
90*57f8d5bbSMark Prins    public function html(): void {
91*57f8d5bbSMark Prins        echo $this->locale_xhtml('admin_intro');
92*57f8d5bbSMark Prins        $form = new Doku_Form(array('id' => 'olmap_purgeform', 'method' => 'post'));
93*57f8d5bbSMark Prins        $form->addHidden('continue', 'go');
94*57f8d5bbSMark Prins
95*57f8d5bbSMark Prins        $form->startFieldset($this->getLang('admin_tiles'));
96*57f8d5bbSMark Prins        $form->addElement('<p>');
97*57f8d5bbSMark Prins        $form->addElement(
98*57f8d5bbSMark Prins            '<input id="purgetiles" name="purgetiles" type="checkbox" value="1" class="checkbox" />'
99*57f8d5bbSMark Prins        );
100*57f8d5bbSMark Prins        $form->addElement(
101*57f8d5bbSMark Prins            '<label for="purgetiles" class="label">' . $this->getLang('admin_purge_tiles')
102*57f8d5bbSMark Prins            . '</label>'
103*57f8d5bbSMark Prins        );
104*57f8d5bbSMark Prins        $form->addElement('</p>');
105*57f8d5bbSMark Prins        $form->endFieldset();
106*57f8d5bbSMark Prins
107*57f8d5bbSMark Prins        $form->startFieldset($this->getLang('admin_maps'));
108*57f8d5bbSMark Prins        $form->addElement('<p>');
109*57f8d5bbSMark Prins        $form->addElement('<input id="purgemaps" name="purgemaps" type="checkbox" value="1" class="checkbox" />');
110*57f8d5bbSMark Prins        $form->addElement(
111*57f8d5bbSMark Prins            '<label for="purgemaps" class="label">' . $this->getLang('admin_purge_maps') . '</label>'
112*57f8d5bbSMark Prins        );
113*57f8d5bbSMark Prins        $form->addElement('</p>');
114*57f8d5bbSMark Prins        $form->endFieldset();
115*57f8d5bbSMark Prins
116*57f8d5bbSMark Prins        $form->addElement(
117*57f8d5bbSMark Prins            form_makeButton(
118*57f8d5bbSMark Prins                'submit', 'admin', $this->getLang('admin_submit'),
119*57f8d5bbSMark Prins                array('accesskey' => 'p', 'title' => $this->getLang('admin_submit'))
120*57f8d5bbSMark Prins            )
121*57f8d5bbSMark Prins        );
122*57f8d5bbSMark Prins        $form->printForm();
123*57f8d5bbSMark Prins    }
124c37fbc86SMark Prins}
125