From: Andrew Dolgov <fox@fakecake.org> Date: Thu, 23 Aug 2012 16:23:19 +0000 (+0400) Subject: implement experimental web-based updater X-Git-Tag: 1.6.0~118 X-Git-Url: https://git.wh0rd.org/?a=commitdiff_plain;h=27211afe92ab90a89d1879a31a8543cdf2b6aab6;p=tt-rss.git implement experimental web-based updater --- diff --git a/classes/pref/prefs.php b/classes/pref/prefs.php index ff8a17cd..e30a8257 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 '</div>'; # inner pane print '</div>'; # border container - print "</form>"; print "</div>"; #pane + + + if (($_SESSION["access_level"] >= 10 || SINGLE_USER_MODE) && CHECK_FOR_NEW_VERSION) { + print "<div dojoType=\"dijit.layout.AccordionPane\" title=\"".__('Update Tiny Tiny RSS')."\">"; + + 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).", "<b>$version</b>")); + + print "<p><button dojoType=\"dijit.form.Button\" onclick=\"return updateSelf()\">". + __('Update Tiny Tiny RSS')."</button></p>"; + + } else { + print_notice(__("You are currently using latest version of Tiny Tiny RSS. Update not required.")); + } + + print "</div>"; #pane + } + print "</div>"; #container } + + function updateSelf() { + print "<form style='display : block' name='self_update_form' id='self_update_form'>"; + + print "<div class='error'>".__("Do not close this dialog until updating is finished. Backup your tt-rss directory before continuing.")."</div>"; + + print "<pre class='selfUpdateList' id='self_update_log'>"; + print __("Ready to update.")."\n"; + print "</pre>"; + + print "<div class='dlgButtons'>"; + print "<button id=\"self_update_start_btn\" dojoType=\"dijit.form.Button\" onclick=\"return dijit.byId('updateSelfDlg').start()\" >". + __("Start update")."</button>"; + print "<button onclick=\"return dijit.byId('updateSelfDlg').close()\" dojoType=\"dijit.form.Button\">". + __("Close this window")."</button>"; + print "</div>"; + print "</form>"; + } + + 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 69b481ac..b2e9e899 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 f7a68bf6..10e33f70 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 b3ba4315..abc6050b 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; }