See Release Notes
Long Term Support Release
Differences Between: [Versions 310 and 401] [Versions 39 and 401] [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 * H5P content type manager class 19 * 20 * @package contenttype_h5p 21 * @copyright 2020 Amaia Anabitarte <amaia@moodle.com> 22 * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later 23 */ 24 25 namespace contenttype_h5p; 26 27 use core\event\contentbank_content_viewed; 28 use stdClass; 29 use core_h5p\editor_ajax; 30 use core_h5p\file_storage; 31 use core_h5p\local\library\autoloader; 32 use Moodle\H5PCore; 33 34 /** 35 * H5P content bank manager class 36 * 37 * @package contenttype_h5p 38 * @copyright 2020 Amaia Anabitarte <amaia@moodle.com> 39 * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later 40 */ 41 class contenttype extends \core_contentbank\contenttype { 42 43 /** 44 * Delete this content from the content_bank and remove all the H5P related information. 45 * 46 * @param content $content The content to delete. 47 * @return boolean true if the content has been deleted; false otherwise. 48 */ 49 public function delete_content(\core_contentbank\content $content): bool { 50 // Delete the H5P content. 51 $factory = new \core_h5p\factory(); 52 if (!empty($content->get_file_url())) { 53 \core_h5p\api::delete_content_from_pluginfile_url($content->get_file_url(), $factory); 54 } 55 56 // Delete the content from the content_bank. 57 return parent::delete_content($content); 58 } 59 60 /** 61 * Returns the HTML content to add to view.php visualizer. 62 * 63 * @param content $content The content to be displayed. 64 * @return string HTML code to include in view.php. 65 */ 66 public function get_view_content(\core_contentbank\content $content): string { 67 // Trigger an event for viewing this content. 68 $event = contentbank_content_viewed::create_from_record($content->get_content()); 69 $event->trigger(); 70 71 $fileurl = $content->get_file_url(); 72 $html = \core_h5p\player::display($fileurl, new \stdClass(), true); 73 return $html; 74 } 75 76 /** 77 * Returns the HTML code to render the icon for H5P content types. 78 * 79 * @param content $content The content to be displayed. 80 * @return string HTML code to render the icon 81 */ 82 public function get_icon(\core_contentbank\content $content): string { 83 global $OUTPUT, $DB; 84 85 $iconurl = $OUTPUT->image_url('f/h5p-64', 'moodle')->out(false); 86 $file = $content->get_file(); 87 if (!empty($file)) { 88 $h5p = \core_h5p\api::get_content_from_pathnamehash($file->get_pathnamehash()); 89 if (!empty($h5p)) { 90 \core_h5p\local\library\autoloader::register(); 91 if ($h5plib = $DB->get_record('h5p_libraries', ['id' => $h5p->mainlibraryid])) { 92 $h5pfilestorage = new \core_h5p\file_storage(); 93 $h5picon = $h5pfilestorage->get_icon_url( 94 $h5plib->id, 95 $h5plib->machinename, 96 $h5plib->majorversion, 97 $h5plib->minorversion); 98 if (!empty($h5picon)) { 99 $iconurl = $h5picon; 100 } 101 } 102 } 103 } 104 return $iconurl; 105 } 106 107 /** 108 * Return an array of implemented features by this plugin. 109 * 110 * @return array 111 */ 112 protected function get_implemented_features(): array { 113 return [self::CAN_UPLOAD, self::CAN_EDIT, self::CAN_DOWNLOAD]; 114 } 115 116 /** 117 * Return an array of extensions this contenttype could manage. 118 * 119 * @return array 120 */ 121 public function get_manageable_extensions(): array { 122 return ['.h5p']; 123 } 124 125 /** 126 * Returns user has access capability for the content itself. 127 * 128 * @return bool True if content could be accessed. False otherwise. 129 */ 130 protected function is_access_allowed(): bool { 131 return true; 132 } 133 134 /** 135 * Returns the list of different H5P content types the user can create. 136 * 137 * @return array An object for each H5P content type: 138 * - string typename: descriptive name of the H5P content type. 139 * - string typeeditorparams: params required by the H5P editor. 140 * - url typeicon: H5P content type icon. 141 */ 142 public function get_contenttype_types(): array { 143 // Get the H5P content types available. 144 autoloader::register(); 145 $editorajax = new editor_ajax(); 146 $h5pcontenttypes = $editorajax->getLatestLibraryVersions(); 147 148 $types = []; 149 $h5pfilestorage = new file_storage(); 150 foreach ($h5pcontenttypes as $h5pcontenttype) { 151 if ($h5pcontenttype->enabled) { 152 // Only enabled content-types will be displayed. 153 $library = [ 154 'name' => $h5pcontenttype->machine_name, 155 'majorVersion' => $h5pcontenttype->major_version, 156 'minorVersion' => $h5pcontenttype->minor_version, 157 ]; 158 $key = H5PCore::libraryToString($library); 159 $type = new stdClass(); 160 $type->key = $key; 161 $type->typename = $h5pcontenttype->title; 162 $type->typeeditorparams = 'library=' . $key; 163 $type->typeicon = $h5pfilestorage->get_icon_url( 164 $h5pcontenttype->id, 165 $h5pcontenttype->machine_name, 166 $h5pcontenttype->major_version, 167 $h5pcontenttype->minor_version); 168 $types[] = $type; 169 } 170 } 171 172 return $types; 173 } 174 }
title
Description
Body
title
Description
Body
title
Description
Body
title
Body