Adicionar importação de reservas em massa via CSV com modal de pesquisa de IDs no painel admin#152
Conversation
Agent-Logs-Url: https://github.com/marpisco/ClassLink/sessions/c15f61c7-4d55-40de-b428-433cbce7baa9 Co-authored-by: marpisco <162377105+marpisco@users.noreply.github.com>
Agent-Logs-Url: https://github.com/marpisco/ClassLink/sessions/c15f61c7-4d55-40de-b428-433cbce7baa9 Co-authored-by: marpisco <162377105+marpisco@users.noreply.github.com>
Agent-Logs-Url: https://github.com/marpisco/ClassLink/sessions/3ff397cc-c4ca-405e-846d-9e183bfa8375 Co-authored-by: marpisco <162377105+marpisco@users.noreply.github.com>
Reverti totalmente essas alterações fora de escopo no commit Se quiseres, avanço já com a implementação correta da importação CSV nas reservas em massa ( |
|
@copilot Sim, podes avançar com a implementação do correto. |
Agent-Logs-Url: https://github.com/marpisco/ClassLink/sessions/4b49d234-7d64-4371-9ed8-1404a6bdde04 Co-authored-by: marpisco <162377105+marpisco@users.noreply.github.com>
|
@copilot Tenta novamente, ontem atingi um rate limit. |
Substitui a pré-carga integral das tabelas salas, cache e tempos por consultas SELECT 1 ... WHERE id = ? LIMIT 1 com cache por ID durante o parsing do CSV. Evita carregar tabelas completas para memória.
|
📝 Manual Update Required? It looks like you've modified core logic. Please check if the user manual needs a refresh! @marpisco |
|
@marpisco Implementada a correção do review comment pendente no commit A validação de IDs do CSV deixou de carregar as tabelas completas ( Além disso, atualizei a descrição do PR para corrigir a menção ao delimitador: é |
Evita acumular todas as mensagens de erro em memória quando o CSV contém muitas linhas com erros. Apenas guarda até $maxDisplayedErrors (10) mensagens, que é o limite efetivo de exibição.
|
📝 Manual Update Required? It looks like you've modified core logic. Please check if the user manual needs a refresh! @marpisco |
|
Corrigido também o terceiro review comment (memory concern): o array Commit: |
Adds 2MB max file size validation to prevent resource exhaustion from large CSV uploads. Adds mb_detect_encoding + mb_convert_encoding for UTF-8 conversion (consistent with materiais.php pattern) to handle non-UTF-8 CSVs (e.g. Windows-1252 from Excel). Uses tmpfile() instead of direct fopen() on the upload temp path to process converted content.
|
📝 Manual Update Required? It looks like you've modified core logic. Please check if the user manual needs a refresh! @marpisco |
The materiais.php CSV import lacked CSRF token verification (unlike the new reservaemmassa.php import) and had no file size limit. Both issues could allow abuse: CSRF bypass for automated submissions and resource exhaustion via large file uploads. Now consistent with reservaemmassa.php security pattern.
|
📝 Manual Update Required? It looks like you've modified core logic. Please check if the user manual needs a refresh! @marpisco |
🔒 Security Review — PR #152Review executed against the security standards defined in ✅ Already correct (no issues found)
🔴 Issues found & fixed (2 commits pushed to this branch)
|
📋 PR #152 OverviewWhat this PR coversThis PR implements bulk reservation import via CSV in the admin panel ( What was doneNew features:
Bugfix / consistency changes:
Security hardening (added after review):
Files changed (8)
What's needed to adopt into
|
Este PR implementa a importação de reservas em massa via CSV no script correto da issue original:
admin/reservaemmassa.php, incluindo um modal de apoio para pesquisa de IDs via API.Alterações
admin/reservaemmassa.phppara upload de CSV:action=import_csvpara:,(compatível com Excel),SalaID,RequisitorID,TempoID) via consultas pontuaisSELECT 1 ... WHERE id = ? LIMIT 1com cache por ID (sem carregar tabelas completas para memória),YYYY-MM-DD),reservas,aprovado = 1,acaoexecutada(...).assets/csvsample_reservas.csv(com vírgulas).admin/reservaemmassa.phpcom 3 tabs:requisitorID,tempoID,salaID./admin/apipara suportar a pesquisa no modal:admin/api/requisitor_lookup.php,admin/api/tempo_lookup.php,admin/api/sala_lookup.php.Resultado
A importação CSV fica disponível no módulo de reservas em massa (
admin/reservaemmassa.php), alinhada com o escopo correto da issue, e passa a ter apoio de pesquisa rápida de IDs (requisitor, tempo e sala) para facilitar a preparação dos ficheiros CSV.