Skip to content

Commit

Permalink
Merge pull request #83 from shadlaws/master
Browse files Browse the repository at this point in the history
#1931, #1932, #1933, #1934 - movieplayer view and movie_img function in items model
  • Loading branch information
bharat committed Dec 31, 2012
2 parents 7777baa + 8300c86 commit 009f158
Show file tree
Hide file tree
Showing 3 changed files with 102 additions and 34 deletions.
6 changes: 6 additions & 0 deletions modules/gallery/css/gallery.css
Expand Up @@ -143,6 +143,12 @@
width: 1%;
}

/* Unsupported movie download link ~~~~~~~~~~~~~~~~~~~~~~~~~ */

.g-movie-download-link {
text-align: center;
}

/** *******************************************************************
* 2) Admin
**********************************************************************/
Expand Down
69 changes: 54 additions & 15 deletions modules/gallery/models/item.php
Expand Up @@ -663,31 +663,70 @@ public function resize_img($extra_attrs) {
}

/**
* Return a flowplayer <script> tag for movies
* Return a view for movies. By default this is a Flowplayer v3 <script> tag, but
* movie_img events can override this and provide their own player/view. If no player/view
* is found and the movie is unsupported by Flowplayer v3, this returns a simple download link.
* @param array $extra_attrs
* @return string
*/
public function movie_img($extra_attrs) {
$v = new View("movieplayer.html");
$max_size = module::get_var("gallery", "resize_size", 640);
$width = $this->width;
$height = $this->height;
if ($width > $max_size || $height > $max_size) {
if ($width > $height) {
$height = (int)($height * $max_size / $width);
$width = $max_size;
if ($width == 0 || $height == 0) {
// Not set correctly, likely because ffmpeg isn't available. Making the window 0x0 causes the
// video to be effectively unviewable. So, let's guess: set width to max_size and guess a
// height (using 4:3 aspect ratio). Once the video metadata is loaded, js in
// movieplayer.html.php will correct these values.
$width = $max_size;
$height = ceil($width * 3/4);
}
$attrs = array_merge(array("id" => "g-item-id-{$this->id}"), $extra_attrs,
array("class" => "g-movie"));

// Run movie_img events, which can either:
// - generate a view, which is used in place of the standard Flowplayer v3 player
// (use view variable)
// - alter the arguments sent to the standard player
// (use fp_params and fp_config variables)
$movie_img = new stdClass();
$movie_img->max_size = $max_size;
$movie_img->width = $width;
$movie_img->height = $height;
$movie_img->attrs = $attrs;
$movie_img->url = $this->file_url(true);
$movie_img->fp_params = array(); // additional Flowplayer params values (will be json encoded)
$movie_img->fp_config = array(); // additional Flowplayer config values (will be json encoded)
$movie_img->view = array();
module::event("movie_img", $movie_img, $this);

if (count($movie_img->view) > 0) {
// View generated - use it
$view = implode("\n", $movie_img->view);
} else {
// View NOT generated - see if filetype supported by Flowplayer v3
// Note that the extension list below is hard-coded and doesn't use the legal_file helper
// since anything else will not work in Flowplayer v3.
if (in_array(strtolower(pathinfo($this->name, PATHINFO_EXTENSION)),
array("flv", "mp4", "m4v", "mov", "f4v"))) {
// Filetype supported by Flowplayer v3 - use it (default)
$view = new View("movieplayer.html");
$view->max_size = $movie_img->max_size;
$view->width = $movie_img->width;
$view->height = $movie_img->height;
$view->attrs = $movie_img->attrs;
$view->url = $movie_img->url;
$view->fp_params = $movie_img->fp_params;
$view->fp_config = $movie_img->fp_config;
} else {
$width = (int)($width * $max_size / $height);
$height = $max_size;
// Filetype NOT supported by Flowplayer v3 - display download link
$attrs = array_merge($attrs, array("style" => "width: {$max_size}px;",
"download" => $this->name, // forces download (HTML5 only)
"class" => "g-movie g-movie-download-link"));
$view = html::anchor($this->file_url(true), t("Click here to download item."), $attrs);
}
}

$v->attrs = array_merge($extra_attrs, array("style" => "width:{$width}px;height:{$height}px",
"class" => "g-movie"));
if (empty($v->attrs["id"])) {
$v->attrs["id"] = "g-item-id-{$this->id}";
}
return $v;
return $view;
}

/**
Expand Down
61 changes: 42 additions & 19 deletions modules/gallery/views/movieplayer.html.php
@@ -1,26 +1,49 @@
<?php defined("SYSPATH") or die("No direct script access.") ?>
<?= html::anchor($item->file_url(true), "", $attrs) ?>
<?= html::anchor($url, "", $attrs) ?>
<script type="text/javascript">
flowplayer(
"<?= $attrs["id"] ?>",
{
src: "<?= url::abs_file("lib/flowplayer.swf") ?>",
wmode: "transparent",
provider: "pseudostreaming"
},
{
clip: {
scaling: 'fit'
},
plugins: {
pseudostreaming: {
url: "<?= url::abs_file("lib/flowplayer.pseudostreaming-byterange.swf") ?>"
var id = "<?= $attrs["id"] ?>";
var max_size = <?= $max_size ?>;
// set the size of the movie html anchor, taking into account max_size and height of control bar
function set_movie_size(width, height) {
if((width > max_size) || (height > max_size)) {
if (width > height) {
height = Math.ceil(height * max_size / width);
width = max_size;
} else {
width = Math.ceil(width * max_size / height);
height = max_size;
}
}
height += flowplayer(id).getConfig().plugins.controls.height;
$("#" + id).css({width: width, height: height});
};
// setup flowplayer
flowplayer(id,
$.extend(true, {
"src": "<?= url::abs_file("lib/flowplayer.swf") ?>",
"wmode": "transparent",
"provider": "pseudostreaming"
}, <?= json_encode($fp_params) ?>),
$.extend(true, {
"plugins": {
"pseudostreaming": {
"url": "<?= url::abs_file("lib/flowplayer.pseudostreaming-byterange.swf") ?>"
},
controls: {
autoHide: 'always',
hideDelay: 2000
"controls": {
"autoHide": "always",
"hideDelay": 2000,
"height": 24
}
},
"clip": {
"scaling": "fit",
"onMetaData": function(clip) {
// set movie size a second time using actual size from metadata
set_movie_size(parseInt(clip.metaData.width), parseInt(clip.metaData.height));
}
}
}
}, <?= json_encode($fp_config) ?>)
).ipad();
// set movie size using width and height passed from movie_img function
$("document").ready(set_movie_size(<?= $width ?>, <?= $height ?>));
</script>

0 comments on commit 009f158

Please sign in to comment.