diff options
author | Sem <sembrestels@riseup.net> | 2011-11-09 20:24:56 +0100 |
---|---|---|
committer | Sem <sembrestels@riseup.net> | 2011-11-09 20:24:56 +0100 |
commit | f2280654f8aaa33964e62c27a9cab6c96372ba57 (patch) | |
tree | f4a8ee2d358d6f8d55ec9875fcce49550d16ba2f | |
parent | b0f15fbebe3781626ba6b086d63ed364f6822209 (diff) | |
download | elgg-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.php | 3 | ||||
-rw-r--r-- | lib/videolist.php | 104 | ||||
-rw-r--r-- | views/default/object/videolist_item.php | 5 | ||||
-rw-r--r-- | views/default/videolist/css.php | 5 | ||||
-rw-r--r-- | views/default/videolist/watch/bliptv.php | 7 | ||||
-rw-r--r-- | views/default/videolist/watch/vimeo.php | 4 | ||||
-rw-r--r-- | views/default/videolist/watch/youtube.php | 2 |
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&color=e11531&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']; |