52 lines
3.2 KiB
PHP
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>
|