xref: /plugin/ditaa/action.php (revision 38c9279020ea3c3abc0a18e7d236f87252b3f01b)
1*38c92790SGerry Weißbach<?php
2*38c92790SGerry Weißbach/**
3*38c92790SGerry Weißbach * Siteexport SendFile Plugin
4*38c92790SGerry Weißbach *
5*38c92790SGerry Weißbach * @license    GPL 2 (http://www.gnu.org/licenses/gpl.html)
6*38c92790SGerry Weißbach * @author     i-net software <tools@inetsoftware.de>
7*38c92790SGerry Weißbach * @author     Gerry Weissbach <gweissbach@inetsoftware.de>
8*38c92790SGerry Weißbach */
9*38c92790SGerry Weißbach
10*38c92790SGerry Weißbach// must be run within Dokuwiki
11*38c92790SGerry Weißbachif(!defined('DOKU_INC')) die();
12*38c92790SGerry Weißbachif(!defined('DOKU_PLUGIN')) define('DOKU_PLUGIN',DOKU_INC.'lib/plugins/');
13*38c92790SGerry Weißbach
14*38c92790SGerry Weißbachrequire_once(DOKU_PLUGIN.'action.php');
15*38c92790SGerry Weißbach
16*38c92790SGerry Weißbachclass action_plugin_ditaa extends DokuWiki_Action_Plugin {
17*38c92790SGerry Weißbach
18*38c92790SGerry Weißbach    public function register(Doku_Event_Handler $controller) {
19*38c92790SGerry Weißbach        // Download of a file
20*38c92790SGerry Weißbach
21*38c92790SGerry Weißbach        $controller->register_hook('MEDIA_SENDFILE', 'BEFORE', $this, 'ditaa_sendfile');
22*38c92790SGerry Weißbach        $controller->register_hook('FETCH_MEDIA_STATUS', 'BEFORE', $this, 'ditaa_sendfile_not_found');
23*38c92790SGerry Weißbach    }
24*38c92790SGerry Weißbach
25*38c92790SGerry Weißbach    /*
26*38c92790SGerry Weißbach     * Redirect File to real File
27*38c92790SGerry Weißbach     */
28*38c92790SGerry Weißbach    function ditaa_sendfile(&$event, $args) {
29*38c92790SGerry Weißbach        global $conf;
30*38c92790SGerry Weißbach
31*38c92790SGerry Weißbach        if ( empty( $_REQUEST['ditaa'] ) ) {
32*38c92790SGerry Weißbach            return;
33*38c92790SGerry Weißbach        }
34*38c92790SGerry Weißbach
35*38c92790SGerry Weißbach        $plugin = plugin_load( 'syntax', 'ditaa' );
36*38c92790SGerry Weißbach        $data = p_get_metadata( $event->data['media'], 'ditaa' );
37*38c92790SGerry Weißbach        $event->data['file'] = $plugin->_imgfile($event->data['media'], $data[$_REQUEST['ditaa']]);
38*38c92790SGerry Weißbach        $event->data['mime'] = 'image/png';
39*38c92790SGerry Weißbach
40*38c92790SGerry Weißbach        if( !$event->data['file'] ) {
41*38c92790SGerry Weißbach            $event->data['file'] = dirname(__FILE__) . '/broken.png';
42*38c92790SGerry Weißbach            $event->data['status'] = 404;
43*38c92790SGerry Weißbach            $event->data['statusmessage'] = 'Not Found';
44*38c92790SGerry Weißbach        }
45*38c92790SGerry Weißbach
46*38c92790SGerry Weißbach        header('Expires: '.gmdate("D, d M Y H:i:s", time()+max($conf['cachetime'], 3600)).' GMT');
47*38c92790SGerry Weißbach        header('Cache-Control: public, proxy-revalidate, no-transform, max-age='.max($conf['cachetime'], 3600));
48*38c92790SGerry Weißbach        header('Pragma: public');
49*38c92790SGerry Weißbach    }
50*38c92790SGerry Weißbach
51*38c92790SGerry Weißbach    /*
52*38c92790SGerry Weißbach     * If a file has not been found yet, we should try to check if this can be solved
53*38c92790SGerry Weißbach     * via the ditaa renderer
54*38c92790SGerry Weißbach     */
55*38c92790SGerry Weißbach    function ditaa_sendfile_not_found(&$event, $args)
56*38c92790SGerry Weißbach    {
57*38c92790SGerry Weißbach        if ( $event->data['status'] >= 500 || empty( $_REQUEST['ditaa'] ) ) { return true; }
58*38c92790SGerry Weißbach        $event->data['status'] = 200;
59*38c92790SGerry Weißbach        $event->data['statusmessage'] = 'OK';
60*38c92790SGerry Weißbach        return true;
61*38c92790SGerry Weißbach    }
62*38c92790SGerry Weißbach}