1*1729dd47SHenrik Yllemo<?php 2*1729dd47SHenrik Yllemoif (!defined('DOKU_INC')) die(); 3*1729dd47SHenrik Yllemo 4*1729dd47SHenrik Yllemo/** 5*1729dd47SHenrik Yllemo * Handles SkillForge downloads outside the admin dispatcher. 6*1729dd47SHenrik Yllemo * 7*1729dd47SHenrik Yllemo * DokuWiki's admin pages can redirect or re-render before a binary download is 8*1729dd47SHenrik Yllemo * sent, especially on compact/on-a-stick installs. A dedicated action avoids 9*1729dd47SHenrik Yllemo * that path completely: 10*1729dd47SHenrik Yllemo * doku.php?id=start&do=skillforge_download&sf_file=...zip§ok=... 11*1729dd47SHenrik Yllemo */ 12*1729dd47SHenrik Yllemoclass action_plugin_skillforge extends DokuWiki_Action_Plugin { 13*1729dd47SHenrik Yllemo public function register(Doku_Event_Handler $controller) { 14*1729dd47SHenrik Yllemo $controller->register_hook('DOKUWIKI_STARTED', 'BEFORE', $this, 'handleDownload'); 15*1729dd47SHenrik Yllemo } 16*1729dd47SHenrik Yllemo 17*1729dd47SHenrik Yllemo public function handleDownload(Doku_Event $event, $param) { 18*1729dd47SHenrik Yllemo if (!isset($_REQUEST['do']) || !in_array($_REQUEST['do'], array('skillforge_download', 'skillforge_download_current'), true)) return; 19*1729dd47SHenrik Yllemo 20*1729dd47SHenrik Yllemo if (!auth_isadmin()) { 21*1729dd47SHenrik Yllemo http_status(403); 22*1729dd47SHenrik Yllemo echo 'SkillForge download denied.'; 23*1729dd47SHenrik Yllemo exit; 24*1729dd47SHenrik Yllemo } 25*1729dd47SHenrik Yllemo 26*1729dd47SHenrik Yllemo if (!checkSecurityToken()) { 27*1729dd47SHenrik Yllemo http_status(403); 28*1729dd47SHenrik Yllemo echo 'SkillForge download denied: invalid security token.'; 29*1729dd47SHenrik Yllemo exit; 30*1729dd47SHenrik Yllemo } 31*1729dd47SHenrik Yllemo 32*1729dd47SHenrik Yllemo /** @var helper_plugin_skillforge $helper */ 33*1729dd47SHenrik Yllemo $helper = plugin_load('helper', 'skillforge'); 34*1729dd47SHenrik Yllemo if (!$helper) { 35*1729dd47SHenrik Yllemo http_status(500); 36*1729dd47SHenrik Yllemo echo 'SkillForge helper could not be loaded.'; 37*1729dd47SHenrik Yllemo exit; 38*1729dd47SHenrik Yllemo } 39*1729dd47SHenrik Yllemo 40*1729dd47SHenrik Yllemo try { 41*1729dd47SHenrik Yllemo if ($_REQUEST['do'] === 'skillforge_download_current') { 42*1729dd47SHenrik Yllemo global $ID; 43*1729dd47SHenrik Yllemo $page = isset($_REQUEST['sf_page']) ? $_REQUEST['sf_page'] : $ID; 44*1729dd47SHenrik Yllemo $result = $helper->exportPage($page); 45*1729dd47SHenrik Yllemo $helper->sendDownload($result['name']); 46*1729dd47SHenrik Yllemo return; 47*1729dd47SHenrik Yllemo } 48*1729dd47SHenrik Yllemo 49*1729dd47SHenrik Yllemo $name = isset($_REQUEST['sf_file']) ? $_REQUEST['sf_file'] : ''; 50*1729dd47SHenrik Yllemo $helper->sendDownload($name); 51*1729dd47SHenrik Yllemo } catch (Exception $e) { 52*1729dd47SHenrik Yllemo http_status(404); 53*1729dd47SHenrik Yllemo echo 'SkillForge download failed: ' . hsc($e->getMessage()); 54*1729dd47SHenrik Yllemo exit; 55*1729dd47SHenrik Yllemo } 56*1729dd47SHenrik Yllemo } 57*1729dd47SHenrik Yllemo} 58