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/>./*** unilabel module.** @package mod_unilabel* @author Andreas Grabs <info@grabs-edv.de>* @copyright 2018 onwards Grabs EDV {@link https://www.grabs-edv.de}* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later*/namespace mod_unilabel;/*** Placeholder class if an active type is currently not installed or otherwise not available.* @package mod_unilabel* @author Andreas Grabs <info@grabs-edv.de>* @copyright 2018 onwards Grabs EDV {@link https://www.grabs-edv.de}* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later*/class tinymce_helper extends \editor_tiny\editor {/*** Get an escaped and json encoded configuration object for reinitialize an tinymce instance by js.** @param array $editoroptions* @param int $draftitemid* @return string The json encode configuration object*/public function get_options(array $editoroptions = [], int $draftitemid = 0) {global $PAGE;list($options, $fpoptions) = static::split_editor_options($editoroptions,$draftitemid);// Ensure that the default configuration is set.self::set_default_configuration($this->manager);if ($fpoptions === null) {$fpoptions = [];}$context = $PAGE->context;if (isset($options['context']) && ($options['context'] instanceof \context)) {// A different context was provided.// Use that instead.$context = $options['context'];}// Generate the configuration for this editor.$siteconfig = get_config('editor_tiny');$config = (object) [// The URL to the CSS file for the editor.'css' => $PAGE->theme->editor_css_url()->out(false),// The current context for this page or editor.'context' => $context->id,// File picker options.'filepicker' => $fpoptions,'currentLanguage' => current_language(),'branding' => property_exists($siteconfig, 'branding') ? !empty($siteconfig->branding) : true,// Language options.'language' => ['currentlang' => current_language(),'installed' => get_string_manager()->get_list_of_translations(true),'available' => get_string_manager()->get_list_of_languages(),],// Placeholder selectors.// Some contents (Example: placeholder elements) are only shown in the editor, and not to users. It is unrelated to the// real display. We created a list of placeholder selectors, so we can decide to or not to apply rules, styles... to// these elements.// The default of this list will be empty.// Other plugins can register their placeholder elements to placeholderSelectors list by calling// editor_tiny/options::registerPlaceholderSelectors.'placeholderSelectors' => [],// Plugin configuration.'plugins' => $this->manager->get_plugin_configuration($context, $options, $fpoptions, $this),// Nest menu inside parent DOM.'nestedmenu' => true,];if (defined('BEHAT_SITE_RUNNING') && BEHAT_SITE_RUNNING) {// Add sample selectors for Behat test.$config->placeholderSelectors = ['.behat-tinymce-placeholder'];}foreach ($fpoptions as $fp) {// Guess the draftitemid for the editor.// Note: This is the best we can do at the moment.if (!empty($fp->itemid)) {$config->draftitemid = $fp->itemid;break;}}$configoptions = json_encode(convert_to_array($config), JSON_UNESCAPED_SLASHES + JSON_PRETTY_PRINT);return str_replace('\\', '\\\\', $configoptions); // We have to escape the output because it gets directly into js.}/*** Extract the filepicker options.** @param array $options* @param int $draftitemid* @return array*/public static function split_editor_options(array $options, int $draftitemid = 0) {global $CFG;require_once($CFG->dirroot . '/repository/lib.php');$defaultoptions = ['subdirs' => 0,'maxbytes' => 0,'maxfiles' => 0,'changeformat' => 0,'areamaxbytes' => FILE_AREA_MAX_BYTES_UNLIMITED,'context' => null,'noclean' => 0,'trusttext' => 0,'return_types' => 15,'enable_filemanagement' => true,'removeorphaneddrafts' => false,'autosave' => true,];$options = array_merge($defaultoptions, $options);/** @var \context $ctx */$ctx = $options['context'];$maxfiles = $options['maxfiles'];// Get filepicker info.//$fpoptions = [];if ($maxfiles != 0 && $draftitemid > 0) {$args = new \stdClass();// Need these three to filter repositories list.$args->accepted_types = ['web_image'];$args->return_types = $options['return_types'];$args->context = $ctx;$args->env = 'filepicker';// Advimage plugin.$imageoptions = initialise_filepicker($args);$imageoptions->context = $ctx;$imageoptions->client_id = uniqid();$imageoptions->maxbytes = $options['maxbytes'];$imageoptions->areamaxbytes = $options['areamaxbytes'];$imageoptions->env = 'editor';$imageoptions->itemid = $draftitemid;// Moodlemedia plugin.$args->accepted_types = ['video', 'audio'];$mediaoptions = initialise_filepicker($args);$mediaoptions->context = $ctx;$mediaoptions->client_id = uniqid();$mediaoptions->maxbytes = $options['maxbytes'];$mediaoptions->areamaxbytes = $options['areamaxbytes'];$mediaoptions->env = 'editor';$mediaoptions->itemid = $draftitemid;// Advlink plugin.$args->accepted_types = '*';$linkoptions = initialise_filepicker($args);$linkoptions->context = $ctx;$linkoptions->client_id = uniqid();$linkoptions->maxbytes = $options['maxbytes'];$linkoptions->areamaxbytes = $options['areamaxbytes'];$linkoptions->env = 'editor';$linkoptions->itemid = $draftitemid;$args->accepted_types = ['.vtt'];$subtitleoptions = initialise_filepicker($args);$subtitleoptions->context = $ctx;$subtitleoptions->client_id = uniqid();$subtitleoptions->maxbytes = $options['maxbytes'];$subtitleoptions->areamaxbytes = $options['areamaxbytes'];$subtitleoptions->env = 'editor';$subtitleoptions->itemid = $draftitemid;if (has_capability('moodle/h5p:deploy', $ctx)) {// Only set H5P Plugin settings if the user can deploy new H5P content.// H5P plugin.$args->accepted_types = ['.h5p'];$h5poptions = initialise_filepicker($args);$h5poptions->context = $ctx;$h5poptions->client_id = uniqid();$h5poptions->maxbytes = $options['maxbytes'];$h5poptions->areamaxbytes = $options['areamaxbytes'];$h5poptions->env = 'editor';$h5poptions->itemid = $draftitemid;$fpoptions['h5p'] = $h5poptions;}$fpoptions['image'] = $imageoptions;$fpoptions['media'] = $mediaoptions;$fpoptions['link'] = $linkoptions;$fpoptions['subtitle'] = $subtitleoptions;}return [$options, $fpoptions];}/*** Checks whether or not tinymce is the current editor.* This is needed because the drag and drop feature does not fully support this editor.** @return bool*/public static function tiny_active() {$editor = editors_get_preferred_editor();if (get_class($editor) == 'editor_tiny\editor') {return true;}return false;}}