You are here

class OSMPlayer in MediaFront 7

Same name and namespace in other branches
  1. 6.2 players/osmplayer/player/OSMPlayer.php \OSMPlayer
  2. 6 players/osmplayer/player/OSMPlayer.php \OSMPlayer

PHP wrapper class for the Open Standard Media (OSM) player.

This class is used to wrap all the functionality behind the open standard media player including the dynamic template system that this unique player employs. This class can be used to easily add and customize the OSM Player within a standalone PHP implementation.

To learn how to use this class, please visit the online documentation at http://www.mediafront.org/documentation.

Hierarchy

Expanded class hierarchy of OSMPlayer

File

players/osmplayer/player/OSMPlayer.php, line 42

View source
class OSMPlayer {

  // The complete settings of the media player.
  private $settings;

  // The playlists connected to this media player.
  private $playlists = array();

  // The controllers connected to this media player.
  private $controllers = array();

  // The template for this osm player instance.
  public $template = null;

  // Store the default settings.
  public $defaults = null;

  // To store the player parameters.
  private $playerParams = null;

  /**
   * Constructor.
   *
   * Creates a new instance of a media player.
   *
   * Usage:
   *
   *    $player = new OSMPlayer(array(
   *       'width' => 640,
   *       'height' => 480,
   *       'playlist' => 'http://www.mysite.com/playlist.xml'
   *    ));
   */
  public function __construct($_params = array()) {

    // First set the defaults.
    $this->playerParams = OSMPlayer::getPlayerParams();
    $this->defaults = array_merge($this->playerParams, OSMPlayer::getPlayerSettings());
    $this->settings = $this->defaults;
    if ($_params) {

      // Set the parameters ( which will override the defaults ).
      $this->settings = array_merge($this->settings, $_params);
    }

    // Create our template.
    $templateClass = ucfirst($this->settings['template']) . 'Template';
    require_once "OSMTemplate.php";
    require_once "templates/" . $this->settings['template'] . "/template.php";
    $this->template = new $templateClass($this->settings);

    // Make sure we set the Prefix.
    $this
      ->setPrefix(isset($_params['prefix']) ? $_params['prefix'] : $this->settings['id'] . '_');
  }

  /**
   * Returns the paths to this player library.
   */
  public static function getPlayerPath() {
    static $playerPath;

    // Get the player path.
    if (!$playerPath) {

      // Set the base path and url of this class.
      $base_root = isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on' ? 'https' : 'http';
      $base_url = $base_root .= '://' . check_plain($_SERVER['HTTP_HOST']);
      if ($dir = trim(dirname(check_plain($_SERVER['SCRIPT_NAME'])), '\\,/')) {
        $base_url .= "/{$dir}";
      }
      $path = parse_url($base_url);
      $path = isset($path['path']) ? $path['path'] : '';
      $playerPath = trim(str_replace(realpath('.'), '', dirname(__FILE__)), '/');
      $playerPath = trim(str_replace('\\', '/', $playerPath), '/');
      $playerPath = $playerPath ? $path . '/' . $playerPath . '/' : $playerPath;
    }

    // Return the player path.
    return $playerPath;
  }

  /**
   * Returns the player settings.
   */
  public static function getPlayerSettings() {
    return array(
      'width' => OSMPLAYER_DEFAULT_WIDTH,
      'height' => OSMPLAYER_DEFAULT_HEIGHT,
      'theme' => 'dark-hive',
      'version' => '0.01',
      'showController' => true,
      'disablePlaylist' => false,
      'playlistOnly' => false,
      'showNodeVoter' => false,
      'showTeaserVoter' => false,
      'showTitleBar' => true,
      'showWhenEmpty' => true,
      'playerPath' => self::getPlayerPath(),
    );
  }

  /**
   * Returns the player parameters.
   */
  public static function getPlayerParams() {
    return array(
      'id' => 'player',
      'showPlaylist' => true,
      'file' => '',
      'flashPlayer' => 'minplayer/minplayer.swf',
      'image' => '',
      'volume' => 80,
      'autostart' => false,
      'autoLoad' => true,
      'streamer' => "",
      'apiKey' => "",
      'sessid' => "",
      'api' => 2,
      'drupalVersion' => 6,
      'links' => array(),
      'linksvertical' => false,
      'logo' => 'logo.png',
      'link' => "http://www.mediafront.org",
      'logopos' => 'sw',
      'logoWidth' => 49,
      'logoHeight' => 15,
      'logox' => 5,
      'logoy' => 5,
      'node' => "",
      'shuffle' => false,
      'loop' => false,
      'repeat' => false,
      'pageLimit' => 10,
      'protocol' => "auto",
      'server' => "drupal",
      'template' => "default",
      'baseURL' => "",
      'draggable' => false,
      'resizable' => false,
      'playlist' => "",
      'args' => array(),
      'wildcard' => "*",
      'gateway' => "",
      'vertical' => true,
      'scrollSpeed' => 15,
      'updateTimeout' => 20,
      'hysteresis' => 40,
      'dynamic' => false,
      'scrollMode' => "auto",
      'pageLink' => false,
      'debug' => false,
      'embedWidth' => 450,
      'embedHeight' => 337,
      'skin' => 'default',
      'autoNext' => true,
      'prefix' => '',
      'showScrollbar' => true,
      'controllerOnly' => false,
      'wmode' => 'transparent',
      'forceOverflow' => false,
      'volumeVertical' => false,
      'incrementTime' => 5,
      'quality' => 'default',
      'zIndex' => 400,
      'timeout' => 4,
      'fluidWidth' => false,
      'fluidHeight' => false,
      'fullscreen' => false,
    );
  }

  /**
   * Set's the current session id for this player.
   */
  public function setSessionId($sessid) {
    $this->settings['sessid'] = $sessid;
  }

  /**
   * Get's the current template.
   */
  public function getTemplate() {
    return $this->settings['template'];
  }

  /**
   * Get's the current theme.
   */
  public function getTheme() {
    return $this->settings['theme'];
  }

  /**
   * Connect the playlist of this media player to another media player.
   *
   * Usage:
   *
   *    $playlist = new OSMPlayer(array(
   *       'width' => 150,
   *       'height' => 400,
   *       'playlistOnly' => true,
   *       'playlist' => 'http://www.mysite.com/playlist.xml'
   *    ));
   *
   *    $player = new OSMPlayer(array(
   *       'width' => 450,
   *       'height' => 400,
   *       'disablePlaylist' => true
   *    ));
   *
   *    $playlist->addPlaylistTo( $player );
   */
  public function addPlaylistTo($player) {
    $this->playlists[] = is_string($player) ? $player : $player
      ->getId();
  }

  /**
   * Connect the controlbar of this media player to another media player.
   *
   * Usage:
   *
   *    $controller = new OSMPlayer(array(
   *       'width' => 400,
   *       'height' => 26,
   *       'controllerOnly' => true,
   *    ));
   *
   *    $player = new OSMPlayer(array(
   *       'playlist' => 'http://www.mysite.com/myplaylist.xml
   *    ));
   *
   *    $controller->addControllerTo( $player );
   */
  public function addControllerTo($player) {
    $this->controllers[] = is_string($player) ? $player : $player
      ->getId();
  }

  /**
   * Returns the current id of the player.
   */
  public function getId() {
    return $this->settings['id'];
  }

  /**
   * Set the id for this media player.
   */
  public function setId($newId) {

    // Set the id of this player.
    $this->settings['id'] = $newId;
  }

  /**
   * Returns the current prefix of the player.
   */
  public function getPrefix() {
    return $this->settings['prefix'];
  }

  /**
   * Set the prefix for the CSS of this media player.
   */
  public function setPrefix($newPrefix) {

    // We only need to set the prefix if we generate the CSS.
    if ($this->template->settings['generateCSS']) {

      // Set the prefix.
      $this->settings['prefix'] = $newPrefix;

      // Set the template prefix.
      $this->template
        ->setPrefix($newPrefix);
    }
    else {
      $this->settings['prefix'] = '';
      $this->template
        ->setPrefix('');
    }
  }

  /**
   * Get the JS header for this player.
   */
  public function getJSHeader() {
    $header = '';

    // Add all of the javascript files.
    $jsfiles = $this
      ->getJSFiles();
    foreach ($jsfiles as $file) {
      $header .= '<script type="text/javascript" src="' . $this->settings['playerPath'] . $file . '"></script>';
      $header .= "\n";
    }

    // Return the header.
    return $header;
  }

  /**
   * Get the header for this media player.
   */
  public function getHeader() {

    // Add the JS files to the header.
    $header = $this
      ->getJSHeader();

    // Add the CSS files.
    $header .= $this->template
      ->getCSSHeader();

    // Return the header.
    return $header;
  }

  /**
   * Get the javascript files for this media player.
   */
  public function getJSFiles() {
    $template = $this->settings['template'];
    if ($this->settings['debug']) {
      return array_merge(array(
        "js/source/jquery.media.drupal.js",
        "js/source/jquery.media.parser.js",
        "js/source/jquery.media.auto.js",
        "js/source/jquery.media.rpc.js",
        "js/source/jquery.media.json.js",
        "js/source/jquery.media.sha256.js",
        "js/source/jquery.media.utils.js",
        "js/source/jquery.media.control.js",
        "js/source/jquery.media.flash.js",
        "js/source/jquery.media.html5.js",
        "js/source/jquery.media.image.js",
        "js/source/jquery.media.link.js",
        "js/source/jquery.media.links.js",
        "js/source/jquery.media.display.js",
        "js/source/jquery.media.minplayer.js",
        "js/source/jquery.media.menu.js",
        "js/source/jquery.media.mousewheel.js",
        "js/source/jquery.media.node.js",
        "js/source/jquery.media.pager.js",
        "js/source/jquery.media.player.js",
        "js/source/jquery.media.playlist.js",
        "js/source/jquery.media.playlistlink.js",
        "js/source/jquery.media.rotator.js",
        "js/source/jquery.media.slider.js",
        "js/source/jquery.media.teaser.js",
        "js/source/jquery.media.titlebar.js",
        "js/source/jquery.media.scroll.js",
        "js/source/jquery.media.voter.js",
        "js/source/jquery.media.youtube.js",
        "js/source/jquery.media.vimeo.js",
        "js/source/jquery.media.dailymotion.js",
        "js/source/jquery.media.file.js",
      ), $this->template->settings['jsFiles']['debug']);
    }
    else {
      return array_merge(array(
        "js/jquery.osmplayer.compressed.js",
      ), $this->template->settings['jsFiles']['release']);
    }
  }

  /**
   * Converts a PHP variable into its Javascript equivalent.
   */
  public function osm_json_encode($var) {
    switch (gettype($var)) {
      case 'boolean':
        return $var ? 'true' : 'false';

      // Lowercase necessary!
      case 'integer':
      case 'double':
        return $var;
      case 'resource':
      case 'string':
        return '"' . str_replace(array(
          "\r",
          "\n",
          "<",
          ">",
          "&",
          "\\'",
        ), array(
          '\\r',
          '\\n',
          '\\x3c',
          '\\x3e',
          '\\x26',
          "'",
        ), addslashes($var)) . '"';
      case 'array':

        // Arrays in JSON can't be associative. If the array is empty or if it
        // has sequential whole number keys starting with 0, it's not associative
        // so we can go ahead and convert it as an array.
        if (empty($var) || array_keys($var) === range(0, sizeof($var) - 1)) {
          $output = array();
          foreach ($var as $v) {
            $output[] = $this
              ->osm_json_encode($v);
          }
          return '[' . implode(',', $output) . ']';
        }

      // Otherwise, fall through to convert the array as an object.
      case 'object':
        $output = array();
        foreach ($var as $k => $v) {
          $output[] = $this
            ->osm_json_encode(strval($k)) . ': ' . $this
            ->osm_json_encode($v);
        }
        return '{' . implode(',', $output) . '}';
      default:
        return 'null';
    }
  }

  /**
   * Get the player parameters.  This will only return the parameters that are included in
   * the playerParams array.
   */
  public function getParams() {
    $params = array();
    foreach ($this->settings as $param => $value) {
      if (array_key_exists($param, $this->playerParams) && $this->playerParams[$param] != $value) {
        switch (gettype($this->defaults[$param])) {
          case 'array':
          case 'object':
            $params[] = $param . ':' . $this
              ->osm_json_encode($value);
            break;
          case 'string':

            // Make sure we are not dealing with a JSON string here.  If so, then don't include the quotes.
            $params[] = substr($value, 0, 1) == '{' ? $param . ':' . $value : $param . ':"' . str_replace('"', "'", $value) . '"';
            break;
          case 'boolean':
            $params[] = $param . ':' . ($value ? 'true' : 'false');
            break;
          default:
            $params[] = $param . ':' . ($value ? $value : 0);
            break;
        }
      }
    }
    $ids = array();

    // Iterate through all of our template Ids.
    foreach ($this->template
      ->getIds() as $id => $value) {

      // Only set this if it is different from the default.
      if ($this->template->defaultIds[$id] != $value) {
        $ids[] = $id . ':"' . $value . '"';
      }
    }

    // If we have some id's different from the default, then add then to our params.
    if (count($ids)) {

      // Now add all the Id's to the settings.
      $params[] = 'ids:{' . implode(',', $ids) . '}';
    }
    return $params;
  }

  /**
   * Returns the JavaScript code to add and instantiate the player on the page.
   */
  public function getJS() {

    // Return the script.
    return '<script type="text/javascript">' . $this
      ->getPlayerJS() . '</script>';
  }

  /**
   * Returns the javascript to add the player to the page.
   */
  public function getPlayerJS() {
    $playerId = $this
      ->getId();
    $params = $this
      ->getParams();

    // Create the player in javascript.
    $js = 'var ' . $playerId . ' = jQuery("#' . $playerId . '").mediaplayer({' . implode(',', $params) . '});';

    // Now that the player has made it's way through the loading process... hide the busy cursor.
    $js .= 'jQuery("#' . $playerId . '_loading").hide();';

    // Now add our playlist connections to the javascript.
    foreach ($this->playlists as $playlist) {
      $js .= 'jQuery.media.addPlaylist("' . $playlist . '",' . $playerId . ');';
    }

    // Now add our controller connections to the javascript.
    foreach ($this->controllers as $controller) {
      $js .= 'jQuery.media.addController("' . $controller . '",' . $playerId . ');';
    }

    // Return the script.
    // We need to use setTimeout since some browsers jump the gun on when they are really ready.
    return 'jQuery(function() { setTimeout( function() {' . $js . '}, 10 ); });';
  }

  /**
   * The main API call for this player.  This will return the HTML and JavaScript for the
   * media player that you wish to add to your page.
   *
   * This function allows for dynamic theming of the player by passing parameters to the media
   * player ( i.e. playlistOnly, horizontal, etc ).
   */
  public function getPlayer() {
    $output = $this
      ->getJS();
    $output .= "\n";

    // Determine the width and height of the player.
    $width = $this->settings['playlistOnly'] && $this->settings['vertical'] ? '' : 'width:' . $this->settings['width'] . 'px;';
    $width = $this->settings['fluidWidth'] ? 'width:100%;' : $width;
    $height = $this->settings['playlistOnly'] && !$this->settings['vertical'] || $this->settings['controllerOnly'] ? '' : 'height:' . $this->settings['height'] . 'px;';
    $height = $this->settings['fluidHeight'] ? 'height:100%;' : $height;

    // Set the version.
    $this->settings['version'] = $this->template
      ->getVersion();

    // Get the output from the template.
    $output .= $this->template
      ->theme(array(
      'params' => $this->settings,
      'width' => $width,
      'height' => $height,
    ));
    return $output;
  }

}

Members

Namesort descending Modifiers Type Description Overrides
OSMPlayer::$controllers private property
OSMPlayer::$defaults public property
OSMPlayer::$playerParams private property
OSMPlayer::$playlists private property
OSMPlayer::$settings private property
OSMPlayer::$template public property
OSMPlayer::addControllerTo public function Connect the controlbar of this media player to another media player.
OSMPlayer::addPlaylistTo public function Connect the playlist of this media player to another media player.
OSMPlayer::getHeader public function Get the header for this media player.
OSMPlayer::getId public function Returns the current id of the player.
OSMPlayer::getJS public function Returns the JavaScript code to add and instantiate the player on the page.
OSMPlayer::getJSFiles public function Get the javascript files for this media player.
OSMPlayer::getJSHeader public function Get the JS header for this player.
OSMPlayer::getParams public function Get the player parameters. This will only return the parameters that are included in the playerParams array.
OSMPlayer::getPlayer public function The main API call for this player. This will return the HTML and JavaScript for the media player that you wish to add to your page.
OSMPlayer::getPlayerJS public function Returns the javascript to add the player to the page.
OSMPlayer::getPlayerParams public static function Returns the player parameters.
OSMPlayer::getPlayerPath public static function Returns the paths to this player library.
OSMPlayer::getPlayerSettings public static function Returns the player settings.
OSMPlayer::getPrefix public function Returns the current prefix of the player.
OSMPlayer::getTemplate public function Get's the current template.
OSMPlayer::getTheme public function Get's the current theme.
OSMPlayer::osm_json_encode public function Converts a PHP variable into its Javascript equivalent.
OSMPlayer::setId public function Set the id for this media player.
OSMPlayer::setPrefix public function Set the prefix for the CSS of this media player.
OSMPlayer::setSessionId public function Set's the current session id for this player.
OSMPlayer::__construct public function Constructor.