xref: /plugin/mikioplugin/syntax/quizitem.php (revision 3a0ad8d394ede994db68f1ed17eff796c659fc4a)
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