aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--actions/videolist/edit.php8
-rw-r--r--lib/videolist.php9
-rw-r--r--start.php23
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";
@@ -286,6 +289,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
*/
function videolist_run_upgrades() {