xref: /plugin/siteexport/action/sendfile.php (revision 0ed0d3c4114a855f06f7295f54ca182a1cfa5245)
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
217d101cc1SGerry Weißbach    function register(&$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);
55*0ed0d3c4SGerry Weißbach
56*0ed0d3c4SGerry Weißbach        header('Set-Cookie: fileDownload=true; path=' . DOKU_BASE);
57*0ed0d3c4SGerry Weißbach        header('Cache-Control: max-age=60, must-revalidate');
58*0ed0d3c4SGerry 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        /*/
68*0ed0d3c4SGerry 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