* @license GPL 2 (http://www.gnu.org/licenses/gpl.html) */ require_once DOKU_PLUGIN . 'webdav/vendor/autoload.php'; use Sabre\DAV\Locks\LockInfo; class admin_plugin_webdav extends DokuWiki_Admin_Plugin { /** @inheritDoc */ public function getMenuSort() { return 1; } /** @inheritDoc */ public function forAdminOnly() { return false; } /** @inheritDoc */ public function getMenuIcon() { return dirname(__FILE__) . '/folder-network-outline.svg'; } /** @inheritDoc */ public function getMenuText($language) { return 'WebDAV'; } /** @inheritDoc */ public function handle() { global $INPUT; if (!$_REQUEST['cmd']) { return; } if (!checkSecurityToken()) { return; } $cmd = $INPUT->extract('cmd')->str('cmd'); $dispatch = [ 'unlock' => 'unlockFile', ]; if ($cmd) { if (!isset($dispatch[$cmd])) { msg('Unknown command', -1); return; } call_user_func([$this, $dispatch[$cmd]]); } } /** * Unlock file * * @return bool */ public function unlockFile() { global $INPUT; global $conf; $lock_id = $INPUT->str('lock'); $locks_file = $conf['cachedir'] . '/webdav.lock'; $locked_file = ''; if (!$lock_id) { msg('No lock provided', -1); return; } if ($locks = $this->getLocks()) { foreach ($locks as $id => $lock) { if ($lock->token == $lock_id) { $locked_file = $lock->uri; unset($locks[$id]); } } if ($locked_file) { if (!io_saveFile($locks_file, serialize($locks))) { msg('Unlock failed', -1); return; } msg("File $locked_file successfully unlocked", 1); } } } /** @inheritDoc */ public function html() { echo '
Owner | Timeout | Created | Type | URI | User Agent | |
---|---|---|---|---|---|---|
' . (($lock->owner == $lock->user) ? $lock->owner : $lock->user . ' (' . $lock->owner . ')') . ' | '; echo "{$lock->timeout} seconds | "; echo '' . datetime_h($lock->created) . ' (' . dformat($lock->created) . ') | ';
echo "{$this->getLockType($lock->scope)} | "; echo '' . $lock->uri . ' | '; echo "{$lock->ua} | "; echo ''; echo ' |