Search moodle.org's
Developer Documentation

See Release Notes

  • Bug fixes for general core bugs in 4.3.x will end 7 October 2024 (12 months).
  • Bug fixes for security issues in 4.3.x will end 21 April 2025 (18 months).
  • PHP version: minimum PHP 8.0.0 Note: minimum PHP version has increased since Moodle 4.1. PHP 8.2.x is supported too.

Differences Between: [Versions 310 and 403] [Versions 311 and 403] [Versions 39 and 403] [Versions 400 and 403] [Versions 401 and 403]

   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   * Class for exporting a feedback item (question).
  19   *
  20   * @package    mod_feedback
  21   * @copyright  2017 Juan Leyva <juan@moodle.com>
  22   * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
  23   */
  24  namespace mod_feedback\external;
  25  defined('MOODLE_INTERNAL') || die();
  26  
  27  use core\external\exporter;
  28  use renderer_base;
  29  use core_files\external\stored_file_exporter;
  30  
  31  /**
  32   * Class for exporting a feedback item (question).
  33   *
  34   * @copyright  2017 Juan Leyva <juan@moodle.com>
  35   * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
  36   */
  37  class feedback_item_exporter extends exporter {
  38  
  39      protected static function define_properties() {
  40          return array(
  41              'id' => array(
  42                  'type' => PARAM_INT,
  43                  'description' => 'The record id.',
  44              ),
  45              'feedback' => array(
  46                  'type' => PARAM_INT,
  47                  'description' => 'The feedback instance id this records belongs to.',
  48                  'default' => 0,
  49              ),
  50              'template' => array(
  51                  'type' => PARAM_INT,
  52                  'description' => 'If it belogns to a template, the template id.',
  53                  'default' => 0,
  54              ),
  55              'name' => array(
  56                  'type' => PARAM_RAW,
  57                  'description' => 'The item name.',
  58              ),
  59              'label' => array(
  60                  'type' => PARAM_NOTAGS,
  61                  'description' => 'The item label.',
  62              ),
  63              'presentation' => array(
  64                  'type' => PARAM_RAW,
  65                  'description' => 'The text describing the item or the available possible answers.',
  66              ),
  67              'typ' => array(
  68                  'type' => PARAM_ALPHA,
  69                  'description' => 'The type of the item.',
  70              ),
  71              'hasvalue' => array(
  72                  'type' => PARAM_INT,
  73                  'description' => 'Whether it has a value or not.',
  74                  'default' => 0,
  75              ),
  76              'position' => array(
  77                  'type' => PARAM_INT,
  78                  'description' => 'The position in the list of questions.',
  79                  'default' => 0,
  80              ),
  81              'required' => array(
  82                  'type' => PARAM_BOOL,
  83                  'description' => 'Whether is a item (question) required or not.',
  84                  'default' => 0,
  85              ),
  86              'dependitem' => array(
  87                  'type' => PARAM_INT,
  88                  'description' => 'The item id this item depend on.',
  89                  'default' => 0,
  90              ),
  91              'dependvalue' => array(
  92                  'type' => PARAM_RAW,
  93                  'description' => 'The depend value.',
  94              ),
  95              'options' => array(
  96                  'type' => PARAM_ALPHA,
  97                  'description' => 'Different additional settings for the item (question).',
  98              ),
  99          );
 100      }
 101  
 102      protected static function define_related() {
 103          return array(
 104              'context' => 'context',
 105              'itemnumber' => 'int?'
 106          );
 107      }
 108  
 109      protected static function define_other_properties() {
 110          return array(
 111              'itemfiles' => array(
 112                  'type' => stored_file_exporter::read_properties_definition(),
 113                  'multiple' => true
 114              ),
 115              'itemnumber' => array(
 116                  'type' => PARAM_INT,
 117                  'description' => 'The item position number',
 118                  'null' => NULL_ALLOWED
 119              ),
 120              'otherdata' => array(
 121                  'type' => PARAM_RAW,
 122                  'description' => 'Additional data that may be required by external functions',
 123                  'null' => NULL_ALLOWED
 124              ),
 125          );
 126      }
 127  
 128      protected function get_other_values(renderer_base $output) {
 129          $context = $this->related['context'];
 130  
 131          $itemobj = feedback_get_item_class($this->data->typ);
 132          $values = array(
 133              'itemfiles' => array(),
 134              'itemnumber' => $this->related['itemnumber'],
 135              'otherdata' => $itemobj->get_data_for_external($this->data),
 136          );
 137  
 138          $fs = get_file_storage();
 139          $files = array();
 140          $itemfiles = $fs->get_area_files($context->id, 'mod_feedback', 'item', $this->data->id, 'filename', false);
 141          if (!empty($itemfiles)) {
 142              foreach ($itemfiles as $storedfile) {
 143                  $fileexporter = new stored_file_exporter($storedfile, array('context' => $context));
 144                  $files[] = $fileexporter->export($output);
 145              }
 146              $values['itemfiles'] = $files;
 147          }
 148  
 149          return $values;
 150      }
 151  
 152      /**
 153       * Get the formatting parameters for the name.
 154       *
 155       * @return array
 156       */
 157      protected function get_format_parameters_for_name() {
 158          return [
 159              'component' => 'mod_feedback',
 160              'filearea' => 'item',
 161              'itemid' => $this->data->id
 162          ];
 163      }
 164  
 165      /**
 166       * Get the formatting parameters for the presentation.
 167       *
 168       * @return array
 169       */
 170      protected function get_format_parameters_for_presentation() {
 171          return [
 172              'component' => 'mod_feedback',
 173              'filearea' => 'item',
 174              'itemid' => $this->data->id
 175          ];
 176      }
 177  }