View source
<?php
define('SWFTOOLS_FLOWPLAYER3_FILE', 'flowplayer-3.2.6.swf');
define('SWFTOOLS_FLOWPLAYER3_STREAM_PLUGIN', 'flowplayer.rtmp-3.2.3.swf');
define('SWFTOOLS_FLOWPLAYER3_JAVASCRIPT', 'example/flowplayer-3.2.6.min.js');
define('SWFTOOLS_FLOWPLAYER3_SCROLLABLE_JAVASCRIPT', 'scrollable.min.js');
function swftools_flowplayer3_swftools_methods() {
$library = swftools_get_library('flowplayer3');
$flowplayer3 = array(
'module' => 'swftools_flowplayer3',
'version' => 9,
'title' => t('Flowplayer 3'),
'download' => 'http://flowplayer.org',
'width' => 500,
'height' => 375,
'library' => $library . '/' . variable_get('swftools_flowplayer3_file', SWFTOOLS_FLOWPLAYER3_FILE),
'profile' => array(
'path' => 'flowplayer3',
'settings' => array(
'swftools_flowplayer3',
'swftools_flowplayer3_palette',
'swftools_flowplayer3_scheme',
),
'file' => 'swftools_flowplayer3.admin.inc',
'page argument' => 'swftools_flowplayer3_profile_form',
),
);
$methods['video']['flowplayer3'] = $flowplayer3;
$methods['video_list']['flowplayer3'] = $flowplayer3;
$methods['audio']['flowplayer3'] = $flowplayer3;
$methods['audio_list']['flowplayer3'] = $flowplayer3;
$methods['image_list']['flowplayer3'] = $flowplayer3;
$methods['swftools_media_display']['flowplayer3'] = $flowplayer3;
$methods['media_list']['flowplayer3'] = $flowplayer3;
return $methods;
}
function swftools_flowplayer3_menu() {
$items['admin/settings/swftools/flowplayer3'] = array(
'title' => 'Flowplayer 3',
'description' => 'Settings for ' . l('Flowplayer 3', 'http://flowplayer.org') . '.',
'access arguments' => array(
'administer flash',
),
'page callback' => 'drupal_get_form',
'page arguments' => array(
'swftools_flowplayer3_admin_settings',
),
'file' => 'swftools_flowplayer3.admin.inc',
);
$items['admin/settings/swftools/flowplayer3/autocomplete'] = array(
'title' => 'Autocomplete player name',
'access arguments' => array(
'administer flash',
),
'page callback' => 'swftools_flowplayer3_autocomplete_player',
'type' => MENU_CALLBACK,
'file' => 'swftools_flowplayer3.admin.inc',
);
return $items;
}
function swftools_flowplayer3_swftools_preprocess_flowplayer3(&$data) {
$saved_settings = _swftools_flowplayer3_settings($data['othervars']['profile']);
$playlist = array();
if ($data['othervars']['image']) {
$source = swftools_get_url_and_path($data['othervars']['image']);
if ($source) {
if ($saved_settings['imagecache']['imagecache_player'] != SWFTOOLS_UNDEFINED) {
$source['fileurl'] = swftools_imagecache_create_path($saved_settings['imagecache']['imagecache_player'], $source['fileurl']);
}
$playlist[] = '{ "url": "' . $source['fileurl'] . '", "autoPlay": true, "duration": "0" }';
}
}
if (isset($data['othervars']['flowplayer3']['playlist'])) {
$playlist = $playlist + $data['othervars']['flowplayer3']['playlist'];
$playlist = '[ ' . implode(', ', $playlist) . ' ]';
}
else {
if (!$playlist) {
$playlist[] = $data['othervars']['file_url'];
}
else {
$playlist[] = '{ "url": "' . $data['othervars']['file_url'] . '" }';
$playlist = '[ ' . implode(', ', $playlist) . ' ]';
}
}
$flowplayer = array();
if (variable_get('swftools_flowplayer3_embed', FALSE)) {
$data['resolved_methods']['embed']['theme'] = 'swftools_flowplayer3';
}
else {
$flowplayer['playerId'] = $data['othervars']['id'];
}
$flowplayer['playlist'] = $playlist;
if ($saved_settings['logo']['use_logo']) {
unset($saved_settings['logo']['use_logo']);
$flowplayer['logo'] = $saved_settings['logo'];
}
if ($saved_settings['accessibility']['accessible']) {
$data['othervars']['#suffix'] = theme('swftools_flowplayer3_accessible', $data['othervars']['id'], $saved_settings['accessibility']['accessible']);
}
foreach ($saved_settings as $category => $values) {
foreach (array_keys($values) as $property) {
if (isset($data['othervars'][$property])) {
$saved_settings[$category][$property] = $data['othervars'][$property];
}
if ($saved_settings[$category][$property] === '') {
unset($saved_settings[$category][$property]);
}
}
}
if (!isset($data['params']['width'])) {
$data['params']['width'] = $saved_settings['canvas']['width'];
}
if (!isset($data['params']['height'])) {
$data['params']['height'] = $saved_settings['canvas']['height'];
}
if (isset($saved_settings['play']['label'])) {
$saved_settings['play']['label'] = t($saved_settings['play']['label']);
}
if (isset($saved_settings['play']['replayLabel'])) {
$saved_settings['play']['replayLabel'] = t($saved_settings['play']['replayLabel']);
}
$flowplayer['canvas'] = $saved_settings['canvas'];
$flowplayer['clip'] = $saved_settings['clip'];
$flowplayer['play'] = $saved_settings['play'];
$flowplayer['plugins']['controls'] = $saved_settings['controls'];
if (variable_get('swftools_flowplayer3_controls', '')) {
$flowplayer['plugins']['controls']['url'] = variable_get('swftools_flowplayer3_controls', '');
}
if ($data['othervars']['stream']) {
$stream_url = variable_get('swftools_flowplayer3_stream_plugin', SWFTOOLS_FLOWPLAYER3_STREAM_PLUGIN);
if ($data['othervars']['stream'] === TRUE) {
foreach ($data['othervars']['flowplayer3']['providers'] as $provider => $index) {
$flowplayer['plugins']['rtmp' . $index]['url'] = $stream_url;
$flowplayer['plugins']['rtmp' . $index]['netConnectionUrl'] = $provider;
}
}
else {
$flowplayer['plugins']['rtmp']['url'] = $stream_url;
$flowplayer['clip']['provider'] = 'rtmp';
$flowplayer['plugins']['rtmp']['netConnectionUrl'] = $data['othervars']['stream'];
}
}
if (variable_get('swftools_flowplayer3_product_key', '')) {
$flowplayer['key'] = variable_get('swftools_flowplayer3_product_key', '');
}
$data['othervars']['flowplayer3']['config'] = $flowplayer;
$config = drupal_to_js($flowplayer);
$config = str_replace(array(
'"',
"'false'",
"'true'",
"'[",
"]'",
), array(
"'",
"false",
"true",
"[",
"]",
), $config);
$config = str_replace(array(
"\\'",
), array(
"'",
), $config);
$data['flashvars']['config'] = $config;
swftools_flowplayer3_add_js();
}
function swftools_flowplayer3_swftools_variable_mapping() {
return array(
'flowplayer3' => array(),
);
}
function _swftools_flowplayer3_settings($profile = '', $static = TRUE) {
static $saved_settings = array();
$_profile = $profile ? $profile : SWFTOOLS_UNDEFINED;
if (!isset($saved_settings[$_profile]) || !$static) {
$defaults['clip'] = array(
'autoPlay' => 'false',
'autoBuffering' => 'false',
'scaling' => 'scale',
'start' => '',
'duration' => '',
'accelerated' => 'false',
'bufferLength' => '',
'provider' => '',
'fadeInSpeed' => '',
'fadeOutSpeed' => '',
'linkUrl' => '',
'linkWindow' => '_blank',
'live' => 'false',
'cuePointMultiplier' => '',
);
$defaults['controls'] = array(
'backgroundColor' => '#000000',
'timeColor' => '#01DAFF',
'durationColor' => '#FFFFFF',
'progressColor' => '#015B7A',
'backgroundGradient' => 'medium',
'progressGradient' => 'medium',
'bufferColor' => '#6C9CBC',
'bufferGradient' => 'none',
'sliderColor' => '#000000',
'sliderGradient' => 'none',
'buttonColor' => '#889AA4',
'buttonOverColor' => '#92B2BD',
'volumeSliderColor' => '#000000',
'volumeSliderGradient' => 'none',
'timeBgColor' => '#555555',
'autoHide' => 'fullscreen',
'hideDelay' => 4000,
'play' => 'true',
'volume' => 'true',
'mute' => 'true',
'time' => 'true',
'stop' => 'false',
'playlist' => 'false',
'fullscreen' => 'true',
'scrubber' => 'true',
'top' => '',
'left' => '',
'bottom' => '',
'right' => '',
'opacity' => '',
'borderRadius' => 0,
'scrubberHeightRatio' => 0.4,
'scrubberBarHeightRatio' => 1,
'volumeSliderHeightRatio' => 0.4,
'volumeBarHeightRatio' => 1,
'timeBgHeightRatio' => 0.7,
);
$defaults['canvas'] = array(
'width' => 500,
'height' => 375,
'backgroundColor' => '#000000',
'backgroundImage' => '',
'backgroundRepeat' => 'repeat',
'backgroundGradient' => 'low',
'border' => '',
'borderRadius' => '',
);
$defaults['logo'] = array(
'use_logo' => FALSE,
'displayTime' => 100,
'fadeSpeed' => 2,
'opacity' => 1,
'top' => '45%',
'right' => '50%',
'width' => '100%',
'height' => '100%',
'zIndex' => 0,
'url' => '',
'fullscreenOnly' => 'false',
'linkUrl' => '',
'linkWindow' => '_blank',
);
$defaults['play'] = array(
'url' => '',
'opacity' => 0.8,
'label' => '',
'replayLabel' => 'Play again',
'fadeSpeed' => 500,
'rotateSpeed' => 50,
'height' => '10%',
'width' => '10%',
);
$defaults['accessibility'] = array(
'accessible' => SWFTOOLS_ACCESSIBLE_DISABLED,
);
$defaults['playlists'] = array(
'playlist' => 0,
'scrollable' => 0,
'style' => 'petrol',
'images' => 1,
'fillemptyimages' => 0,
);
$defaults['imagecache'] = array(
'imagecache_player' => SWFTOOLS_UNDEFINED,
'imagecache_playlist' => SWFTOOLS_UNDEFINED,
);
$saved_settings[$_profile] = swftools_variable_get('swftools_flowplayer3', $defaults, $profile);
$saved_colors = swftools_variable_get('swftools_flowplayer3_palette', array(), $profile);
if ($saved_colors) {
$saved_settings[$_profile]['canvas']['backgroundColor'] = $saved_colors['backgroundColor'];
$saved_colors['backgroundColor'] = $saved_colors['controlbarbackgroundColor'];
unset($saved_colors['controlbarbackgroundColor']);
$saved_settings[$_profile]['controls'] += $saved_colors;
}
}
return $saved_settings[$_profile];
}
function swftools_flowplayer3_help($path, $arg) {
switch ($path) {
case 'admin/settings/swftools/flowplayer3':
return '<p>' . t('These are the settings for the Flowplayer 3 media player.
For details of what each parameter does refer to the
<a href="@flowplayer">Flowplayer 3 documentation</a>.
It is possible that you do not need to change any of
these settings and blank values will use Flowplayer
defaults.
If content is embedded using the SWF Tools filter then each parameter
can be over-ridden by specifying a new value in the filter string.', array(
'@flowplayer' => 'http://flowplayer.org/documentation/configuration',
)) . '</p>';
}
}
function swftools_flowplayer3_theme() {
return array(
'swftools_flowplayer3_scheme_form' => array(
'arguments' => array(
'form' => NULL,
),
'file' => 'swftools_flowplayer3.admin.inc',
),
'swftools_flowplayer3_playlist' => array(
'template' => 'swftools-flowplayer3-playlist',
'arguments' => array(
'data' => NULL,
'parameters' => NULL,
'config' => NULL,
'settings' => NULL,
'load_player' => NULL,
),
),
'swftools_flowplayer3_playlist_element' => array(
'template' => 'swftools-flowplayer3-playlist-element',
'arguments' => array(
'element' => NULL,
),
),
'swftools_flowplayer3_accessible' => array(
'arguments' => array(
'id' => NULL,
'visible' => NULL,
),
),
'swftools_flowplayer3' => array(
'arguments' => array(
'file' => NULL,
'options' => NULL,
'script_location' => NULL,
),
),
);
}
function theme_swftools_flowplayer3($file, $data, $script_location = SWFTOOLS_JAVASCRIPT_INLINE) {
$saved_settings = _swftools_flowplayer3_settings($data['othervars']['profile']);
swftools_flowplayer3_add_js();
$config = drupal_to_js($data['othervars']['flowplayer3']['config']);
$config = str_replace(array(
'"false"',
'"true"',
), array(
"false",
"true",
), $config);
$config = str_replace('\\"', '"', $config);
$config = str_replace(array(
'"[',
']"',
), array(
"[",
"]",
), $config);
unset($data['params']['wmode']);
unset($data['params']['version']);
$data['params']['src'] = $data['othervars']['fileurl'];
$parameters = drupal_to_js($data['params']);
$parameters = str_replace(array(
'"false"',
'"true"',
), array(
"false",
"true",
), $parameters);
if (isset($data['othervars']['playlist_data']) && $saved_settings['playlists']['playlist']) {
$html = theme('swftools_flowplayer3_playlist', $data, $parameters, $config, $saved_settings, variable_get('swftools_flowplayer3_load', TRUE));
return "\n" . $html . "\n";
}
$html = t('<div id="!id">!alt</div>', array(
'!id' => $data['othervars']['id'],
'!alt' => variable_get('swftools_flowplayer3_load', TRUE) ? '' : $html_alt,
));
$script = array();
$post_js = '';
$script[] = t('flowplayer("!id", !url, !config);
!post_js
', array(
'!id' => $data['othervars']['id'],
'!url' => $parameters,
'!config' => $config,
'!post_js' => $post_js,
));
$script[] = t('$("#!id").height(!height).width(!width);', array(
'!id' => $data['othervars']['id'],
'!height' => $data['othervars']['height'],
'!width' => $data['othervars']['width'],
));
$script = implode("\n", $script);
if ($script_location == SWFTOOLS_JAVASCRIPT_INLINE) {
drupal_add_js($script, 'inline', $data['othervars']['id']);
$script = drupal_get_js($data['othervars']['id']);
}
else {
drupal_add_js($script, 'inline', 'footer');
drupal_add_js($script, 'inline', $data['othervars']['id']);
$script = '';
}
return $html . "\n" . $script;
}
function swftools_flowplayer3_init() {
if (variable_get('swftools_always_add_js', SWFTOOLS_ALWAYS_ADD_JS)) {
swftools_flowplayer3_add_js();
}
}
function swftools_flowplayer3_add_js() {
drupal_add_js(drupal_get_path('module', 'swftools_flowplayer3') . '/swftools_flowplayer3.js');
if (variable_get('swftools_flowplayer3_embed', FALSE)) {
$library = swftools_get_library('flowplayer3');
drupal_add_css(drupal_get_path('module', 'swftools_flowplayer3') . '/swftools_flowplayer3.css');
drupal_add_js($library . '/' . variable_get('swftools_flowplayer3_javascript', SWFTOOLS_FLOWPLAYER3_JAVASCRIPT));
drupal_add_js(drupal_get_path('module', 'swftools_flowplayer3') . '/swftools_flowplayer3.playlist.js');
if (variable_get('swftools_flowplayer3_scrollable_script', 0)) {
drupal_add_js($library . '/' . variable_get('swftools_flowplayer3_scrollable_javascript', SWFTOOLS_FLOWPLAYER3_SCROLLABLE_JAVASCRIPT));
}
}
}
function theme_swftools_flowplayer3_accessible($id, $visible) {
$actions = array(
'play' => t('Play'),
'pause' => t('Pause'),
'mute' => t('Mute'),
'unmute' => t('Unmute'),
'stop' => t('Rewind and stop'),
);
return theme('swftools_accessible_controls', 'flowplayer3', $id, $actions, $visible);
}
function swftools_flowplayer3_swftools_playlist_flowplayer3(&$data) {
$playlist = array();
static $stream_count = 1;
static $providers = array();
$saved_settings = _swftools_flowplayer3_settings($data['othervars']['profile']);
$empty_image = base_path() . drupal_get_path('module', 'swftools_flowplayer3') . '/images/empty.gif';
foreach ($data['othervars']['playlist_data']['playlist'] as $play) {
if ($play['image']) {
$original_image = $play['image'];
if ($saved_settings['imagecache']['imagecache_player'] != SWFTOOLS_UNDEFINED) {
$play['image'] = swftools_imagecache_create_path($saved_settings['imagecache']['imagecache_player'], $play['image']);
}
$playlist[] = '{ "url": "' . $play['image'] . '" , "autoPlay": true, "swftoolsThumb": true }';
if ($saved_settings['playlists']['playlist'] && $saved_settings['playlists']['images'] && $saved_settings['imagecache']['imagecache_playlist'] != SWFTOOLS_UNDEFINED) {
$play['image'] = swftools_imagecache_create_path($saved_settings['imagecache']['imagecache_playlist'], $original_image);
}
}
elseif ($saved_settings['playlists']['playlist'] && $saved_settings['playlists']['images'] && $saved_settings['playlists']['fillemptyimages']) {
$play['image'] = theme('swftools_empty_image', $data);
}
if ($play['stream']) {
if (!isset($providers[$play['stream']])) {
$providers[$play['stream']] = $stream_count++;
}
$play['provider'] = 'rtmp' . $providers[$play['stream']];
}
$element = theme('swftools_flowplayer3_playlist_element', $play);
$playlist[] = $element;
}
$data['othervars']['flowplayer3']['playlist'] = $playlist;
$data['othervars']['flowplayer3']['providers'] = $providers;
return SWFTOOLS_NON_XML_PLAYLIST;
}