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