xref: /plugin/siteexport/action/sendfile.php (revision 5ce337f21e72a51359dd610ca4ea571cff0d07aa)
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ßbachrequire_once(DOKU_PLUGIN . 'siteexport/inc/debug.php');
157d101cc1SGerry Weißbachrequire_once(DOKU_PLUGIN . 'siteexport/inc/functions.php');
167d101cc1SGerry Weißbach
177d101cc1SGerry Weißbachclass action_plugin_siteexport_sendfile extends DokuWiki_Action_Plugin {
187d101cc1SGerry Weißbach
193f2e6413SGerry Weißbach    public function register(Doku_Event_Handler $controller) {
207d101cc1SGerry Weißbach        // Download of a file
217d101cc1SGerry Weißbach
227d101cc1SGerry Weißbach        $controller->register_hook('MEDIA_SENDFILE', 'BEFORE', $this, 'siteexport_sendfile');
237d101cc1SGerry Weißbach        $controller->register_hook('FETCH_MEDIA_STATUS', 'BEFORE', $this, 'siteexport_sendfile_not_found');
247d101cc1SGerry Weißbach    }
257d101cc1SGerry Weißbach
267d101cc1SGerry Weißbach    /*
277d101cc1SGerry Weißbach     * Redirect File to real File
287d101cc1SGerry Weißbach     */
29*a8c17ab5Si-net /// software    public function siteexport_sendfile(Doku_Event &$event, $args) {
30d0b1cc0dSGerry Weißbach        global $conf;
317d101cc1SGerry Weißbach
327d101cc1SGerry Weißbach        if (empty($_REQUEST['siteexport']) /* || $event->data['orig'] != $this->getConf('zipfilename') */) {
337d101cc1SGerry Weißbach            return;
347d101cc1SGerry Weißbach        }
357d101cc1SGerry Weißbach
367d101cc1SGerry Weißbach        $functions = new siteexport_functions();
376792d0cfSGerry Weißbach        $functions->debug->message("Starting to send a file from siteexporter", null, 2);
38f3359d31SGerry Weißbach        $filewriter = new siteexport_zipfilewriter($functions);
396792d0cfSGerry Weißbach        $functions->settings->pattern = $_REQUEST['siteexport'];
407d101cc1SGerry Weißbach
41d0b1cc0dSGerry Weißbach        // Try injecting another name ... can't do, because sendFile sets this right after me and right before sending the actual data.
427d101cc1SGerry Weißbach        // header('Content-Disposition: attachment; filename="'. basename($functions->settings->zipFile) .'";');
437d101cc1SGerry Weißbach
447d101cc1SGerry Weißbach        // Try getting the cached file ...
457d101cc1SGerry Weißbach        $event->data['file'] = $functions->getCacheFileNameForPattern();
467d101cc1SGerry Weißbach
477d101cc1SGerry Weißbach        $functions->debug->message("fetching cached file from pattern '{$functions->settings->pattern}' with name '{$event->data['file']}'", null, 2);
486792d0cfSGerry Weißbach        $functions->debug->message("Event Data Before:", $event->data, 3);
49f3359d31SGerry Weißbach
507d101cc1SGerry Weißbach        $functions->checkIfCacheFileExistsForFileWithPattern($event->data['file'], $_REQUEST['siteexport']);
516792d0cfSGerry Weißbach
526792d0cfSGerry Weißbach        $filewriter->getOnlyFileInZip($event->data);
530ed0d3c4SGerry Weißbach
540ed0d3c4SGerry Weißbach        header('Set-Cookie: fileDownload=true; path=' . DOKU_BASE);
550ed0d3c4SGerry Weißbach        header('Cache-Control: max-age=60, must-revalidate');
560ed0d3c4SGerry Weißbach
576792d0cfSGerry Weißbach        $functions->debug->message("Event Data After:", $event->data, 3);
587d101cc1SGerry Weißbach    }
597d101cc1SGerry Weißbach
60*a8c17ab5Si-net /// software    public function siteexport_sendfile_not_found(Doku_Event &$event, $args)
617d101cc1SGerry Weißbach    {
62e10453fdSGerry Weißbach        if (empty($_REQUEST['siteexport']) ||
63e10453fdSGerry Weißbach        /**
64e10453fdSGerry Weißbach        $event->data['media'] != $this->getConf('zipfilename')
65e10453fdSGerry Weißbach        /*/
660ed0d3c4SGerry Weißbach        $event->data['status'] >= 500
67e10453fdSGerry Weißbach        //*/
68e10453fdSGerry Weißbach        ) { return true; }
697d101cc1SGerry Weißbach        $event->data['status'] = 200;
707d101cc1SGerry Weißbach        return true;
717d101cc1SGerry Weißbach    }
727d101cc1SGerry Weißbach}
73