From 23d2471c925ed31228e68210e7a55c836234645e Mon Sep 17 00:00:00 2001 From: Andrew Dolgov Date: Tue, 21 Aug 2012 14:09:51 +0400 Subject: [PATCH] expand error messages in subscribeToFeed(), provide proper error message when URL download failed (refs #489) --- classes/dlg.php | 5 +++++ include/functions.php | 33 ++++++++++++++++++++++++--------- js/functions.js | 10 ++++++---- 3 files changed, 35 insertions(+), 13 deletions(-) diff --git a/classes/dlg.php b/classes/dlg.php index 7e68c9e6..008518a8 100644 --- a/classes/dlg.php +++ b/classes/dlg.php @@ -250,6 +250,11 @@ class Dlg extends Handler_Protected { print "
".__("Feed")."
"; print "
"; + print "
+
"; + print ""; diff --git a/include/functions.php b/include/functions.php index ac07974e..632c1e62 100644 --- a/include/functions.php +++ b/include/functions.php @@ -2,6 +2,8 @@ define('EXPECTED_CONFIG_VERSION', 25); define('SCHEMA_VERSION', 94); + $fetch_last_error = false; + function __autoload($class) { $class_file = str_replace("_", "/", strtolower(basename($class))); @@ -281,6 +283,8 @@ $login = urlencode($login); $pass = urlencode($pass); + global $fetch_last_error; + if (function_exists('curl_init') && !ini_get("open_basedir")) { $ch = curl_init($url); @@ -306,6 +310,7 @@ $contents = @curl_exec($ch); if ($contents === false) { + $fetch_last_error = curl_error($ch); curl_close($ch); return false; } @@ -330,7 +335,13 @@ } } - return @file_get_contents($url); + $data = @file_get_contents($url); + + if (!$data && function_exists('error_get_last')) { + $error = error_get_last(); + $fetch_last_error = $error["message"]; + } + return $data; } } @@ -1792,7 +1803,8 @@ } /** - * @return integer Status code: + * @return array (code => Status code, message => error message if available) + * * 0 - OK, Feed already exists * 1 - OK, Feed added * 2 - Invalid URL @@ -1805,11 +1817,13 @@ function subscribe_to_feed($link, $url, $cat_id = 0, $auth_login = '', $auth_pass = '', $need_auth = false) { + global $fetch_last_error; + require_once "include/rssfuncs.php"; $url = fix_url($url); - if (!$url || !validate_feed_url($url)) return 2; + if (!$url || !validate_feed_url($url)) return array("code" => 2); $update_method = 0; @@ -1819,14 +1833,15 @@ $has_oauth = db_fetch_result($result, 0, 'twitter_oauth'); if (!$need_auth || !$has_oauth || strpos($url, '://api.twitter.com') === false) { - if (!fetch_file_contents($url, false, $auth_login, $auth_pass)) return 5; + if (!fetch_file_contents($url, false, $auth_login, $auth_pass)) + return array("code" => 5, "message" => $fetch_last_error); if (url_is_html($url, $auth_login, $auth_pass)) { $feedUrls = get_feeds_from_html($url, $auth_login, $auth_pass); if (count($feedUrls) == 0) { - return 3; + return array("code" => 3); } else if (count($feedUrls) > 1) { - return 4; + return array("code" => 4); } //use feed url as new URL $url = key($feedUrls); @@ -1834,7 +1849,7 @@ } else { if (!fetch_twitter_rss($link, $url, $_SESSION['uid'])) - return 5; + return array("code" => 5); $update_method = 3; } @@ -1865,9 +1880,9 @@ update_rss_feed($link, $feed_id, true); } - return 1; + return array("code" => 1); } else { - return 0; + return array("code" => 0); } } diff --git a/js/functions.js b/js/functions.js index 578172c7..da0f2ba2 100644 --- a/js/functions.js +++ b/js/functions.js @@ -866,7 +866,7 @@ function quickAddFeed() { var feed_url = this.attr('value').feed; - notify_progress(__("Subscribing to feed..."), true); + Element.show("feed_add_spinner"); new Ajax.Request("backend.php", { parameters: dojo.objectToQuery(this.attr('value')), @@ -875,13 +875,14 @@ function quickAddFeed() { var reply = JSON.parse(transport.responseText); - var rc = parseInt(reply['result']); + var rc = reply['result']; notify(''); + Element.hide("feed_add_spinner"); console.log("GOT RC: " + rc); - switch (rc) { + switch (parseInt(rc['code'])) { case 1: dialog.hide(); notify_info(__("Subscribed to %s").replace("%s", feed_url)); @@ -928,7 +929,8 @@ function quickAddFeed() { }); break; case 5: - alert(__("Couldn't download the specified URL.")); + alert(__("Couldn't download the specified URL: %s"). + replace("%s", rc['message'])); break; case 0: alert(__("You are already subscribed to this feed."));