From 01c44e9002d03f58c9a5271c6256096de3273eb5 Mon Sep 17 00:00:00 2001 From: Steve Clay Date: Mon, 9 Apr 2012 15:06:33 -0400 Subject: More PHPDoc comments and @var declarations to help IDE comprehension --- lib/videolist.php | 8 ++++++++ 1 file changed, 8 insertions(+) (limited to 'lib') diff --git a/lib/videolist.php b/lib/videolist.php index 2dfc7d8fc..96a2c6335 100644 --- a/lib/videolist.php +++ b/lib/videolist.php @@ -6,6 +6,10 @@ foreach(explode(', ', VIDEOLIST_SUPPORTED_PLATFORMS) as $videotype){ include(elgg_get_plugins_path()."videolist/lib/$videotype.php"); } +/** + * @param string $url + * @return array + */ function videolist_parseurl($url){ foreach(explode(', ', VIDEOLIST_SUPPORTED_PLATFORMS) as $videotype){ if (is_callable("videolist_parseurl_$videotype")){ @@ -17,6 +21,10 @@ function videolist_parseurl($url){ return array(); } +/** + * @param array $parsed + * @return array + */ function videolist_get_data($parsed) { $videotype = $parsed['videotype']; $video_id = $parsed['video_id']; -- cgit v1.2.3 From e80bb29671b7887d5749a9eb147be38e6f0401f4 Mon Sep 17 00:00:00 2001 From: Steve Clay Date: Mon, 9 Apr 2012 15:07:15 -0400 Subject: Removed deprecated call, unused variable --- lib/videolist.php | 3 +-- start.php | 2 +- 2 files changed, 2 insertions(+), 3 deletions(-) (limited to 'lib') diff --git a/lib/videolist.php b/lib/videolist.php index 96a2c6335..ae2441847 100644 --- a/lib/videolist.php +++ b/lib/videolist.php @@ -27,8 +27,7 @@ function videolist_parseurl($url){ */ 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 { diff --git a/start.php b/start.php index d764a78c9..bfb1796b9 100644 --- a/start.php +++ b/start.php @@ -238,7 +238,7 @@ function videolist_embed_get_sections($hook, $type, $value, $params) { */ 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 ); -- cgit v1.2.3 From f399afdd2e3cc072efaca069b7a874c7801b31f6 Mon Sep 17 00:00:00 2001 From: Steve Clay Date: Mon, 9 Apr 2012 17:05:57 -0400 Subject: switched to platform classes. see https://github.com/Elgg/videolist/issues/4 --- actions/videolist/edit.php | 11 ++++--- lib/Videolist/Platform/Bliptv.php | 39 ++++++++++++++++++++++++ lib/Videolist/Platform/Gisstv.php | 51 +++++++++++++++++++++++++++++++ lib/Videolist/Platform/Metacafe.php | 39 ++++++++++++++++++++++++ lib/Videolist/Platform/Vimeo.php | 41 +++++++++++++++++++++++++ lib/Videolist/Platform/Youtube.php | 38 +++++++++++++++++++++++ lib/Videolist/PlatformInterface.php | 23 ++++++++++++++ lib/bliptv.php | 29 ------------------ lib/gisstv.php | 41 ------------------------- lib/metacafe.php | 29 ------------------ lib/videolist.php | 61 +++++++++++++++++++++---------------- lib/vimeo.php | 31 ------------------- lib/youtube.php | 28 ----------------- 13 files changed, 273 insertions(+), 188 deletions(-) create mode 100644 lib/Videolist/Platform/Bliptv.php create mode 100644 lib/Videolist/Platform/Gisstv.php create mode 100644 lib/Videolist/Platform/Metacafe.php create mode 100644 lib/Videolist/Platform/Vimeo.php create mode 100644 lib/Videolist/Platform/Youtube.php create mode 100644 lib/Videolist/PlatformInterface.php delete mode 100644 lib/bliptv.php delete mode 100644 lib/gisstv.php delete mode 100644 lib/metacafe.php delete mode 100644 lib/vimeo.php delete mode 100644 lib/youtube.php (limited to 'lib') diff --git a/actions/videolist/edit.php b/actions/videolist/edit.php index be566de7e..1572d88ce 100644 --- a/actions/videolist/edit.php +++ b/actions/videolist/edit.php @@ -32,16 +32,19 @@ if(!$video_guid) { forward(REFERER); } - $parsed_url = videolist_parseurl($input['video_url']); - if(!$parsed_url) { + $parsedPlatform = videolist_parse_url($input['video_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); } else { unset($input['video_url']); diff --git a/lib/Videolist/Platform/Bliptv.php b/lib/Videolist/Platform/Bliptv.php new file mode 100644 index 000000000..6956e060d --- /dev/null +++ b/lib/Videolist/Platform/Bliptv.php @@ -0,0 +1,39 @@ + 'bliptv', + '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..f811619a8 --- /dev/null +++ b/lib/Videolist/Platform/Gisstv.php @@ -0,0 +1,51 @@ + 'gisstv', + '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..3cf2fb8ce --- /dev/null +++ b/lib/Videolist/Platform/Metacafe.php @@ -0,0 +1,39 @@ + 'metacafe', + '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..82bd57309 --- /dev/null +++ b/lib/Videolist/Platform/Vimeo.php @@ -0,0 +1,41 @@ + 'vimeo', + '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..41c7d1252 --- /dev/null +++ b/lib/Videolist/Platform/Youtube.php @@ -0,0 +1,38 @@ + 'youtube', + 'video_id' => $query['v'], + ); + } + + 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 @@ + '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 @@ - '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 @@ - '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 ae2441847..93b27b51c 100644 --- a/lib/videolist.php +++ b/lib/videolist.php @@ -1,36 +1,45 @@ getType()][] = $platform; + } + } + } + } + return $platforms; } /** - * @param array $parsed - * @return array + * @param string $url + * @return array [parsed, platform] */ -function videolist_get_data($parsed) { - $videotype = $parsed['videotype']; - - if(is_callable("videolist_get_data_$videotype")){ - return array_merge($parsed, call_user_func("videolist_get_data_$videotype", $parsed)); - } else { - return $parsed; - } +function videolist_parse_url($url) { + $parsed = parse_url($url); + $params['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 @@ - '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 @@ - '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", - ); -} -- cgit v1.2.3 From cb27322b1421bd4cb2ce1889c38da5c8666d68f2 Mon Sep 17 00:00:00 2001 From: Steve Clay Date: Mon, 9 Apr 2012 17:07:29 -0400 Subject: fix for users who paste from Chrome's address bar (sometimes leaves off URL scheme) --- lib/videolist.php | 4 ++++ 1 file changed, 4 insertions(+) (limited to 'lib') diff --git a/lib/videolist.php b/lib/videolist.php index 93b27b51c..776ce7093 100644 --- a/lib/videolist.php +++ b/lib/videolist.php @@ -29,6 +29,10 @@ function videolist_get_default_platforms() { */ function videolist_parse_url($url) { $parsed = parse_url($url); + if (empty($parsed['host']) && ! empty($parsed['path']) && $parsed['path'][0] !== '/') { + // user probably forgot scheme + $url = 'http://' . $url; + } $params['url'] = $url; $platforms = videolist_get_default_platforms(); $platforms = elgg_trigger_plugin_hook('videolist:prepare', 'platforms', $params, $platforms); -- cgit v1.2.3 From 6d4ac854d8f0a4480ffe16f2bd2a7861707074ee Mon Sep 17 00:00:00 2001 From: Steve Clay Date: Tue, 10 Apr 2012 09:51:20 -0400 Subject: Move URL preprocessing to hook --- actions/videolist/edit.php | 8 ++++---- lib/videolist.php | 9 +++------ start.php | 23 +++++++++++++++++++++++ 3 files changed, 30 insertions(+), 10 deletions(-) (limited to 'lib') diff --git a/actions/videolist/edit.php b/actions/videolist/edit.php index 107cdc917..fe614cd5a 100644 --- a/actions/videolist/edit.php +++ b/actions/videolist/edit.php @@ -27,14 +27,14 @@ 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); } - // get_input (htmlawed) "fixes" URLs by breaking them - $input['video_url'] = str_replace('&', '&', $input['video_url']); - $parsedPlatform = videolist_parse_url($input['video_url']); if (!$parsedPlatform) { diff --git a/lib/videolist.php b/lib/videolist.php index 776ce7093..b86db99cf 100644 --- a/lib/videolist.php +++ b/lib/videolist.php @@ -28,12 +28,9 @@ function videolist_get_default_platforms() { * @return array [parsed, platform] */ function videolist_parse_url($url) { - $parsed = parse_url($url); - if (empty($parsed['host']) && ! empty($parsed['path']) && $parsed['path'][0] !== '/') { - // user probably forgot scheme - $url = 'http://' . $url; - } - $params['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) { diff --git a/start.php b/start.php index bfb1796b9..f423b75ed 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"; @@ -285,6 +288,26 @@ function videolist_icon_url_override($hook, $type, $returnvalue, $params) { } } +/** + * 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) { + // undo get_input (htmlawed's) HTML-encoding + $returnvalue = str_replace('&', '&', $returnvalue); + + $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 */ -- cgit v1.2.3 From 595f87c960f0d0b01ebd386686d522f25fa56b91 Mon Sep 17 00:00:00 2001 From: Steve Clay Date: Tue, 10 Apr 2012 09:51:45 -0400 Subject: Handle shortened Youtube URLs --- lib/Videolist/Platform/Youtube.php | 30 +++++++++++++++++++++--------- 1 file changed, 21 insertions(+), 9 deletions(-) (limited to 'lib') diff --git a/lib/Videolist/Platform/Youtube.php b/lib/Videolist/Platform/Youtube.php index 41c7d1252..648ac282c 100644 --- a/lib/Videolist/Platform/Youtube.php +++ b/lib/Videolist/Platform/Youtube.php @@ -10,16 +10,28 @@ class Videolist_Platform_Youtube implements Videolist_PlatformInterface public function parseUrl($url) { $parsed = parse_url($url); - parse_str($parsed['query'], $query); - - if ($parsed['host'] != 'www.youtube.com' || $parsed['path'] != '/watch' || !isset($query['v'])) { - return false; + $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']; + } + } } - - return array( - 'videotype' => 'youtube', - 'video_id' => $query['v'], - ); + if ($id) { + return array( + 'videotype' => 'youtube', + 'video_id' => $id, + ); + } + return false; } public function getData($parsed) -- cgit v1.2.3 From d2bb8789a80215708517f4ffc88462382ec601a8 Mon Sep 17 00:00:00 2001 From: Steve Clay Date: Tue, 10 Apr 2012 10:44:40 -0400 Subject: Remove redundant videotype from parseUrl return array --- actions/videolist/edit.php | 1 + lib/Videolist/Platform/Bliptv.php | 1 - lib/Videolist/Platform/Gisstv.php | 1 - lib/Videolist/Platform/Metacafe.php | 1 - lib/Videolist/Platform/Vimeo.php | 1 - lib/Videolist/Platform/Youtube.php | 1 - 6 files changed, 1 insertion(+), 5 deletions(-) (limited to 'lib') diff --git a/actions/videolist/edit.php b/actions/videolist/edit.php index 480a3943b..4b96720d8 100644 --- a/actions/videolist/edit.php +++ b/actions/videolist/edit.php @@ -48,6 +48,7 @@ if(!$video_guid) { unset($input['title']); unset($input['description']); $input = array_merge($parsed, $platform->getData($parsed), $input); + $input['videotype'] = $platform->getType(); } else { unset($input['video_url']); diff --git a/lib/Videolist/Platform/Bliptv.php b/lib/Videolist/Platform/Bliptv.php index 6956e060d..aa53032f9 100644 --- a/lib/Videolist/Platform/Bliptv.php +++ b/lib/Videolist/Platform/Bliptv.php @@ -17,7 +17,6 @@ class Videolist_Platform_Bliptv implements Videolist_PlatformInterface } return array( - 'videotype' => 'bliptv', 'video_id' => $parsed['path'], ); } diff --git a/lib/Videolist/Platform/Gisstv.php b/lib/Videolist/Platform/Gisstv.php index f811619a8..b79898449 100644 --- a/lib/Videolist/Platform/Gisstv.php +++ b/lib/Videolist/Platform/Gisstv.php @@ -25,7 +25,6 @@ class Videolist_Platform_Gisstv implements Videolist_PlatformInterface } return array( - 'videotype' => 'gisstv', 'video_id' => $video_id, ); } diff --git a/lib/Videolist/Platform/Metacafe.php b/lib/Videolist/Platform/Metacafe.php index 3cf2fb8ce..7da6d1647 100644 --- a/lib/Videolist/Platform/Metacafe.php +++ b/lib/Videolist/Platform/Metacafe.php @@ -17,7 +17,6 @@ class Videolist_Platform_Metacafe implements Videolist_PlatformInterface } return array( - 'videotype' => 'metacafe', 'video_id' => $path[2], ); } diff --git a/lib/Videolist/Platform/Vimeo.php b/lib/Videolist/Platform/Vimeo.php index 82bd57309..a4a1f275c 100644 --- a/lib/Videolist/Platform/Vimeo.php +++ b/lib/Videolist/Platform/Vimeo.php @@ -17,7 +17,6 @@ class Videolist_Platform_Vimeo implements Videolist_PlatformInterface } return array( - 'videotype' => 'vimeo', 'video_id' => $path[1], ); } diff --git a/lib/Videolist/Platform/Youtube.php b/lib/Videolist/Platform/Youtube.php index 648ac282c..d5a388356 100644 --- a/lib/Videolist/Platform/Youtube.php +++ b/lib/Videolist/Platform/Youtube.php @@ -27,7 +27,6 @@ class Videolist_Platform_Youtube implements Videolist_PlatformInterface } if ($id) { return array( - 'videotype' => 'youtube', 'video_id' => $id, ); } -- cgit v1.2.3