diff --git a/modules/islandora_videojs/islandora_videojs.info.yml b/modules/islandora_videojs/islandora_videojs.info.yml new file mode 100644 index 00000000..f5f41547 --- /dev/null +++ b/modules/islandora_videojs/islandora_videojs.info.yml @@ -0,0 +1,7 @@ +name: 'Islandora Videojs' +description: 'Islandora Videojs overrides' +type: module +package: Islandora +core: 8.x +dependencies: + - islandora diff --git a/modules/islandora_videojs/islandora_videojs.module b/modules/islandora_videojs/islandora_videojs.module new file mode 100644 index 00000000..6bacaf22 --- /dev/null +++ b/modules/islandora_videojs/islandora_videojs.module @@ -0,0 +1,107 @@ +<?php + +/** + * @file + * Contains islandora_videojs.module. + * + * This file is part of the Islandora Project. + * + * (c) Islandora Foundation + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +use Drupal\Core\Routing\RouteMatchInterface; + +/** + * Implements hook_help(). + */ +function islandora_videojs_help($route_name, RouteMatchInterface $route_match) { + switch ($route_name) { + // Main module help for the islandora module. + case 'help.page.islandora_videojs': + $output = ''; + $output .= '<h3>' . t('About') . '</h3>'; + $output .= '<p>' . t('Islandora Videojs overrides.') . '</p>'; + $output .= '<p>' . t('Customizes videojs.') . '</p>'; + return $output; + + default: + } +} + +function islandora_videojs_theme_registry_alter(&$theme_registry) { + $module_path = drupal_get_path('module', 'islandora_videojs'); + + // Use the templates in my module's template folder. + $theme_registry['videojs'] = $theme_registry['videojs']; + $theme_registry['videojs']['path'] = $module_path . '/templates'; + $theme_registry['videojs']['template'] = 'videojs'; +} + + +/** +* videojs theme override +*/ +function islandora_videojs_theme($existing, $type, $theme, $path) { + $transcript_urls = get_transcript_urls(); + return array( + 'videojs' => array( + 'variables' => array('items' => NULL, 'player_attributes' => NULL, 'mimes' => NULL, 'transcript_urls' => $transcript_urls), + 'base hook' => 'videojs' + ), + ); +} + +/** +* returns the urls of the transcript of a repository item +*/ +function get_transcript_urls() { + // Get the nid + $node = \Drupal::routeMatch()->getParameter('node'); + $nid = NULL; + if ($node instanceof \Drupal\node\NodeInterface) { + $nid = $node->id(); + } + + $transcript_urls = array(); + + if ($nid != NULL) { + // media url + global $base_url; + $media_url = $base_url. '/node/' . $nid . '/media'; + + try { + $media_client = new \GuzzleHttp\Client(); + $media_response = $media_client->request('GET', $media_url, [ + 'http_errors' => false, + 'auth' => ['admin', 'islandora'], + 'query' => ['_format' => 'json'] + ]); + $code = $media_response->getStatusCode(); + + if ($code = 200) { + + // Loop through media to find the transcripts + $media_list = (string) $media_response->getBody(); + $media_list = json_decode($media_list, true); + foreach ($media_list as $media) { + if ($media['field_media_use'][0]['url'] == "/taxonomy/term/20") { + $file_url = $media['field_media_file'][0]['url']; + $transcript_urls[] = $file_url; + } + } + } + } + catch (\Exception $e) { + \Drupal::logger('islandora_videojs')->notice("Error in getting transcripts: " . $e->getMessage()); + } + + } + + return $transcript_urls; +} + + + diff --git a/modules/islandora_videojs/templates/videojs.html.twig b/modules/islandora_videojs/templates/videojs.html.twig new file mode 100644 index 00000000..57abbbda --- /dev/null +++ b/modules/islandora_videojs/templates/videojs.html.twig @@ -0,0 +1,26 @@ +{# +/** + * @file + * Default theme implementation to display a formatted video field. + * + * Available variables: + * - items: A collection of videos. + * - player_attributes: Player options including the following: + * - width: The width of the video (if known). + * - height: The height of the video (if known). + * - autoplay: Autoplay on or off + * + * @ingroup themeable + */ +#} +<h3>Videojs Test </h3> +<video data-setup="{}" class="video-js vjs-default-skin" preload="{{ player_attributes.preload }}" {{ player_attributes.controls ? 'controls' : '' }} style="width:{{ player_attributes.width }}px;height:{{ player_attributes.height }}px;" {{ player_attributes.autoplay ? 'autoplay' : '' }} {{ player_attributes.loop ? 'loop' : '' }} {{ player_attributes.muted ? 'muted' : '' }}> + {% for user in items %} + <source src="{{ user }}" type="{{ mimes[ loop.index - 1 ] }}"/> + {% endfor %} + + {% for transcript_url in transcript_urls %} + <track srclang="en" label="English" kind="captions" src="{{ transcript_url }}" default /> + {% endfor %} + +</video>