1*21913ab3SNickeau<?php 2*21913ab3SNickeau 3*21913ab3SNickeauuse ComboStrap\PluginUtility; 4*21913ab3SNickeauuse ComboStrap\Site; 5*21913ab3SNickeauuse ComboStrap\TplUtility; 6*21913ab3SNickeau 7*21913ab3SNickeauif (!defined('DOKU_INC')) die(); 8*21913ab3SNickeau 9*21913ab3SNickeau/** 10*21913ab3SNickeau * 11*21913ab3SNickeau */ 12*21913ab3SNickeauclass action_plugin_combo_webcode extends DokuWiki_Action_Plugin 13*21913ab3SNickeau{ 14*21913ab3SNickeau 15*21913ab3SNickeau const CALL_ID = "webcode"; 16*21913ab3SNickeau const DW_PARAM = "dw"; 17*21913ab3SNickeau const CALL_PARAM = "call"; 18*21913ab3SNickeau 19*21913ab3SNickeau function register(Doku_Event_Handler $controller) 20*21913ab3SNickeau { 21*21913ab3SNickeau $controller->register_hook('AJAX_CALL_UNKNOWN', 'BEFORE', $this, '_ajax_call'); 22*21913ab3SNickeau } 23*21913ab3SNickeau 24*21913ab3SNickeau /** 25*21913ab3SNickeau * handle ajax requests 26*21913ab3SNickeau * @param $event Doku_Event 27*21913ab3SNickeau * 28*21913ab3SNickeau * {@link html_show()} 29*21913ab3SNickeau * 30*21913ab3SNickeau * https://www.dokuwiki.org/devel:plugin_programming_tips#handle_json_ajax_request 31*21913ab3SNickeau * 32*21913ab3SNickeau * CSRF checks are only for logged in users 33*21913ab3SNickeau * This is public ({@link getSecurityToken()} 34*21913ab3SNickeau */ 35*21913ab3SNickeau function _ajax_call(&$event) 36*21913ab3SNickeau { 37*21913ab3SNickeau 38*21913ab3SNickeau if ($event->data !== self::CALL_ID) { 39*21913ab3SNickeau return; 40*21913ab3SNickeau } 41*21913ab3SNickeau //no other ajax call handlers needed 42*21913ab3SNickeau $event->stopPropagation(); 43*21913ab3SNickeau $event->preventDefault(); 44*21913ab3SNickeau 45*21913ab3SNickeau 46*21913ab3SNickeau global $INPUT; 47*21913ab3SNickeau $dw = $INPUT->str(self::DW_PARAM); 48*21913ab3SNickeau $title = $INPUT->str('title') ?: "ComboStrap WebCode - Dokuwiki Renderer"; 49*21913ab3SNickeau 50*21913ab3SNickeau 51*21913ab3SNickeau header('Content-Type: text/html; charset=utf-8'); 52*21913ab3SNickeau 53*21913ab3SNickeau /** 54*21913ab3SNickeau * Conf 55*21913ab3SNickeau */ 56*21913ab3SNickeau PluginUtility::setConf(action_plugin_combo_css::CONF_DISABLE_DOKUWIKI_STYLESHEET, true); 57*21913ab3SNickeau 58*21913ab3SNickeau /** 59*21913ab3SNickeau * Main content happens before the headers 60*21913ab3SNickeau * to set the headers right 61*21913ab3SNickeau */ 62*21913ab3SNickeau $mainContent = p_render('xhtml', p_get_instructions($dw), $info); 63*21913ab3SNickeau 64*21913ab3SNickeau /** 65*21913ab3SNickeau * Html 66*21913ab3SNickeau */ 67*21913ab3SNickeau $htmlBeforeHeads = '<!DOCTYPE html>' . DOKU_LF; 68*21913ab3SNickeau $htmlBeforeHeads .= '<html>' . DOKU_LF; 69*21913ab3SNickeau $htmlBeforeHeads .= '<head>' . DOKU_LF; 70*21913ab3SNickeau $htmlBeforeHeads .= " <title>$title</title>" . DOKU_LF; 71*21913ab3SNickeau // we echo because the tpl function just flush 72*21913ab3SNickeau echo $htmlBeforeHeads; 73*21913ab3SNickeau 74*21913ab3SNickeau if (Site::isStrapTemplate()) { 75*21913ab3SNickeau 76*21913ab3SNickeau /** 77*21913ab3SNickeau * The strap header function 78*21913ab3SNickeau */ 79*21913ab3SNickeau PluginUtility::loadStrapUtilityTemplate(); 80*21913ab3SNickeau TplUtility::registerHeaderHandler(); 81*21913ab3SNickeau } 82*21913ab3SNickeau /** 83*21913ab3SNickeau * To delete the not needed headers for an export 84*21913ab3SNickeau * such as manifest, alternate, ... 85*21913ab3SNickeau */ 86*21913ab3SNickeau global $EVENT_HANDLER; 87*21913ab3SNickeau $EVENT_HANDLER->register_hook('TPL_METAHEADER_OUTPUT', 'BEFORE', $this, '_delete_not_needed_headers'); 88*21913ab3SNickeau 89*21913ab3SNickeau /** 90*21913ab3SNickeau * meta headers 91*21913ab3SNickeau */ 92*21913ab3SNickeau tpl_metaheaders(); 93*21913ab3SNickeau 94*21913ab3SNickeau 95*21913ab3SNickeau $htmlAfterHeads = '</head>' . DOKU_LF; 96*21913ab3SNickeau $htmlAfterHeads .= '<body>' . DOKU_LF; 97*21913ab3SNickeau $htmlAfterHeads .= $mainContent . DOKU_LF; 98*21913ab3SNickeau $htmlAfterHeads .= '</body>' . DOKU_LF; 99*21913ab3SNickeau $htmlAfterHeads .= '</html>' . DOKU_LF; 100*21913ab3SNickeau echo $htmlAfterHeads; 101*21913ab3SNickeau http_response_code(200); 102*21913ab3SNickeau 103*21913ab3SNickeau } 104*21913ab3SNickeau 105*21913ab3SNickeau public function _delete_not_needed_headers(&$event) 106*21913ab3SNickeau { 107*21913ab3SNickeau $data = &$event->data; 108*21913ab3SNickeau 109*21913ab3SNickeau foreach ($data as $tag => &$heads) { 110*21913ab3SNickeau switch ($tag) { 111*21913ab3SNickeau case "link": 112*21913ab3SNickeau $deletedRel = ["manifest", "search", "start", "alternate", "contents"]; 113*21913ab3SNickeau foreach ($heads as $id => $headAttributes) { 114*21913ab3SNickeau if (isset($headAttributes['rel'])) { 115*21913ab3SNickeau $rel = $headAttributes['rel']; 116*21913ab3SNickeau if (in_array($rel, $deletedRel)) { 117*21913ab3SNickeau unset($heads[$id]); 118*21913ab3SNickeau } 119*21913ab3SNickeau } 120*21913ab3SNickeau } 121*21913ab3SNickeau break; 122*21913ab3SNickeau case "meta": 123*21913ab3SNickeau $deletedMeta = ["robots"]; 124*21913ab3SNickeau foreach ($heads as $id => $headAttributes) { 125*21913ab3SNickeau if (isset($headAttributes['name'])) { 126*21913ab3SNickeau $rel = $headAttributes['name']; 127*21913ab3SNickeau if (in_array($rel, $deletedMeta)) { 128*21913ab3SNickeau unset($heads[$id]); 129*21913ab3SNickeau } 130*21913ab3SNickeau } 131*21913ab3SNickeau } 132*21913ab3SNickeau break; 133*21913ab3SNickeau case "script": 134*21913ab3SNickeau foreach ($heads as $id => $headAttributes) { 135*21913ab3SNickeau if (isset($headAttributes['src'])) { 136*21913ab3SNickeau $src = $headAttributes['src']; 137*21913ab3SNickeau if (strpos($src, "lib/exe/js.php") !== false) { 138*21913ab3SNickeau unset($heads[$id]); 139*21913ab3SNickeau } 140*21913ab3SNickeau } 141*21913ab3SNickeau } 142*21913ab3SNickeau } 143*21913ab3SNickeau } 144*21913ab3SNickeau } 145*21913ab3SNickeau 146*21913ab3SNickeau 147*21913ab3SNickeau} 148