[ Index ] |
PHP Cross Reference of Unnamed Project |
[Summary view] [Print] [Text view]
1 <?php 2 // This file is part of Moodle - http://moodle.org/ 3 // 4 // Moodle is free software: you can redistribute it and/or modify 5 // it under the terms of the GNU General Public License as published by 6 // the Free Software Foundation, either version 3 of the License, or 7 // (at your option) any later version. 8 // 9 // Moodle is distributed in the hope that it will be useful, 10 // but WITHOUT ANY WARRANTY; without even the implied warranty of 11 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 // GNU General Public License for more details. 13 // 14 // You should have received a copy of the GNU General Public License 15 // along with Moodle. If not, see <http://www.gnu.org/licenses/>. 16 17 /** 18 * Drag-and-drop onto image question renderer class. 19 * 20 * @package qtype_ddimageortext 21 * @copyright 2010 The Open University 22 * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later 23 */ 24 25 26 defined('MOODLE_INTERNAL') || die(); 27 28 /** 29 * Generates the output for drag-and-drop onto image questions. 30 * 31 * @copyright 2010 The Open University 32 * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later 33 */ 34 class qtype_ddtoimage_renderer_base extends qtype_with_combined_feedback_renderer { 35 36 public function clear_wrong(question_attempt $qa) { 37 $question = $qa->get_question(); 38 $response = $qa->get_last_qt_data(); 39 40 if (!empty($response)) { 41 $cleanresponse = $question->clear_wrong_from_response($response); 42 } else { 43 $cleanresponse = $response; 44 } 45 $cleanresponsehtml = ''; 46 foreach ($cleanresponse as $fieldname => $value) { 47 list (, $html) = $this->hidden_field_for_qt_var($qa, $fieldname, $value); 48 $cleanresponsehtml .= $html; 49 } 50 return $cleanresponsehtml; 51 } 52 53 public function formulation_and_controls(question_attempt $qa, 54 question_display_options $options) { 55 global $PAGE; 56 57 $question = $qa->get_question(); 58 $response = $qa->get_last_qt_data(); 59 60 $questiontext = $question->format_questiontext($qa); 61 62 $output = html_writer::tag('div', $questiontext, array('class' => 'qtext')); 63 64 $bgimage = self::get_url_for_image($qa, 'bgimage'); 65 66 $img = html_writer::empty_tag('img', array( 67 'src' => $bgimage, 'class' => 'dropbackground', 68 'alt' => get_string('dropbackground', 'qtype_ddimageortext'))); 69 70 $droparea = html_writer::tag('div', $img, array('class' => 'droparea')); 71 72 $dragimagehomes = ''; 73 foreach ($question->choices as $groupno => $group) { 74 $dragimagehomesgroup = ''; 75 $orderedgroup = $question->get_ordered_choices($groupno); 76 foreach ($orderedgroup as $choiceno => $dragimage) { 77 $dragimageurl = self::get_url_for_image($qa, 'dragimage', $dragimage->id); 78 $classes = array("group{$groupno}", 79 'draghome', 80 "dragitemhomes{$dragimage->no}", 81 "choice{$choiceno}"); 82 if ($dragimage->infinite) { 83 $classes[] = 'infinite'; 84 } 85 if ($dragimageurl === null) { 86 $classes[] = 'yui3-cssfonts'; 87 $dragimagehomesgroup .= html_writer::tag('div', $dragimage->text, 88 array('src' => $dragimageurl, 'class' => join(' ', $classes))); 89 } else { 90 $dragimagehomesgroup .= html_writer::empty_tag('img', 91 array('src' => $dragimageurl, 'alt' => $dragimage->text, 92 'class' => join(' ', $classes))); 93 } 94 } 95 $dragimagehomes .= html_writer::tag('div', $dragimagehomesgroup, 96 array('class' => 'dragitemgroup' . $groupno)); 97 } 98 99 $dragitemsclass = 'dragitems'; 100 if ($options->readonly) { 101 $dragitemsclass .= ' readonly'; 102 } 103 $dragitems = html_writer::tag('div', $dragimagehomes, array('class' => $dragitemsclass)); 104 $dropzones = html_writer::tag('div', '', array('class' => 'dropzones')); 105 106 $hiddens = ''; 107 foreach ($question->places as $placeno => $place) { 108 $varname = $question->field($placeno); 109 list($fieldname, $html) = $this->hidden_field_for_qt_var($qa, $varname); 110 $hiddens .= $html; 111 $question->places[$placeno]->fieldname = $fieldname; 112 } 113 $output .= html_writer::tag('div', 114 $droparea . $dragitems . $dropzones . $hiddens, array('class' => 'ddarea')); 115 $topnode = 'div#q'.$qa->get_slot().' div.ddarea'; 116 $params = array('drops' => $question->places, 117 'topnode' => $topnode, 118 'readonly' => $options->readonly); 119 120 $PAGE->requires->yui_module('moodle-qtype_ddimageortext-dd', 121 'M.qtype_ddimageortext.init_question', 122 array($params)); 123 124 if ($qa->get_state() == question_state::$invalid) { 125 $output .= html_writer::nonempty_tag('div', 126 $question->get_validation_error($qa->get_last_qt_data()), 127 array('class' => 'validationerror')); 128 } 129 return $output; 130 } 131 132 /** 133 * Returns the URL for an image 134 * 135 * @param object $qa Question attempt object 136 * @param string $filearea File area descriptor 137 * @param int $itemid Item id to get 138 * @return string Output url, or null if not found 139 */ 140 protected static function get_url_for_image(question_attempt $qa, $filearea, $itemid = 0) { 141 $question = $qa->get_question(); 142 $qubaid = $qa->get_usage_id(); 143 $slot = $qa->get_slot(); 144 $fs = get_file_storage(); 145 if ($filearea == 'bgimage') { 146 $itemid = $question->id; 147 } 148 $componentname = $question->qtype->plugin_name(); 149 $draftfiles = $fs->get_area_files($question->contextid, $componentname, 150 $filearea, $itemid, 'id'); 151 if ($draftfiles) { 152 foreach ($draftfiles as $file) { 153 if ($file->is_directory()) { 154 continue; 155 } 156 $url = moodle_url::make_pluginfile_url($question->contextid, $componentname, 157 $filearea, "$qubaid/$slot/{$itemid}", '/', 158 $file->get_filename()); 159 return $url->out(); 160 } 161 } 162 return null; 163 } 164 165 /** 166 * Returns a hidden field for a qt variable 167 * 168 * @param object $qa Question attempt object 169 * @param string $varname The hidden var name 170 * @param string $value The hidden value 171 * @param array $classes Any additional css classes to apply 172 * @return array Array with field name and the html of the tag 173 */ 174 protected function hidden_field_for_qt_var(question_attempt $qa, $varname, $value = null, 175 $classes = null) { 176 if ($value === null) { 177 $value = $qa->get_last_qt_var($varname); 178 } 179 $fieldname = $qa->get_qt_field_name($varname); 180 $attributes = array('type' => 'hidden', 181 'id' => str_replace(':', '_', $fieldname), 182 'name' => $fieldname, 183 'value' => $value); 184 if ($classes !== null) { 185 $attributes['class'] = join(' ', $classes); 186 } 187 return array($fieldname, html_writer::empty_tag('input', $attributes)."\n"); 188 } 189 190 public function specific_feedback(question_attempt $qa) { 191 return $this->combined_feedback($qa); 192 } 193 194 public function correct_response(question_attempt $qa) { 195 return ''; 196 } 197 }
title
Description
Body
title
Description
Body
title
Description
Body
title
Body
Generated: Thu Aug 11 10:00:09 2016 | Cross-referenced by PHPXref 0.7.1 |