From 55dc52bd8f856404cbd12044b639120a53dd4807 Mon Sep 17 00:00:00 2001 From: Daniel Thies Date: Fri, 4 Aug 2023 09:51:17 -0500 Subject: [PATCH] VID-686: Add videojs poster inmage --- plugin/videojs/classes/video_embed.php | 17 ++++++++ .../lang/en/videotimeplugin_videojs.php | 2 + plugin/videojs/lib.php | 40 ++++++++++++++++++- plugin/videojs/templates/video_embed.mustache | 1 + 4 files changed, 58 insertions(+), 2 deletions(-) diff --git a/plugin/videojs/classes/video_embed.php b/plugin/videojs/classes/video_embed.php index 798c8ee6..ab265d53 100644 --- a/plugin/videojs/classes/video_embed.php +++ b/plugin/videojs/classes/video_embed.php @@ -24,8 +24,10 @@ namespace videotimeplugin_videojs; +use context_module; use core_component; use mod_videotime\vimeo_embed; +use moodle_url; use renderer_base; defined('MOODLE_INTERNAL') || die(); @@ -55,9 +57,24 @@ public function export_for_template(renderer_base $output) { $mimetype = resourcelib_guess_url_mimetype($this->record->vimeo_url); + $context = context_module::instance($this->get_cm()->id); + $fs = get_file_storage(); + foreach ($fs->get_area_files($context->id, 'videotimeplugin_videojs', 'poster') as $file) { + if (!$file->is_directory()) { + $poster = moodle_url::make_pluginfile_url( + $context->id, + 'videotimeplugin_videojs', + 'poster', + 0, + $file->get_filepath(), + $file->get_filename() + )->out(false); + } + } $context = parent::export_for_template($output) + [ 'mimetype' => $mimetype, 'video' => !file_mimetype_in_typegroup($mimetype, ['web_audio']), + 'poster' => $poster ?? false, ]; return $context; diff --git a/plugin/videojs/lang/en/videotimeplugin_videojs.php b/plugin/videojs/lang/en/videotimeplugin_videojs.php index 18aee189..a69bcccc 100644 --- a/plugin/videojs/lang/en/videotimeplugin_videojs.php +++ b/plugin/videojs/lang/en/videotimeplugin_videojs.php @@ -27,4 +27,6 @@ $string['mediafile'] = 'Media file'; $string['mediafile_help'] = 'Upload an audio or video file to use'; $string['pluginname'] = 'Video Time VideoJS Player'; +$string['poster'] = 'Poster file'; +$string['poster_help'] = 'Upload a poster image that will be displayed before video is started'; $string['privacy:metadata'] = 'The Video Time VideoJS Player plugin does not store any personal data.'; diff --git a/plugin/videojs/lib.php b/plugin/videojs/lib.php index 9844be81..0f300d09 100644 --- a/plugin/videojs/lib.php +++ b/plugin/videojs/lib.php @@ -70,6 +70,15 @@ function videotimeplugin_videojs_update_instance($moduleinstance, $mform = null) 0, ['subdirs' => 0, 'maxfiles' => 1] ); + + file_save_draft_area_files( + $data->poster, + $context->id, + 'videotimeplugin_videojs', + 'poster', + 0, + ['subdirs' => 0, 'maxfiles' => 1] + ); } } @@ -225,6 +234,23 @@ function videotimeplugin_videojs_add_form_fields($mform, $formclass) { 'name' ); $mform->addHelpButton('mediafile', 'mediafile', 'videotimeplugin_videojs'); + + $mform->insertElementBefore( + $mform->createElement('filemanager', 'poster', get_string('poster', 'videotimeplugin_videojs'), null, [ + 'subdirs' => 0, + 'maxfiles' => 1, + 'accepted_types' => ['image'], + ]), + 'name' + ); + $mform->addHelpButton('poster', 'poster', 'videotimeplugin_videojs'); + } else { + $mform->addElement('filemanager', 'poster', get_string('poster', 'videotimeplugin_videojs'), null, [ + 'subdirs' => 0, + 'maxfiles' => 1, + 'accepted_types' => ['image'], + ]); + $mform->addHelpButton('poster', 'poster', 'videotimeplugin_videojs'); } } @@ -248,7 +274,14 @@ function videotimeplugin_videojs_data_preprocessing(array &$defaultvalues, int $ 'mediafile', 0 ); - $defaultvalues['mediafile'] = $draftitemid; + file_prepare_draft_area( + $draftitemid, + $context->id, + 'videotimeplugin_videojs', + 'poster', + 0 + ); + $defaultvalues['poster'] = $draftitemid; } } @@ -272,7 +305,9 @@ function videotimeplugin_videojs_pluginfile($course, $cm, $context, $filearea, $ require_login($course, true, $cm); - if ($filearea == 'mediafile') { + if (in_array($filearea, [ + 'mediafile', 'poster', + ])) { $relativepath = implode('/', $args); @@ -295,5 +330,6 @@ function videotimeplugin_videojs_pluginfile($course, $cm, $context, $filearea, $ function videotimeplugin_videojs_config_file_areas() { return [ 'mediafile', + 'poster', ]; } diff --git a/plugin/videojs/templates/video_embed.mustache b/plugin/videojs/templates/video_embed.mustache index 95b01cb1..5c9c48e5 100644 --- a/plugin/videojs/templates/video_embed.mustache +++ b/plugin/videojs/templates/video_embed.mustache @@ -50,6 +50,7 @@ {{# video }}