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

De Wiki personal d'en Guillem Serrat
Línia 123: Línia 123:
             </div>
             </div>
         </section>
         </section>
</pre>
</pre>Les estadístiques globals es visualitzarien de la següent manera
[[Fitxer:EstadistiquesGlobals.png|center|miniatura|768x768px]]


== Administració d'usuaris (només per administradors editors) ==
== Administració d'usuaris (només per administradors editors) ==


=== Mostra de formularis d'administració d'usuaris ===
=== 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ó [[Funcions de la pràctica 5.3#es admin ed|es_admin_ed]].
  '''<?php if (es_admin_ed()): ?>'''
  '''<?php if (es_admin_ed()): ?>'''
             <section class="management-section">
             <section class="management-section">
Línia 175: Línia 179:


=== Formulari de restabliment de contrasenyes ===
=== 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
[[Fitxer:FormulariAdminRestablimentContrasenya.png|center|miniatura]]
=== Restabliment de contrasenya ===


=== Formulari de desbloqueig d'usuaris ===
=== 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
[[Fitxer:FormulariAdminDesbloqueigUsuari.png|center|miniatura]]
=== Desbloqueig d'usuari ===


=== Eliminació d'estadístiques ===
=== Eliminació d'estadístiques ===


== Codi complet ==
== Codi complet ==

Revisió del 21:42, 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>

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

Desbloqueig d'usuari

Eliminació d'estadístiques

Codi complet