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