You are here

function flowplayer_swftools_flashvars in SWF Tools 5

Same name and namespace in other branches
  1. 6 flowplayer/flowplayer.module \flowplayer_swftools_flashvars()
  2. 6.2 flowplayer/flowplayer.module \flowplayer_swftools_flashvars()

Implementation of swftools_flashvars hook. Return an array of flashvars.

File

flowplayer/flowplayer.module, line 88

Code

function flowplayer_swftools_flashvars($action, &$methods, &$vars) {

  // Pad out the user parameters (like those passed through swf(), with our
  // configured defaults, allowing the user parameters to dominate.
  $saved_settings = _flowplayer_flashvars($methods->player['name']);
  $saved = array();
  foreach ($saved_settings as $category => $settings) {
    $saved = array_merge($saved, $settings);
  }
  $flashvars = array_merge($saved, $vars->flashvars);
  if (isset($flashvars['image']) && !valid_url($flashvars['image'], TRUE)) {
    $flashvars['image'] = swftools_get_media_url(swftools_get_media_path() . $flashvars['image']);
  }
  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();

  // If the passed filename ends in xml then it is a playlist
  // FlowPlayer format requires a bit of adjusting to get things in the right format
  // and we don't want an xml playlist but a flashvars string
  if (pathinfo($vars->othervars['file_url'], PATHINFO_EXTENSION) == 'xml') {

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

    // Get file paths out of existing array and start to form FlowPlayer format
    foreach ($vars->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'] = $vars->othervars['file_url'];
  }

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

  // See which ones have been set in othervars and copy to flowplayer array
  foreach ($available_settings[FLOWPLAYER_MEDIAPLAYER] as $setting => $value) {
    if ($flashvars[$setting]) {
      $flowplayer[$setting] = $flashvars[$setting];
      unset($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 ($vars->othervars['loop']) {
    $flowplayer['loop'] = $vars->othervars['loop'];
  }

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

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

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

  // Return an array of flash variables
  return $flashvars;
}