You are here

swftools_imagerotator.module in SWF Tools 6.3

Enables SWF Tools support for the LongTail ImageRotator.

File

imagerotator/swftools_imagerotator.module
View 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

Namesort descending 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.