17b185056SJames Collins<?php 27b185056SJames Collins/** 37b185056SJames Collins * Mikio Syntax Plugin: Quiz Item 47b185056SJames Collins * 57b185056SJames Collins * @author James Collins <james.collins@outlook.com.au> 661729b71SJames Collins * @license GPL 2 (http://www.gnu.org/licenses/gpl.html) 761729b71SJames Collins * @link http://github.com/nomadjimbob/mikioplugin 87b185056SJames Collins */ 97b185056SJames Collins 1061729b71SJames Collinsif (!defined('DOKU_INC')) { 1161729b71SJames Collins die(); 1261729b71SJames Collins} 1361729b71SJames Collinsif (!defined('DOKU_PLUGIN')) { 1461729b71SJames Collins define('DOKU_PLUGIN', DOKU_INC.'lib/plugins/'); 1561729b71SJames Collins} 16*3a0ad8d3SJames Collinsrequire_once __DIR__.'/core.php'; 177b185056SJames Collins 1861729b71SJames Collinsclass syntax_plugin_mikioplugin_quizitem extends syntax_plugin_mikioplugin_core 1961729b71SJames Collins{ 207b185056SJames Collins public $tag = 'quiz-item'; 2143f781e0SJames Collins public $requires_tag = 'quiz'; 227b185056SJames Collins public $hasEndTag = false; 237b185056SJames Collins public $options = array( 247b185056SJames Collins 'type' => array('type' => 'choice', 254d21e148SJames Collins 'data' => array('choice', 'multiple'), 264d21e148SJames Collins 'default' => 'choice'), 277b185056SJames Collins 'question' => array('type' => 'text', 'default' => ''), 287b185056SJames Collins 'options' => array('type' => 'text', 'default' => ''), 297b185056SJames Collins 'answer' => array('type' => 'text', 'default' => ''), 304d21e148SJames Collins 'scores' => array('type' => 'text', 'default' => ''), 317b185056SJames Collins 'text' => array('type' => 'text', 'default' => ''), 327b185056SJames Collins ); 337b185056SJames Collins 3461729b71SJames Collins public function render_lexer_special(Doku_Renderer $renderer, $data) 3561729b71SJames Collins { 367b185056SJames Collins $classes = $this->buildClass($data); 377b185056SJames Collins 38becd90d5SJames Collins $data['question'] = $this->applyMarkdownEffects($data['question']); 39becd90d5SJames Collins $data['text'] = $this->applyMarkdownEffects($data['text']); 40becd90d5SJames Collins 414d21e148SJames Collins $renderer->doc .= '<div class="' . $this->elemClass . ' ' . $this->classPrefix . 'quiz-item' . $classes . '" data-question="' . $data['question'] . '" ' . ($data['answer'] != '' ? 'data-answer="' . $data['answer'] . '"' : '') . '>'; 427b185056SJames Collins $renderer->doc .= '<div class="' . $this->elemClass . ' ' . $this->classPrefix . 'quiz-question">' . $data['question'] . '</div>'; 438127a956SJames Collins if(!empty($data['text'])) { $renderer->doc .= '<p>' . $data['text'] . '</p>'; 4461729b71SJames Collins } 457b185056SJames Collins $renderer->doc .= '<div class="' . $this->elemClass . ' ' . $this->classPrefix . 'quiz-options">'; 467b185056SJames Collins 477b185056SJames Collins switch(strtolower($data['type'])) { 487b185056SJames Collins case 'choice': 497b185056SJames Collins $name = rand(10000, 99999); 507b185056SJames Collins 517b185056SJames Collins $options = explode('|', $data['options']); 524d21e148SJames Collins $scores = explode('|', $data['scores']); 534d21e148SJames Collins foreach($options as $key => $option) { 54becd90d5SJames Collins $renderer->doc .= '<div class="' . $this->elemClass . ' ' . $this->classPrefix . 'quiz-option"><label><input type="radio" name="' . $name . '" value="' . $option . '" ' . (isset($scores[$key]) && $scores[$key] != "" ? 'data-score="' . $scores[$key] . '" ' : '') . '/>' . $this->applyMarkdownEffects($option) . '</label></div>'; 554d21e148SJames Collins } 564d21e148SJames Collins break; 574d21e148SJames Collins case 'multiple': 584d21e148SJames Collins $name = rand(10000, 99999); 594d21e148SJames Collins 604d21e148SJames Collins $options = explode('|', $data['options']); 614d21e148SJames Collins $scores = explode('|', $data['scores']); 622e607ed9SJames Collins $inGroup = false; 632e607ed9SJames Collins $groupKey = 0; 642e607ed9SJames Collins 654d21e148SJames Collins foreach($options as $key => $option) { 662e607ed9SJames Collins $endGroup = false; 672e607ed9SJames Collins 682e607ed9SJames Collins if($inGroup === false && substr($option, 0, 1) === '[') { 692e607ed9SJames Collins $inGroup = true; 702e607ed9SJames Collins $option = substr($option, 1); 712e607ed9SJames Collins } else if($inGroup === true && substr($option, -1) === ']') { 722e607ed9SJames Collins $endGroup = true; 732e607ed9SJames Collins $option = substr($option, 0, -1); 742e607ed9SJames Collins } 752e607ed9SJames Collins 762e607ed9SJames Collins if($inGroup === true) { 772e607ed9SJames Collins $renderer->doc .= '<div class="' . $this->elemClass . ' ' . $this->classPrefix . 'quiz-option"><label><input type="radio" name="' . $name . '-group-' . $groupKey . '" value="' . $option . '" ' . (isset($scores[$key]) && $scores[$key] != "" ? 'data-score="' . $scores[$key] . '" ' : '') . '/>' . $this->applyMarkdownEffects($option) . '</label></div>'; 782e607ed9SJames Collins } else { 79becd90d5SJames Collins $renderer->doc .= '<div class="' . $this->elemClass . ' ' . $this->classPrefix . 'quiz-option"><label><input type="checkbox" name="' . $name . '-' . $key . '" value="' . $option . '" ' . (isset($scores[$key]) && $scores[$key] != "" ? 'data-score="' . $scores[$key] . '" ' : '') . '/>' . $this->applyMarkdownEffects($option) . '</label></div>'; 807b185056SJames Collins } 812e607ed9SJames Collins 822e607ed9SJames Collins if($endGroup === true) { 832e607ed9SJames Collins $inGroup = false; 842e607ed9SJames Collins $groupKey++; 852e607ed9SJames Collins } 862e607ed9SJames Collins } 877b185056SJames Collins break; 887b185056SJames Collins } 897b185056SJames Collins 907b185056SJames Collins $renderer->doc .= '</div>'; 917b185056SJames Collins $renderer->doc .= '</div>'; 927b185056SJames Collins } 937b185056SJames Collins} 947b185056SJames Collins?> 95