

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