xref: /plugin/popupviewer/action.php (revision 875428a3a71d0d8a85737b6e0bc45c89a4767c31)
16ed83c65SGerry Weißbach<?php
26ed83c65SGerry Weißbach/**
36ed83c65SGerry Weißbach * Imageflow Plugin
46ed83c65SGerry Weißbach *
56ed83c65SGerry Weißbach * @license    GPL 2 (http://www.gnu.org/licenses/gpl.html)
66ed83c65SGerry Weißbach * @author     i-net software <tools@inetsoftware.de>
76ed83c65SGerry Weißbach * @author     Gerry Weissbach <gweissbach@inetsoftware.de>
86ed83c65SGerry Weißbach */
96ed83c65SGerry Weißbach
10*875428a3SYury Ovsyannikovuse dokuwiki\Extension\Event;
11*875428a3SYury Ovsyannikov
126ed83c65SGerry Weißbach// must be run within Dokuwiki
136ed83c65SGerry Weißbachif(!defined('DOKU_INC')) die();
146ed83c65SGerry Weißbach
156ed83c65SGerry Weißbachif(!defined('DOKU_PLUGIN')) define('DOKU_PLUGIN',DOKU_INC.'lib/plugins/');
166ed83c65SGerry Weißbachrequire_once(DOKU_PLUGIN.'action.php');
176ed83c65SGerry Weißbach
186ed83c65SGerry Weißbachclass action_plugin_popupviewer extends DokuWiki_Action_Plugin {
196ed83c65SGerry Weißbach
206ed83c65SGerry Weißbach    function getInfo(){
21804f499dSGerry Weißbach        return array_merge(confToHash(dirname(__FILE__).'/plugin.info.txt'), array(
22804f499dSGerry Weißbach                'name' => 'PopUpViewer Action Component',
23804f499dSGerry Weißbach                'desc' => 'Delivers pages back to the browser'
24804f499dSGerry Weißbach                ));
256ed83c65SGerry Weißbach    }
266ed83c65SGerry Weißbach
2778dd5656SGerry Weißbach    function register(Doku_Event_Handler $controller) {
286ed83c65SGerry Weißbach        // Support given via AJAX
296ed83c65SGerry Weißbach        $controller->register_hook('AJAX_CALL_UNKNOWN', 'BEFORE', $this, 'ajax_viewer_provider');
302c873b42SGerry Weißbach        $controller->register_hook('MULTIORPHAN_INSTRUCTION_LINKED', 'BEFORE', $this, 'multiorphan_link_check');
316ed83c65SGerry Weißbach    }
326ed83c65SGerry Weißbach
332c873b42SGerry Weißbach    function ajax_viewer_provider( Doku_Event &$event ) {
346ed83c65SGerry Weißbach        global $JSINFO;
356ed83c65SGerry Weißbach        global $INFO;
366ed83c65SGerry Weißbach        global $ID;
376ed83c65SGerry Weißbach        global $ACT;
386ed83c65SGerry Weißbach
396ed83c65SGerry Weißbach        if ( $event->data != '_popup_load_file' && $event->data != '_popup_load_image_meta' ) {
406ed83c65SGerry Weißbach            return;
416ed83c65SGerry Weißbach        }
426ed83c65SGerry Weißbach
436ed83c65SGerry Weißbach        // Registers ACT
446ed83c65SGerry Weißbach        if (isset($_SERVER['HTTP_X_DOKUWIKI_DO'])){
456ed83c65SGerry Weißbach            $ACT = trim(strtolower($_SERVER['HTTP_X_DOKUWIKI_DO']));
466ed83c65SGerry Weißbach        } elseif (!empty($_REQUEST['idx'])) {
476ed83c65SGerry Weißbach            $ACT = 'index';
486ed83c65SGerry Weißbach        } elseif (isset($_REQUEST['do'])) {
496ed83c65SGerry Weißbach            $ACT = $_REQUEST['do'];
506ed83c65SGerry Weißbach        } else {
516ed83c65SGerry Weißbach            $ACT = 'show';
526ed83c65SGerry Weißbach        }
536ed83c65SGerry Weißbach
546ed83c65SGerry Weißbach        $event->preventDefault();
556ed83c65SGerry Weißbach        $event->stopPropagation();
566ed83c65SGerry Weißbach
576ed83c65SGerry Weißbach        $data = "";
58c48fb16bSGerry Weißbach        $head = array(
59c48fb16bSGerry Weißbach            'script' => array(array()),
60c48fb16bSGerry Weißbach            'link' => array(array()),
61c48fb16bSGerry Weißbach            'meta' => array(array()),
62c48fb16bSGerry Weißbach            'popupscript' => array()
63c48fb16bSGerry Weißbach        );
64f375a6bbSGerry Weißbach        $ID = getID('id');
65a10ec381SStumm, Peter
66a10ec381SStumm, Peter        if (auth_quickaclcheck($ID) < AUTH_READ) {
67a10ec381SStumm, Peter            echo "read permission error";
68a10ec381SStumm, Peter            return;
69a10ec381SStumm, Peter        }
706ed83c65SGerry Weißbach
716ed83c65SGerry Weißbach        switch($event->data) {
726ed83c65SGerry Weißbach            case '_popup_load_file' :
736ed83c65SGerry Weißbach                $INFO = pageinfo();
746ed83c65SGerry Weißbach                $JSINFO['id'] = $ID;
756ed83c65SGerry Weißbach                $JSINFO['namespace'] = (string) $INFO['namespace'];
76*875428a3SYury Ovsyannikov                Event::createAndTrigger('POPUPVIEWER_DOKUWIKI_STARTED',$head,null,true);
776ed83c65SGerry Weißbach
78*875428a3SYury Ovsyannikov                $script = 'var JSINFO = ' . json_encode($JSINFO) . ';';
79f5f1feadSGerry Weißbach
80f5f1feadSGerry Weißbach                if ( $this->getConf('allowpopupscript') ) {
81886a8c8fSGerry Weißbach                    $popupscript = p_get_metadata($ID, 'popupscript', true);
82efbf612eSGerry Weißbach                    $script .= "try{(function($){".$popupscript."}(jQuery))}catch(e){alert('Could not execute popupscript: '+e);}";
83c48fb16bSGerry Weißbach
84c48fb16bSGerry Weißbach                    if ( ($google =& plugin_load('action', 'googleanalytics')) ) {
85c48fb16bSGerry Weißbach                        $dest = str_replace(":", "/", $ID);
86c48fb16bSGerry Weißbach                        if ( isset($_REQUEST['do']) ) {
87c48fb16bSGerry Weißbach                            $dest .= "?do=".$_REQUEST['do'];
88c48fb16bSGerry Weißbach                        }
89c48fb16bSGerry Weißbach                        $script .= "if(window.ga) window.ga('send', 'event', 'wiki-action', 'popupviewer', '".$dest."', { nonInteraction: false} );";
90c48fb16bSGerry Weißbach                    }
91f5f1feadSGerry Weißbach                }
92f5f1feadSGerry Weißbach
93ecc7f0a7SGerry Weißbach                $head['popupscript'][] = array( 'type'=>'text/popupscript', '_data'=> $script );
946ed83c65SGerry Weißbach
956ed83c65SGerry Weißbach                $data = '<div class="dokuwiki" style="padding-bottom: 10px;">' . p_wiki_xhtml($ID,'',true) . '</div>';
966ed83c65SGerry Weißbach                break;
976ed83c65SGerry Weißbach            case '_popup_load_image_meta' :
98f375a6bbSGerry Weißbach
99f375a6bbSGerry Weißbach                global $SRC;
100f375a6bbSGerry Weißbach                $SRC = mediaFN($ID);
101f375a6bbSGerry Weißbach                $title = hsc(tpl_img_getTag('IPTC.Headline'));
102f375a6bbSGerry Weißbach                $caption = hsc(tpl_img_getTag('IPTC.Caption'));
1036ed83c65SGerry Weißbach
1046ed83c65SGerry Weißbach                if ( !empty($title) ) { $title = "<h3 class=\"title\">$title</h3>"; }
1056ed83c65SGerry Weißbach                if ( !empty($caption) ) { $caption = "<div class=\"text\"><p>$caption</p></div>"; }
1066ed83c65SGerry Weißbach                $data = preg_replace("%(\n|\r)%", '', nl2br($title.$caption));
1076ed83c65SGerry Weißbach                break;
1086ed83c65SGerry Weißbach        }
1096ed83c65SGerry Weißbach
1106ed83c65SGerry Weißbach        header('Content-Type: text/html; charset=utf-8');
1116ed83c65SGerry Weißbach
112c48fb16bSGerry Weißbach        if ( !empty($head['popupscript']) ) {
113*875428a3SYury Ovsyannikov            Event::createAndTrigger('TPL_METAHEADER_OUTPUT',$head,'_tpl_metaheaders_action',true);
1146ed83c65SGerry Weißbach        }
1156ed83c65SGerry Weißbach
1166ed83c65SGerry Weißbach        print $data;
1176ed83c65SGerry Weißbach        return;
1186ed83c65SGerry Weißbach    }
1192c873b42SGerry Weißbach
1202c873b42SGerry Weißbach    function multiorphan_link_check(Doku_Event &$event) {
1212c873b42SGerry Weißbach
1222c873b42SGerry Weißbach        $instructions = $event->data['instructions'];
1232c873b42SGerry Weißbach        if ( !strstr($instructions[0], 'popupviewer') ) {
1242c873b42SGerry Weißbach            return;
1252c873b42SGerry Weißbach        }
1262c873b42SGerry Weißbach
1272c873b42SGerry Weißbach        $event->data['entryID'] = $id = cleanID($instructions[1][0]);
1282c873b42SGerry Weißbach
1292c873b42SGerry Weißbach        $page   = resolve_id(getNS($event->data['checkNamespace']),$id);
1302c873b42SGerry Weißbach        $file   = mediaFN($page);
1312c873b42SGerry Weißbach
1322c873b42SGerry Weißbach        $event->data['exists'] = $exists = @file_exists($file) && @is_file($file);
1332c873b42SGerry Weißbach        $event->data['type']   = $exists ? 'media' : 'pages';
1342c873b42SGerry Weißbach
1352c873b42SGerry Weißbach        if ( !$exists ) {
1362c873b42SGerry Weißbach            resolve_pageid(getNS($event->data['checkNamespace']),$id,$event->data['exists']);
1372c873b42SGerry Weißbach        }
1382c873b42SGerry Weißbach    }
1396ed83c65SGerry Weißbach}
140