From 99f1a3ed0805ec3a3a05dade9a067aaee0853c9c Mon Sep 17 00:00:00 2001 From: Montek Date: Thu, 5 Feb 2026 13:03:56 -0500 Subject: [PATCH 1/3] feat(user_accounts): replace $.ajax with lorisFetch --- modules/user_accounts/js/rejectUser.js | 30 ++++++++++++++++++-------- 1 file changed, 21 insertions(+), 9 deletions(-) diff --git a/modules/user_accounts/js/rejectUser.js b/modules/user_accounts/js/rejectUser.js index fdc3eeff68..1c0d63b633 100644 --- a/modules/user_accounts/js/rejectUser.js +++ b/modules/user_accounts/js/rejectUser.js @@ -2,16 +2,28 @@ $(document).ready(function() { $("#btn_reject").click(function() { const userID = document.getElementById("UserID").value; const baseurl = loris.BaseURL; + const lorisFetch = window.lorisFetch || fetch; - $.ajax(baseurl + '/user_accounts/ajax/rejectUser.php', { - type:'POST', - data: {identifier: userID}, - success: function(data, textStatus){ - location.href = baseurl+'/user_accounts/'; + lorisFetch(baseurl + '/user_accounts/ajax/rejectUser.php', { + method: 'POST', + headers: { + 'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8', }, - error: function(jqXHR, textStatus, errorThrown){ - alert(jqXHR.responseText); - } - }); + body: new URLSearchParams({identifier: userID}), + credentials: 'same-origin', + }) + .then((response) => { + if (!response.ok) { + return response.text().then((text) => { + let error = new Error('request_failed'); + error.lorisMessage = text; + throw error; + }); + } + location.href = baseurl + '/user_accounts/'; + }) + .catch((error) => { + alert(error.lorisMessage || ''); + }); }); }); From 98114a630cdab24ac7b05498bea9ab50395a8bc3 Mon Sep 17 00:00:00 2001 From: Montek Date: Tue, 10 Feb 2026 11:41:59 -0500 Subject: [PATCH 2/3] refactor(user_accounts): use module Client for reject user request --- modules/user_accounts/js/rejectUser.js | 34 +++++++-------- .../user_accounts/jsx/UserAccountsClient.js | 43 +++++++++++++++++++ 2 files changed, 58 insertions(+), 19 deletions(-) create mode 100644 modules/user_accounts/jsx/UserAccountsClient.js diff --git a/modules/user_accounts/js/rejectUser.js b/modules/user_accounts/js/rejectUser.js index 1c0d63b633..02bd8e3803 100644 --- a/modules/user_accounts/js/rejectUser.js +++ b/modules/user_accounts/js/rejectUser.js @@ -1,29 +1,25 @@ +import UserAccountsClient from '../jsx/UserAccountsClient'; + $(document).ready(function() { $("#btn_reject").click(function() { const userID = document.getElementById("UserID").value; const baseurl = loris.BaseURL; - const lorisFetch = window.lorisFetch || fetch; + const client = new UserAccountsClient(); - lorisFetch(baseurl + '/user_accounts/ajax/rejectUser.php', { - method: 'POST', - headers: { - 'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8', - }, - body: new URLSearchParams({identifier: userID}), - credentials: 'same-origin', - }) - .then((response) => { - if (!response.ok) { - return response.text().then((text) => { - let error = new Error('request_failed'); - error.lorisMessage = text; - throw error; - }); - } + client.rejectUser(userID) + .then(() => { location.href = baseurl + '/user_accounts/'; }) - .catch((error) => { - alert(error.lorisMessage || ''); + .catch(async (error) => { + let errorMessage = ''; + if (error && error.response) { + try { + errorMessage = await error.response.text(); + } catch (responseError) { + errorMessage = ''; + } + } + alert(errorMessage); }); }); }); diff --git a/modules/user_accounts/jsx/UserAccountsClient.js b/modules/user_accounts/jsx/UserAccountsClient.js new file mode 100644 index 0000000000..2ab4852c2a --- /dev/null +++ b/modules/user_accounts/jsx/UserAccountsClient.js @@ -0,0 +1,43 @@ +import {Client, Errors} from 'jslib'; + +/** + * User accounts HTTP client. + */ +class UserAccountsClient extends Client { + /** + * @constructor + */ + constructor() { + super('/user_accounts/ajax'); + } + + /** + * Reject a user account request by identifier. + * + * @param {string} userID + * @return {Promise} + */ + async rejectUser(userID) { + const request = new Request(new URL('rejectUser.php', this.baseURL), { + method: 'POST', + headers: { + 'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8', + }, + body: new URLSearchParams({identifier: userID}), + }); + + try { + const response = await fetch(request); + if (!response.ok) { + throw new Errors.ApiResponse(request, response); + } + } catch (error) { + if (error instanceof Errors.Http) { + throw error; + } + throw new Errors.ApiNetwork(request); + } + } +} + +export default UserAccountsClient; From cbccadb6eaae263b15096ba9d7ad4ab3c0f14703 Mon Sep 17 00:00:00 2001 From: Montek Date: Thu, 12 Feb 2026 09:51:04 -0500 Subject: [PATCH 3/3] refactor(user_accounts): align Client usage with #9999 architecture --- modules/user_accounts/js/rejectUser.js | 34 ++++++++------- .../user_accounts/jsx/UserAccountsClient.js | 43 ------------------- 2 files changed, 19 insertions(+), 58 deletions(-) delete mode 100644 modules/user_accounts/jsx/UserAccountsClient.js diff --git a/modules/user_accounts/js/rejectUser.js b/modules/user_accounts/js/rejectUser.js index 02bd8e3803..1c0d63b633 100644 --- a/modules/user_accounts/js/rejectUser.js +++ b/modules/user_accounts/js/rejectUser.js @@ -1,25 +1,29 @@ -import UserAccountsClient from '../jsx/UserAccountsClient'; - $(document).ready(function() { $("#btn_reject").click(function() { const userID = document.getElementById("UserID").value; const baseurl = loris.BaseURL; - const client = new UserAccountsClient(); + const lorisFetch = window.lorisFetch || fetch; - client.rejectUser(userID) - .then(() => { + lorisFetch(baseurl + '/user_accounts/ajax/rejectUser.php', { + method: 'POST', + headers: { + 'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8', + }, + body: new URLSearchParams({identifier: userID}), + credentials: 'same-origin', + }) + .then((response) => { + if (!response.ok) { + return response.text().then((text) => { + let error = new Error('request_failed'); + error.lorisMessage = text; + throw error; + }); + } location.href = baseurl + '/user_accounts/'; }) - .catch(async (error) => { - let errorMessage = ''; - if (error && error.response) { - try { - errorMessage = await error.response.text(); - } catch (responseError) { - errorMessage = ''; - } - } - alert(errorMessage); + .catch((error) => { + alert(error.lorisMessage || ''); }); }); }); diff --git a/modules/user_accounts/jsx/UserAccountsClient.js b/modules/user_accounts/jsx/UserAccountsClient.js deleted file mode 100644 index 2ab4852c2a..0000000000 --- a/modules/user_accounts/jsx/UserAccountsClient.js +++ /dev/null @@ -1,43 +0,0 @@ -import {Client, Errors} from 'jslib'; - -/** - * User accounts HTTP client. - */ -class UserAccountsClient extends Client { - /** - * @constructor - */ - constructor() { - super('/user_accounts/ajax'); - } - - /** - * Reject a user account request by identifier. - * - * @param {string} userID - * @return {Promise} - */ - async rejectUser(userID) { - const request = new Request(new URL('rejectUser.php', this.baseURL), { - method: 'POST', - headers: { - 'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8', - }, - body: new URLSearchParams({identifier: userID}), - }); - - try { - const response = await fetch(request); - if (!response.ok) { - throw new Errors.ApiResponse(request, response); - } - } catch (error) { - if (error instanceof Errors.Http) { - throw error; - } - throw new Errors.ApiNetwork(request); - } - } -} - -export default UserAccountsClient;