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(-) 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