Skip to content

Commit a167c7c

Browse files
committed
Update Kaltura open in new window
1 parent bd2e864 commit a167c7c

1 file changed

Lines changed: 51 additions & 14 deletions

File tree

lib/src/UI/Lessons.php

Lines changed: 51 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1166,9 +1166,14 @@ public function renderSingle($buffer=false) {
11661166
$kaltura_url = $this->kalturaEmbedUrl($video);
11671167
if ( $kaltura_url ) {
11681168
if ( $nostyle ) {
1169-
self::nostyleUrl($video->title, $kaltura_url);
1169+
self::nostyleUrl($video->title, $this->kalturaTabUrl($video));
11701170
} else {
1171-
$this->renderKalturaOverlay($video->title, $kaltura_url, false);
1171+
$this->renderKalturaOverlay(
1172+
$video->title,
1173+
$kaltura_url,
1174+
false,
1175+
$this->kalturaTabUrl($video)
1176+
);
11721177
}
11731178
} else if ( is_string($media_file) && is_string($media_base) && is_string($media_folder) &&
11741179
file_exists($media_folder . '/' . $media_file) ) {
@@ -2744,15 +2749,15 @@ private function renderItemText($item) {
27442749
}
27452750

27462751
/**
2747-
* Build a Kaltura embed URL from lessons.json kaltura_id + kaltura_embed extension.
2748-
* The extension template must include a literal {id} placeholder.
2752+
* Expand a Kaltura URL template extension with lessons.json kaltura_id.
2753+
* The template must include a literal {id} placeholder.
27492754
*
2750-
* @return string|null Absolute embed URL, or null if unavailable
2755+
* @return string|null Absolute URL, or null if unavailable
27512756
*/
2752-
private function kalturaEmbedUrl($item) {
2757+
private function kalturaUrlFromExtension($item, $extension_key) {
27532758
global $CFG;
27542759
$kaltura_id = isset($item->kaltura_id) ? $item->kaltura_id : null;
2755-
$template = $CFG->getExtension('kaltura_embed', null);
2760+
$template = $CFG->getExtension($extension_key, null);
27562761
if ( !is_string($kaltura_id) || $kaltura_id === '' ) {
27572762
return null;
27582763
}
@@ -2762,25 +2767,52 @@ private function kalturaEmbedUrl($item) {
27622767
return str_replace('{id}', $kaltura_id, $template);
27632768
}
27642769

2770+
/**
2771+
* Build a Kaltura iframe embed URL (kaltura_embed extension).
2772+
*
2773+
* @return string|null Absolute embed URL, or null if unavailable
2774+
*/
2775+
private function kalturaEmbedUrl($item) {
2776+
return $this->kalturaUrlFromExtension($item, 'kaltura_embed');
2777+
}
2778+
2779+
/**
2780+
* Build a Kaltura "open in new tab" URL (kaltura_tab playlist template).
2781+
* Falls back to the embed URL when kaltura_tab is not set.
2782+
*
2783+
* @return string|null Absolute tab URL, or null if unavailable
2784+
*/
2785+
private function kalturaTabUrl($item) {
2786+
$tab = $this->kalturaUrlFromExtension($item, 'kaltura_tab');
2787+
if ( $tab !== null ) {
2788+
return $tab;
2789+
}
2790+
return $this->kalturaEmbedUrl($item);
2791+
}
2792+
27652793
/**
27662794
* Canvas-style Kaltura modal: title bar link (open in new window) + iframe embed.
27672795
*/
2768-
private function renderKalturaOverlay($title, $embed_url, $with_icon=true) {
2796+
private function renderKalturaOverlay($title, $embed_url, $with_icon=true, $tab_url=null) {
27692797
static $kaltura_no = 0;
27702798
$kaltura_no = $kaltura_no + 1;
2799+
if ( !is_string($tab_url) || $tab_url === '' ) {
2800+
$tab_url = $embed_url;
2801+
}
27712802
$navid = 'kaltura-'.md5($kaltura_no.$embed_url);
27722803
$safe_title = htmlspecialchars($title, ENT_QUOTES, 'UTF-8');
2773-
$safe_url = htmlspecialchars($embed_url, ENT_QUOTES, 'UTF-8');
2804+
$safe_embed = htmlspecialchars($embed_url, ENT_QUOTES, 'UTF-8');
2805+
$safe_tab = htmlspecialchars($tab_url, ENT_QUOTES, 'UTF-8');
27742806
$open_lbl = htmlspecialchars(__('Open in a new window'), ENT_QUOTES, 'UTF-8');
27752807
?>
27762808
<div id="<?= $navid ?>" class="w3schools-overlay" role="dialog" aria-modal="true" aria-label="Video: <?= $safe_title ?>">
27772809
<div class="w3schools-overlay-content tsugi-kaltura-overlay-content">
27782810
<div class="tsugi-kaltura-titlebar">
2779-
<a href="<?= $safe_url ?>" target="_blank" rel="noopener noreferrer" class="tsugi-kaltura-title-link"><?= htmlentities($title) ?></a>
2780-
<a href="<?= $safe_url ?>" target="_blank" rel="noopener noreferrer" class="tsugi-kaltura-open-new" title="<?= $open_lbl ?>"><?= $open_lbl ?></a>
2811+
<a href="<?= $safe_tab ?>" target="_blank" rel="noopener noreferrer" class="tsugi-kaltura-title-link"><?= htmlentities($title) ?></a>
2812+
<a href="<?= $safe_tab ?>" target="_blank" rel="noopener noreferrer" class="tsugi-kaltura-open-new" title="<?= $open_lbl ?>"><?= $open_lbl ?></a>
27812813
<button type="button" class="tsugi-overlay-close tsugi-kaltura-close" aria-label="Close" onclick="tsugiCloseKalturaOverlay('<?= $navid ?>');">×</button>
27822814
</div>
2783-
<iframe data-src="<?= $safe_url ?>" src="" id="<?= $navid ?>-iframe" title="<?= $safe_title ?>" class="tsugi-kaltura-iframe" allowfullscreen allow="autoplay *; fullscreen *; encrypted-media *; picture-in-picture *"></iframe>
2815+
<iframe data-src="<?= $safe_embed ?>" src="" id="<?= $navid ?>-iframe" title="<?= $safe_title ?>" class="tsugi-kaltura-iframe" allowfullscreen allow="autoplay *; fullscreen *; encrypted-media *; picture-in-picture *"></iframe>
27842816
<div class="clear" style="clear:both;"></div>
27852817
</div>
27862818
</div>
@@ -2803,9 +2835,14 @@ private function renderItemVideo($item, $nostyle=false) {
28032835

28042836
if ( $kaltura_url ) {
28052837
if ( $nostyle ) {
2806-
self::nostyleUrl($item->title, $kaltura_url);
2838+
self::nostyleUrl($item->title, $this->kalturaTabUrl($item));
28072839
} else {
2808-
$this->renderKalturaOverlay($item->title, $kaltura_url, true);
2840+
$this->renderKalturaOverlay(
2841+
$item->title,
2842+
$kaltura_url,
2843+
true,
2844+
$this->kalturaTabUrl($item)
2845+
);
28092846
}
28102847
} else if ( is_string($media_file) && is_string($media_base) && is_string($media_folder) &&
28112848
file_exists($media_folder . '/' . $media_file) ) {

0 commit comments

Comments
 (0)