17d101cc1SGerry Weißbach<?php 27d101cc1SGerry Weißbach/** 37d101cc1SGerry Weißbach * Siteexport SendFile Plugin 47d101cc1SGerry Weißbach * 57d101cc1SGerry Weißbach * @license GPL 2 (http://www.gnu.org/licenses/gpl.html) 67d101cc1SGerry Weißbach * @author i-net software <tools@inetsoftware.de> 77d101cc1SGerry Weißbach * @author Gerry Weissbach <gweissbach@inetsoftware.de> 87d101cc1SGerry Weißbach */ 97d101cc1SGerry Weißbach 107d101cc1SGerry Weißbach// must be run within Dokuwiki 117d101cc1SGerry Weißbachif(!defined('DOKU_INC')) die(); 127d101cc1SGerry Weißbach 137d101cc1SGerry Weißbachif(!defined('DOKU_PLUGIN')) define('DOKU_PLUGIN',DOKU_INC.'lib/plugins/'); 147d101cc1SGerry Weißbach 157d101cc1SGerry Weißbachrequire_once(DOKU_PLUGIN.'action.php'); 167d101cc1SGerry Weißbachrequire_once(DOKU_PLUGIN.'siteexport/inc/debug.php'); 177d101cc1SGerry Weißbachrequire_once(DOKU_PLUGIN.'siteexport/inc/functions.php'); 187d101cc1SGerry Weißbach 197d101cc1SGerry Weißbachclass action_plugin_siteexport_sendfile extends DokuWiki_Action_Plugin { 207d101cc1SGerry Weißbach 21*3f2e6413SGerry Weißbach public function register(Doku_Event_Handler $controller) { 227d101cc1SGerry Weißbach // Download of a file 237d101cc1SGerry Weißbach 247d101cc1SGerry Weißbach $controller->register_hook('MEDIA_SENDFILE', 'BEFORE', $this, 'siteexport_sendfile'); 257d101cc1SGerry Weißbach $controller->register_hook('FETCH_MEDIA_STATUS', 'BEFORE', $this, 'siteexport_sendfile_not_found'); 267d101cc1SGerry Weißbach } 277d101cc1SGerry Weißbach 287d101cc1SGerry Weißbach /* 297d101cc1SGerry Weißbach * Redirect File to real File 307d101cc1SGerry Weißbach */ 317d101cc1SGerry Weißbach function siteexport_sendfile(&$event, $args) { 32d0b1cc0dSGerry Weißbach global $conf; 337d101cc1SGerry Weißbach 347d101cc1SGerry Weißbach if ( empty($_REQUEST['siteexport']) /* || $event->data['orig'] != $this->getConf('zipfilename') */ ) { 357d101cc1SGerry Weißbach return; 367d101cc1SGerry Weißbach } 377d101cc1SGerry Weißbach 387d101cc1SGerry Weißbach $functions = new siteexport_functions(); 396792d0cfSGerry Weißbach $functions->debug->message("Starting to send a file from siteexporter", null, 2); 40f3359d31SGerry Weißbach $filewriter = new siteexport_zipfilewriter($functions); 416792d0cfSGerry Weißbach $functions->settings->pattern = $_REQUEST['siteexport']; 427d101cc1SGerry Weißbach 43d0b1cc0dSGerry Weißbach // Try injecting another name ... can't do, because sendFile sets this right after me and right before sending the actual data. 447d101cc1SGerry Weißbach // header('Content-Disposition: attachment; filename="'. basename($functions->settings->zipFile) .'";'); 457d101cc1SGerry Weißbach 467d101cc1SGerry Weißbach // Try getting the cached file ... 477d101cc1SGerry Weißbach $event->data['file'] = $functions->getCacheFileNameForPattern(); 487d101cc1SGerry Weißbach 497d101cc1SGerry Weißbach $functions->debug->message("fetching cached file from pattern '{$functions->settings->pattern}' with name '{$event->data['file']}'", null, 2); 506792d0cfSGerry Weißbach $functions->debug->message("Event Data Before:", $event->data, 3); 51f3359d31SGerry Weißbach 527d101cc1SGerry Weißbach $functions->checkIfCacheFileExistsForFileWithPattern($event->data['file'], $_REQUEST['siteexport']); 536792d0cfSGerry Weißbach 546792d0cfSGerry Weißbach $filewriter->getOnlyFileInZip($event->data); 550ed0d3c4SGerry Weißbach 560ed0d3c4SGerry Weißbach header('Set-Cookie: fileDownload=true; path=' . DOKU_BASE); 570ed0d3c4SGerry Weißbach header('Cache-Control: max-age=60, must-revalidate'); 580ed0d3c4SGerry Weißbach 596792d0cfSGerry Weißbach $functions->debug->message("Event Data After:", $event->data, 3); 607d101cc1SGerry Weißbach } 617d101cc1SGerry Weißbach 627d101cc1SGerry Weißbach function siteexport_sendfile_not_found(&$event, $args) 637d101cc1SGerry Weißbach { 64e10453fdSGerry Weißbach if ( empty($_REQUEST['siteexport']) || 65e10453fdSGerry Weißbach /** 66e10453fdSGerry Weißbach $event->data['media'] != $this->getConf('zipfilename') 67e10453fdSGerry Weißbach /*/ 680ed0d3c4SGerry Weißbach $event->data['status'] >= 500 69e10453fdSGerry Weißbach //*/ 70e10453fdSGerry Weißbach ) { return true; } 717d101cc1SGerry Weißbach $event->data['status'] = 200; 727d101cc1SGerry Weißbach return true; 737d101cc1SGerry Weißbach } 747d101cc1SGerry Weißbach} 75