aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSem <sembrestels@riseup.net>2011-11-09 20:24:56 +0100
committerSem <sembrestels@riseup.net>2011-11-09 20:24:56 +0100
commitf2280654f8aaa33964e62c27a9cab6c96372ba57 (patch)
treef4a8ee2d358d6f8d55ec9875fcce49550d16ba2f
parentb0f15fbebe3781626ba6b086d63ed364f6822209 (diff)
downloadelgg-f2280654f8aaa33964e62c27a9cab6c96372ba57.tar.gz
elgg-f2280654f8aaa33964e62c27a9cab6c96372ba57.tar.bz2
No regexp when parsing urls. Blip.tv support added. Style added. Fixed edit action.
-rw-r--r--actions/videolist/edit.php3
-rw-r--r--lib/videolist.php104
-rw-r--r--views/default/object/videolist_item.php5
-rw-r--r--views/default/videolist/css.php5
-rw-r--r--views/default/videolist/watch/bliptv.php7
-rw-r--r--views/default/videolist/watch/vimeo.php4
-rw-r--r--views/default/videolist/watch/youtube.php2
7 files changed, 77 insertions, 53 deletions
diff --git a/actions/videolist/edit.php b/actions/videolist/edit.php
index 2ca99c1c4..f9db7b6a2 100644
--- a/actions/videolist/edit.php
+++ b/actions/videolist/edit.php
@@ -32,8 +32,9 @@ if (!$input['video_url']) {
$parsed_url = videolist_parseurl($input['video_url']);
-if(!$parsed) {
+if(!$parsed_url) {
register_error(elgg_echo('videolist:error:invalid_url'));
+ forward(REFERER);
}
if ($video_guid) {
diff --git a/lib/videolist.php b/lib/videolist.php
index 9e29f3061..c62109b77 100644
--- a/lib/videolist.php
+++ b/lib/videolist.php
@@ -1,81 +1,77 @@
<?php
-define('YOUTUBE', 1);
-define('VIMEO', 2);
-define('METACAFE', 3);
-
function videolist_parseurl_youtube($url) {
- if (!preg_match('/(http:\/\/)([a-zA-Z]{2,3}\.)(youtube\.com\/)(.*)/', $url, $matches)) {
- return false;
- }
-
- $domain = $matches[2] . $matches[3];
- $path = $matches[4];
-
- if (!preg_match('/^(watch\?v=)([a-zA-Z0-9_-]*)(&.*)?$/',$path, $matches)) {
- return false;
+ $parsed = parse_url($url);
+ parse_str($parsed['query'], $query);
+
+ if ($parsed['host'] != 'www.youtube.com' || $parsed['path'] != '/watch' || !isset($query['v'])) {
+ return false;
}
-
- $hash = $matches[2];
return array(
- 'domain' => $domain,
- 'video_id' => $hash,
+ 'videotype' => 'youtube',
+ 'video_id' => $query['v'],
);
}
function videolist_parseurl_vimeo($url) {
- if (!preg_match('/(http:\/\/)([a-zA-Z]{2,3}\.)*(vimeo\.com\/)(.*)/', $url, $matches)) {
+ $parsed = parse_url($url);
+ $path = explode('/', $parsed['path']);
+
+ if ($parsed['host'] != 'vimeo.com' || !(int) $path[1]) {
return false;
}
- $domain = $matches[2] . $matches[3];
- $hash = $matches[4];
-
return array(
- 'domain' => $domain,
- 'video_id' => $hash,
+ 'videotype' => 'vimeo',
+ 'video_id' => $path[1],
);
}
function videolist_parseurl_metacafe($url) {
- if (!preg_match('/(http:\/\/)([a-zA-Z]{2,3}\.)(metacafe\.com\/)(.*)/', $url, $matches)) {
+ $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],
+ );
+}
- $domain = $matches[2] . $matches[3];
- $path = $matches[4];
-
- $hash = $matches[2];
+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(
- 'domain' => $domain,
- 'video_id' => $hash,
+ 'videotype' => 'bliptv',
+ 'video_id' => $parsed['path'],
);
}
function videolist_parseurl($url){
- if ($parsed = videolist_parseurl_youtube($url)){
- $parsed['site'] = YOUTUBE;
- return $parsed;
- } elseif ($parsed = videolist_parseurl_vimeo($url)) {
- $parsed['site'] = VIMEO;
- return $parsed;
- } elseif ($parsed = videolist_parseurl_metacafe($url)) {
- $parsed['site'] = METACAFE;
- return $parsed;
- } else {
- return array();
- }
+ if ($parsed = videolist_parseurl_youtube($url)) return $parsed;
+ elseif ($parsed = videolist_parseurl_vimeo($url)) return $parsed;
+ elseif ($parsed = videolist_parseurl_metacafe($url)) return $parsed;
+ elseif ($parsed = videolist_parseurl_bliptv($url)) return $parsed;
+ else return array();
}
function videolist_get_data($video_parsed_url) {
- $site = $video_parsed_url['site'];
+ $videotype = $video_parsed_url['videotype'];
$video_id = $video_parsed_url['video_id'];
- switch($site){
- case YOUTUBE: return videolist_get_data_youtube($video_id);
- case VIMEO: return videolist_get_data_vimeo($video_id);
- case METACAFE: return videolist_get_data_metacafe($video_id);
+ switch($videotype){
+ case 'youtube': return videolist_get_data_youtube($video_id);
+ case 'vimeo': return videolist_get_data_vimeo($video_id);
+ case 'metacafe': return videolist_get_data_metacafe($video_id);
+ case 'bliptv': return videolist_get_data_bliptv($video_id);
default: return array();
}
}
@@ -127,3 +123,17 @@ function videolist_get_data_metacafe($video_id){ //FIXME
'videotype' => 'metacafe',
);
}
+
+function videolist_get_data_bliptv($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' => 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')),
+ 'video_id' => $video_id,
+ 'videotype' => 'bliptv',
+ );
+}
diff --git a/views/default/object/videolist_item.php b/views/default/object/videolist_item.php
index bda333a2d..6ed284a43 100644
--- a/views/default/object/videolist_item.php
+++ b/views/default/object/videolist_item.php
@@ -60,11 +60,12 @@ if (elgg_in_context('widgets')) {
if ($full && !elgg_in_context('gallery')) {
- $content= elgg_view("videolist/watch/{$entity->videotype}", array(
- 'video_id' => $entity->video_id,
+ $content = elgg_view("videolist/watch/{$entity->videotype}", array(
+ 'entity' => $entity,
'width' => 600,
'height' => 400,
));
+ $content = "<div class=\"videolist-watch\">$content</div>";
$params = array(
'entity' => $entity,
diff --git a/views/default/videolist/css.php b/views/default/videolist/css.php
index 93069181a..6f2bf397d 100644
--- a/views/default/videolist/css.php
+++ b/views/default/videolist/css.php
@@ -10,6 +10,11 @@
*/
?>
+.videolist-watch {
+ margin-top: 40px;
+ margin-left: 20px;
+}
+
.videolist_error{
color:red;
font-weight:bold;
diff --git a/views/default/videolist/watch/bliptv.php b/views/default/videolist/watch/bliptv.php
new file mode 100644
index 000000000..b7f72dea6
--- /dev/null
+++ b/views/default/videolist/watch/bliptv.php
@@ -0,0 +1,7 @@
+<?php
+
+$embedurl = $vars['entity']->embedurl;
+$width = $vars['width'];
+$height = $vars['height'];
+
+echo "<iframe src=\"$embedurl\" width=\"$width\" height=\"$height\" frameborder=\"0\" allowfullscreen></iframe>";
diff --git a/views/default/videolist/watch/vimeo.php b/views/default/videolist/watch/vimeo.php
index caf34c1f4..97b5e8d88 100644
--- a/views/default/videolist/watch/vimeo.php
+++ b/views/default/videolist/watch/vimeo.php
@@ -1,7 +1,7 @@
<?php
-$video_id = $vars['video_id'];
+$video_id = $vars['entity']->video_id;
$width = $vars['width'];
$height = $vars['height'];
-echo "<iframe src=\"http://player.vimeo.com/video/$video_id?byline=0&amp;color=e11531&amp;autoplay=1\" width=\"$width\" height=\"$height\" frameborder=\"0\" webkitAllowFullScreen allowFullScreen></iframe>";
+echo "<iframe src=\"http://player.vimeo.com/video/$video_id?byline=0\" width=\"$width\" height=\"$height\" frameborder=\"0\" webkitAllowFullScreen allowFullScreen></iframe>";
diff --git a/views/default/videolist/watch/youtube.php b/views/default/videolist/watch/youtube.php
index 4b62aabbc..e0b2ece06 100644
--- a/views/default/videolist/watch/youtube.php
+++ b/views/default/videolist/watch/youtube.php
@@ -1,6 +1,6 @@
<?php
-$video_id = $vars['video_id'];
+$video_id = $vars['entity']->video_id;
$width = $vars['width'];
$height = $vars['height'];