You are here

swftools_flowplayer.module in SWF Tools 6.3

Enables SWF Tools support for Flowplayer.

File

flowplayer/swftools_flowplayer.module
View source
<?php

/**
 * @file
 * Enables SWF Tools support for Flowplayer.
 */

/**
 * Implementation of hook_swftools_methods().
 */
function swftools_flowplayer_swftools_methods() {

  // Flowplayer has a few different player files, so we need to determine
  // which one is currently active
  $saved_settings = _swftools_flowplayer_settings();
  $shared_file = $saved_settings['player'];
  $flowplayer = array(
    'module' => 'swftools_flowplayer',
    'title' => t('Flowplayer'),
    'download' => 'http://www.tucows.com/download.html?software_id=519713&t=2',
    'width' => 320,
    'height' => 263,
    'library' => 'sites/all/libraries/' . $shared_file,
  );

  // Flowplayer support various actions with the same player and info.
  $methods['video']['flowplayer'] = $flowplayer;
  $methods['video_list']['flowplayer'] = $flowplayer;
  $methods['audio']['flowplayer'] = $flowplayer;
  $methods['audio_list']['flowplayer'] = $flowplayer;
  $methods['media_list']['flowplayer'] = $flowplayer;
  $methods['image_list']['flowplayer'] = $flowplayer;
  return $methods;
}

/**
 * Implementation of hook_menu().
 */
function swftools_flowplayer_menu() {
  $items['admin/settings/swftools/flowplayer'] = array(
    'title' => 'Flowplayer',
    'description' => 'Settings for ' . l('Flowplayer', 'http://www.tucows.com/download.html?software_id=519713&t=2') . '.',
    'access arguments' => array(
      'administer flash',
    ),
    'page callback' => 'drupal_get_form',
    'page arguments' => array(
      'swftools_flowplayer_admin_form',
    ),
    'file' => 'swftools_flowplayer.admin.inc',
  );
  return $items;
}

/**
 * Implementation of hook_swftools_preprocess_[player]().
 */
function swftools_flowplayer_swftools_preprocess_flowplayer(&$data) {

  // Pad out the user parameters (like those passed through swf(), with our
  // configured defaults, allowing the user parameters to dominate.
  $defaults = _swftools_flowplayer_flashvars();

  // Merge defaults and user supplied values, letting user supplied values dominate
  $data['flashvars'] = array_merge($defaults, $data['flashvars']);

  // If an image is set then use it
  if ($data['flashvars']['image']) {

    // Retrieve path data
    $source = swftools_get_url_and_path($data['flashvars']['image']);

    // If a path was returned then assign it to the flashvar
    if ($source) {
      $data['flashvars']['image'] = $source['fileurl'];
    }
  }

  //  if ($vars->params['width']) {$flashvars['width'] = $vars->params['width'];}
  //  if ($vars->params['height']) {$flashvars['height'] = $vars->params['height'];}

  /* Flowplayer doesn't like "" when JSON is generated, so we have to construct it ourselves here
   * and assign it to the variable config.
   * Build an array of Flowplayer configuration settings, then call drupal_to_js to convert
   * to JSON format, and then run through str_replac to make Flowplayer happy!
   */

  // Initialise array of Flowplayer configuration settings
  $flowplayer = array();

  // Are we handling a playlist?
  if ($data['othervars']['playlist_data']) {

    // Initialise array to hold data
    $playlist = array();

    // Get file paths out of existing array and start to form Flowplayer format
    foreach ($data['othervars']['playlist_data']['playlist'] as $play) {
      $playlist[] = "{ url: '" . $play['fileurl'] . "' }";
    }

    // Implode the array to create a flashvar ready for later
    $flowplayer['playList'] = '[ ' . implode(', ', $playlist) . ' ]';
  }
  else {

    // If not a playlist simply assign file_url to videoFile
    $flowplayer['videoFile'] = $data['othervars']['file_url'];
  }

  // Find out what configuration settings are available
  $available_settings = swftools_flowplayer_swftools_variable_mapping();

  // See which ones have been set in othervars and copy to flowplayer array
  foreach ($available_settings['flowplayer'] as $setting => $value) {
    if (isset($data['flashvars'][$setting])) {
      $flowplayer[$setting] = $data['flashvars'][$setting];
      unset($data['flashvars'][$setting]);
    }
  }

  /**
   * Flowplayer uses 'loop' as the parameter to control looping
   * This is already used as flash parameter so using loop in a
   * filter means it isn't passed in the flashvars array. So copy
   * whatever value we have in the parameter to flowplayer array
   */
  if (isset($data['othervars']['loop']) && $data['othervars']['loop']) {
    $flowplayer['loop'] = $data['othervars']['loop'];
  }

  // Merge $data['othervars'] in to flashvars

  //$flowplayer = array_merge($flowplayer, $data['othervars']);

  // Convert to JSON
  $data['flashvars']['config'] = drupal_to_js($flowplayer);

  // Replace " with ', and remove quotes from around true and false, to satisfy Flowplayer
  $data['flashvars']['config'] = str_replace(array(
    '"',
    "'false'",
    "'true'",
    "'[",
    "]'",
  ), array(
    "'",
    "false",
    "true",
    "[",
    "]",
  ), $data['flashvars']['config']);

  // If we had a playlist then the ' has been escaped, so reverse it where it occurs in the playlist
  if (isset($playlist) && $playlist) {
    $data['flashvars']['config'] = str_replace(array(
      "url: \\'",
      "\\' }",
    ), array(
      "url: '",
      "' }",
    ), $data['flashvars']['config']);
  }
}

/**
 * This function is called from flowplayer_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/wijering
 * which are returned by _swftools_flowplayer_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_flowplayer_flashvars() {

  // Cache this
  static $flashvars = array();

  // If defaults not already retrieved then fetch now
  if (!count($flashvars)) {

    // Get saved settings for this method.
    $defaults = _swftools_flowplayer_settings();

    // Unset values defined as default, and set booleans properly
    foreach ($defaults as $key => $value) {
      if (!$value || $value == 'default') {
        unset($defaults[$key]);
      }
      else {
        if (in_array($key, array(
          'usePlayOverlay',
          'hideControls',
          'showFullScreenButton',
          'showPlayListButtons',
          'autoPlay',
          'loop',
        ))) {
          $defaults[$key] = _swftools_tf($value);
        }
      }
    }
  }

  // Returning resulting defaults
  return $defaults;
}
function swftools_flowplayer_swftools_playlist_flowplayer($data) {
  $xml = '<playlist version="1" xmlns="http://xspf.org/ns/0/">
            <title>' . $xml_data['header']['title'] . '</title>
            <info></info>
            <annotation></annotation>
            <trackList>
            ';
  foreach ($data['othervars']['playlist_data']['playlist'] as $track => $details) {
    if (!isset($details['background']) && strtolower(substr($details['fileurl'], -3, 3)) == 'mp3') {
      if ($data['flashvars']['image']) {
        $source = swftools_get_url_and_path($data['flashvars']['image']);
        $details['background'] = "<image>" . $source['fileurl'] . "</image>\n";
      }
      else {

        //$details['background'] = url(drupal_get_path('module', 'swftools') . '/' . SWFTOOLS_DEFAULT_BG, array('absolute' => TRUE));
        $details['background'] = '';
      }
    }
    $xml .= "<track>\n";
    $xml .= "<title>" . $details['title'] . "</title>\n";
    $xml .= "<creator></creator>\n";
    $xml .= "<location>" . $details['fileurl'] . "</location>\n";
    $xml .= $details['background'];
    $xml .= "<info>" . $details['fileurl'] . "</info>\n";
    $xml .= "</track>\n";
  }
  $xml .= '</trackList>
           </playlist>';
  return $xml;
}

/*
 * Implementation of hook_swftools_variable_mapping.
 * We don't map anything to flashvars, but we want to know what
 * settings are available
 *
 */
function swftools_flowplayer_swftools_variable_mapping() {
  return array(
    'flowplayer' => array(
      'videoFile' => 'flashvars',
      'autoPlay' => 'flashvars',
      'initialVolumePercentage' => 'flashvars',
      'usePlayOverlay' => 'flashvars',
      'controlBarGloss' => 'flashvars',
      'hideControls' => 'flashvars',
      'loop' => 'flashvars',
      'fullscreen' => 'flashvars',
      'showFullScreenButton' => 'flashvars',
      'showPlayListButtons' => 'flashvars',
    ),
  );
}

/**
 * These are the default settings as they are stored in the database and displayed
 * on the settings page.
 */
function _swftools_flowplayer_settings() {

  // Define the settings list.
  $defaults = array(
    'player' => 'flowplayer/FlowPlayerClassic.swf',
    'usePlayOverlay' => 'default',
    'hideControls' => 'default',
    'controlBarGloss' => 'default',
    'showFullScreenButton' => 'default',
    'showPlayListButtons' => 'default',
    'autoPlay' => 'default',
    'loop' => 'default',
    'initialVolumePercentage' => '',
  );

  // Retrieve settings from database, if available
  $saved_settings = variable_get('swftools_flowplayer', $defaults);

  // Return resulting defaults
  return $saved_settings;
}

/**
 * Implementation of hook_help
 */
function swftools_flowplayer_help($path, $arg) {
  switch ($path) {
    case 'admin/settings/swftools/flowplayer':
      return '<p>' . t('These are the settings for the Flowplayer media player.
                      For details of what each parameter does refer to the
                      <a href="@flowplayer">Flowplayer documentation</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 configuration setting name and corresponds to the documentation page.
                      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/v2/player/index.html',
      )) . '</p>';
  }
}

Functions

Namesort descending Description
swftools_flowplayer_help Implementation of hook_help
swftools_flowplayer_menu Implementation of hook_menu().
swftools_flowplayer_swftools_methods Implementation of hook_swftools_methods().
swftools_flowplayer_swftools_playlist_flowplayer
swftools_flowplayer_swftools_preprocess_flowplayer Implementation of hook_swftools_preprocess_[player]().
swftools_flowplayer_swftools_variable_mapping
_swftools_flowplayer_flashvars This function is called from flowplayer_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/wijering which…
_swftools_flowplayer_settings These are the default settings as they are stored in the database and displayed on the settings page.