AutorÃa | Ultima modificación | Ver Log |
<?php// This file is part of Moodle - http://moodle.org///// Moodle is free software: you can redistribute it and/or modify// it under the terms of the GNU General Public License as published by// the Free Software Foundation, either version 3 of the License, or// (at your option) any later version.//// Moodle is distributed in the hope that it will be useful,// but WITHOUT ANY WARRANTY; without even the implied warranty of// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the// GNU General Public License for more details.//// You should have received a copy of the GNU General Public License// along with Moodle. If not, see <http://www.gnu.org/licenses/>./*** Amanote file helper functions.** @package filter_amanote* @copyright 2021 Amaplex Software* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later*//*** Try to guess the mimetype from an URL.** @param string $url The url.** @return string The mimetype if one is found, application/unknown otherwise.*/function guess_url_mimetype($url) {$mimetype = 'application/unknown';if (!$url) {return $mimetype;}// Check if the url matches a supported video provider (youtube or vimeo).preg_match("/^(https?\:\/\/)?(www\.)?(youtube|youtu|vimeo)\.(com|be)\/.+$/", $url, $matches);if ($matches && count($matches) > 3) {return strpos($matches[3], 'youtu') !== false ? 'video/youtube' : 'video/vimeo';}// Check if the url ends with a file format.preg_match("/\.(\w{3,4})($|\?|\#)/", $url, $matches);if (!$matches || count($matches) < 2) {return $mimetype;}$extension = $matches[1];$types = core_filetypes::get_types();if (isset($types[$extension])) {$mimetype = $types[$extension]['type'];}return $mimetype;}/*** Get the content kind from a mimetype.** @param string $mimetype The mimetype.** @return string The content kind if one is found, unknown otherwise.*/function get_content_kind_from_mimetype($mimetype) {if ($mimetype === 'video/youtube' || $mimetype === 'video/vimeo') {return 'video';}$types = core_filetypes::get_types();foreach ($types as $type) {if ($type['type'] === $mimetype && isset($type['groups']) && !empty($type['groups'])) {return $type['groups'][0];}}return 'unknown';}/*** Get the supported mimetypes for a given (optional) content kind. If no* content kind is given, all the supported mimtypes are returned.** @param string $contentkind The content kind if any.** @return string The supported mimetypes.*/function get_supported_mimetypes($contentkind = null) {$documentmimetypes = ['application/pdf','application/vnd.ms-powerpoint','application/vnd.openxmlformats-officedocument.presentationml.presentation','application/epub+zip','application/vnd.oasis.opendocument.text','application/msword','application/vnd.openxmlformats-officedocument.wordprocessingml.document',];$videomimetypes = ['video/quicktime','video/mp4','video/mpeg','video/ogg','video/youtube','video/vimeo',];if ($contentkind === 'video') {return $videomimetypes;} else if ($contentkind === 'document') {return $documentmimetypes;}return array_merge($documentmimetypes, $videomimetypes);}/*** Get the user's notes for a given course.** @param string $userid The user id.* @param string $courseid The course id.** @return array An array of filename.*/function get_user_notes_for_course($userid, $courseid) {global $DB;$sql = "SELECT filename FROM {files} WHERE filepath = '/Amanote/'AND filearea = 'private'AND userid = :useridAND filename LIKE :courseid";return $DB->get_records_sql($sql, ['userid' => $userid, 'courseid' => $courseid . '.%']);}/*** Get the annotatable for a given file.** @param file $file The file.* @param string $courseid The course id.* @param string $cmid The course module id.* @param string $modinstance The module instance id.** @return annotatable The annotatable.*/function get_annotatable_for_file($file, $courseid, $cmid, $modinstance) {$annotatable = new annotatable();// Generate the annotable id for the file.if ($cmid) {$annotatable->id = $courseid . '.' . $cmid;} else {$annotatable->id = $courseid . '.' . $modinstance . '.' . $file->id;}$annotatable->cmid = $cmid;if ($file->component === 'mod_resource' || $file->component === 'mod_folder') {$annotatable->legacyid = $courseid . '.' . $modinstance . '.' . $file->id;}// Use the legacy id for folder as all files in the folder has the same cmid.if ($file->component === 'mod_folder') {$annotatable->id = $annotatable->legacyid;}// Set the content's kind.$annotatable->kind = get_content_kind_from_mimetype($file->mimetype);if ($annotatable->kind !== 'video') {$annotatable->kind = 'document';}$annotatable->mimetype = $file->mimetype;$annotatable->internal = true;$filepath = (empty($file->filepath) ? '/' : $file->filepath) . $file->filename;$annotatable->url = "/$file->contextid/$file->component/$file->filearea/1$filepath";if ($file->filearea === 'intro') {$annotatable->url = str_replace('intro/1', 'intro', $annotatable->url);}return $annotatable;}/*** Get the annotatable for a given url.** @param string $url The url.* @param string $courseid The course id.* @param string $cmid The course module id.** @return annotatable The annotatable.*/function get_annotatable_for_url($url, $courseid, $cmid) {$annotatable = new annotatable();// Generate the annotable id for the url.$annotatable->id = $courseid . '.' . $cmid;$annotatable->cmid = $cmid;$mimetype = guess_url_mimetype($url->externalurl);// Set the content's kind.$annotatable->kind = get_content_kind_from_mimetype($mimetype);if ($annotatable->kind !== 'video') {$annotatable->kind = 'document';}$annotatable->mimetype = $mimetype;$annotatable->internal = false;$annotatable->url = $url->externalurl;return $annotatable;}