X7ROOT File Manager
Current Path:
/home/cbholdings/pasukulu/question/type/gapselect
home
/
cbholdings
/
pasukulu
/
question
/
type
/
gapselect
/
📁
..
📁
backup
📁
classes
📁
db
📄
edit_form_base.php
(10.62 KB)
📄
edit_gapselect_form.php
(1.5 KB)
📁
lang
📄
lib.php
(1.23 KB)
📁
pix
📄
question.php
(2.08 KB)
📄
questionbase.php
(13.37 KB)
📄
questiontype.php
(4.31 KB)
📄
questiontypebase.php
(13.13 KB)
📄
renderer.php
(3.1 KB)
📄
rendererbase.php
(5.54 KB)
📄
styles.css
(321 B)
📁
tests
📄
version.php
(1.07 KB)
Editing: rendererbase.php
<?php // This file is part of Moodle - http://moodle.org/ // // Moodle is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Moodle is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Moodle. If not, see <http://www.gnu.org/licenses/>. /** * Base class for rendering question types like this one. * * @package qtype_gapselect * @copyright 2011 The Open University * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later */ defined('MOODLE_INTERNAL') || die(); /** * Renders question types where the question includes embedded interactive elements. * * @copyright 2011 The Open University * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later */ abstract class qtype_elements_embedded_in_question_text_renderer extends qtype_with_combined_feedback_renderer { public function formulation_and_controls(question_attempt $qa, question_display_options $options) { $question = $qa->get_question(); $questiontext = ''; // Glue question fragments together using unique placeholders, apply format_text to the result // and then substitute each placeholder with the embedded element. // This will ensure that format_text() is applied to the whole question but not to the embedded elements. $placeholders = $this->get_fragments_glue_placeholders($question->textfragments); foreach ($question->textfragments as $i => $fragment) { if ($i > 0) { $questiontext .= $placeholders[$i]; // There is a preg_replace 11 lines ahead where the $embeddedelements is used as the replace. // If there are currency like options ($4) in the select then the preg_replace treats them as backreferences. // So we need to escape the backreferences here. $embeddedelements[$placeholders[$i]] = preg_replace('/\$(\d)/', '\\\$$1', $this->embedded_element($qa, $i, $options)); } $questiontext .= $fragment; } $questiontext = $question->format_text($questiontext, $question->questiontextformat, $qa, 'question', 'questiontext', $question->id); foreach ($placeholders as $i => $placeholder) { $questiontext = preg_replace('/'. preg_quote($placeholder, '/') . '/', $embeddedelements[$placeholder], $questiontext); } $result = ''; $result .= html_writer::tag('div', $questiontext, array('class' => 'qtext')); $result .= $this->post_qtext_elements($qa, $options); if ($qa->get_state() == question_state::$invalid) { $result .= html_writer::nonempty_tag('div', $question->get_validation_error($qa->get_last_qt_data()), array('class' => 'validationerror')); } return $result; } /** * Find strings that we can use to glue the fragments with * * These strings have to be all different and neither of them can be present in the text * * @param array $fragments * @return array array with indexes from 1 to count($fragments)-1 */ protected function get_fragments_glue_placeholders($fragments) { $fragmentscount = count($fragments); if ($fragmentscount <= 1) { return []; } $prefix = '[[$'; $postfix = ']]'; $text = join('', $fragments); while (preg_match('/' . preg_quote($prefix, '/') . '\\d+' . preg_quote($postfix, '/') . '/', $text)) { $prefix .= '$'; } $glues = []; for ($i = 1; $i < $fragmentscount; $i++) { $glues[$i] = $prefix . $i . $postfix; } return $glues; } protected function qtext_id($qa) { return str_replace(':', '_', $qa->get_qt_field_name('')); } protected abstract function embedded_element(question_attempt $qa, $place, question_display_options $options); protected function post_qtext_elements(question_attempt $qa, question_display_options $options) { return ''; } protected function box_id(question_attempt $qa, $place) { return str_replace(':', '_', $qa->get_qt_field_name($place)); } public function specific_feedback(question_attempt $qa) { return $this->combined_feedback($qa); } public function correct_response(question_attempt $qa) { $question = $qa->get_question(); $correctanswer = ''; foreach ($question->textfragments as $i => $fragment) { if ($i > 0) { $group = $question->places[$i]; $choice = $question->choices[$group][$question->rightchoices[$i]]; $correctanswer .= '[' . str_replace('-', '‑', $choice->text) . ']'; } $correctanswer .= $fragment; } if (!empty($correctanswer)) { return get_string('correctansweris', 'qtype_gapselect', $question->format_text($correctanswer, $question->questiontextformat, $qa, 'question', 'questiontext', $question->id)); } } }
Upload File
Create Folder