Tauler d'administració
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>
Les estadístiques globals es visualitzarien de la següent manera

Administració d'usuaris (només per administradors editors)
Mostra de formularis d'administració d'usuaris
En cas de ser un usuari administrador editor, l'usuari té la possibilitat de visualitzar dos formularis a més de les estadístiques globals. Un per restablir la contrasenya d'un usuari i l'altre per desbloquejar el comtpe d'un usuari.
Per poder verificar si l'usuari és administrador editor, fem servir la funció es_admin_ed.
<?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; ?>
Formulari de restabliment de contrasenyes
El formulari de restabliment de contrasenya incorpora dos entrades de text, una per el nom d'usuari i l'altre per la nova contrasenya.
A més, incorpora la mostra de missatges d'error o èxit segons el resultat de la operació
El formulari es visualitzaria de la següent manera

Restabliment de contrasenya
Formulari de desbloqueig d'usuaris
El formulari de desbloqueig d'usuaris incorpora una única entrada de text per el nom d'usuari.
A més, incorpora la mostra de missatges d'error o èxit segons el resultat de la operació
El formulari es visualitzaria de la següent manera
