

3 changed files with 140 additions and 0 deletions
@ -0,0 +1,7 @@
|
||||
name: 'Islandora Videojs' |
||||
description: 'Islandora Videojs overrides' |
||||
type: module |
||||
package: Islandora |
||||
core: 8.x |
||||
dependencies: |
||||
- islandora |
@ -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; |
||||
} |
||||
|
||||
|
||||
|
@ -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> |
Loading…
Reference in new issue