Files
compras/integrations/sgf/access/screen.php
T
2026-11-02 08:08:05 +02:00

52 lines
3.2 KiB
PHP

<!doctype html>
<html lang="pt"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1"><title>Configuração inicial de acessos a Compras internas</title></head>
<body>
<main><h1>Configuração inicial de acessos a Compras internas</h1>
<p>Empresa <?= (int) $options['scope']['company_id'] ?> · Unidade <?= (int) $options['scope']['unit_id'] ?></p>
<p>Escolha explicitamente o administrador e os direitos iniciais. As restantes atribuições e revogações usam a administração de acessos existente.</p>
<?php if ($options['initialised']) { ?>
<p>A autoridade inicial já foi entregue. Utilize a administração de acessos para alterações.</p>
<?php } else { ?>
<form id="initial-access" method="post" action="/api/internal-requisitions/access-initialisation">
<input type="hidden" name="_token" value="<?= htmlspecialchars(csrf_token(), ENT_QUOTES, 'UTF-8') ?>">
<label>Administrador nominativo <select name="administrator" required>
<option value="">Seleccionar</option>
<?php foreach ($options['administrators'] as $member) { ?>
<option value="<?= (int) $member->id ?>"><?= htmlspecialchars($member->name, ENT_QUOTES, 'UTF-8') ?> · <?= (int) $member->id ?></option>
<?php } ?>
</select></label>
<fieldset><legend>Direitos iniciais escolhidos para esta unidade</legend>
<?php foreach ($options['rights'] as $right) { ?>
<label><input type="checkbox" name="rights" value="<?= htmlspecialchars($right, ENT_QUOTES, 'UTF-8') ?>"> <?= htmlspecialchars($options['labels'][$right], ENT_QUOTES, 'UTF-8') ?></label><br>
<?php } ?>
</fieldset>
<label>Fundamento <textarea name="reason" minlength="10" maxlength="500" required></textarea></label>
<button type="submit">Registar atribuição inicial</button>
</form>
<p id="result" role="status" aria-live="polite"></p>
<script>
const form = document.getElementById('initial-access');
const contextToken = <?= json_encode($request->session()->get('company_context.token'), JSON_HEX_TAG | JSON_HEX_AMP | JSON_HEX_APOS | JSON_HEX_QUOT) ?>;
let pending = null;
form.addEventListener('submit', async (event) => {
event.preventDefault();
const fields = new FormData(form);
const payload = {reason: fields.get('reason'), administrators: [{user_id: Number(fields.get('administrator')), rights: fields.getAll('rights')}]};
const content = JSON.stringify(payload);
if (pending?.content !== content) pending = {content, operation_key: crypto.randomUUID()};
const button = form.querySelector('button');
button.disabled = true;
try {
const response = await fetch(form.action, {method: 'POST', headers: {'Content-Type': 'application/json', Accept: 'application/json', 'X-CSRF-TOKEN': fields.get('_token'), 'X-SGF-Context': contextToken}, body: JSON.stringify({...payload, operation_key: pending.operation_key})});
const result = await response.json();
if (!response.ok) throw new Error(result.message || 'Não foi possível registar.');
form.hidden = true;
document.getElementById('result').textContent = 'Atribuição inicial registada. Utilize a administração de acessos para alterações.';
} catch (error) {
document.getElementById('result').textContent = error.message;
} finally { button.disabled = false; }
});
</script>
<?php } ?>
</main></body></html>