swftools_imagerotator.module in SWF Tools 6.3
Enables SWF Tools support for the LongTail ImageRotator.
File
imagerotator/swftools_imagerotator.moduleView source
<?php
/**
* @file
* Enables SWF Tools support for the LongTail ImageRotator.
*/
/**
* Implementation of hook_swftools_methods().
*/
function swftools_imagerotator_swftools_methods() {
$image_rotator = array(
'module' => 'swftools_imagerotator',
'title' => t('JW Image Rotator 3'),
'download' => 'http://www.longtailvideo.com/players/jw-image-rotator',
'width' => 400,
'height' => 320,
'library' => swftools_get_library('imagerotator') . '/imagerotator.swf',
'profile' => array(
'path' => 'imagerotator',
'settings' => array(
'swftools_imagerotator',
),
'file' => 'swftools_imagerotator.admin.inc',
'page argument' => 'swftools_imagerotator_profile_form',
),
);
$methods['image_list']['imagerotator'] = $image_rotator;
return $methods;
}
/**
* Implementation of hook_menu().
*/
function swftools_imagerotator_menu() {
$items['admin/settings/swftools/imagerotator'] = array(
'title' => 'JW Image Rotator 3',
'description' => 'Plug-in for ' . l('JW Image Rotator 3', 'http://www.longtailvideo.com/players/jw-image-rotator') . '.',
'access arguments' => array(
'administer flash',
),
'page callback' => 'drupal_get_form',
'page arguments' => array(
'swftools_imagerotator_admin_form',
),
'file' => 'swftools_imagerotator.admin.inc',
);
return $items;
}
/**
* These are the default settings as they are stored in the database and displayed
* on the settings page.
*/
function _swftools_imagerotator_settings($profile = '', $mode = SWFTOOLS_MINIMUM_SETTINGS) {
/**
* SWFTOOLS_MINIMUM_SETTINGS is the minimum set of variables required to put a functional
* player on the page. It should include any required variables that must be passed to
* the player creation function to avoid notice errors because of undefined variables.
*
* SWFTOOLS_FULL_SETTINGS is the full complement of variables, as assigned on the input
* page. It is normally only retrieved when the admin page requests them.
*/
$defaults = array(
SWFTOOLS_MINIMUM_SETTINGS => array(
'basic' => array(
'width' => '400',
'height' => '320',
),
'imagecache' => array(
'imagecache' => SWFTOOLS_UNDEFINED,
),
),
SWFTOOLS_FULL_SETTINGS => array(
'basic' => array(
'width' => '400',
'height' => '320',
),
'color' => array(
'backcolor' => '',
'frontcolor' => '',
'lightcolor' => '',
),
'appearance' => array(
'logo' => '',
'overstretch' => 'default',
'showicons' => 'default',
'shownavigation' => 'default',
'transition' => 'default',
),
'playback' => array(
'rotatetime' => '3',
'shuffle' => 'default',
),
'interaction' => array(
'enablejs' => 'default',
'link' => '',
'linkfromdisplay' => 'default',
'linktarget' => 'default',
),
'imagecache' => array(
'imagecache' => SWFTOOLS_UNDEFINED,
),
),
);
// Retrieve default settings
$settings = swftools_variable_get('swftools_imagerotator', $defaults[SWFTOOLS_MINIMUM_SETTINGS], $profile);
// If a full set of settings are requested for the admin page then merge with full defaults
if ($mode == SWFTOOLS_FULL_SETTINGS) {
$settings = swftools_array_merge($defaults[SWFTOOLS_FULL_SETTINGS], $settings);
}
// Return resulting defaults
return $settings;
}
/**
* Implementation of hook_swftools_preprocess_[player]().
*/
function swftools_imagerotator_swftools_preprocess_imagerotator(&$data) {
// Get current defaults for the player
$saved_settings = _swftools_imagerotator_flashvars($data['othervars']['profile']);
// Don't output our imagecache settings
unset($saved_settings['imagecache']);
// Prepare an array of flashvars by merging defaults and user values
$data['flashvars'] = array_merge($saved_settings, $data['flashvars']);
// Attach file url of the content to display to flashvars
$data['flashvars']['file'] = $data['othervars']['file_url'];
}
/**
* This function is called from swftools_imagerotator_swftools_flashvars() which is called from swf()
* It will return the default flashvar configuration, just prior to any overrides
* passed into swf(). We start with the settings defined on admin/swf/imagerotator
* which are returned by _swftools_imagerotator_settings(). Then we prepare these values for output
* to html (eg. '1' become 'true') and we unset undefined flashvars to prevent their output.
*
*/
function _swftools_imagerotator_flashvars($profile = '') {
// Initialise cache to handle repeated calls
static $cache = array();
// Store name of profile
$_profile = $profile ? $profile : SWFTOOLS_UNDEFINED;
// If no settings stored for this profile then fetch them
if (!isset($cache[$_profile])) {
// Get saved settings for this method.
$settings = _swftools_imagerotator_settings($profile);
// Flatten defaults
swftools_array_flatten($settings);
// Iterate over boolean settings
foreach (array(
'showicons',
'shownavigation',
'shuffle',
'enablejs',
'linkfromdisplay',
) as $key) {
// Settings are already encoded properly on the settings page, but if we called from PHP it might be 1/0 or TRUE/FALSE
if ($settings[$key] != 'default') {
$settings[$key] = _swftools_tf($settings[$key]);
}
}
// Store the result
$cache[$_profile] = $settings;
}
// Return the result
return $cache[$_profile];
}
/**
* Implementation of hook_swftools_playlist_PLAYER().
*/
function swftools_imagerotator_swftools_playlist_imagerotator($data) {
/**
* ImageRotator prints undefined if there is a blank title amongst
* others that are set, but it skips all titles if all of them are
* blank. To make tidy output we will build two playlists in parallel
* and count the number of blanks. Then we will decide which one to
* return. If every title is blank we output the xml with blank titles.
* If there is a mixture of blank and non-blank titles then we output
* a list where the blanks are replaced with a dash.
*/
// Get array of image rotator settings
$saved_settings = _swftools_imagerotator_flashvars($data['othervars']['profile']);
// Initialise a string to contain the elements
$xml_with_blanks = '';
$xml_with_blanks_replaced = '';
$blanks = 0;
// Iterate over the playlist to build elements xml
foreach ($data['othervars']['playlist_data']['playlist'] as $track => $details) {
// If imagecache is enabled see if we need to use a modified thumbnail
if ($saved_settings['imagecache'] != SWFTOOLS_UNDEFINED) {
$details['fileurl'] = swftools_imagecache_create_path($saved_settings['imagecache'], $details['fileurl']);
}
// Create an individual xml element on the raw playlist
$xml_with_blanks .= theme('swftools_imagerotator_playlist_element', $details);
// Is the title blank?
if (!$details['title']) {
$details['title'] = '-';
$blanks++;
}
// Create the parallel xml which has blanks replaced with a dash
$xml_with_blanks_replaced .= theme('swftools_imagerotator_playlist_element', $details);
}
// Was every title in the playlist blank?
if ($blanks == count($data['othervars']['playlist_data']['playlist'])) {
$xml = $xml_with_blanks;
}
else {
$xml = $xml_with_blanks_replaced;
}
// Add xml wrapper around the elements
$xml = theme('swftools_imagerotator_playlist_wrapper', $data['othervars']['playlist_data']['header'], $xml);
// Return the resulting xml
return $xml;
}
/*
* Implementation of hook_swftools_variable_mapping.
*
*/
function swftools_imagerotator_swftools_variable_mapping() {
return array(
'imagerotator' => array(
'height' => 'flashvars',
'width' => 'flashvars',
'shuffle' => 'flashvars',
'shownavigation' => 'flashvars',
'linkfromdisplay' => 'flashvars',
'showicons' => 'flashvars',
'enablejs' => 'flashvars',
'backcolor' => 'flashvars',
'frontcolor' => 'flashvars',
'lightcolor' => 'flashvars',
'logo' => 'flashvars',
'link' => 'flashvars',
'rotatetime' => 'flashvars',
'transition' => 'flashvars',
'linktarget' => 'flashvars',
'overstretch' => 'flashvars',
),
);
}
/**
* Implementation of hook_help
*/
function swftools_imagerotator_help($path, $arg) {
switch ($path) {
case 'admin/settings/swftools/imagerotator':
return '<p>' . t('These are the settings for Jeroen Wijering\'s imagerotator.swf
and correspond (by category and order) to the
<a href="@imagerotator">Media Player and Image Rotator read me</a>.
It is possible that you do not need to change any of
these settings and blank values will defer to friendly
defaults. Note that the label in (<em>brackets</em>)
is the actual flashvar name and corresponds to the read me.', array(
'@imagerotator' => 'http://jeroenwijering.com/extras/readme.html',
)) . '</p>';
}
}
/**
* Implementation of hook_theme().
*/
function swftools_imagerotator_theme() {
return array(
'swftools_imagerotator_playlist_element' => array(
'template' => 'swftools-imagerotator-playlist-element',
'arguments' => array(
'element' => NULL,
),
),
'swftools_imagerotator_playlist_wrapper' => array(
'template' => 'swftools-imagerotator-playlist-wrapper',
'arguments' => array(
'header' => NULL,
'xml' => NULL,
),
),
);
}
Functions
Name | Description |
---|---|
swftools_imagerotator_help | Implementation of hook_help |
swftools_imagerotator_menu | Implementation of hook_menu(). |
swftools_imagerotator_swftools_methods | Implementation of hook_swftools_methods(). |
swftools_imagerotator_swftools_playlist_imagerotator | Implementation of hook_swftools_playlist_PLAYER(). |
swftools_imagerotator_swftools_preprocess_imagerotator | Implementation of hook_swftools_preprocess_[player](). |
swftools_imagerotator_swftools_variable_mapping | |
swftools_imagerotator_theme | Implementation of hook_theme(). |
_swftools_imagerotator_flashvars | This function is called from swftools_imagerotator_swftools_flashvars() which is called from swf() It will return the default flashvar configuration, just prior to any overrides passed into swf(). We start with the settings defined on… |
_swftools_imagerotator_settings | These are the default settings as they are stored in the database and displayed on the settings page. |