From 1e5f5abadf2a79bea05c0e7ffb9a54a0e626dbb7 Mon Sep 17 00:00:00 2001 From: ChrisChrome Date: Mon, 1 Sep 2025 00:36:41 -0600 Subject: [PATCH] Test --- routes/acl.js | 7 +- views/acl-add.ejs | 197 ++++++++++++++++++++++++------------ views/acl-edit.ejs | 243 ++++++++++++++++++++++++--------------------- 3 files changed, 266 insertions(+), 181 deletions(-) diff --git a/routes/acl.js b/routes/acl.js index d4d38a6..4289e0d 100644 --- a/routes/acl.js +++ b/routes/acl.js @@ -18,13 +18,12 @@ router.get('/', async (req, res) => { res.render('acl', { acl, user: req.session.user }); }); -router.put('/:cardNumber', async (req, res) => { // Attempt to create new ACL entry. Fail if cardNumber already exists - const cardNumber = parseInt(req.params.cardNumber); +router.put('/', async (req, res) => { // Attempt to create new ACL entry. Fail if cardNumber already exists + const data = req.body; + const cardNumber = parseInt(data.cardNumber); if (isNaN(cardNumber) || cardNumber <= 0) { return res.status(400).json({ error: 'Invalid card number' }); } - const data = req.body; - data.cardNumber = cardNumber; try { const check = await db.query('SELECT * FROM ACL WHERE CardNumber = ?', [cardNumber]); if (check && check.length > 0) { diff --git a/views/acl-add.ejs b/views/acl-add.ejs index a962989..df52c80 100644 --- a/views/acl-add.ejs +++ b/views/acl-add.ejs @@ -1,68 +1,141 @@ -
-

Add ACL Entry

-
- - -
-
- - -
-
- - -
-
- - -
-
- - -
-
- Doors - <% if (typeof doorsList !== 'undefined') { %> + + + + + + + Edit ACL Entry + + + + + + +
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ Doors <% Object.keys(doorsList).forEach(function(door) { %> -
-
- - - - +
+ + + document.getElementById('acl-edit-form').addEventListener('submit', function (e) { + e.preventDefault(); + const form = e.target; + + diff --git a/views/acl-edit.ejs b/views/acl-edit.ejs index 49b740a..fab7e13 100644 --- a/views/acl-edit.ejs +++ b/views/acl-edit.ejs @@ -1,130 +1,143 @@ + Edit ACL Entry + form#acl-edit-form { + max-width: 500px; + margin: 2em auto; + padding: 2em; + border: 1px solid #ccc; + border-radius: 8px; + background: #fafafa; + box-shadow: 0 2px 8px rgba(0, 0, 0, 0.05); + } + + form#acl-edit-form div { + margin-bottom: 1em; + } + + form#acl-edit-form label { + display: block; + font-weight: 500; + margin-bottom: 0.3em; + } + + form#acl-edit-form input[type="text"], + form#acl-edit-form input[type="date"] { + width: 100%; + padding: 0.5em; + border: 1px solid #bbb; + border-radius: 4px; + box-sizing: border-box; + } + + form#acl-edit-form fieldset { + border: 1px solid #ddd; + border-radius: 4px; + padding: 1em; + margin-bottom: 1em; + background: #f5f5f5; + } + + form#acl-edit-form legend { + font-weight: 600; + } + + form#acl-edit-form button[type="submit"] { + background: #1976d2; + color: #fff; + border: none; + padding: 0.7em 1.5em; + border-radius: 4px; + font-size: 1em; + cursor: pointer; + transition: background 0.2s; + } + + form#acl-edit-form button[type="submit"]:hover { + background: #1565c0; + } + + form#acl-edit-form input[type="checkbox"] { + margin-right: 0.5em; + } + +
-
- - -
-
- - -
-
- - -
-
- - -
-
- - -
-
- Doors - <% Object.keys(doorsList).forEach(function(door) { %> -
- -
- <% }) %> -
- -
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ Doors + <% Object.keys(doorsList).forEach(function(door) { %> +
+ +
+ <% }) %> +
+ + - + fetch(form.action, { + method: 'PATCH', + headers: { 'Content-Type': 'application/json' }, + body: JSON.stringify(data) + }).then(res => { + console.log(res.status, res.statusText); + if (res.ok) window.location.href = '/acl'; + else alert('Failed to update ACL entry'); + }).catch(err => { + alert('Error: ' + err.message); + }); + }); + + \ No newline at end of file