You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

298 lines
11 KiB

<?php
// (c) Copyright by authors of the Tiki Wiki CMS Groupware Project
//
// All Rights Reserved. See copyright.txt for details and a complete list of authors.
// Licensed under the GNU LESSER GENERAL PUBLIC LICENSE. See license.txt for details.
// $Id$
function wikiplugin_kaltura_info()
{
global $prefs;
$players = [];
if ($prefs['feature_kaltura'] === 'y') {
$kalturaadminlib = TikiLib::lib('kalturaadmin');
$playerList = $kalturaadminlib->getPlayersUiConfs();
foreach ($playerList as $pl) {
$players[] = ['value' => $pl['id'], 'text' => tra($pl['name'])];
}
if (count($players)) {
array_unshift($players, ['value' => '', 'text' => tra('Default')]);
}
}
return [
'name' => tra('Kaltura Video'),
'documentation' => 'PluginKaltura',
'description' => tra('Display a video created through the Kaltura feature'),
'prefs' => ['wikiplugin_kaltura', 'feature_kaltura'],
'format' => 'html',
'iconname' => 'video',
'introduced' => 4,
'params' => [
'id' => [
'required' => false,
'name' => tra('Kaltura Entry ID'),
'description' => tra('Kaltura ID of the video to be displayed, or leave empty to show a button to allow
users to add a new one.'),
'since' => '4.0',
'tags' => ['basic'],
'area' => 'kaltura_uploader_id',
'type' => 'kaltura',
'iconname' => 'video',
],
'player_id' => [
'name' => tra('Kaltura Video Player ID'),
'description' => tra('Kaltura Dynamic Player (KDP) user interface configuration ID'),
'since' => '10.0',
'type' => empty($players) ? 'text' : 'list',
'options' => $players,
'size' => 20,
'default' => '',
'tags' => ['basic'],
],
'width' => [
'required' => false,
'name' => tra('Width'),
'description' => tra('Width of the player in pixels or percent'),
'since' => '10.0',
'default' => 595,
'filter' => 'text',
],
'height' => [
'required' => false,
'name' => tra('Height'),
'description' => tra('Height of the player in pixels or percent'),
'since' => '10.0',
'default' => 365,
'filter' => 'text',
],
'align' => [
'required' => false,
'name' => tra('Align'),
'description' => tra('Alignment of the player'),
'since' => '10.0',
'default' => '',
'filter' => 'word',
'options' => [
['text' => tra('Not set'), 'value' => ''],
['text' => tra('Left'), 'value' => 'left'],
['text' => tra('Centre'), 'value' => 'center'],
['text' => tra('Right'), 'value' => 'right'],
],
],
'float' => [
'required' => false,
'name' => tra('Float'),
'description' => tra('Alignment of the player using CSS float'),
'since' => '10.0',
'default' => '',
'filter' => 'word',
'options' => [
['text' => tra('Not set'), 'value' => ''],
['text' => tra('Left'), 'value' => 'left'],
['text' => tra('Right'), 'value' => 'right'],
],
],
'add_button_label' => [
'required' => false,
'name' => tra('Add Media Button Label'),
'description' => tra('Text to display on button for adding new media.'),
'since' => '10.0',
'default' => tra('Add media'),
],
'type' => [
'required' => false,
'name' => tra('Player Type'),
'description' => tra('Set player type'),
'since' => '11.0',
'default' => 'html5',
'filter' => 'word',
'options' => [
['text' => tra('KDP'), 'value' => 'kdp'],
['text' => tra('HTML5'), 'value' => 'html5'],
],
],
],
];
}
function wikiplugin_kaltura($data, $params)
{
global $prefs, $tiki_p_upload_videos, $user, $page;
static $instance = 0;
$instance++;
$defaults = [];
$plugininfo = wikiplugin_kaltura_info();
foreach ($plugininfo['params'] as $key => $param) {
if (isset($param['default'])) {
$defaults[$key] = $param['default'];
}
}
if (empty($params['id'])) {
if ($tiki_p_upload_videos === 'y') {
$smarty = TikiLib::lib('smarty');
$smarty->loadPlugin('smarty_function_button');
$json_page = json_encode($page);
$json_instance = json_encode($instance);
$json_title = json_encode(tr('Upload Media'));
TikiLib::lib('header')->add_jq_onready(
<<<REG
$("#kaltura_upload_btn$instance a").on("click", function() {
$(this).serviceDialog({
title: $json_title,
width: 710,
height: 450,
hideButtons: true,
success: function (data) {
if (data.entries) {
$.post('tiki-wikiplugin_edit.php', {
content: '',
type: 'kaltura',
page: {$json_page},
index: {$json_instance},
params: {
id: data.entries[0]
}
}, function () {
document.location.reload();
});
}
}
});
return false;
});
REG
);
$html = smarty_function_button(
[ // default for add_button_label already tra but not merged yet
'_text' => ! empty($params['add_button_label']) ? tra($params['add_button_label']) : $defaults['add_button_label'],
'_id' => 'kaltura_upload_btn' . $instance,
'href' => TikiLib::lib('service')->getUrl(
[
'controller' => 'kaltura',
'action' => 'upload'
]
),
],
$smarty->getEmptyInternalTemplate()
);
} elseif (! empty($user)) {
$html = '<span class="alert-warning">' . tra('Media ID or permission to upload video is required') . '</span>';
} else {
$html = '<span class="alert-warning">' . tra('Log in to upload video') . '</span>';
}
return $html;
} else {
$id = $params['id'];
}
if (empty($params['player_id'])) {
$params['player_id'] = $prefs['kaltura_kdpUIConf'];
}
if (empty($params['width']) || empty($params['height'])) {
$kalturaadminlib = TikiLib::lib('kalturaadmin');
$player = $kalturaadminlib->getPlayersUiConf($params['player_id']);
if (! empty($player)) {
if (empty($params['width'])) {
$params['width'] = $player['width'];
}
if (empty($params['height'])) {
$params['height'] = $player['height'];
}
} else {
return '<span class="alert-warning">' . tra('Player not found') . '</span>';
}
}
$kalturalib = TikiLib::lib('kalturauser');
$params = array_merge($defaults, $params);
$params['session'] = $kalturalib->getSessionKey();
$params['media_url'] = $kalturalib->getMediaUrl($params['id'], $params['player_id']);
try {
$playlistObject = $kalturalib->getPlaylist($params['id']);
} catch (Exception $e) {
$playlistObject = null;
}
$style = '';
if (! empty($params['align'])) {
$style .= "text-align:{$params['align']};";
}
if (! empty($params['float'])) {
$style .= "float:{$params['float']};";
}
if ($params['type'] === 'html5') {
$embedIframeJs = '/embedIframeJs'; // TODO add as params?
$leadWithHTML5 = 'true';
$autoPlay = 'false';
if ($playlistObject) {
parse_str(str_replace(['k_pl_0_u', 'k_pl_0_n'], ['kpl0U', 'kpl0N'], $playlistObject->executeUrl), $playlistAPI);
$playlistAPI['kpl0Id'] = $params['id'];
$playlistAPI = '"playlistAPI": ' . json_encode($playlistAPI);
} else {
$playlistAPI = '';
}
TikiLib::lib('header')
->add_jsfile_cdn("{$prefs['kaltura_kServiceUrl']}/p/{$prefs['kaltura_partnerId']}/sp/{$prefs['kaltura_partnerId']}00{$embedIframeJs}/uiconf_id/{$params['player_id']}/partner_id/{$prefs['kaltura_partnerId']}")
->add_jq_onready(
"
mw.setConfig('Kaltura.LeadWithHTML5', $leadWithHTML5);
kWidget.embed({
targetId: 'kaltura_player$instance',
wid: '_{$prefs['kaltura_partnerId']}',
uiconf_id: '{$params['player_id']}',
entry_id: '{$params['id']}',
flashvars: { // flashvars allows you to set runtime uiVar configuration overrides.
//autoPlay: $autoPlay
$playlistAPI
},
params: { // params allows you to set flash embed params such as wmode, allowFullScreen etc
wmode: 'transparent'
},
readyCallback: function (playerId) {
\$ = \$jq; // restore our jQuery after Kaltura has finished with it
console.log('Player:' + playerId + ' is ready ');
}
});"
);
if (is_numeric($params['width'])) {
$params['width'] .= 'px';
}
if (is_numeric($params['height'])) {
$params['height'] .= 'px';
}
return "<div id='kaltura_player$instance' style='width:{$params['width']};height:{$params['height']};$style'></div>";
} elseif ($params['type'] === 'kdp') {
if ($playlistObject) {
$params['playlistAPI'] = '&' . str_replace(['k_pl_0_u', 'k_pl_0_n'], ['playlistAPI.kpl0U', 'playlistAPI.kpl0N'], $playlistObject->executeUrl);
} else {
$params['playlistAPI'] = '';
}
$smarty = TikiLib::lib('smarty');
$smarty->assign('kaltura', $params);
$code = $smarty->fetch('wiki-plugins/wikiplugin_kaltura.tpl');
if (! empty($style)) {
$code = "<div style='$style'>$code</div>";
}
return $code;
} else {
TikiLib::lib('erroreport')->report(tra('Kaltura player: unsupported type.'));
return '';
}
}