xref: /plugin/combo/action/webcode.php (revision 531e725cdb5a652164f2d97f556304e31f720033)
121913ab3SNickeau<?php
221913ab3SNickeau
321913ab3SNickeauuse ComboStrap\PluginUtility;
421913ab3SNickeauuse ComboStrap\Site;
521913ab3SNickeauuse ComboStrap\TplUtility;
621913ab3SNickeau
721913ab3SNickeauif (!defined('DOKU_INC')) die();
821913ab3SNickeau
921913ab3SNickeau/**
1021913ab3SNickeau *
1121913ab3SNickeau */
1221913ab3SNickeauclass  action_plugin_combo_webcode extends DokuWiki_Action_Plugin
1321913ab3SNickeau{
1421913ab3SNickeau
1521913ab3SNickeau    const CALL_ID = "webcode";
16*531e725cSNickeau    const MARKI_PARAM = "marki";
17*531e725cSNickeau
1821913ab3SNickeau
1921913ab3SNickeau    function register(Doku_Event_Handler $controller)
2021913ab3SNickeau    {
2121913ab3SNickeau        $controller->register_hook('AJAX_CALL_UNKNOWN', 'BEFORE', $this, '_ajax_call');
2221913ab3SNickeau    }
2321913ab3SNickeau
2421913ab3SNickeau    /**
2521913ab3SNickeau     * handle ajax requests
2621913ab3SNickeau     * @param $event Doku_Event
2721913ab3SNickeau     *
2821913ab3SNickeau     * {@link html_show()}
2921913ab3SNickeau     *
3021913ab3SNickeau     * https://www.dokuwiki.org/devel:plugin_programming_tips#handle_json_ajax_request
3121913ab3SNickeau     *
3221913ab3SNickeau     * CSRF checks are only for logged in users
3321913ab3SNickeau     * This is public ({@link getSecurityToken()}
3421913ab3SNickeau     */
3521913ab3SNickeau    function _ajax_call(&$event)
3621913ab3SNickeau    {
3721913ab3SNickeau
3821913ab3SNickeau        if ($event->data !== self::CALL_ID) {
3921913ab3SNickeau            return;
4021913ab3SNickeau        }
4121913ab3SNickeau        //no other ajax call handlers needed
4221913ab3SNickeau        $event->stopPropagation();
4321913ab3SNickeau        $event->preventDefault();
4421913ab3SNickeau
4521913ab3SNickeau
4621913ab3SNickeau        global $INPUT;
47*531e725cSNickeau        $marki = $INPUT->str(self::MARKI_PARAM);
4821913ab3SNickeau        $title = $INPUT->str('title') ?: "ComboStrap WebCode - Dokuwiki Renderer";
4921913ab3SNickeau
5021913ab3SNickeau
5121913ab3SNickeau        header('Content-Type: text/html; charset=utf-8');
5221913ab3SNickeau
5321913ab3SNickeau        /**
5421913ab3SNickeau         * Conf
5521913ab3SNickeau         */
5621913ab3SNickeau        PluginUtility::setConf(action_plugin_combo_css::CONF_DISABLE_DOKUWIKI_STYLESHEET, true);
5721913ab3SNickeau
5821913ab3SNickeau        /**
5921913ab3SNickeau         * Main content happens before the headers
6021913ab3SNickeau         * to set the headers right
6121913ab3SNickeau         */
62*531e725cSNickeau        global $conf;
63*531e725cSNickeau        $conf["renderer_xhtml"] = "xhtml";
64*531e725cSNickeau        $mainContent = p_render('xhtml', p_get_instructions($marki), $info);
6521913ab3SNickeau
6621913ab3SNickeau        /**
6721913ab3SNickeau         * Html
6821913ab3SNickeau         */
6921913ab3SNickeau        $htmlBeforeHeads = '<!DOCTYPE html>' . DOKU_LF;
7021913ab3SNickeau        $htmlBeforeHeads .= '<html>' . DOKU_LF;
7121913ab3SNickeau        $htmlBeforeHeads .= '<head>' . DOKU_LF;
7221913ab3SNickeau        $htmlBeforeHeads .= "  <title>$title</title>" . DOKU_LF;
7321913ab3SNickeau        // we echo because the tpl function just flush
7421913ab3SNickeau        echo $htmlBeforeHeads;
7521913ab3SNickeau
7621913ab3SNickeau        if (Site::isStrapTemplate()) {
7721913ab3SNickeau
7821913ab3SNickeau            /**
7921913ab3SNickeau             * The strap header function
8021913ab3SNickeau             */
81*531e725cSNickeau            $loaded = PluginUtility::loadStrapUtilityTemplateIfPresentAndSameVersion();
82*531e725cSNickeau            if($loaded) {
8321913ab3SNickeau                TplUtility::registerHeaderHandler();
8421913ab3SNickeau            }
85*531e725cSNickeau        }
86*531e725cSNickeau
8721913ab3SNickeau        /**
8821913ab3SNickeau         * To delete the not needed headers for an export
8921913ab3SNickeau         * such as manifest, alternate, ...
9021913ab3SNickeau         */
9121913ab3SNickeau        global $EVENT_HANDLER;
9221913ab3SNickeau        $EVENT_HANDLER->register_hook('TPL_METAHEADER_OUTPUT', 'BEFORE', $this, '_delete_not_needed_headers');
9321913ab3SNickeau
9421913ab3SNickeau        /**
9521913ab3SNickeau         * meta headers
9621913ab3SNickeau         */
9721913ab3SNickeau        tpl_metaheaders();
9821913ab3SNickeau
9921913ab3SNickeau
10021913ab3SNickeau        $htmlAfterHeads = '</head>' . DOKU_LF;
10121913ab3SNickeau        $htmlAfterHeads .= '<body>' . DOKU_LF;
10221913ab3SNickeau        $htmlAfterHeads .= $mainContent . DOKU_LF;
10321913ab3SNickeau        $htmlAfterHeads .= '</body>' . DOKU_LF;
10421913ab3SNickeau        $htmlAfterHeads .= '</html>' . DOKU_LF;
10521913ab3SNickeau        echo $htmlAfterHeads;
10621913ab3SNickeau        http_response_code(200);
10721913ab3SNickeau
10821913ab3SNickeau    }
10921913ab3SNickeau
110*531e725cSNickeau    /**
111*531e725cSNickeau     * Dynamically called in the previous function
112*531e725cSNickeau     * to delete the head
113*531e725cSNickeau     * @param $event
114*531e725cSNickeau     */
11521913ab3SNickeau    public function _delete_not_needed_headers(&$event)
11621913ab3SNickeau    {
11721913ab3SNickeau        $data = &$event->data;
11821913ab3SNickeau
11921913ab3SNickeau        foreach ($data as $tag => &$heads) {
12021913ab3SNickeau            switch ($tag) {
12121913ab3SNickeau                case "link":
12221913ab3SNickeau                    $deletedRel = ["manifest", "search", "start", "alternate", "contents"];
12321913ab3SNickeau                    foreach ($heads as $id => $headAttributes) {
12421913ab3SNickeau                        if (isset($headAttributes['rel'])) {
12521913ab3SNickeau                            $rel = $headAttributes['rel'];
12621913ab3SNickeau                            if (in_array($rel, $deletedRel)) {
12721913ab3SNickeau                                unset($heads[$id]);
12821913ab3SNickeau                            }
12921913ab3SNickeau                        }
13021913ab3SNickeau                    }
13121913ab3SNickeau                    break;
13221913ab3SNickeau                case "meta":
13321913ab3SNickeau                    $deletedMeta = ["robots"];
13421913ab3SNickeau                    foreach ($heads as $id => $headAttributes) {
13521913ab3SNickeau                        if (isset($headAttributes['name'])) {
13621913ab3SNickeau                            $rel = $headAttributes['name'];
13721913ab3SNickeau                            if (in_array($rel, $deletedMeta)) {
13821913ab3SNickeau                                unset($heads[$id]);
13921913ab3SNickeau                            }
14021913ab3SNickeau                        }
14121913ab3SNickeau                    }
14221913ab3SNickeau                    break;
14321913ab3SNickeau                case "script":
14421913ab3SNickeau                    foreach ($heads as $id => $headAttributes) {
14521913ab3SNickeau                        if (isset($headAttributes['src'])) {
14621913ab3SNickeau                            $src = $headAttributes['src'];
14721913ab3SNickeau                            if (strpos($src, "lib/exe/js.php") !== false) {
14821913ab3SNickeau                                unset($heads[$id]);
14921913ab3SNickeau                            }
15021913ab3SNickeau                        }
15121913ab3SNickeau                    }
15221913ab3SNickeau            }
15321913ab3SNickeau        }
15421913ab3SNickeau    }
15521913ab3SNickeau
15621913ab3SNickeau
15721913ab3SNickeau}
158