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 h5p activity data.
  19   *
  20   * @package    mod_h5pactivity
  21   * @since      Moodle 3.9
  22   * @copyright  2020 Carlos Escobedo <carlos@moodle.com>
  23   * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
  24   */
  25  namespace mod_h5pactivity\external;
  26  
  27  use core\external\exporter;
  28  use renderer_base;
  29  use core_external\util as external_util;
  30  use core_external\external_files;
  31  use core_h5p\api;
  32  
  33  /**
  34   * Class for exporting h5p activity data.
  35   *
  36   * @copyright  2020 Carlos Escobedo <carlos@moodle.com>
  37   * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
  38   */
  39  class h5pactivity_summary_exporter extends exporter {
  40  
  41      /**
  42       * Properties definition.
  43       *
  44       * @return array
  45       */
  46      protected static function define_properties() {
  47  
  48          return [
  49              'id' => [
  50                  'type' => PARAM_INT,
  51                  'description' => 'The primary key of the record.',
  52              ],
  53              'course' => [
  54                  'type' => PARAM_INT,
  55                  'description' => 'Course id this h5p activity is part of.',
  56              ],
  57              'name' => [
  58                  'type' => PARAM_TEXT,
  59                  'description' => 'The name of the activity module instance.',
  60              ],
  61              'timecreated' => [
  62                  'type' => PARAM_INT,
  63                  'description' => 'Timestamp of when the instance was added to the course.',
  64                  'optional' => true,
  65              ],
  66              'timemodified' => [
  67                  'type' => PARAM_INT,
  68                  'description' => 'Timestamp of when the instance was last modified.',
  69                  'optional' => true,
  70              ],
  71              'intro' => [
  72                  'default' => '',
  73                  'type' => PARAM_RAW,
  74                  'description' => 'H5P activity description.',
  75                  'null' => NULL_ALLOWED,
  76              ],
  77              'introformat' => [
  78                  'choices' => [FORMAT_HTML, FORMAT_MOODLE, FORMAT_PLAIN, FORMAT_MARKDOWN],
  79                  'type' => PARAM_INT,
  80                  'default' => FORMAT_MOODLE,
  81                  'description' => 'The format of the intro field.',
  82              ],
  83              'grade' => [
  84                  'type' => PARAM_INT,
  85                  'default' => 0,
  86                  'description' => 'The maximum grade for submission.',
  87                  'optional' => true,
  88              ],
  89              'displayoptions' => [
  90                  'type' => PARAM_INT,
  91                  'default' => 0,
  92                  'description' => 'H5P Button display options.',
  93              ],
  94              'enabletracking' => [
  95                  'type' => PARAM_INT,
  96                  'default' => 1,
  97                  'description' => 'Enable xAPI tracking.',
  98              ],
  99              'grademethod' => [
 100                  'type' => PARAM_INT,
 101                  'default' => 1,
 102                  'description' => 'Which H5P attempt is used for grading.',
 103              ],
 104              'contenthash' => [
 105                  'type' => PARAM_ALPHANUM,
 106                  'description' => 'Sha1 hash of file content.',
 107                  'optional' => true,
 108              ],
 109          ];
 110      }
 111  
 112      /**
 113       * Related objects definition.
 114       *
 115       * @return array
 116       */
 117      protected static function define_related() {
 118          return [
 119              'context' => 'context',
 120              'factory' => 'core_h5p\\factory'
 121          ];
 122      }
 123  
 124      /**
 125       * Other properties definition.
 126       *
 127       * @return array
 128       */
 129      protected static function define_other_properties() {
 130          return [
 131              'coursemodule' => [
 132                  'type' => PARAM_INT
 133              ],
 134              'context' => [
 135                  'type' => PARAM_INT
 136              ],
 137              'introfiles' => [
 138                  'type' => external_files::get_properties_for_exporter(),
 139                  'multiple' => true
 140              ],
 141              'package' => [
 142                  'type' => external_files::get_properties_for_exporter(),
 143                  'multiple' => true
 144              ],
 145              'deployedfile' => [
 146                  'optional' => true,
 147                  'description' => 'H5P file deployed.',
 148                  'type' => [
 149                      'filename' => array(
 150                          'type' => PARAM_FILE,
 151                          'description' => 'File name.',
 152                          'optional' => true,
 153                          'null' => NULL_NOT_ALLOWED,
 154                      ),
 155                      'filepath' => array(
 156                          'type' => PARAM_PATH,
 157                          'description' => 'File path.',
 158                          'optional' => true,
 159                          'null' => NULL_NOT_ALLOWED,
 160                      ),
 161                      'filesize' => array(
 162                          'type' => PARAM_INT,
 163                          'description' => 'File size.',
 164                          'optional' => true,
 165                          'null' => NULL_NOT_ALLOWED,
 166                      ),
 167                      'fileurl' => array(
 168                          'type' => PARAM_URL,
 169                          'description' => 'Downloadable file url.',
 170                          'optional' => true,
 171                          'null' => NULL_NOT_ALLOWED,
 172                      ),
 173                      'timemodified' => array(
 174                          'type' => PARAM_INT,
 175                          'description' => 'Time modified.',
 176                          'optional' => true,
 177                          'null' => NULL_NOT_ALLOWED,
 178                      ),
 179                      'mimetype' => array(
 180                          'type' => PARAM_RAW,
 181                          'description' => 'File mime type.',
 182                          'optional' => true,
 183                          'null' => NULL_NOT_ALLOWED,
 184                      )
 185                  ]
 186              ],
 187          ];
 188      }
 189  
 190      /**
 191       * Assign values to the defined other properties.
 192       *
 193       * @param renderer_base $output The output renderer object.
 194       * @return array
 195       */
 196      protected function get_other_values(renderer_base $output) {
 197          $context = $this->related['context'];
 198          $factory = $this->related['factory'];
 199  
 200          $values = [
 201              'coursemodule' => $context->instanceid,
 202              'context' => $context->id,
 203          ];
 204  
 205          $values['introfiles'] = external_util::get_area_files($context->id, 'mod_h5pactivity', 'intro', false, false);
 206  
 207          $values['package'] = external_util::get_area_files($context->id, 'mod_h5pactivity', 'package', false, true);
 208  
 209          // Only if this H5P activity has been deployed, return the exported file.
 210          $fileh5p = api::get_export_info_from_context_id($context->id, $factory, 'mod_h5pactivity', 'package');
 211          if ($fileh5p) {
 212              $values['deployedfile'] = $fileh5p;
 213          }
 214  
 215          return $values;
 216      }
 217  
 218      /**
 219       * Get the formatting parameters for the intro.
 220       *
 221       * @return array with the formatting parameters
 222       */
 223      protected function get_format_parameters_for_intro() {
 224          return [
 225              'component' => 'mod_h5pactivity',
 226              'filearea' => 'intro',
 227              'options' => ['noclean' => true],
 228          ];
 229      }
 230  
 231      /**
 232       * Get the formatting parameters for the package.
 233       *
 234       * @return array with the formatting parameters
 235       */
 236      protected function get_format_parameters_for_package() {
 237          return [
 238              'component' => 'mod_h5pactivity',
 239              'filearea' => 'package',
 240              'itemid' => 0,
 241              'options' => ['noclean' => true],
 242          ];
 243      }
 244  }