From 24c7e4132d4212e996de251c6e0fb313ea34b4c3 Mon Sep 17 00:00:00 2001 From: Andrew Dolgov Date: Sat, 28 Jan 2017 12:45:49 +0300 Subject: [PATCH] subscribe dialog: do not report errors via alert() fetch_file_contents: reset all globals on start, return error message body when not using curl subscribe_to_feed: report if cloudflare is in the error message --- classes/feeds.php | 2 ++ include/functions.php | 21 +++++++++++++++++++-- js/functions.js | 20 +++++++++++++++----- 3 files changed, 36 insertions(+), 7 deletions(-) diff --git a/classes/feeds.php b/classes/feeds.php index 4a34945cd..1375f0c37 100755 --- a/classes/feeds.php +++ b/classes/feeds.php @@ -1030,6 +1030,8 @@ class Feeds extends Handler_Protected { print ""; print ""; + print ""; + print ""; diff --git a/include/functions.php b/include/functions.php index 46f55d4e2..72cf695f3 100644 --- a/include/functions.php +++ b/include/functions.php @@ -345,6 +345,12 @@ global $fetch_last_content_type; global $fetch_curl_used; + $fetch_last_error = false; + $fetch_last_error_code = -1; + $fetch_last_error_content = ""; + $fetch_last_content_type = ""; + $fetch_curl_used = false; + if (!is_array($options)) { // falling back on compatibility shim @@ -478,6 +484,7 @@ $context = stream_context_create(array( 'http' => array( 'method' => 'GET', + 'ignore_errors' => true, 'timeout' => $timeout ? $timeout : FILE_FETCH_TIMEOUT, 'protocol_version'=> 1.1, 'header' => "If-Modified-Since: ".gmdate("D, d M Y H:i:s \\G\\M\\T\r\n", $timestamp) @@ -486,6 +493,7 @@ $context = stream_context_create(array( 'http' => array( 'method' => 'GET', + 'ignore_errors' => true, 'timeout' => $timeout ? $timeout : FILE_FETCH_TIMEOUT, 'protocol_version'=> 1.1 ))); @@ -495,7 +503,6 @@ $data = @file_get_contents($url, false, $context); - $fetch_last_content_type = false; // reset if no type was sent from server if (isset($http_response_header) && is_array($http_response_header)) { foreach ($http_response_header as $h) { if (substr(strtolower($h), 0, 13) == 'content-type:') { @@ -510,7 +517,7 @@ } } - if (!$data) { + if ($fetch_last_error_code != 200) { $error = error_get_last(); if ($error['message'] != $old_error['message']) { @@ -518,6 +525,10 @@ } else { $fetch_last_error = "HTTP Code: $fetch_last_error_code"; } + + $fetch_last_error_content = $data; + + return false; } return $data; } @@ -1720,6 +1731,8 @@ $auth_login = '', $auth_pass = '') { global $fetch_last_error; + global $fetch_last_error_content; + global $fetch_last_error_code; require_once "include/rssfuncs.php"; @@ -1730,6 +1743,10 @@ $contents = @fetch_file_contents($url, false, $auth_login, $auth_pass); if (!$contents) { + if (preg_match("/cloudflare\.com/", $fetch_last_error_content)) { + $fetch_last_error .= " (feed behind Cloudflare)"; + } + return array("code" => 5, "message" => $fetch_last_error); } diff --git a/js/functions.js b/js/functions.js index 63ff4121b..db18ac6dd 100755 --- a/js/functions.js +++ b/js/functions.js @@ -804,6 +804,15 @@ function quickAddFeed() { id: "feedAddDlg", title: __("Subscribe to Feed"), style: "width: 600px", + show_error: function(msg) { + var elem = $("fadd_error_message"); + + elem.innerHTML = msg; + + if (!Element.visible(elem)) + new Effect.Appear(elem); + + }, execute: function() { if (this.validate()) { console.log(dojo.objectToQuery(this.attr('value'))); @@ -811,6 +820,7 @@ function quickAddFeed() { var feed_url = this.attr('value').feed; Element.show("feed_add_spinner"); + Element.hide("fadd_error_message"); new Ajax.Request("backend.php", { parameters: dojo.objectToQuery(this.attr('value')), @@ -841,10 +851,10 @@ function quickAddFeed() { updateFeedList(); break; case 2: - alert(__("Specified URL seems to be invalid.")); + dialog.show_error(__("Specified URL seems to be invalid.")); break; case 3: - alert(__("Specified URL doesn't seem to contain any feeds.")); + dialog.show_error(__("Specified URL doesn't seem to contain any feeds.")); break; case 4: feeds = rc['feeds']; @@ -868,16 +878,16 @@ function quickAddFeed() { break; case 5: - alert(__("Couldn't download the specified URL: %s"). + dialog.show_error(__("Couldn't download the specified URL: %s"). replace("%s", rc['message'])); break; case 6: - alert(__("XML validation failed: %s"). + dialog.show_error(__("XML validation failed: %s"). replace("%s", rc['message'])); break; break; case 0: - alert(__("You are already subscribed to this feed.")); + dialog.show_error(__("You are already subscribed to this feed.")); break; }