From 1c5228ab30bebb1d0cb4bc9952a15df9e95dd9df Mon Sep 17 00:00:00 2001
From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com>
Date: Thu, 21 May 2026 22:20:59 +0000
Subject: [PATCH 09/22] fix: build lookup API URLs with URLSearchParams
Agent-Logs-Url: https://github.com/marpisco/ClassLink/sessions/16198339-3d5e-4b7b-b357-4e2ab6d7ecad
Co-authored-by: marpisco <162377105+marpisco@users.noreply.github.com>
---
admin/reservaemmassa.php | 5 ++++-
1 file changed, 4 insertions(+), 1 deletion(-)
diff --git a/admin/reservaemmassa.php b/admin/reservaemmassa.php
index b018408..9212ade 100644
--- a/admin/reservaemmassa.php
+++ b/admin/reservaemmassa.php
@@ -155,7 +155,10 @@ function searchLookup(type) {
showLookupSkeleton(config.resultsId);
- fetch(config.endpoint + '?q=' + encodeURIComponent(query))
+ const url = new URL(config.endpoint, window.location.origin);
+ url.searchParams.set('q', query);
+
+ fetch(url.toString())
.then(response => response.json())
.then(data => {
if (!Array.isArray(data.items) || data.items.length === 0) {
From 4cd4c380f30a161e6030d85ab66d26991ae8a9d9 Mon Sep 17 00:00:00 2001
From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com>
Date: Thu, 21 May 2026 22:21:38 +0000
Subject: [PATCH 10/22] fix: avoid origin-based URL construction in lookup
fetch
Agent-Logs-Url: https://github.com/marpisco/ClassLink/sessions/16198339-3d5e-4b7b-b357-4e2ab6d7ecad
Co-authored-by: marpisco <162377105+marpisco@users.noreply.github.com>
---
admin/reservaemmassa.php | 7 +++----
1 file changed, 3 insertions(+), 4 deletions(-)
diff --git a/admin/reservaemmassa.php b/admin/reservaemmassa.php
index 9212ade..6b893fd 100644
--- a/admin/reservaemmassa.php
+++ b/admin/reservaemmassa.php
@@ -155,10 +155,9 @@ function searchLookup(type) {
showLookupSkeleton(config.resultsId);
- const url = new URL(config.endpoint, window.location.origin);
- url.searchParams.set('q', query);
-
- fetch(url.toString())
+ const params = new URLSearchParams();
+ params.set('q', query);
+ fetch(config.endpoint + '?' + params.toString())
.then(response => response.json())
.then(data => {
if (!Array.isArray(data.items) || data.items.length === 0) {
From 3dfce7d0d6c0f391d496a2c38bfb7727a58f5b47 Mon Sep 17 00:00:00 2001
From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com>
Date: Thu, 21 May 2026 22:22:40 +0000
Subject: [PATCH 11/22] fix: optimize lookup API matching and error logging
Agent-Logs-Url: https://github.com/marpisco/ClassLink/sessions/16198339-3d5e-4b7b-b357-4e2ab6d7ecad
Co-authored-by: marpisco <162377105+marpisco@users.noreply.github.com>
---
admin/api/requisitor_lookup.php | 5 +++--
admin/api/sala_lookup.php | 5 +++--
admin/api/tempo_lookup.php | 5 +++--
admin/reservaemmassa.php | 3 ++-
4 files changed, 11 insertions(+), 7 deletions(-)
diff --git a/admin/api/requisitor_lookup.php b/admin/api/requisitor_lookup.php
index 46bffeb..bc74357 100644
--- a/admin/api/requisitor_lookup.php
+++ b/admin/api/requisitor_lookup.php
@@ -20,11 +20,12 @@
}
$escaped = str_replace(['%', '_'], ['\\%', '\\_'], $query);
+$idPrefixParam = $escaped . '%';
$searchParam = '%' . $escaped . '%';
$limit = 10;
-$stmt = $db->prepare("SELECT id, nome, email FROM cache WHERE id LIKE ? ESCAPE '\\\\' OR nome LIKE ? ESCAPE '\\\\' OR email LIKE ? ESCAPE '\\\\' ORDER BY nome ASC LIMIT ?");
-$stmt->bind_param("sssi", $searchParam, $searchParam, $searchParam, $limit);
+$stmt = $db->prepare("SELECT id, nome, email FROM cache WHERE id = ? OR id LIKE ? ESCAPE '\\\\' OR nome LIKE ? ESCAPE '\\\\' OR email LIKE ? ESCAPE '\\\\' ORDER BY nome ASC LIMIT ?");
+$stmt->bind_param("ssssi", $query, $idPrefixParam, $searchParam, $searchParam, $limit);
$stmt->execute();
$result = $stmt->get_result();
diff --git a/admin/api/sala_lookup.php b/admin/api/sala_lookup.php
index b2bd5b9..a10a605 100644
--- a/admin/api/sala_lookup.php
+++ b/admin/api/sala_lookup.php
@@ -20,11 +20,12 @@
}
$escaped = str_replace(['%', '_'], ['\\%', '\\_'], $query);
+$idPrefixParam = $escaped . '%';
$searchParam = '%' . $escaped . '%';
$limit = 10;
-$stmt = $db->prepare("SELECT id, nome FROM salas WHERE id LIKE ? ESCAPE '\\\\' OR nome LIKE ? ESCAPE '\\\\' ORDER BY nome ASC LIMIT ?");
-$stmt->bind_param("ssi", $searchParam, $searchParam, $limit);
+$stmt = $db->prepare("SELECT id, nome FROM salas WHERE id = ? OR id LIKE ? ESCAPE '\\\\' OR nome LIKE ? ESCAPE '\\\\' ORDER BY nome ASC LIMIT ?");
+$stmt->bind_param("sssi", $query, $idPrefixParam, $searchParam, $limit);
$stmt->execute();
$result = $stmt->get_result();
diff --git a/admin/api/tempo_lookup.php b/admin/api/tempo_lookup.php
index ad7560c..90c3518 100644
--- a/admin/api/tempo_lookup.php
+++ b/admin/api/tempo_lookup.php
@@ -20,11 +20,12 @@
}
$escaped = str_replace(['%', '_'], ['\\%', '\\_'], $query);
+$idPrefixParam = $escaped . '%';
$searchParam = '%' . $escaped . '%';
$limit = 10;
-$stmt = $db->prepare("SELECT id, horashumanos FROM tempos WHERE id LIKE ? ESCAPE '\\\\' OR horashumanos LIKE ? ESCAPE '\\\\' ORDER BY horashumanos ASC LIMIT ?");
-$stmt->bind_param("ssi", $searchParam, $searchParam, $limit);
+$stmt = $db->prepare("SELECT id, horashumanos FROM tempos WHERE id = ? OR id LIKE ? ESCAPE '\\\\' OR horashumanos LIKE ? ESCAPE '\\\\' ORDER BY horashumanos ASC LIMIT ?");
+$stmt->bind_param("sssi", $query, $idPrefixParam, $searchParam, $limit);
$stmt->execute();
$result = $stmt->get_result();
diff --git a/admin/reservaemmassa.php b/admin/reservaemmassa.php
index 6b893fd..677e6aa 100644
--- a/admin/reservaemmassa.php
+++ b/admin/reservaemmassa.php
@@ -178,7 +178,8 @@ function searchLookup(type) {
target.innerHTML = `
A mostrar até 10 resultados.
${itemsHtml}
`;
})
- .catch(() => {
+ .catch((err) => {
+ console.error(err);
target.innerHTML = "
Erro ao pesquisar. Tente novamente.
";
});
}
From d741a96d5d90171bbf9122a48180af7600f48f67 Mon Sep 17 00:00:00 2001
From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com>
Date: Thu, 21 May 2026 22:23:19 +0000
Subject: [PATCH 12/22] refactor: rename lookup html escape helper
Agent-Logs-Url: https://github.com/marpisco/ClassLink/sessions/16198339-3d5e-4b7b-b357-4e2ab6d7ecad
Co-authored-by: marpisco <162377105+marpisco@users.noreply.github.com>
---
admin/reservaemmassa.php | 8 ++++----
1 file changed, 4 insertions(+), 4 deletions(-)
diff --git a/admin/reservaemmassa.php b/admin/reservaemmassa.php
index 677e6aa..ca9c4c5 100644
--- a/admin/reservaemmassa.php
+++ b/admin/reservaemmassa.php
@@ -125,7 +125,7 @@ function clearUserSelection() {
}
};
- function lookupEscapeHtml(text) {
+ function escapeHtml(text) {
const div = document.createElement('div');
div.textContent = text;
return div.innerHTML;
@@ -166,9 +166,9 @@ function searchLookup(type) {
}
const itemsHtml = data.items.slice(0, 10).map(item => {
- const title = item.title ? `
${lookupEscapeHtml(item.title)}` : '';
- const subtitle = item.subtitle ? `
${lookupEscapeHtml(item.subtitle)}` : '';
- const itemId = lookupEscapeHtml(item.id || '');
+ const title = item.title ? `
${escapeHtml(item.title)}` : '';
+ const subtitle = item.subtitle ? `
${escapeHtml(item.subtitle)}` : '';
+ const itemId = escapeHtml(item.id || '');
return `
${title}
${subtitle}
From 2c8886e0d693d08093ca71152624cb71933398dc Mon Sep 17 00:00:00 2001
From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com>
Date: Thu, 21 May 2026 22:24:40 +0000
Subject: [PATCH 13/22] fix: harden lookup fetch handling and simplify API
filters
Agent-Logs-Url: https://github.com/marpisco/ClassLink/sessions/16198339-3d5e-4b7b-b357-4e2ab6d7ecad
Co-authored-by: marpisco <162377105+marpisco@users.noreply.github.com>
---
admin/api/requisitor_lookup.php | 4 ++--
admin/api/sala_lookup.php | 4 ++--
admin/api/tempo_lookup.php | 4 ++--
admin/reservaemmassa.php | 16 ++++++++++++----
4 files changed, 18 insertions(+), 10 deletions(-)
diff --git a/admin/api/requisitor_lookup.php b/admin/api/requisitor_lookup.php
index bc74357..c529a25 100644
--- a/admin/api/requisitor_lookup.php
+++ b/admin/api/requisitor_lookup.php
@@ -24,8 +24,8 @@
$searchParam = '%' . $escaped . '%';
$limit = 10;
-$stmt = $db->prepare("SELECT id, nome, email FROM cache WHERE id = ? OR id LIKE ? ESCAPE '\\\\' OR nome LIKE ? ESCAPE '\\\\' OR email LIKE ? ESCAPE '\\\\' ORDER BY nome ASC LIMIT ?");
-$stmt->bind_param("ssssi", $query, $idPrefixParam, $searchParam, $searchParam, $limit);
+$stmt = $db->prepare("SELECT id, nome, email FROM cache WHERE id LIKE ? ESCAPE '\\\\' OR nome LIKE ? ESCAPE '\\\\' OR email LIKE ? ESCAPE '\\\\' ORDER BY nome ASC LIMIT ?");
+$stmt->bind_param("sssi", $idPrefixParam, $searchParam, $searchParam, $limit);
$stmt->execute();
$result = $stmt->get_result();
diff --git a/admin/api/sala_lookup.php b/admin/api/sala_lookup.php
index a10a605..c848ea5 100644
--- a/admin/api/sala_lookup.php
+++ b/admin/api/sala_lookup.php
@@ -24,8 +24,8 @@
$searchParam = '%' . $escaped . '%';
$limit = 10;
-$stmt = $db->prepare("SELECT id, nome FROM salas WHERE id = ? OR id LIKE ? ESCAPE '\\\\' OR nome LIKE ? ESCAPE '\\\\' ORDER BY nome ASC LIMIT ?");
-$stmt->bind_param("sssi", $query, $idPrefixParam, $searchParam, $limit);
+$stmt = $db->prepare("SELECT id, nome FROM salas WHERE id LIKE ? ESCAPE '\\\\' OR nome LIKE ? ESCAPE '\\\\' ORDER BY nome ASC LIMIT ?");
+$stmt->bind_param("ssi", $idPrefixParam, $searchParam, $limit);
$stmt->execute();
$result = $stmt->get_result();
diff --git a/admin/api/tempo_lookup.php b/admin/api/tempo_lookup.php
index 90c3518..57063a5 100644
--- a/admin/api/tempo_lookup.php
+++ b/admin/api/tempo_lookup.php
@@ -24,8 +24,8 @@
$searchParam = '%' . $escaped . '%';
$limit = 10;
-$stmt = $db->prepare("SELECT id, horashumanos FROM tempos WHERE id = ? OR id LIKE ? ESCAPE '\\\\' OR horashumanos LIKE ? ESCAPE '\\\\' ORDER BY horashumanos ASC LIMIT ?");
-$stmt->bind_param("sssi", $query, $idPrefixParam, $searchParam, $limit);
+$stmt = $db->prepare("SELECT id, horashumanos FROM tempos WHERE id LIKE ? ESCAPE '\\\\' OR horashumanos LIKE ? ESCAPE '\\\\' ORDER BY horashumanos ASC LIMIT ?");
+$stmt->bind_param("ssi", $idPrefixParam, $searchParam, $limit);
$stmt->execute();
$result = $stmt->get_result();
diff --git a/admin/reservaemmassa.php b/admin/reservaemmassa.php
index ca9c4c5..ebf264f 100644
--- a/admin/reservaemmassa.php
+++ b/admin/reservaemmassa.php
@@ -126,9 +126,12 @@ function clearUserSelection() {
};
function escapeHtml(text) {
- const div = document.createElement('div');
- div.textContent = text;
- return div.innerHTML;
+ return String(text)
+ .replace(/&/g, '&')
+ .replace(//g, '>')
+ .replace(/"/g, '"')
+ .replace(/'/g, ''');
}
function showLookupSkeleton(targetId) {
@@ -158,7 +161,12 @@ function searchLookup(type) {
const params = new URLSearchParams();
params.set('q', query);
fetch(config.endpoint + '?' + params.toString())
- .then(response => response.json())
+ .then(response => {
+ if (!response.ok) {
+ throw new Error('HTTP ' + response.status);
+ }
+ return response.json();
+ })
.then(data => {
if (!Array.isArray(data.items) || data.items.length === 0) {
target.innerHTML = "
" + config.emptyMessage + "
";
From 5c61670a5cb7b036479f816417e057d9387d28fc Mon Sep 17 00:00:00 2001
From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com>
Date: Thu, 21 May 2026 22:25:23 +0000
Subject: [PATCH 14/22] fix: use relative lookup API endpoints in admin modal
Agent-Logs-Url: https://github.com/marpisco/ClassLink/sessions/16198339-3d5e-4b7b-b357-4e2ab6d7ecad
Co-authored-by: marpisco <162377105+marpisco@users.noreply.github.com>
---
admin/reservaemmassa.php | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/admin/reservaemmassa.php b/admin/reservaemmassa.php
index ebf264f..ba196df 100644
--- a/admin/reservaemmassa.php
+++ b/admin/reservaemmassa.php
@@ -106,19 +106,19 @@ function clearUserSelection() {
const lookupConfig = {
requisitor: {
- endpoint: '/admin/api/requisitor_lookup.php',
+ endpoint: 'api/requisitor_lookup.php',
inputId: 'lookupRequisitorInput',
resultsId: 'lookupRequisitorResults',
emptyMessage: 'Sem resultados de requisitorID.'
},
tempo: {
- endpoint: '/admin/api/tempo_lookup.php',
+ endpoint: 'api/tempo_lookup.php',
inputId: 'lookupTempoInput',
resultsId: 'lookupTempoResults',
emptyMessage: 'Sem resultados de tempoID.'
},
sala: {
- endpoint: '/admin/api/sala_lookup.php',
+ endpoint: 'api/sala_lookup.php',
inputId: 'lookupSalaInput',
resultsId: 'lookupSalaResults',
emptyMessage: 'Sem resultados de salaID.'
From 45815ec33fbbc4ebed3b747613fdc4b0ab6e8816 Mon Sep 17 00:00:00 2001
From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com>
Date: Thu, 21 May 2026 22:26:07 +0000
Subject: [PATCH 15/22] perf: defer modal lookup fetch until modal is opened
Agent-Logs-Url: https://github.com/marpisco/ClassLink/sessions/16198339-3d5e-4b7b-b357-4e2ab6d7ecad
Co-authored-by: marpisco <162377105+marpisco@users.noreply.github.com>
---
admin/reservaemmassa.php | 14 ++++++++++++--
1 file changed, 12 insertions(+), 2 deletions(-)
diff --git a/admin/reservaemmassa.php b/admin/reservaemmassa.php
index ba196df..d15b628 100644
--- a/admin/reservaemmassa.php
+++ b/admin/reservaemmassa.php
@@ -173,7 +173,7 @@ function searchLookup(type) {
return;
}
- const itemsHtml = data.items.slice(0, 10).map(item => {
+ const itemsHtml = data.items.map(item => {
const title = item.title ? `
${escapeHtml(item.title)}` : '';
const subtitle = item.subtitle ? `
${escapeHtml(item.subtitle)}` : '';
const itemId = escapeHtml(item.id || '');
@@ -201,6 +201,17 @@ function initLookupTabs() {
searchLookup(targetType);
});
});
+
+ const lookupModal = document.getElementById('csvLookupModal');
+ let lookupModalInitialized = false;
+ if (lookupModal) {
+ lookupModal.addEventListener('shown.bs.modal', function () {
+ if (!lookupModalInitialized) {
+ searchLookup('requisitor');
+ lookupModalInitialized = true;
+ }
+ });
+ }
}
// Form validation
@@ -220,7 +231,6 @@ function validateForm(event) {
form.addEventListener('submit', validateForm);
}
initLookupTabs();
- searchLookup('requisitor');
});
From efbe4c5a91433bce213d040de1f3e699c689e78f Mon Sep 17 00:00:00 2001
From: Marco Pisco
Date: Thu, 21 May 2026 22:32:02 +0000
Subject: [PATCH 16/22] fix: remover texto de (limitado a 10 para reduzir
carga, texto gerado por IA)
---
admin/reservaemmassa.php | 1 -
1 file changed, 1 deletion(-)
diff --git a/admin/reservaemmassa.php b/admin/reservaemmassa.php
index d15b628..e510ccb 100644
--- a/admin/reservaemmassa.php
+++ b/admin/reservaemmassa.php
@@ -431,7 +431,6 @@ function validateForm(event) {