xref: /plugin/mikioplugin/syntax/quizitem.php (revision 2e607ed9d4bf870226f4a35db3bcd9ef9681d429)
17b185056SJames Collins<?php
27b185056SJames Collins/**
37b185056SJames Collins * Mikio Syntax Plugin: Quiz Item
47b185056SJames Collins *
57b185056SJames Collins * @link        http://github.com/nomadjimbob/mikioplugin
67b185056SJames Collins * @license     GPL 2 (http://www.gnu.org/licenses/gpl.html)
77b185056SJames Collins * @author      James Collins <james.collins@outlook.com.au>
87b185056SJames Collins */
97b185056SJames Collins
107b185056SJames Collinsif (!defined('DOKU_INC')) die();
117b185056SJames Collinsif (!defined('DOKU_PLUGIN')) define('DOKU_PLUGIN',DOKU_INC.'lib/plugins/');
127b185056SJames Collinsrequire_once(dirname(__FILE__).'/core.php');
137b185056SJames Collins
147b185056SJames Collinsclass syntax_plugin_mikioplugin_quizitem extends syntax_plugin_mikioplugin_core {
157b185056SJames Collins    public $tag                 = 'quiz-item';
1643f781e0SJames Collins    public $requires_tag        = 'quiz';
177b185056SJames Collins    public $hasEndTag           = false;
187b185056SJames Collins    public $options             = array(
197b185056SJames Collins        'type'          => array('type'     => 'choice',
204d21e148SJames Collins                                 'data'     => array('choice', 'multiple'),
214d21e148SJames Collins                                 'default'  => 'choice'),
227b185056SJames Collins        'question'      => array('type'     => 'text',          'default'   => ''),
237b185056SJames Collins        'options'       => array('type'     => 'text',          'default'   => ''),
247b185056SJames Collins        'answer'        => array('type'     => 'text',          'default'   => ''),
254d21e148SJames Collins        'scores'        => array('type'     => 'text',          'default'   => ''),
267b185056SJames Collins        'text'          => array('type'     => 'text',          'default'   => ''),
277b185056SJames Collins    );
287b185056SJames Collins
297b185056SJames Collins    // public function getAllowedTypes() {  return array(); }
307b185056SJames Collins
317b185056SJames Collins    public function render_lexer_special(Doku_Renderer $renderer, $data) {
327b185056SJames Collins        $classes = $this->buildClass($data);
337b185056SJames Collins
34becd90d5SJames Collins        $data['question'] = $this->applyMarkdownEffects($data['question']);
35becd90d5SJames Collins        $data['text'] = $this->applyMarkdownEffects($data['text']);
36becd90d5SJames Collins
374d21e148SJames Collins        $renderer->doc .= '<div class="' . $this->elemClass . ' ' . $this->classPrefix . 'quiz-item' . $classes . '" data-question="' . $data['question'] . '" ' . ($data['answer'] != '' ? 'data-answer="' . $data['answer'] . '"' : '') . '>';
387b185056SJames Collins        $renderer->doc .= '<div class="' . $this->elemClass . ' ' . $this->classPrefix . 'quiz-question">' . $data['question'] . '</div>';
397b185056SJames Collins        if($data['text'] != '') $renderer->doc .= '<p>' . $data['text'] . '</p>';
407b185056SJames Collins        $renderer->doc .= '<div class="' . $this->elemClass . ' ' . $this->classPrefix . 'quiz-options">';
417b185056SJames Collins
427b185056SJames Collins        switch(strtolower($data['type'])) {
437b185056SJames Collins            case 'choice':
447b185056SJames Collins                $name = rand(10000, 99999);
457b185056SJames Collins
467b185056SJames Collins                $options = explode('|', $data['options']);
474d21e148SJames Collins                $scores = explode('|', $data['scores']);
484d21e148SJames Collins                foreach($options as $key => $option) {
49becd90d5SJames 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>';
504d21e148SJames Collins                }
514d21e148SJames Collins                break;
524d21e148SJames Collins            case 'multiple':
534d21e148SJames Collins                $name = rand(10000, 99999);
544d21e148SJames Collins
554d21e148SJames Collins                $options = explode('|', $data['options']);
564d21e148SJames Collins                $scores = explode('|', $data['scores']);
57*2e607ed9SJames Collins                $inGroup = false;
58*2e607ed9SJames Collins                $groupKey = 0;
59*2e607ed9SJames Collins
604d21e148SJames Collins                foreach($options as $key => $option) {
61*2e607ed9SJames Collins                    $endGroup = false;
62*2e607ed9SJames Collins
63*2e607ed9SJames Collins                    if($inGroup === false && substr($option, 0, 1) === '[') {
64*2e607ed9SJames Collins                        $inGroup = true;
65*2e607ed9SJames Collins                        $option = substr($option, 1);
66*2e607ed9SJames Collins                    } else if($inGroup === true && substr($option, -1) === ']') {
67*2e607ed9SJames Collins                        $endGroup = true;
68*2e607ed9SJames Collins                        $option = substr($option, 0, -1);
69*2e607ed9SJames Collins                    }
70*2e607ed9SJames Collins
71*2e607ed9SJames Collins                    if($inGroup === true) {
72*2e607ed9SJames 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>';
73*2e607ed9SJames Collins                    } else {
74becd90d5SJames 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>';
757b185056SJames Collins                    }
76*2e607ed9SJames Collins
77*2e607ed9SJames Collins                    if($endGroup === true) {
78*2e607ed9SJames Collins                        $inGroup = false;
79*2e607ed9SJames Collins                        $groupKey++;
80*2e607ed9SJames Collins                    }
81*2e607ed9SJames Collins                }
827b185056SJames Collins                break;
837b185056SJames Collins        }
847b185056SJames Collins
857b185056SJames Collins        $renderer->doc .= '</div>';
867b185056SJames Collins        $renderer->doc .= '</div>';
877b185056SJames Collins    }
887b185056SJames Collins}
897b185056SJames Collins?>
90