aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSem <sembrestels@riseup.net>2012-04-17 23:54:30 -0700
committerSem <sembrestels@riseup.net>2012-04-17 23:54:30 -0700
commita613b944015fd82f97a15392c0de0e7df104706d (patch)
tree5022ba0160427bec07cf9fdf337ef8161e4071b9
parentf1a0a4d5aa28753620552df9d5e88bd983d0aca4 (diff)
parent4af120de2bd0fe2046795346a40102f00fbe5479 (diff)
downloadelgg-a613b944015fd82f97a15392c0de0e7df104706d.tar.gz
elgg-a613b944015fd82f97a15392c0de0e7df104706d.tar.bz2
Merge pull request #1 from mrclay/master
Partial rewrite
-rw-r--r--actions/videolist/edit.php42
-rw-r--r--lib/Videolist/Platform/Bliptv.php38
-rw-r--r--lib/Videolist/Platform/Gisstv.php50
-rw-r--r--lib/Videolist/Platform/Metacafe.php38
-rw-r--r--lib/Videolist/Platform/Vimeo.php40
-rw-r--r--lib/Videolist/Platform/Youtube.php49
-rw-r--r--lib/Videolist/PlatformInterface.php23
-rw-r--r--lib/bliptv.php29
-rw-r--r--lib/gisstv.php41
-rw-r--r--lib/metacafe.php29
-rw-r--r--lib/videolist.php65
-rw-r--r--lib/vimeo.php31
-rw-r--r--lib/youtube.php28
-rw-r--r--start.php102
-rw-r--r--upgrades/2012022501.php1
-rw-r--r--views/default/icon/object/videolist_item.php1
-rw-r--r--views/default/object/videolist_item.php8
17 files changed, 397 insertions, 218 deletions
diff --git a/actions/videolist/edit.php b/actions/videolist/edit.php
index be566de7e..a5e6ea453 100644
--- a/actions/videolist/edit.php
+++ b/actions/videolist/edit.php
@@ -8,7 +8,8 @@
$variables = elgg_get_config('videolist');
$input = array();
foreach ($variables as $name => $type) {
- $input[$name] = get_input($name);
+ $filter_input = ($name !== 'video_url');
+ $input[$name] = get_input($name, null, $filter_input);
if ($name == 'title') {
$input[$name] = strip_tags($input[$name]);
}
@@ -27,21 +28,27 @@ elgg_load_library('elgg:videolist');
// If new video, get data from video providers
if(!$video_guid) {
- if (!$input['video_url']) {
+
+ $input['video_url'] = elgg_trigger_plugin_hook('videolist:preprocess', 'url', $input, $input['video_url']);
+
+ if (!$input['video_url']) {
register_error(elgg_echo('videolist:error:no_url'));
forward(REFERER);
}
- $parsed_url = videolist_parseurl($input['video_url']);
+ $parsedPlatform = videolist_parse_url($input['video_url']);
- if(!$parsed_url) {
+ if (!$parsedPlatform) {
register_error(elgg_echo('videolist:error:invalid_url'));
forward(REFERER);
}
-
+ list ($parsed, $platform) = $parsedPlatform;
+ /* @var Videolist_PlatformInterface $platform */
+
unset($input['title']);
unset($input['description']);
- $input = array_merge(videolist_get_data($parsed_url), $input);
+ $input = array_merge($parsed, $platform->getData($parsed), $input);
+ $input['videotype'] = $platform->getType();
} else {
unset($input['video_url']);
@@ -73,16 +80,19 @@ if ($video->save()) {
elgg_clear_sticky_form('videolist');
// Let's save the thumbnail in the data folder
- $thumbnail = file_get_contents($video->thumbnail);
- if ($thumbnail) {
- $prefix = "videolist/" . $video->guid;
- $filehandler = new ElggFile();
- $filehandler->owner_guid = $video->owner_guid;
- $filehandler->setFilename($prefix . ".jpg");
- $filehandler->open("write");
- $filehandler->write($thumbnail);
- $filehandler->close();
- }
+ $thumb_url = $video->thumbnail;
+ if ($thumb_url) {
+ $thumbnail = file_get_contents($thumb_url);
+ if ($thumbnail) {
+ $prefix = "videolist/" . $video->guid;
+ $filehandler = new ElggFile();
+ $filehandler->owner_guid = $video->owner_guid;
+ $filehandler->setFilename($prefix . ".jpg");
+ $filehandler->open("write");
+ $filehandler->write($thumbnail);
+ $filehandler->close();
+ }
+ }
system_message(elgg_echo('videolist:saved'));
diff --git a/lib/Videolist/Platform/Bliptv.php b/lib/Videolist/Platform/Bliptv.php
new file mode 100644
index 000000000..aa53032f9
--- /dev/null
+++ b/lib/Videolist/Platform/Bliptv.php
@@ -0,0 +1,38 @@
+<?php
+
+class Videolist_Platform_Bliptv implements Videolist_PlatformInterface
+{
+ public function getType()
+ {
+ return "bliptv";
+ }
+
+ public function parseUrl($url)
+ {
+ $parsed = parse_url($url);
+ $path = explode('/', $parsed['path']);
+
+ if ($parsed['host'] != 'blip.tv' || count($path) < 3) {
+ return false;
+ }
+
+ return array(
+ 'video_id' => $parsed['path'],
+ );
+ }
+
+ public function getData($parsed)
+ {
+ $video_id = $parsed['video_id'];
+
+ $buffer = file_get_contents('http://blip.tv'.$video_id.'?skin=rss');
+ $xml = new SimpleXMLElement($buffer);
+
+ return array(
+ 'title' => current($xml->xpath('/rss/channel/item/title')),
+ 'description' => strip_tags(current($xml->xpath('/rss/channel/item/description'))),
+ 'thumbnail' => current($xml->xpath('/rss/channel/item/media:thumbnail/@url')),
+ 'embedurl' => current($xml->xpath('/rss/channel/item/blip:embedUrl')),
+ );
+ }
+}
diff --git a/lib/Videolist/Platform/Gisstv.php b/lib/Videolist/Platform/Gisstv.php
new file mode 100644
index 000000000..b79898449
--- /dev/null
+++ b/lib/Videolist/Platform/Gisstv.php
@@ -0,0 +1,50 @@
+<?php
+
+class Videolist_Platform_Gisstv implements Videolist_PlatformInterface
+{
+ public function getType()
+ {
+ return "gisstv";
+ }
+
+ public function parseUrl($url)
+ {
+ $parsed = parse_url($url);
+ $path = explode('/', $parsed['path']);
+
+ if ($parsed['host'] != 'giss.tv' || $path[1] != 'dmmdb') {
+ return false;
+ }
+
+ if($path[2] == 'contents' && isset($path[3])) {
+ $video_id = $path[3];
+ } elseif($path[3] == 'contents' && isset($path[4])) {
+ $video_id = $path[4];
+ } else {
+ return false;
+ }
+
+ return array(
+ 'video_id' => $video_id,
+ );
+ }
+
+ public function getData($parsed)
+ {
+ $video_id = $parsed['video_id'];
+
+ $buffer = file_get_contents('http://giss.tv/dmmdb//rss.php');
+ $xml = new SimpleXMLElement($buffer);
+
+ $data = array();
+ foreach($xml->xpath('/rss/channel/item') as $item){
+ if ($item->link === 'http://giss.tv/dmmdb//contents/'.$video_id) {
+ $data['title'] = $item->title;
+ $data['description'] = strip_tags($item->description);
+ $data['thumbnail'] = $item->thumbnail;
+ break;
+ }
+ }
+ return $data;
+ }
+}
diff --git a/lib/Videolist/Platform/Metacafe.php b/lib/Videolist/Platform/Metacafe.php
new file mode 100644
index 000000000..7da6d1647
--- /dev/null
+++ b/lib/Videolist/Platform/Metacafe.php
@@ -0,0 +1,38 @@
+<?php
+
+class Videolist_Platform_Metacafe implements Videolist_PlatformInterface
+{
+ public function getType()
+ {
+ return "metacafe";
+ }
+
+ public function parseUrl($url)
+ {
+ $parsed = parse_url($url);
+ $path = explode('/', $parsed['path']);
+
+ if ($parsed['host'] != 'www.metacafe.com' || $path[1] != 'watch' || !(int) $path[2]) {
+ return false;
+ }
+
+ return array(
+ 'video_id' => $path[2],
+ );
+ }
+
+ public function getData($parsed)
+ {
+ $video_id = $parsed['video_id'];
+
+ $buffer = file_get_contents("http://www.metacafe.com/api/item/$video_id");
+ $xml = new SimpleXMLElement($buffer);
+
+ return array(
+ 'title' => current($xml->xpath('/rss/channel/item/title')),
+ 'description' => strip_tags(current($xml->xpath('/rss/channel/item/description'))),
+ 'thumbnail' => current($xml->xpath('/rss/channel/item/media:thumbnail/@url')),
+ 'embedurl' => current($xml->xpath('/rss/channel/item/media:content/@url')),
+ );
+ }
+}
diff --git a/lib/Videolist/Platform/Vimeo.php b/lib/Videolist/Platform/Vimeo.php
new file mode 100644
index 000000000..a4a1f275c
--- /dev/null
+++ b/lib/Videolist/Platform/Vimeo.php
@@ -0,0 +1,40 @@
+<?php
+
+class Videolist_Platform_Vimeo implements Videolist_PlatformInterface
+{
+ public function getType()
+ {
+ return "vimeo";
+ }
+
+ public function parseUrl($url)
+ {
+ $parsed = parse_url($url);
+ $path = explode('/', $parsed['path']);
+
+ if ($parsed['host'] != 'vimeo.com' || !(int) $path[1]) {
+ return false;
+ }
+
+ return array(
+ 'video_id' => $path[1],
+ );
+ }
+
+ public function getData($parsed)
+ {
+ $video_id = $parsed['video_id'];
+
+ $buffer = file_get_contents("http://vimeo.com/api/v2/video/$video_id.xml");
+ $xml = new SimpleXMLElement($buffer);
+
+ $videos = $xml->children();
+ $video = $videos[0];
+
+ return array(
+ 'title' => $video->title,
+ 'description' => strip_tags($video->description),
+ 'thumbnail' => $video->thumbnail_medium,
+ );
+ }
+}
diff --git a/lib/Videolist/Platform/Youtube.php b/lib/Videolist/Platform/Youtube.php
new file mode 100644
index 000000000..d5a388356
--- /dev/null
+++ b/lib/Videolist/Platform/Youtube.php
@@ -0,0 +1,49 @@
+<?php
+
+class Videolist_Platform_Youtube implements Videolist_PlatformInterface
+{
+ public function getType()
+ {
+ return "youtube";
+ }
+
+ public function parseUrl($url)
+ {
+ $parsed = parse_url($url);
+ $id = '';
+ if (! empty($parsed['host'])) {
+ if ($parsed['host'] === 'youtu.be') {
+ // short URLs
+ $id = substr($parsed['path'], 1);
+ } elseif ($parsed['host'] === 'www.youtube.com'
+ && $parsed['path'] === '/watch'
+ && ! empty($parsed['query'])) {
+ // long URLs
+ parse_str($parsed['query'], $query);
+ if (! empty($query['v'])) {
+ $id = $query['v'];
+ }
+ }
+ }
+ if ($id) {
+ return array(
+ 'video_id' => $id,
+ );
+ }
+ return false;
+ }
+
+ public function getData($parsed)
+ {
+ $video_id = $parsed['video_id'];
+
+ $buffer = file_get_contents('http://gdata.youtube.com/feeds/api/videos/'.$video_id);
+ $xml = new SimpleXMLElement($buffer);
+
+ return array(
+ 'title' => $xml->title,
+ 'description' => strip_tags($xml->content),
+ 'thumbnail' => "http://img.youtube.com/vi/$video_id/default.jpg",
+ );
+ }
+}
diff --git a/lib/Videolist/PlatformInterface.php b/lib/Videolist/PlatformInterface.php
new file mode 100644
index 000000000..25ca019e9
--- /dev/null
+++ b/lib/Videolist/PlatformInterface.php
@@ -0,0 +1,23 @@
+<?php
+
+interface Videolist_PlatformInterface {
+ /**
+ * @abstract
+ * @return string
+ */
+ public function getType();
+
+ /**
+ * @abstract
+ * @param string $url
+ * @return array
+ */
+ public function parseUrl($url);
+
+ /**
+ * @abstract
+ * @param array $parsed
+ * @return array
+ */
+ public function getData($parsed);
+}
diff --git a/lib/bliptv.php b/lib/bliptv.php
deleted file mode 100644
index f4c0f772c..000000000
--- a/lib/bliptv.php
+++ /dev/null
@@ -1,29 +0,0 @@
-<?php
-
-function videolist_parseurl_bliptv($url) {
- $parsed = parse_url($url);
- $path = explode('/', $parsed['path']);
-
- if ($parsed['host'] != 'blip.tv' || count($path) < 3) {
- return false;
- }
-
- return array(
- 'videotype' => 'bliptv',
- 'video_id' => $parsed['path'],
- );
-}
-
-function videolist_get_data_bliptv($parsed){
- $video_id = $parsed['video_id'];
-
- $buffer = file_get_contents('http://blip.tv'.$video_id.'?skin=rss');
- $xml = new SimpleXMLElement($buffer);
-
- return array(
- 'title' => sanitize_string(current($xml->xpath('/rss/channel/item/title'))),
- 'description' => strip_tags(current($xml->xpath('/rss/channel/item/description'))),
- 'thumbnail' => sanitize_string(current($xml->xpath('/rss/channel/item/media:thumbnail/@url'))),
- 'embedurl' => sanitize_string(current($xml->xpath('/rss/channel/item/blip:embedUrl'))),
- );
-}
diff --git a/lib/gisstv.php b/lib/gisstv.php
deleted file mode 100644
index 24e11340a..000000000
--- a/lib/gisstv.php
+++ /dev/null
@@ -1,41 +0,0 @@
-<?php
-
-function videolist_parseurl_gisstv($url) {
- $parsed = parse_url($url);
- $path = explode('/', $parsed['path']);
-
- if ($parsed['host'] != 'giss.tv' || $path[1] != 'dmmdb') {
- return false;
- }
-
- if($path[2] == 'contents' && isset($path[3])) {
- $video_id = $path[3];
- } elseif($path[3] == 'contents' && isset($path[4])) {
- $video_id = $path[4];
- } else {
- return false;
- }
-
- return array(
- 'videotype' => 'gisstv',
- 'video_id' => $video_id,
- );
-}
-
-function videolist_get_data_gisstv($parsed){
- $video_id = $parsed['video_id'];
-
- $buffer = file_get_contents('http://giss.tv/dmmdb//rss.php');
- $xml = new SimpleXMLElement($buffer);
-
- $data = array();
- foreach($xml->xpath('/rss/channel/item') as $item){
- if(sanitize_string($item->link) == 'http://giss.tv/dmmdb//contents/'.$video_id) {
- $data['title'] = sanitize_string($item->title);
- $data['description'] = strip_tags($item->description);
- $data['thumbnail'] = sanitize_string($item->thumbnail);
- break;
- }
- }
- return $data;
-}
diff --git a/lib/metacafe.php b/lib/metacafe.php
deleted file mode 100644
index 34b006a32..000000000
--- a/lib/metacafe.php
+++ /dev/null
@@ -1,29 +0,0 @@
-<?php
-
-function videolist_parseurl_metacafe($url) {
- $parsed = parse_url($url);
- $path = explode('/', $parsed['path']);
-
- if ($parsed['host'] != 'www.metacafe.com' || $path[1] != 'watch' || !(int) $path[2]) {
- return false;
- }
-
- return array(
- 'videotype' => 'metacafe',
- 'video_id' => $path[2],
- );
-}
-
-function videolist_get_data_metacafe($parsed){
- $video_id = $parsed['video_id'];
-
- $buffer = file_get_contents("http://www.metacafe.com/api/item/$video_id");
- $xml = new SimpleXMLElement($buffer);
-
- return array(
- 'title' => sanitize_string(current($xml->xpath('/rss/channel/item/title'))),
- 'description' => strip_tags(current($xml->xpath('/rss/channel/item/description'))),
- 'thumbnail' => sanitize_string(current($xml->xpath('/rss/channel/item/media:thumbnail/@url'))),
- 'embedurl' => sanitize_string(current($xml->xpath('/rss/channel/item/media:content/@url'))),
- );
-}
diff --git a/lib/videolist.php b/lib/videolist.php
index 2dfc7d8fc..b86db99cf 100644
--- a/lib/videolist.php
+++ b/lib/videolist.php
@@ -1,29 +1,46 @@
<?php
-define('VIDEOLIST_SUPPORTED_PLATFORMS', 'youtube, vimeo, metacafe, bliptv, gisstv');
-
-foreach(explode(', ', VIDEOLIST_SUPPORTED_PLATFORMS) as $videotype){
- include(elgg_get_plugins_path()."videolist/lib/$videotype.php");
-}
-
-function videolist_parseurl($url){
- foreach(explode(', ', VIDEOLIST_SUPPORTED_PLATFORMS) as $videotype){
- if (is_callable("videolist_parseurl_$videotype")){
- if ($parsed = call_user_func("videolist_parseurl_$videotype", $url)) {
- return $parsed;
- }
- }
- }
- return array();
+/**
+ * @return array
+ */
+function videolist_get_default_platforms() {
+ static $platforms = array();
+ if (! $platforms) {
+ require dirname(__FILE__) . '/Videolist/PlatformInterface.php';
+ $path = dirname(__FILE__) . '/Videolist/Platform';
+ foreach (scandir($path) as $filename) {
+ if (preg_match('/^(\\w+)\\.php$/', $filename, $m)) {
+ require "$path/$filename";
+ $class = 'Videolist_Platform_' . $m[1];
+ $platform = new $class();
+ if ($platform instanceof Videolist_PlatformInterface) {
+ /* @var Videolist_PlatformInterface $platform */
+ $platforms[$platform->getType()][] = $platform;
+ }
+ }
+ }
+ }
+ return $platforms;
}
-function videolist_get_data($parsed) {
- $videotype = $parsed['videotype'];
- $video_id = $parsed['video_id'];
-
- if(is_callable("videolist_get_data_$videotype")){
- return array_merge($parsed, call_user_func("videolist_get_data_$videotype", $parsed));
- } else {
- return $parsed;
- }
+/**
+ * @param string $url
+ * @return array [parsed, platform]
+ */
+function videolist_parse_url($url) {
+ $params = array(
+ 'url' => $url,
+ );
+ $platforms = videolist_get_default_platforms();
+ $platforms = elgg_trigger_plugin_hook('videolist:prepare', 'platforms', $params, $platforms);
+ foreach ($platforms as $list) {
+ foreach ($list as $platform) {
+ /* @var Videolist_PlatformInterface $platform */
+ $parsed = $platform->parseUrl($url);
+ if ($parsed) {
+ return array($parsed, $platform);
+ }
+ }
+ }
+ return false;
}
diff --git a/lib/vimeo.php b/lib/vimeo.php
deleted file mode 100644
index 0433c5a94..000000000
--- a/lib/vimeo.php
+++ /dev/null
@@ -1,31 +0,0 @@
-<?php
-
-function videolist_parseurl_vimeo($url) {
- $parsed = parse_url($url);
- $path = explode('/', $parsed['path']);
-
- if ($parsed['host'] != 'vimeo.com' || !(int) $path[1]) {
- return false;
- }
-
- return array(
- 'videotype' => 'vimeo',
- 'video_id' => $path[1],
- );
-}
-
-function videolist_get_data_vimeo($parsed){
- $video_id = $parsed['video_id'];
-
- $buffer = file_get_contents("http://vimeo.com/api/v2/video/$video_id.xml");
- $xml = new SimpleXMLElement($buffer);
-
- $videos = $xml->children();
- $video = $videos[0];
-
- return array(
- 'title' => sanitize_string($video->title),
- 'description' => strip_tags($video->description),
- 'thumbnail' => sanitize_string($video->thumbnail_medium),
- );
-}
diff --git a/lib/youtube.php b/lib/youtube.php
deleted file mode 100644
index 6ed9344b0..000000000
--- a/lib/youtube.php
+++ /dev/null
@@ -1,28 +0,0 @@
-<?php
-
-function videolist_parseurl_youtube($url) {
- $parsed = parse_url($url);
- parse_str($parsed['query'], $query);
-
- if ($parsed['host'] != 'www.youtube.com' || $parsed['path'] != '/watch' || !isset($query['v'])) {
- return false;
- }
-
- return array(
- 'videotype' => 'youtube',
- 'video_id' => $query['v'],
- );
-}
-
-function videolist_get_data_youtube($parsed){
- $video_id = $parsed['video_id'];
-
- $buffer = file_get_contents('http://gdata.youtube.com/feeds/api/videos/'.$video_id);
- $xml = new SimpleXMLElement($buffer);
-
- return array(
- 'title' => sanitize_string($xml->title),
- 'description' => strip_tags($xml->content),
- 'thumbnail' => "http://img.youtube.com/vi/$video_id/default.jpg",
- );
-}
diff --git a/start.php b/start.php
index 07ec618a0..77bf0a7bc 100644
--- a/start.php
+++ b/start.php
@@ -61,6 +61,9 @@ function videolist_init() {
// register for embed
elgg_register_plugin_hook_handler('embed_get_sections', 'all', 'videolist_embed_get_sections');
elgg_register_plugin_hook_handler('embed_get_items', 'videolist', 'videolist_embed_get_items');
+
+ // handle URLs without scheme
+ elgg_register_plugin_hook_handler('videolist:preprocess', 'url', 'videolist_preprocess_url');
// Register actions
$actions_path = elgg_get_plugins_path() . "videolist/actions/videolist";
@@ -128,6 +131,12 @@ function videolist_page_handler($page) {
/**
* Add a menu item to the user ownerblock
+ *
+ * @param string $hook
+ * @param string $type
+ * @param array $return
+ * @param array $params
+ * @return array
*/
function videolist_owner_block_menu($hook, $type, $return, $params) {
if (elgg_instanceof($params['entity'], 'user')) {
@@ -145,6 +154,10 @@ function videolist_owner_block_menu($hook, $type, $return, $params) {
return $return;
}
+/**
+ * @param ElggObject $videolist_item
+ * @return string
+ */
function videolist_url($videolist_item) {
$guid = $videolist_item->guid;
$title = elgg_get_friendly_title($videolist_item->title);
@@ -154,6 +167,9 @@ function videolist_url($videolist_item) {
/**
* Event handler for videolist
*
+ * @param string $event
+ * @param string $object_type
+ * @param ElggObject $object
*/
function videolist_object_notifications($event, $object_type, $object) {
static $flag;
@@ -177,11 +193,11 @@ function videolist_object_notifications($event, $object_type, $object) {
* Intercepts the notification on an event of new video being created and prevents a notification from going out
* (because one will be sent on the annotation)
*
- * @param unknown_type $hook
- * @param unknown_type $entity_type
- * @param unknown_type $returnvalue
- * @param unknown_type $params
- * @return unknown
+ * @param string $hook
+ * @param string $entity_type
+ * @param array $returnvalue
+ * @param array $params
+ * @return bool
*/
function videolist_object_notifications_intercept($hook, $entity_type, $returnvalue, $params) {
if (isset($params)) {
@@ -198,10 +214,11 @@ function videolist_object_notifications_intercept($hook, $entity_type, $returnva
/**
* Register videolist as an embed type.
*
- * @param unknown_type $hook
- * @param unknown_type $type
- * @param unknown_type $value
- * @param unknown_type $params
+ * @param string $hook
+ * @param string $type
+ * @param array $value
+ * @param array $params
+ * @return array
*/
function videolist_embed_get_sections($hook, $type, $value, $params) {
$value['videolist'] = array(
@@ -216,14 +233,15 @@ function videolist_embed_get_sections($hook, $type, $value, $params) {
/**
* Return a list of videos for embedding
*
- * @param unknown_type $hook
- * @param unknown_type $type
- * @param unknown_type $value
- * @param unknown_type $params
+ * @param string $hook
+ * @param string $type
+ * @param array $value
+ * @param array $params
+ * @return array
*/
function videolist_embed_get_items($hook, $type, $value, $params) {
$options = array(
- 'owner_guid' => get_loggedin_userid(),
+ 'owner_guid' => elgg_get_logged_in_user_guid(),
'type_subtype_pair' => array('object' => 'videolist_item'),
'count' => TRUE
);
@@ -245,13 +263,18 @@ function videolist_embed_get_items($hook, $type, $value, $params) {
/**
* Override the default entity icon for videoslist items
*
+ * @param string $hook
+ * @param string $type
+ * @param string $returnvalue
+ * @param array $params
* @return string Relative URL
*/
function videolist_icon_url_override($hook, $type, $returnvalue, $params) {
$videolist_item = $params['entity'];
- $size = $params['size'];
-
- if($videolist_item->getSubtype() != 'videolist_item'){
+ /* @var ElggObject $videolist_item */
+ $size = $params['size'];
+
+ if($videolist_item->getSubtype() != 'videolist_item'){
return $returnvalue;
}
@@ -266,6 +289,51 @@ function videolist_icon_url_override($hook, $type, $returnvalue, $params) {
}
/**
+ * @param ElggObject $videolist_item
+ * @return array
+ */
+function videolist_get_video_dimensions(ElggObject $videolist_item) {
+ $dimensions = array(
+ 'width' => 600,
+ 'height' => 400,
+ );
+ $params['entity'] = $videolist_item;
+ $params['videotype'] = $videolist_item->videotype;
+ $dimensions = elgg_trigger_plugin_hook(
+ 'videolist:setdimensions',
+ $params['videotype'],
+ $params,
+ $dimensions);
+ if (! is_array($dimensions)) {
+ $dimensions = array();
+ }
+ if (empty($dimensions['width']) || ! is_numeric($dimensions['width'])) {
+ $dimensions['width'] = 600;
+ }
+ if (empty($dimensions['height']) || ! is_numeric($dimensions['height'])) {
+ $dimensions['height'] = 400;
+ }
+ return $dimensions;
+}
+
+/**
+ * Prepend HTTP scheme if missing
+ * @param string $hook
+ * @param string $type
+ * @param string $returnvalue
+ * @param array $params
+ * @return string
+ */
+function videolist_preprocess_url($hook, $type, $returnvalue, $params) {
+ $parsed = parse_url($returnvalue);
+ if (empty($parsed['host']) && ! empty($parsed['path']) && $parsed['path'][0] !== '/') {
+ // user probably forgot scheme
+ $returnvalue = 'http://' . $returnvalue;
+ }
+ return $returnvalue;
+}
+
+/**
* Process upgrades for the videolist plugin
*/
function videolist_run_upgrades() {
diff --git a/upgrades/2012022501.php b/upgrades/2012022501.php
index 815e10b62..50102e875 100644
--- a/upgrades/2012022501.php
+++ b/upgrades/2012022501.php
@@ -29,6 +29,7 @@ foreach ($items as $item) {
* Downloads the thumbnail and saves into data folder
*
* @param ElggObject $item
+ * @return bool
*/
function videolist_2012022501($item) {
diff --git a/views/default/icon/object/videolist_item.php b/views/default/icon/object/videolist_item.php
index 38b805021..24a5b5fe8 100644
--- a/views/default/icon/object/videolist_item.php
+++ b/views/default/icon/object/videolist_item.php
@@ -11,6 +11,7 @@
*/
$entity = $vars['entity'];
+/* @var ElggObject $entity */
$sizes = array('small', 'medium', 'large', 'tiny', 'master', 'topbar');
$img_width = array('tiny' => 25, 'small' => 40, 'medium' => 100, 'large' => 200);
diff --git a/views/default/object/videolist_item.php b/views/default/object/videolist_item.php
index 6ed284a43..5e0db00ce 100644
--- a/views/default/object/videolist_item.php
+++ b/views/default/object/videolist_item.php
@@ -7,6 +7,7 @@
$full = elgg_extract('full_view', $vars, FALSE);
$entity = elgg_extract('entity', $vars, FALSE);
+/* @var ElggObject $entity */
if (!$entity) {
return TRUE;
@@ -59,11 +60,12 @@ if (elgg_in_context('widgets')) {
}
if ($full && !elgg_in_context('gallery')) {
-
+
+ $dimensions = videolist_get_video_dimensions($entity);
$content = elgg_view("videolist/watch/{$entity->videotype}", array(
'entity' => $entity,
- 'width' => 600,
- 'height' => 400,
+ 'width' => $dimensions['width'],
+ 'height' => $dimensions['height'],
));
$content = "<div class=\"videolist-watch\">$content</div>";