1<?php
2/**
3 * DokuWiki Plugin survey (Helper Component)
4 *
5 * @license GPL 2 http://www.gnu.org/licenses/gpl-2.0.html
6 * @author  DRINGOT <ddonovan.ringot@hotmail.fr>
7 */
8
9// must be run within Dokuwiki
10if (!defined("DOKU_INC")) {
11    die();
12}
13
14if (!defined("DOKU_LF")) {
15    define("DOKU_LF", "\n");
16}
17if (!defined("DOKU_TAB")) {
18    define("DOKU_TAB", "\t");
19}
20if (!defined("DOKU_PLUGIN")) {
21    define("DOKU_PLUGIN", DOKU_INC . "lib/plugins/");
22}
23
24require_once DOKU_PLUGIN . "syntax.php";
25
26class syntax_plugin_survey_survey extends DokuWiki_Syntax_Plugin
27{
28    public $readingEnabled = false;
29
30    public $readingTemp = "";
31
32    public $surveyNumber = 0;
33
34    public function getType()
35    {
36        return "protected";
37    }
38
39    public function getPType()
40    {
41        return "normal";
42    }
43
44    public function getSort()
45    {
46        return 35;
47    }
48
49    public function connectTo($mode)
50    {
51        $this->Lexer->addEntryPattern(
52            "<survey>",
53            $mode,
54            "plugin_survey_survey"
55        );
56    }
57
58    public function postConnect()
59    {
60        $this->Lexer->addExitPattern("</survey>", "plugin_survey_survey");
61    }
62
63    public function handle($match, $state, $pos, Doku_Handler $handler)
64    {
65        switch ($state) {
66            case DOKU_LEXER_ENTER:
67                $this->readingTemp = "";
68                break;
69
70            case DOKU_LEXER_EXIT:
71                return [$this->readingTemp];
72
73            case DOKU_LEXER_UNMATCHED:
74                $this->readingTemp .= $match;
75                break;
76        }
77
78        return [];
79    }
80
81    public function render($format, Doku_Renderer $renderer, $data)
82    {
83        if ($mode != "xhtml") {
84            return false;
85        }
86
87        if (count($data) > 0) {
88            $helper = plugin_load("helper", "survey_survey");
89
90            $surveySyntax = $helper->sanitizeSyntax($data[0]);
91
92            $survey = $helper->interpretSurvey($surveySyntax);
93
94            $renderer->doc .=
95                '<div class="DokuwikiSurvey" id="survey_' .
96                $this->surveyNumber .
97                "\">\n";
98            $renderer->doc .= "    <p class=\"lastSurvey\" />\n";
99            $renderer->doc .= "    <p class=\"surveyQuestion\" />\n";
100            $renderer->doc .= "    <p class=\"surveyAnswers\" />\n";
101            $renderer->doc .= "</div>";
102
103            $renderer->doc .= "<script type=\"text/javascript\">\n";
104            $renderer->doc .=
105                "    var surveyConfig_" .
106                $this->surveyNumber .
107                " = " .
108                json_encode($survey) .
109                ";\n";
110            $renderer->doc .= "    if (!survey) {\n";
111            $renderer->doc .= "      var survey = [];\n";
112            $renderer->doc .= "    }\n";
113            $renderer->doc .=
114                "    survey[" .
115                $this->surveyNumber .
116                "] = new Dokuwiki_Survey(" .
117                $this->surveyNumber .
118                ", surveyConfig_" .
119                $this->surveyNumber .
120                ");\n";
121            $renderer->doc .=
122                "    survey[" .
123                $this->surveyNumber .
124                '].lang = { "back": ' .
125                '"' .
126                $this->getLang("Back") .
127                '" }' .
128                "\n";
129
130            $renderer->doc .=
131                "    survey[" . $this->surveyNumber . "].makeSurvey()";
132            $renderer->doc .= "</script>\n";
133
134            $this->surveyNumber++;
135        }
136
137        return true;
138    }
139}
140