Differences Between: [Versions 310 and 402] [Versions 311 and 402] [Versions 39 and 402]
1 <?php 2 3 // This file is part of Moodle - http://moodle.org/ 4 // 5 // Moodle is free software: you can redistribute it and/or modify 6 // it under the terms of the GNU General Public License as published by 7 // the Free Software Foundation, either version 3 of the License, or 8 // (at your option) any later version. 9 // 10 // Moodle is distributed in the hope that it will be useful, 11 // but WITHOUT ANY WARRANTY; without even the implied warranty of 12 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 // GNU General Public License for more details. 14 // 15 // You should have received a copy of the GNU General Public License 16 // along with Moodle. If not, see <http://www.gnu.org/licenses/>. 17 18 /** 19 * Action for adding a question page. Prints an HTML form. 20 * 21 * @package mod_lesson 22 * @copyright 2009 Sam Hemelryk 23 * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later 24 **/ 25 26 require_once("../../config.php"); 27 require_once($CFG->dirroot.'/mod/lesson/locallib.php'); 28 require_once ('editpage_form.php'); 29 30 // first get the preceeding page 31 $pageid = required_param('pageid', PARAM_INT); 32 $id = required_param('id', PARAM_INT); // Course Module ID 33 $qtype = optional_param('qtype', 0, PARAM_INT); 34 $edit = optional_param('edit', false, PARAM_BOOL); 35 $returnto = optional_param('returnto', null, PARAM_LOCALURL); 36 37 if (!empty($returnto)) { 38 $returnto = new moodle_url($returnto); 39 } else { 40 $returnto = new moodle_url('/mod/lesson/edit.php', array('id' => $id)); 41 $returnto->set_anchor('lesson-' . $pageid); 42 } 43 44 $cm = get_coursemodule_from_id('lesson', $id, 0, false, MUST_EXIST); 45 $course = $DB->get_record('course', array('id' => $cm->course), '*', MUST_EXIST); 46 $lesson = new lesson($DB->get_record('lesson', array('id' => $cm->instance), '*', MUST_EXIST)); 47 48 require_login($course, false, $cm); 49 50 $context = context_module::instance($cm->id); 51 require_capability('mod/lesson:edit', $context); 52 53 $PAGE->set_url('/mod/lesson/editpage.php', array('pageid'=>$pageid, 'id'=>$id, 'qtype'=>$qtype)); 54 $PAGE->set_pagelayout('admin'); 55 $PAGE->set_secondary_active_tab('modulepage'); 56 $PAGE->add_body_class('limitedwidth'); 57 58 if ($edit) { 59 $editpage = lesson_page::load($pageid, $lesson); 60 $qtype = $editpage->qtype; 61 $edit = true; 62 } else { 63 $edit = false; 64 } 65 66 $jumpto = lesson_page::get_jumptooptions($pageid, $lesson); 67 $manager = lesson_page_type_manager::get($lesson); 68 $editoroptions = array('noclean'=>true, 'maxfiles'=>EDITOR_UNLIMITED_FILES, 'maxbytes'=>$CFG->maxbytes); 69 70 // If the previous page was the Question type selection form, this form 71 // will have a different name (e.g. _qf__lesson_add_page_form_selection 72 // versus _qf__lesson_add_page_form_multichoice). This causes confusion 73 // in moodleform::_process_submission because the array key check doesn't 74 // tie up with the current form name, which in turn means the "submitted" 75 // check ends up evaluating as false, thus it's not possible to check whether 76 // the Question type selection was cancelled. For this reason, a dummy form 77 // is created here solely to check whether the selection was cancelled. 78 if ($qtype) { 79 $mformdummy = $manager->get_page_form(0, array( 80 'editoroptions' => $editoroptions, 81 'jumpto' => $jumpto, 82 'lesson' => $lesson, 83 'edit' => $edit, 84 'maxbytes' => $PAGE->course->maxbytes, 85 'returnto' => $returnto 86 )); 87 if ($mformdummy->is_cancelled()) { 88 redirect($returnto); 89 exit; 90 } 91 } 92 93 $mform = $manager->get_page_form($qtype, array( 94 'editoroptions' => $editoroptions, 95 'jumpto' => $jumpto, 96 'lesson' => $lesson, 97 'edit' => $edit, 98 'maxbytes' => $PAGE->course->maxbytes, 99 'returnto' => $returnto 100 )); 101 102 if ($mform->is_cancelled()) { 103 redirect($returnto); 104 exit; 105 } 106 107 if ($edit) { 108 $data = $editpage->properties(); 109 $data->pageid = $editpage->id; 110 $data->id = $cm->id; 111 $editoroptions['context'] = $context; 112 $data = file_prepare_standard_editor($data, 'contents', $editoroptions, $context, 'mod_lesson', 'page_contents', $editpage->id); 113 114 $answerscount = 0; 115 $answers = $editpage->get_answers(); 116 foreach ($answers as $answer) { 117 $answereditor = 'answer_editor['.$answerscount.']'; 118 if (is_array($data->$answereditor)) { 119 $answerdata = $data->$answereditor; 120 if ($mform->get_answer_format() === LESSON_ANSWER_HTML) { 121 $answerdraftid = file_get_submitted_draft_itemid($answereditor); 122 $answertext = file_prepare_draft_area($answerdraftid, $PAGE->cm->context->id, 123 'mod_lesson', 'page_answers', $answer->id, $editoroptions, $answerdata['text']); 124 $data->$answereditor = array('text' => $answertext, 'format' => $answerdata['format'], 'itemid' => $answerdraftid); 125 } else { 126 $data->$answereditor = $answerdata['text']; 127 } 128 } 129 130 $responseeditor = 'response_editor['.$answerscount.']'; 131 if (is_array($data->$responseeditor)) { 132 $responsedata = $data->$responseeditor; 133 if ($mform->get_response_format() === LESSON_ANSWER_HTML) { 134 $responsedraftid = file_get_submitted_draft_itemid($responseeditor); 135 $responsetext = file_prepare_draft_area($responsedraftid, $PAGE->cm->context->id, 136 'mod_lesson', 'page_responses', $answer->id, $editoroptions, $responsedata['text']); 137 $data->$responseeditor = array('text' => $responsetext, 'format' => $responsedata['format'], 138 'itemid' => $responsedraftid); 139 } else { 140 $data->$responseeditor = $responsedata['text']; 141 } 142 } 143 $answerscount++; 144 } 145 // Let the lesson pages make updates if required. 146 $data = $editpage->update_form_data($data); 147 148 $mform->set_data($data); 149 $PAGE->navbar->add(get_string('edit'), new moodle_url('/mod/lesson/edit.php', array('id'=>$id))); 150 $PAGE->navbar->add(get_string('editingquestionpage', 'lesson', get_string($mform->qtypestring, 'lesson'))); 151 } else { 152 // Give the page type being created a chance to override the creation process 153 // this is used by endofbranch, cluster, and endofcluster to skip the creation form. 154 // IT SHOULD ALWAYS CALL require_sesskey(); 155 $mform->construction_override($pageid, $lesson); 156 157 $data = new stdClass; 158 $data->id = $cm->id; 159 $data->pageid = $pageid; 160 if ($qtype) { 161 //TODO: the handling of form for the selection of question type is a bloody hack! (skodak) 162 $data->qtype = $qtype; 163 } 164 $data = file_prepare_standard_editor($data, 'contents', $editoroptions, null); 165 $mform->set_data($data); 166 $PAGE->navbar->add(get_string('addanewpage', 'lesson'), $PAGE->url); 167 if ($qtype !== 'unknown') { 168 $PAGE->navbar->add(get_string($mform->qtypestring, 'lesson')); 169 } 170 } 171 172 if ($data = $mform->get_data()) { 173 require_sesskey(); 174 if ($edit) { 175 $data->lessonid = $data->id; 176 $data->id = $data->pageid; 177 unset($data->pageid); 178 unset($data->edit); 179 $editpage->update($data, $context, $PAGE->course->maxbytes); 180 } else { 181 $editpage = lesson_page::create($data, $lesson, $context, $PAGE->course->maxbytes); 182 } 183 redirect($returnto); 184 } 185 186 $lessonoutput = $PAGE->get_renderer('mod_lesson'); 187 echo $lessonoutput->header($lesson, $cm, '', false, null, get_string('edit', 'lesson')); 188 $mform->display(); 189 echo $lessonoutput->footer();
title
Description
Body
title
Description
Body
title
Description
Body
title
Body