[ Index ]

PHP Cross Reference of Unnamed Project

title

Body

[close]

/question/type/essay/ -> questiontype.php (source)

   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   * Question type class for the essay question type.
  19   *
  20   * @package    qtype
  21   * @subpackage essay
  22   * @copyright  2005 Mark Nielsen
  23   * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
  24   */
  25  
  26  
  27  defined('MOODLE_INTERNAL') || die();
  28  
  29  require_once($CFG->libdir . '/questionlib.php');
  30  
  31  
  32  /**
  33   * The essay question type.
  34   *
  35   * @copyright  2005 Mark Nielsen
  36   * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
  37   */
  38  class qtype_essay extends question_type {
  39      public function is_manual_graded() {
  40          return true;
  41      }
  42  
  43      public function response_file_areas() {
  44          return array('attachments', 'answer');
  45      }
  46  
  47      public function get_question_options($question) {
  48          global $DB;
  49          $question->options = $DB->get_record('qtype_essay_options',
  50                  array('questionid' => $question->id), '*', MUST_EXIST);
  51          parent::get_question_options($question);
  52      }
  53  
  54      public function save_question_options($formdata) {
  55          global $DB;
  56          $context = $formdata->context;
  57  
  58          $options = $DB->get_record('qtype_essay_options', array('questionid' => $formdata->id));
  59          if (!$options) {
  60              $options = new stdClass();
  61              $options->questionid = $formdata->id;
  62              $options->id = $DB->insert_record('qtype_essay_options', $options);
  63          }
  64  
  65          $options->responseformat = $formdata->responseformat;
  66          $options->responserequired = $formdata->responserequired;
  67          $options->responsefieldlines = $formdata->responsefieldlines;
  68          $options->attachments = $formdata->attachments;
  69          $options->attachmentsrequired = $formdata->attachmentsrequired;
  70          $options->graderinfo = $this->import_or_save_files($formdata->graderinfo,
  71                  $context, 'qtype_essay', 'graderinfo', $formdata->id);
  72          $options->graderinfoformat = $formdata->graderinfo['format'];
  73          $options->responsetemplate = $formdata->responsetemplate['text'];
  74          $options->responsetemplateformat = $formdata->responsetemplate['format'];
  75          $DB->update_record('qtype_essay_options', $options);
  76      }
  77  
  78      protected function initialise_question_instance(question_definition $question, $questiondata) {
  79          parent::initialise_question_instance($question, $questiondata);
  80          $question->responseformat = $questiondata->options->responseformat;
  81          $question->responserequired = $questiondata->options->responserequired;
  82          $question->responsefieldlines = $questiondata->options->responsefieldlines;
  83          $question->attachments = $questiondata->options->attachments;
  84          $question->attachmentsrequired = $questiondata->options->attachmentsrequired;
  85          $question->graderinfo = $questiondata->options->graderinfo;
  86          $question->graderinfoformat = $questiondata->options->graderinfoformat;
  87          $question->responsetemplate = $questiondata->options->responsetemplate;
  88          $question->responsetemplateformat = $questiondata->options->responsetemplateformat;
  89      }
  90  
  91      public function delete_question($questionid, $contextid) {
  92          global $DB;
  93  
  94          $DB->delete_records('qtype_essay_options', array('questionid' => $questionid));
  95          parent::delete_question($questionid, $contextid);
  96      }
  97  
  98      /**
  99       * @return array the different response formats that the question type supports.
 100       * internal name => human-readable name.
 101       */
 102      public function response_formats() {
 103          return array(
 104              'editor' => get_string('formateditor', 'qtype_essay'),
 105              'editorfilepicker' => get_string('formateditorfilepicker', 'qtype_essay'),
 106              'plain' => get_string('formatplain', 'qtype_essay'),
 107              'monospaced' => get_string('formatmonospaced', 'qtype_essay'),
 108              'noinline' => get_string('formatnoinline', 'qtype_essay'),
 109          );
 110      }
 111  
 112      /**
 113       * @return array the choices that should be offerd when asking if a response is required
 114       */
 115      public function response_required_options() {
 116          return array(
 117              1 => get_string('responseisrequired', 'qtype_essay'),
 118              0 => get_string('responsenotrequired', 'qtype_essay'),
 119          );
 120      }
 121  
 122      /**
 123       * @return array the choices that should be offered for the input box size.
 124       */
 125      public function response_sizes() {
 126          $choices = array();
 127          for ($lines = 5; $lines <= 40; $lines += 5) {
 128              $choices[$lines] = get_string('nlines', 'qtype_essay', $lines);
 129          }
 130          return $choices;
 131      }
 132  
 133      /**
 134       * @return array the choices that should be offered for the number of attachments.
 135       */
 136      public function attachment_options() {
 137          return array(
 138              0 => get_string('no'),
 139              1 => '1',
 140              2 => '2',
 141              3 => '3',
 142              -1 => get_string('unlimited'),
 143          );
 144      }
 145  
 146      /**
 147       * @return array the choices that should be offered for the number of required attachments.
 148       */
 149      public function attachments_required_options() {
 150          return array(
 151              0 => get_string('attachmentsoptional', 'qtype_essay'),
 152              1 => '1',
 153              2 => '2',
 154              3 => '3'
 155          );
 156      }
 157  
 158      public function move_files($questionid, $oldcontextid, $newcontextid) {
 159          parent::move_files($questionid, $oldcontextid, $newcontextid);
 160          $fs = get_file_storage();
 161          $fs->move_area_files_to_new_context($oldcontextid,
 162                  $newcontextid, 'qtype_essay', 'graderinfo', $questionid);
 163      }
 164  
 165      protected function delete_files($questionid, $contextid) {
 166          parent::delete_files($questionid, $contextid);
 167          $fs = get_file_storage();
 168          $fs->delete_area_files($contextid, 'qtype_essay', 'graderinfo', $questionid);
 169      }
 170  }


Generated: Thu Aug 11 10:00:09 2016 Cross-referenced by PHPXref 0.7.1