From fbf7d545f74c8f1bf870af567e23949dde6466c7 Mon Sep 17 00:00:00 2001 From: Andrew Dolgov Date: Sat, 24 Jan 2009 09:16:47 +0100 Subject: [PATCH] prefs: some async work (6) --- modules/pref-users.php | 12 +- prefs.js | 457 +++++++++++++++++------------------------ 2 files changed, 198 insertions(+), 271 deletions(-) diff --git a/modules/pref-users.php b/modules/pref-users.php index 79e18788..08bc1082 100644 --- a/modules/pref-users.php +++ b/modules/pref-users.php @@ -8,7 +8,7 @@ return; } - $subop = $_GET["subop"]; + $subop = $_REQUEST["subop"]; if ($subop == "user-details") { @@ -205,11 +205,11 @@ if (!WEB_DEMO_MODE && $_SESSION["access_level"] >= 10) { - $login = db_escape_string(trim($_GET["login"])); - $uid = db_escape_string($_GET["id"]); - $access_level = (int) $_GET["access_level"]; - $email = db_escape_string(trim($_GET["email"])); - $password = db_escape_string(trim($_GET["password"])); + $login = db_escape_string(trim($_REQUEST["login"])); + $uid = db_escape_string($_REQUEST["id"]); + $access_level = (int) $_REQUEST["access_level"]; + $email = db_escape_string(trim($_REQUEST["email"])); + $password = db_escape_string(trim($_REQUEST["password"])); if ($password) { $pwd_hash = encrypt_password($password, $login); diff --git a/prefs.js b/prefs.js index 122bb83b..813d8df6 100644 --- a/prefs.js +++ b/prefs.js @@ -1,29 +1,12 @@ -var xmlhttp = false; - var active_feed_cat = false; var active_tab = false; -var xmlhttp = Ajax.getTransport(); - var init_params = new Array(); var caller_subop = false; var sanity_check_done = false; var hotkey_prefix = false; -function infobox_callback() { - if (xmlhttp.readyState == 4) { - infobox_callback2(xmlhttp); - } -} - -function infobox_submit_callback() { - if (xmlhttp.readyState == 4) { - infobox_submit_callback2(xmlhttp); - } -} - - function replace_pubkey_callback(transport) { try { var link = document.getElementById("pubGenAddress"); @@ -127,12 +110,16 @@ function labellist_callback2(transport) { } } -function userlist_callback() { - var container = document.getElementById('prefContent'); - if (xmlhttp.readyState == 4) { - container.innerHTML=xmlhttp.responseText; - notify(""); - remove_splash(); +function userlist_callback2(transport) { + try { + var container = document.getElementById('prefContent'); + if (transport.readyState == 4) { + container.innerHTML=transport.responseText; + notify(""); + remove_splash(); + } + } catch (e) { + exception_error("userlist_callback2", e); } } @@ -147,12 +134,6 @@ function prefslist_callback2(transport) { } } -function notify_callback() { - if (xmlhttp.readyState == 4) { - notify_callback2(xmlhttp); - } -} - function notify_callback2(transport) { notify_info(transport.responseText); } @@ -167,23 +148,21 @@ function prefs_reset_callback2(transport) { } -function changepass_callback() { +function changepass_callback2(transport) { try { - if (xmlhttp.readyState == 4) { - if (xmlhttp.responseText.indexOf("ERROR: ") == 0) { - notify_error(xmlhttp.responseText.replace("ERROR: ", "")); + if (transport.responseText.indexOf("ERROR: ") == 0) { + notify_error(transport.responseText.replace("ERROR: ", "")); } else { - notify_info(xmlhttp.responseText); + notify_info(transport.responseText); var warn = document.getElementById("default_pass_warning"); if (warn) warn.style.display = "none"; } document.forms['change_pass_form'].reset(); - } } catch (e) { - exception_error("changepass_callback", e); + exception_error("changepass_callback2", e); } } @@ -247,21 +226,24 @@ function updateFeedList(sort_key) { function updateUsersList(sort_key) { - if (!xmlhttp_ready(xmlhttp)) { - printLockingError(); - return - } - - var user_search = document.getElementById("user_search"); - var search = ""; - if (user_search) { search = user_search.value; } + try { - xmlhttp.open("GET", "backend.php?op=pref-users&sort=" - + param_escape(sort_key) + - "&search=" + param_escape(search), true); - xmlhttp.onreadystatechange=userlist_callback; - xmlhttp.send(null); + var user_search = document.getElementById("user_search"); + var search = ""; + if (user_search) { search = user_search.value; } + + var query = "backend.php?op=pref-users&sort=" + + param_escape(sort_key) + + "&search=" + param_escape(search); + + new Ajax.Request(query, { + onComplete: function(transport) { + userlist_callback2(transport); + } }); + } catch (e) { + exception_error("updateUsersList", e); + } } function addLabel() { @@ -328,11 +310,6 @@ function addFeed() { function addFeedCat() { - if (!xmlhttp_ready(xmlhttp)) { - printLockingError(); - return - } - var cat = document.getElementById("fadd_cat"); if (cat.value.length == 0) { @@ -355,27 +332,29 @@ function addFeedCat() { } function addUser() { - if (!xmlhttp_ready(xmlhttp)) { - printLockingError(); - return - } - - var sqlexp = document.getElementById("uadd_box"); - - if (sqlexp.value.length == 0) { - alert(__("Can't add user: no login specified.")); - } else { - notify_progress("Adding user..."); + try { - xmlhttp.open("GET", "backend.php?op=pref-users&subop=add&login=" + - param_escape(sqlexp.value), true); - - xmlhttp.onreadystatechange=userlist_callback; - xmlhttp.send(null); + var sqlexp = document.getElementById("uadd_box"); + + if (sqlexp.value.length == 0) { + alert(__("Can't add user: no login specified.")); + } else { + notify_progress("Adding user..."); + + var query = "backend.php?op=pref-users&subop=add&login=" + + param_escape(sqlexp.value); + + new Ajax.Request(query, { + onComplete: function(transport) { + userlist_callback2(transport); + } }); + + sqlexp.value = ""; + } - sqlexp.value = ""; + } catch (e) { + exception_error("addUser", e); } - } function editUser(id) { @@ -507,28 +486,33 @@ function removeSelectedLabels() { function removeSelectedUsers() { - if (!xmlhttp_ready(xmlhttp)) { - printLockingError(); - return - } - - var sel_rows = getSelectedUsers(); - - if (sel_rows.length > 0) { - - var ok = confirm(__("Remove selected users?")); + try { - if (ok) { - notify_progress("Removing selected users..."); + var sel_rows = getSelectedUsers(); + + if (sel_rows.length > 0) { + + var ok = confirm(__("Remove selected users?")); + + if (ok) { + notify_progress("Removing selected users..."); + + var query = "backend.php?op=pref-users&subop=remove&ids="+ + param_escape(sel_rows.toString()); + + new Ajax.Request(query, { + onComplete: function(transport) { + userlist_callback2(transport); + } }); + + } - xmlhttp.open("GET", "backend.php?op=pref-users&subop=remove&ids="+ - param_escape(sel_rows.toString()), true); - xmlhttp.onreadystatechange=userlist_callback; - xmlhttp.send(null); + } else { + alert(__("No users are selected.")); } - } else { - alert(__("No users are selected.")); + } catch (e) { + exception_error("removeSelectedUsers", e); } return false; @@ -631,11 +615,6 @@ function clearSelectedFeeds() { function purgeSelectedFeeds() { - if (!xmlhttp_ready(xmlhttp)) { - printLockingError(); - return - } - var sel_rows = getSelectedFeeds(); if (sel_rows.length > 0) { @@ -667,11 +646,6 @@ function purgeSelectedFeeds() { function removeSelectedFeedCats() { - if (!xmlhttp_ready(xmlhttp)) { - printLockingError(); - return - } - var sel_rows = getSelectedFeedCats(); if (sel_rows.length > 0) { @@ -702,11 +676,6 @@ function removeSelectedFeedCats() { function feedEditCancel() { - if (!xmlhttp_ready(xmlhttp)) { - printLockingError(); - return - } - try { document.getElementById("subscribe_to_feed_btn").disabled = false; document.getElementById("top25_feeds_btn").disabled = false; @@ -748,11 +717,6 @@ function feedEditSave() { function userEditCancel() { - if (!xmlhttp_ready(xmlhttp)) { - printLockingError(); - return - } - selectPrefRows('user', false); // cleanup feed selection closeInfoBox(); @@ -761,11 +725,6 @@ function userEditCancel() { function filterEditCancel() { - if (!xmlhttp_ready(xmlhttp)) { - printLockingError(); - return - } - try { document.getElementById("create_filter_btn").disabled = false; selectPrefRows('filter', false); // cleanup feed selection @@ -778,29 +737,33 @@ function filterEditCancel() { function userEditSave() { - if (!xmlhttp_ready(xmlhttp)) { - printLockingError(); - return - } - - var login = document.forms["user_edit_form"].login.value; + try { - if (login.length == 0) { - alert(__("Login field cannot be blank.")); - return; - } + var login = document.forms["user_edit_form"].login.value; - notify_progress("Saving user..."); - - closeInfoBox(); - - var query = Form.serialize("user_edit_form"); + if (login.length == 0) { + alert(__("Login field cannot be blank.")); + return; + } + + notify_progress("Saving user..."); + + closeInfoBox(); + + var query = Form.serialize("user_edit_form"); + + new Ajax.Request("backend.php", { + parameters: query, + onComplete: function(transport) { + userlist_callback2(transport); + } }); - xmlhttp.open("GET", "backend.php?" + query, true); - xmlhttp.onreadystatechange=userlist_callback; - xmlhttp.send(null); + } catch (e) { + exception_error("userEditSave", e); + } return false; + } @@ -848,29 +811,40 @@ function editSelectedUser() { } function resetSelectedUserPass() { - var rows = getSelectedUsers(); - - if (rows.length == 0) { - alert(__("No users are selected.")); - return; - } - - if (rows.length > 1) { - alert(__("Please select only one user.")); - return; - } - var ok = confirm(__("Reset password of selected user?")); + try { - if (ok) { - notify_progress("Resetting password for selected user..."); + var rows = getSelectedUsers(); - var id = rows[0]; + if (rows.length == 0) { + alert(__("No users are selected.")); + return; + } + + if (rows.length > 1) { + alert(__("Please select only one user.")); + return; + } + + var ok = confirm(__("Reset password of selected user?")); + + if (ok) { + notify_progress("Resetting password for selected user..."); + + var id = rows[0]; + + var query = "backend.php?op=pref-users&subop=resetPass&id=" + + param_escape(id); + + new Ajax.Request(query, { + onComplete: function(transport) { + userlist_callback2(transport); + } }); - xmlhttp.open("GET", "backend.php?op=pref-users&subop=resetPass&id=" + - param_escape(id), true); - xmlhttp.onreadystatechange=userlist_callback; - xmlhttp.send(null); + } + + } catch (e) { + exception_error("resetSelectedUserPass", e); } } @@ -1061,11 +1035,6 @@ function selectTab(id, noupdate, subop) { try { - if (!xmlhttp_ready(xmlhttp)) { - printLockingError(); - return - } - try { var c = document.getElementById('prefContent'); c.scrollTop = 0; @@ -1128,63 +1097,60 @@ function selectTab(id, noupdate, subop) { } } -function backend_sanity_check_callback() { +function backend_sanity_check_callback2(transport) { - if (xmlhttp.readyState == 4) { + try { - try { + if (sanity_check_done) { + fatalError(11, "Sanity check request received twice. This can indicate "+ + "presence of Firebug or some other disrupting extension. "+ + "Please disable it and try again."); + return; + } - if (sanity_check_done) { - fatalError(11, "Sanity check request received twice. This can indicate "+ - "presence of Firebug or some other disrupting extension. "+ - "Please disable it and try again."); - return; - } + if (!transport.responseXML) { + fatalError(3, "Sanity Check: Received reply is not XML", + transport.responseText); + return; + } - if (!xmlhttp.responseXML) { - fatalError(3, "Sanity Check: Received reply is not XML", - xmlhttp.responseText); - return; - } - - var reply = xmlhttp.responseXML.firstChild.firstChild; - - if (!reply) { - fatalError(3, "Sanity Check: Invalid RPC reply", xmlhttp.responseText); - return; - } - - var error_code = reply.getAttribute("error-code"); - - if (error_code && error_code != 0) { - return fatalError(error_code, reply.getAttribute("error-msg")); - } + var reply = transport.responseXML.firstChild.firstChild; + + if (!reply) { + fatalError(3, "Sanity Check: Invalid RPC reply", transport.responseText); + return; + } + + var error_code = reply.getAttribute("error-code"); - debug("sanity check ok"); + if (error_code && error_code != 0) { + return fatalError(error_code, reply.getAttribute("error-msg")); + } - var params = reply.nextSibling; + debug("sanity check ok"); - if (params) { - debug('reading init-params...'); - var param = params.firstChild; + var params = reply.nextSibling; - while (param) { - var k = param.getAttribute("key"); - var v = param.getAttribute("value"); - debug(k + " => " + v); - init_params[k] = v; - param = param.nextSibling; - } + if (params) { + debug('reading init-params...'); + var param = params.firstChild; + + while (param) { + var k = param.getAttribute("key"); + var v = param.getAttribute("value"); + debug(k + " => " + v); + init_params[k] = v; + param = param.nextSibling; } + } - sanity_check_done = true; + sanity_check_done = true; - init_second_stage(); + init_second_stage(); - } catch (e) { - exception_error("backend_sanity_check_callback", e); - } - } + } catch (e) { + exception_error("backend_sanity_check_callback", e); + } } function init_second_stage() { @@ -1234,19 +1200,14 @@ function init() { debug('debug mode activated'); } - // IE kludge - if (!xmlhttp) { - document.getElementById("prefContent").innerHTML = - "Fatal error: This program needs XmlHttpRequest " + - "to function properly. Your browser doesn't seem to support it."; - return; - } - loading_set_progress(30); - xmlhttp.open("GET", "backend.php?op=rpc&subop=sanityCheck", true); - xmlhttp.onreadystatechange=backend_sanity_check_callback; - xmlhttp.send(null); + var query = "backend.php?op=rpc&subop=sanityCheck"; + + new Ajax.Request(query, { + onComplete: function(transport) { + backend_sanity_check_callback2(transport); + } }); } catch (e) { exception_error("init", e); @@ -1631,11 +1592,6 @@ function changeUserPassword() { try { - if (!xmlhttp_ready(xmlhttp)) { - printLockingError(); - return false; - } - var f = document.forms["change_pass_form"]; if (f) { @@ -1669,11 +1625,13 @@ function changeUserPassword() { var query = Form.serialize("change_pass_form"); notify_progress("Trying to change password..."); - - xmlhttp.open("POST", "backend.php", true); - xmlhttp.onreadystatechange=changepass_callback; - xmlhttp.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded'); - xmlhttp.send(query); + + new Ajax.Request("backend.php", { + parameters: query, + onComplete: function(transport) { + changepass_callback2(transport); + } }); + } catch (e) { exception_error("changeUserPassword", e); @@ -1686,19 +1644,15 @@ function changeUserEmail() { try { - if (!xmlhttp_ready(xmlhttp)) { - printLockingError(); - return false; - } - var query = Form.serialize("change_email_form"); notify_progress("Trying to change e-mail..."); - xmlhttp.open("POST", "backend.php", true); - xmlhttp.onreadystatechange=notify_callback; - xmlhttp.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded'); - xmlhttp.send(query); + new Ajax.Request("backend.php", { + parameters: query, + onComplete: function(transport) { + notify_callback2(transport); + } }); } catch (e) { exception_error("changeUserPassword", e); @@ -1715,11 +1669,6 @@ function feedlistToggleSLAT() { function pubRegenKey() { - if (!xmlhttp_ready(xmlhttp)) { - printLockingError(); - return false; - } - var ok = confirm(__("Replace current publishing address with a new one?")); if (ok) { @@ -1738,25 +1687,6 @@ function pubRegenKey() { return false; } -function pubToClipboard() { - - try { - - if (!xmlhttp_ready(xmlhttp)) { - printLockingError(); - return false; - } - - var link = document.getElementById("pubGenAddress"); - alert(link.href); - - } catch (e) { - exception_error("pubToClipboard", e); - } - - return false; -} - function validatePrefsSave() { try { @@ -1768,10 +1698,12 @@ function validatePrefsSave() { query = query + "&subop=save-config"; debug(query); - xmlhttp.open("POST", "backend.php", true); - xmlhttp.onreadystatechange=notify_callback; - xmlhttp.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded'); - xmlhttp.send(query); + new Ajax.Request("backend.php", { + parameters: query, + onComplete: function(transport) { + notify_callback2(transport); + } }); + } } catch (e) { @@ -1952,11 +1884,6 @@ function unsubscribeFeed(id, title) { function feedsEditSave() { try { - if (!xmlhttp_ready(xmlhttp)) { - printLockingError(); - return - } - var ok = confirm(__("Save changes to selected feeds?")); if (ok) { -- 2.39.5