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