class OSMPlayer in MediaFront 7
Same name and namespace in other branches
- 6.2 players/osmplayer/player/OSMPlayer.php \OSMPlayer
- 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
- class \OSMPlayer
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
Name | Modifiers | Type | Description | Overrides |
---|---|---|---|---|
OSMPlayer:: |
private | property | ||
OSMPlayer:: |
public | property | ||
OSMPlayer:: |
private | property | ||
OSMPlayer:: |
private | property | ||
OSMPlayer:: |
private | property | ||
OSMPlayer:: |
public | property | ||
OSMPlayer:: |
public | function | Connect the controlbar of this media player to another media player. | |
OSMPlayer:: |
public | function | Connect the playlist of this media player to another media player. | |
OSMPlayer:: |
public | function | Get the header for this media player. | |
OSMPlayer:: |
public | function | Returns the current id of the player. | |
OSMPlayer:: |
public | function | Returns the JavaScript code to add and instantiate the player on the page. | |
OSMPlayer:: |
public | function | Get the javascript files for this media player. | |
OSMPlayer:: |
public | function | Get the JS header for this player. | |
OSMPlayer:: |
public | function | Get the player parameters. This will only return the parameters that are included in the playerParams array. | |
OSMPlayer:: |
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:: |
public | function | Returns the javascript to add the player to the page. | |
OSMPlayer:: |
public static | function | Returns the player parameters. | |
OSMPlayer:: |
public static | function | Returns the paths to this player library. | |
OSMPlayer:: |
public static | function | Returns the player settings. | |
OSMPlayer:: |
public | function | Returns the current prefix of the player. | |
OSMPlayer:: |
public | function | Get's the current template. | |
OSMPlayer:: |
public | function | Get's the current theme. | |
OSMPlayer:: |
public | function | Converts a PHP variable into its Javascript equivalent. | |
OSMPlayer:: |
public | function | Set the id for this media player. | |
OSMPlayer:: |
public | function | Set the prefix for the CSS of this media player. | |
OSMPlayer:: |
public | function | Set's the current session id for this player. | |
OSMPlayer:: |
public | function | Constructor. |