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