Search moodle.org's
Developer Documentation


  • Bug fixes for general core bugs in 2.8.x ended 9 November 2015 (12 months).
  • Bug fixes for security issues in 2.8.x ended 9 May 2016 (18 months).
  • minimum PHP 5.4.4 (always use latest PHP 5.4.x or 5.5.x on Windows - http://windows.php.net/download/), PHP 7 is NOT supported
  •    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   * Defines the editing form for the calculated question data set definitions.
      19   *
      20   * @package    qtype
      21   * @subpackage calculated
      22   * @copyright  2007 Jamie Pratt me@jamiep.org
      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->dirroot . '/question/type/edit_question_form.php');
      30  
      31  
      32  /**
      33   * Calculated question data set definitions editing form definition.
      34   *
      35   * @copyright  2007 Jamie Pratt me@jamiep.org
      36   * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
      37   */
      38  class question_dataset_dependent_definitions_form extends question_wizard_form {
      39      /**
      40       * Question object with options and answers already loaded by get_question_options
      41       * Be careful how you use this it is needed sometimes to set up the structure of the
      42       * form in definition_inner but data is always loaded into the form with set_defaults.
      43       *
      44       * @var object
      45       */
      46      protected $question;
      47      /**
      48       * Reference to question type object
      49       *
      50       * @var question_dataset_dependent_questiontype
      51       */
      52      protected $qtypeobj;
      53      /**
      54       * Add question-type specific form fields.
      55       *
      56       * @param MoodleQuickForm $mform the form being built.
      57       */
      58      public function __construct($submiturl, $question) {
      59          global $DB;
      60          $this->question = $question;
      61          $this->qtypeobj = question_bank::get_qtype($this->question->qtype);
      62          // Validate the question category.
      63          if (!$category = $DB->get_record('question_categories',
      64                  array('id' => $question->category))) {
      65              print_error('categorydoesnotexist', 'question', $returnurl);
      66          }
      67          $this->category = $category;
      68          $this->categorycontext = context::instance_by_id($category->contextid);
      69          parent::__construct($submiturl);
      70      }
      71  
      72      protected function definition() {
      73          global $SESSION;
      74  
      75          $mform = $this->_form;
      76          $mform->setDisableShortforms();
      77  
      78          $possibledatasets = $this->qtypeobj->find_dataset_names($this->question->questiontext);
      79          $mandatorydatasets = array();
      80          if (isset($this->question->options->answers)) {
      81              foreach ($this->question->options->answers as $answer) {
      82                  $mandatorydatasets += $this->qtypeobj->find_dataset_names($answer->answer);
      83              }
      84          } else {
      85              foreach ($SESSION->calculated->questionform->answers as $answer) {
      86                  $mandatorydatasets += $this->qtypeobj->find_dataset_names($answer);
      87              }
      88          }
      89  
      90          $key = 0;
      91          $datadefscat= array();
      92          $datadefscat  = $this->qtypeobj->get_dataset_definitions_category($this->question);
      93          $datasetmenus = array();
      94          $label = "<div class='mdl-align'>".get_string('datasetrole', 'qtype_calculated')."</div>";
      95          // Explaining the role of datasets so other strings can be shortened.
      96          $mform->addElement('html', $label);
      97          $mform->addElement('header', 'mandatoryhdr',
      98                  get_string('mandatoryhdr', 'qtype_calculated'));
      99          $labelsharedwildcard = get_string('sharedwildcard', 'qtype_calculated');
     100  
     101          foreach ($mandatorydatasets as $datasetname) {
     102              if (!isset($datasetmenus[$datasetname])) {
     103                  list($options, $selected) =
     104                          $this->qtypeobj->dataset_options($this->question, $datasetname);
     105                  unset($options['0']); // Mandatory...
     106                  $label = get_string('wildcard', 'qtype_calculated', $datasetname);
     107                  $mform->addElement('select', "dataset[{$key}]", $label, $options);
     108                  if (isset($datadefscat[$datasetname])) {
     109                      $mform->addElement('static', "there is a category",
     110                              get_string('sharedwildcard', 'qtype_calculated', $datasetname),
     111                              get_string('dataitemdefined', 'qtype_calculated',
     112                              $datadefscat[$datasetname]));
     113                  }
     114                  $mform->setDefault("dataset[{$key}]", $selected);
     115                  $datasetmenus[$datasetname] = '';
     116                  $key++;
     117              }
     118          }
     119          $mform->addElement('header', 'possiblehdr', get_string('possiblehdr', 'qtype_calculated'));
     120  
     121          foreach ($possibledatasets as $datasetname) {
     122              if (!isset($datasetmenus[$datasetname])) {
     123                  list($options, $selected) = $this->qtypeobj->dataset_options(
     124                          $this->question, $datasetname, false);
     125                  $label = get_string('wildcard', 'qtype_calculated', $datasetname);
     126                  $mform->addElement('select', "dataset[{$key}]", $label, $options);
     127                  if (isset($datadefscat[$datasetname])) {
     128                      $mform->addElement('static', "there is a category",
     129                              get_string('sharedwildcard', 'qtype_calculated', $datasetname),
     130                              get_string('dataitemdefined', 'qtype_calculated',
     131                                      $datadefscat[$datasetname]));
     132                  }
     133  
     134                  $mform->setDefault("dataset[{$key}]", $selected);
     135                  $datasetmenus[$datasetname] = '';
     136                  $key++;
     137              }
     138          }
     139          // Temporary strings.
     140          $mform->addElement('header', 'synchronizehdr',
     141                  get_string('synchronize', 'qtype_calculated'));
     142          $mform->addElement('radio', 'synchronize', '',
     143                  get_string('synchronizeno', 'qtype_calculated'), 0);
     144          $mform->addElement('radio', 'synchronize', '',
     145                  get_string('synchronizeyes', 'qtype_calculated'), 1);
     146          $mform->addElement('radio', 'synchronize', '',
     147                  get_string('synchronizeyesdisplay', 'qtype_calculated'), 2);
     148          if (isset($this->question->options) &&
     149                  isset($this->question->options->synchronize)) {
     150              $mform->setDefault('synchronize', $this->question->options->synchronize);
     151          } else {
     152              $mform->setDefault('synchronize', 0);
     153          }
     154  
     155          $this->add_action_buttons(false, get_string('nextpage', 'qtype_calculated'));
     156  
     157          $this->add_hidden_fields();
     158  
     159          $mform->addElement('hidden', 'category');
     160          $mform->setType('category', PARAM_SEQUENCE);
     161  
     162          $mform->addElement('hidden', 'wizard', 'datasetitems');
     163          $mform->setType('wizard', PARAM_ALPHA);
     164      }
     165  
     166      public function validation($data, $files) {
     167          $errors = parent::validation($data, $files);
     168          $datasets = $data['dataset'];
     169          $countvalid = 0;
     170          foreach ($datasets as $key => $dataset) {
     171              if ($dataset != '0') {
     172                  $countvalid++;
     173              }
     174          }
     175          if (!$countvalid) {
     176              foreach ($datasets as $key => $dataset) {
     177                  $errors['dataset['.$key.']'] =
     178                          get_string('atleastonerealdataset', 'qtype_calculated');
     179              }
     180          }
     181          return $errors;
     182      }
     183  }
    

    Search This Site: