xref: /plugin/popupviewer/action.php (revision 804f499d8a8f4fb88144cca0d7634b8e86a6c3f7)
1<?php
2/**
3 * Imageflow Plugin
4 *
5 * @license    GPL 2 (http://www.gnu.org/licenses/gpl.html)
6 * @author     i-net software <tools@inetsoftware.de>
7 * @author     Gerry Weissbach <gweissbach@inetsoftware.de>
8 */
9
10// must be run within Dokuwiki
11if(!defined('DOKU_INC')) die();
12
13if(!defined('DOKU_PLUGIN')) define('DOKU_PLUGIN',DOKU_INC.'lib/plugins/');
14require_once(DOKU_PLUGIN.'action.php');
15
16class action_plugin_popupviewer extends DokuWiki_Action_Plugin {
17
18    function getInfo(){
19    	return array_merge(confToHash(dirname(__FILE__).'/plugin.info.txt'), array(
20				'name' => 'PopUpViewer Action Component',
21				'desc' => 'Delivers pages back to the browser'
22				));
23    }
24
25    function register(&$controller) {
26        // Support given via AJAX
27        $controller->register_hook('AJAX_CALL_UNKNOWN', 'BEFORE', $this, 'ajax_viewer_provider');
28    }
29
30    function ajax_viewer_provider( &$event ) {
31        global $JSINFO;
32        global $INFO;
33        global $ID;
34        global $ACT;
35
36        if ( $event->data != '_popup_load_file' && $event->data != '_popup_load_image_meta' ) {
37            return;
38        }
39
40        // Registers ACT
41        if (isset($_SERVER['HTTP_X_DOKUWIKI_DO'])){
42            $ACT = trim(strtolower($_SERVER['HTTP_X_DOKUWIKI_DO']));
43        } elseif (!empty($_REQUEST['idx'])) {
44            $ACT = 'index';
45        } elseif (isset($_REQUEST['do'])) {
46            $ACT = $_REQUEST['do'];
47        } else {
48            $ACT = 'show';
49        }
50
51        $event->preventDefault();
52        $event->stopPropagation();
53        $ID = cleanID(str_replace(wl('', null, true), '', $_REQUEST['id']));
54        $ID = cleanID($_REQUEST['id']);
55
56        $data = "";
57        $head = array();
58
59        switch($event->data) {
60            case '_popup_load_file' :
61                $INFO = pageinfo();
62                $json = new JSON();
63                $JSINFO['id'] = $ID;
64                $JSINFO['namespace'] = (string) $INFO['namespace'];
65                trigger_event('POPUPVIEWER_DOKUWIKI_STARTED',$head,null,true);
66
67                $script = 'var JSINFO = '.$json->encode($JSINFO).'; ';
68                $head['script'][] = array( 'type'=>'text/javascript', '_data'=> $script);
69
70                $data = '<div class="dokuwiki" style="padding-bottom: 10px;">' . p_wiki_xhtml($ID,'',true) . '</div>';
71                break;
72            case '_popup_load_image_meta' :
73                @require_once(DOKU_INC.'inc/JpegMeta.php');
74                if ( $meta = new JpegMeta(mediaFN($ID))) {
75                    $meta->_parseAll();
76                    $title = $meta->getField('Iptc.Headline');
77                    $caption = $meta->getField('Iptc.Caption');
78
79                    if ( !empty($title) ) { $title = "<h3 class=\"title\">$title</h3>"; }
80                    if ( !empty($caption) ) { $caption = "<div  class=\"text\"><p>$caption</p></div>"; }
81                    $data = preg_replace("%(\n|\r)%", '', nl2br($title.$caption));
82                }
83                break;
84        }
85
86        header('Content-Type: text/html; charset=utf-8');
87
88        if ( !empty($head) ) {
89            trigger_event('TPL_METAHEADER_OUTPUT',$head,'_tpl_metaheaders_action',true);
90        }
91
92        print $data;
93        return;
94    }
95}