From 27211afe92ab90a89d1879a31a8543cdf2b6aab6 Mon Sep 17 00:00:00 2001 From: Andrew Dolgov Date: Thu, 23 Aug 2012 20:23:19 +0400 Subject: [PATCH] implement experimental web-based updater --- classes/pref/prefs.php | 53 ++++++++++++++++++++++++++++++++++++++++-- include/functions.php | 1 + js/prefs.js | 47 +++++++++++++++++++++++++++++++++++++ tt-rss.css | 11 +++++++++ 4 files changed, 110 insertions(+), 2 deletions(-) diff --git a/classes/pref/prefs.php b/classes/pref/prefs.php index ff8a17cdb..e30a82575 100644 --- a/classes/pref/prefs.php +++ b/classes/pref/prefs.php @@ -2,7 +2,7 @@ class Pref_Prefs extends Handler_Protected { function csrf_ignore($method) { - $csrf_ignored = array("index"); + $csrf_ignored = array("index", "updateself"); return array_search($method, $csrf_ignored) !== false; } @@ -489,11 +489,60 @@ class Pref_Prefs extends Handler_Protected { print ''; # inner pane print ''; # border container - print ""; print ""; #pane + + + if (($_SESSION["access_level"] >= 10 || SINGLE_USER_MODE) && CHECK_FOR_NEW_VERSION) { + print "
"; + + if ($_SESSION["pref_last_version_check"] + 86400 + rand(-1000, 1000) < time()) { + $_SESSION["version_data"] = @check_for_update($this->link); + $_SESSION["pref_last_version_check"] = time(); + } + + if (is_array($_SESSION["version_data"])) { + $version = $_SESSION["version_data"]["version"]; + print_notice(T_sprintf("New version of Tiny Tiny RSS is available (%s).", "$version")); + + print "

"; + + } else { + print_notice(__("You are currently using latest version of Tiny Tiny RSS. Update not required.")); + } + + print "
"; #pane + } + print ""; #container } + + function updateSelf() { + print "
"; + + print "
".__("Do not close this dialog until updating is finished. Backup your tt-rss directory before continuing.")."
"; + + print "
";
+		print __("Ready to update.")."\n";
+		print "
"; + + print "
"; + print ""; + print ""; + print "
"; + print "
"; + } + + function performUpdate() { + if (($_SESSION["access_level"] >= 10 || SINGLE_USER_MODE) && CHECK_FOR_NEW_VERSION) { + include "update_self.php"; + update_self($this->link, true); + } + } + } ?> diff --git a/include/functions.php b/include/functions.php index 69b481ac4..b2e9e8992 100644 --- a/include/functions.php +++ b/include/functions.php @@ -2147,6 +2147,7 @@ $data['new_version_available'] = (int) ($new_version_details != false); $_SESSION["last_version_check"] = time(); + $_SESSION["version_data"] = $new_version_details; } return $data; diff --git a/js/prefs.js b/js/prefs.js index f7a68bf6d..10e33f701 100644 --- a/js/prefs.js +++ b/js/prefs.js @@ -2130,3 +2130,50 @@ function batchSubscribe() { } } +function updateSelf() { + try { + var query = "backend.php?op=pref-prefs&method=updateSelf"; + + if (dijit.byId("updateSelfDlg")) + dijit.byId("updateSelfDlg").destroyRecursive(); + + var dialog = new dijit.Dialog({ + id: "updateSelfDlg", + title: __("Update Tiny Tiny RSS"), + style: "width: 600px", + closable: false, + performUpdate: function() { + dijit.byId("self_update_start_btn").attr("disabled", true); + notify_progress("Loading, please wait...", true); + new Ajax.Request("backend.php", { + parameters: "?op=pref-prefs&method=performUpdate", + onComplete: function(transport) { + try { + notify(''); + $("self_update_log").innerHTML = transport.responseText; + dialog.attr("updated", true); + } catch (e) { + exception_error("updateSelf/inner", e); + } + } }); + }, + close: function() { + if (dialog.attr("updated")) { + window.location.reload(); + } else { + dialog.hide(); + } + }, + start: function() { + if (prompt(__("Live updating is considered experimental. Backup your tt-rss directory before continuing. Please type 'yes' to continue.")) == 'yes') { + dialog.performUpdate(); + } + }, + href: query}); + + dialog.show(); + } catch (e) { + exception_error("batchSubscribe", e); + } +} + diff --git a/tt-rss.css b/tt-rss.css index b3ba4315f..abc6050bf 100644 --- a/tt-rss.css +++ b/tt-rss.css @@ -678,6 +678,17 @@ ul.feedErrorsList { padding : 5px; } +pre.selfUpdateList { + height : 200px; + font-size : 10px; + overflow : auto; + list-style-type : none; + border : 1px solid #c0c0c0; + background-color : #ecf4ff; + margin : 0px 0px 5px 0px; + padding : 5px; +} + ul.feedErrorsList em { color : gray; }