Tauler d'administració: diferència entre les revisions

De Wiki personal d'en Guillem Serrat
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; ?>

Formulari de restabliment de contrasenyes

Formulari de desbloqueig d'usuaris

Eliminació d'estadístiques

Codi complet