Tauler d'administració: diferència entre les revisions
| Línia 128: | Línia 128: | ||
=== Mostra de formularis d'administració d'usuaris === | === Mostra de formularis d'administració d'usuaris === | ||
'''<?php if (es_admin_ed()): ?>''' | |||
<section class="management-section"> | |||
<nowiki><div class="danger-zone"></nowiki> | |||
<form method="post"> | |||
<input type="hidden" name="borrar_activitat" value="1"> | |||
<button type="submit" class="btn-danger" onclick="return confirm('Segur que vols borrar tot el historial?');"> | |||
Borrar tot el registre d'activitats | |||
</button> | |||
</form> | |||
<nowiki></div></nowiki> | |||
<nowiki><h2 class="section-title">Gestió d'accés d'usuaris</h2></nowiki> | |||
<nowiki><div class="management-grid"></nowiki> | |||
<nowiki><div class="tool-card"></nowiki> | |||
<nowiki><h3>Restablir contrasenya</h3></nowiki> | |||
<form method="post"> | |||
<nowiki><div class="input-group"></nowiki> | |||
<label>Nom d'usuari</label> | |||
<input type="text" name="usuari_nom" required> | |||
<nowiki></div></nowiki> | |||
<nowiki><div class="input-group"></nowiki> | |||
<label>Nova contrasenya</label> | |||
<input type="password" name="nova_contrasenya" required> | |||
<nowiki></div></nowiki> | |||
<button type="submit" class="btn-action">Restablir ara</button> | |||
</form> | |||
<?php if ($missatge): ?> <nowiki><p class="msg success"><?= $missatge ?></p></nowiki> <?php endif; ?> | |||
<?php if ($error): ?> <nowiki><p class="msg error"><?= $error ?></p></nowiki> <?php endif; ?> | |||
<nowiki></div></nowiki> | |||
<nowiki><div class="tool-card"></nowiki> | |||
<nowiki><h3>Desbloquejar compte</h3></nowiki> | |||
<form method="POST"> | |||
<nowiki><div class="input-group"></nowiki> | |||
<label>Nom d'usuari</label> | |||
<input type="text" name="usuari_nom_desbloquejar" required> | |||
<nowiki></div></nowiki> | |||
<button type="submit" name="desbloquejar" class="btn-action secondary">Desbloquejar usuari</button> | |||
<?php if ($missatgeDesbloqueig): ?> <nowiki><p class="msg success"><?= $missatgeDesbloqueig ?></p></nowiki> <?php endif; ?> | |||
</form> | |||
<nowiki></div></nowiki> | |||
<nowiki></div></nowiki> | |||
</section> | |||
<?php endif; ?> | |||
=== Formulari de restabliment de contrasenyes === | === Formulari de restabliment de contrasenyes === | ||
Revisió del 21:34, 10 gen 2026
Tauler d'administració
Tots els usuaris administradors tenen accés a un tauler d'administració on es pot consultar les estadístiques globals de l'aplicació. A més a més, si l'usuari és administrador editor, pot accedir a uns formularis de gestió d'usuaris
Inicialització de la sessió i connexió a la BD
Sempre que es treballa amb sessions, el primer que hem de fer és iniciar-la abans d'escriure el codi HTML
session_start();
A més, hem de requerir el fitxer amb les funcions i una connexió a la BD. En aquest cas, com hem de modificar dades d'usuaris i per tant actualitzar registres de la BD farem servir la connexió d'escriptura.
require 'funcions.php'; require './connexioBD/connexioRW.php';
Requerir autenticació i ser administrador
Per accedir a aquesta pàgina, és imperatiu que l'usuari estigui autenticat, en cas contrari no hi pot accedir. Per verificar que l'usuari està autenticat, farem servir la funció requerir_autenticacio
// Requerir autenticació per accedir a la pàgina requerir_autenticacio();
A més, per accedir a aquesta pàgina l'usuari ha de tenir el rol d'administrador editor o administrador lector. Per comprovar-ho farem servir la funció es_admin
Mostra d'estadístiques globals
Obtenció d'estadístiques globals
Les estadístiques globals són:
- De tots els usuaris
- Autenticacions exitoses
- Autenticacions errònies
- Restabliments de contrasenyes
- Dels usuaris normals
- Autenticacions exitoses
- Autenticacions errònies
- Restabliments de contrasenyes
- Dels administradors (editors i visualitzadors)
- Autenticacions exitoses
- Autenticacions errònies
- Restabliments de contrasenyes
Les obtindrem mitjançant una consulta a la taula activitat, on realitzarem la suma de registres que coincideixin amb la paraula clau de la seva respectiva acció
// Consulta SQL per obtenir les estadístiques
$stmt = $pdo->query("
SELECT
-- Autenticacions correctes (login + auto-login) de tothom
SUM(a.accio IN ('login', 'auto-login')) AS total_autenticacions,
-- Logins erronis de tothom
SUM(a.accio = 'error-login') AS total_error_logins,
-- Restabliments de contrasenyes
SUM(a.accio = 'restablir-contrasenya') AS total_restabliment_contrasenyes,
-- Autenticacions correctes d'usuaris normals
SUM(
a.accio IN ('login', 'auto-login')
AND u.rol = 'usuari'
) AS auth_usuaris,
-- Logins erronis d'usuaris normals
SUM(
a.accio = 'error-login'
AND u.rol = 'usuari'
) AS errors_usuaris,
-- Restabliment de contrasenyes d'usuaris normals
SUM(
a.accio = 'restablir-contrasenya'
AND u.rol = 'usuari'
) AS restabliments_contrasenya_usuaris,
-- Autenticacions correctes d'administradors
SUM(
a.accio IN ('login', 'auto-login')
AND u.rol IN ('ed_admin', 'vi_admin')
) AS auth_admins,
-- Logins erronis d'administradors
SUM(
a.accio = 'error-login'
AND u.rol IN ('ed_admin', 'vi_admin')
) AS errors_admins,
-- Restabliment de contrasenyes d'administradors
SUM(
a.accio = 'restablir-contrasenya'
AND u.rol IN ('ed_admin', 'vi_admin')
) AS restabliments_contrasenya_admins
FROM activitat a
JOIN usuaris u ON u.id = a.usuari_id
");
$autenticacions = $stmt->fetch();
Mostra d'estadístiques globals
Per mostrar-les, únicament recuperarem les dades de la consulta i les afegirem en HTML, sempre escapant sortides.
<section class="stats-section">
<h2 class="section-title">Estadístiques globals</h2>
<div class="stats-grid-top">
<div class="stat-card main">
<span class="label">Total Autenticacions</span>
<span class="value"><?= $autenticacions['total_autenticacions'] ?? 0 ?></span>
</div>
<div class="stat-card error">
<span class="label">Logins Erronis</span>
<span class="value"><?= $autenticacions['total_error_logins'] ?? 0 ?></span>
</div>
<div class="stat-card warn">
<span class="label">Restabliments</span>
<span class="value"><?= $autenticacions['total_restabliment_contrasenyes'] ?? 0 ?></span>
</div>
</div>
<div class="stats-grid-secondary">
<div class="stat-group">
<h3>Usuaris normals</h3>
<div class="row"><span>Autenticacions:</span> <strong><?= $autenticacions['auth_usuaris'] ?? 0 ?></strong></div>
<div class="row"><span>Errors d'autenticació:</span> <strong><?= $autenticacions['errors_usuaris'] ?? 0 ?></strong></div>
<div class="row"><span>Restabliments de contrasenyes:</span> <strong><?= $autenticacions['restabliments_contrasenya_usuaris'] ?? 0 ?></strong></div>
</div>
<div class="stat-group">
<h3>Administradors</h3>
<div class="row"><span>Autenticacions:</span> <strong><?= $autenticacions['auth_admins'] ?? 0 ?></strong></div>
<div class="row"><span>Errors d'autenticació:</span> <strong><?= $autenticacions['errors_admins'] ?? 0 ?></strong></div>
<div class="row"><span>Restabliments de contrasenyes:</span> <strong><?= $autenticacions['restabliments_contrasenya_admins'] ?? 0 ?></strong></div>
</div>
</div>
</section>
Administració d'usuaris (només per administradors editors)
Mostra de formularis d'administració d'usuaris
<?php if (es_admin_ed()): ?>
<section class="management-section">
<div class="danger-zone">
<form method="post">
<input type="hidden" name="borrar_activitat" value="1">
<button type="submit" class="btn-danger" onclick="return confirm('Segur que vols borrar tot el historial?');">
Borrar tot el registre d'activitats
</button>
</form>
</div>
<h2 class="section-title">Gestió d'accés d'usuaris</h2>
<div class="management-grid">
<div class="tool-card">
<h3>Restablir contrasenya</h3>
<form method="post">
<div class="input-group">
<label>Nom d'usuari</label>
<input type="text" name="usuari_nom" required>
</div>
<div class="input-group">
<label>Nova contrasenya</label>
<input type="password" name="nova_contrasenya" required>
</div>
<button type="submit" class="btn-action">Restablir ara</button>
</form>
<?php if ($missatge): ?> <p class="msg success"><?= $missatge ?></p> <?php endif; ?>
<?php if ($error): ?> <p class="msg error"><?= $error ?></p> <?php endif; ?>
</div>
<div class="tool-card">
<h3>Desbloquejar compte</h3>
<form method="POST">
<div class="input-group">
<label>Nom d'usuari</label>
<input type="text" name="usuari_nom_desbloquejar" required>
</div>
<button type="submit" name="desbloquejar" class="btn-action secondary">Desbloquejar usuari</button>
<?php if ($missatgeDesbloqueig): ?> <p class="msg success"><?= $missatgeDesbloqueig ?></p> <?php endif; ?>
</form>
</div>
</div>
</section>
<?php endif; ?>