From b55e9f483f0bc49a8f3bb88255ac0cb60bf72897 Mon Sep 17 00:00:00 2001 From: solocla Date: Wed, 28 Jan 2026 20:14:49 +0100 Subject: [PATCH] fixed different login --- .../qrcodes/7-5d516ce9cdb43b39.png | Bin 0 -> 429 bytes public/userarea/include/headscript.php | 112 ++++++--- public/userarea/include/navbar.php | 49 ++-- .../include/school_settings_loader.php | 95 ++++--- public/userarea/include/schoolid_select.php | 31 ++- .../photoschool/7-1769598678-logo.jpg | Bin 0 -> 50110 bytes .../photoschool/7-1769599394-logo.jpg | Bin 0 -> 50110 bytes public/userarea/school_dashboard.php | 21 +- public/userarea/school_onboarding.php | 235 ++++++++++++++++++ public/userarea/school_profile.php | 135 ++++++++-- public/userarea/select_school.php | 8 +- public/userarea/student_profile.php | 3 + public/userarea/user-settings.php | 34 ++- public/userarea/user_dashboard.php | 2 + 14 files changed, 587 insertions(+), 138 deletions(-) create mode 100644 public/phototeachers/qrcodes/7-5d516ce9cdb43b39.png create mode 100644 public/userarea/photoschool/7-1769598678-logo.jpg create mode 100644 public/userarea/photoschool/7-1769599394-logo.jpg create mode 100644 public/userarea/school_onboarding.php diff --git a/public/phototeachers/qrcodes/7-5d516ce9cdb43b39.png b/public/phototeachers/qrcodes/7-5d516ce9cdb43b39.png new file mode 100644 index 0000000000000000000000000000000000000000..037682e4669bf9ef6607b30f37acba8c4fd22f07 GIT binary patch literal 429 zcmV;e0aE^nP)KFU^T~M;R)A3hx?jt@9MW!2SO9(*gg=IV X792fIM7@)j00000NkvXXu0mjffy28) literal 0 HcmV?d00001 diff --git a/public/userarea/include/headscript.php b/public/userarea/include/headscript.php index 693ec61..5738c9a 100644 --- a/public/userarea/include/headscript.php +++ b/public/userarea/include/headscript.php @@ -9,8 +9,9 @@ error_reporting(E_ALL | E_STRICT); include('../../extra/auth.php'); -if (! Auth::check()) { +if (!Auth::check()) { redirectTo('../../public/login'); + exit; } $user = Auth::user(); @@ -20,42 +21,65 @@ $nameuser = $user->present()->first_name; $surnameuser = $user->present()->last_name; $emailuser = $user->present()->email; $avatar = $user->present()->avatar; -$kindofrole = $user->present()->role_id; // <-- Questo è il ruolo (es. 1=admin, 2=teacher, 3=student, ecc.) +$kindofrole = $user->present()->role_id; +$kindofrole = (int)$user->present()->role_id; -// --- INIZIO: Reindirizzamento intelligente per studenti senza profilo --- -if (session_status() == PHP_SESSION_NONE) { + +// Definisci ruolo studente (conferma che sia 2!) +define('ROLE_STUDENTE', 2); + +// Avvia sessione se non attiva +if (session_status() === PHP_SESSION_NONE) { session_start(); } -// Definisci qui l'ID del ruolo STUDENTE (cambialo se è diverso!) -define('ROLE_STUDENTE', 2); // Cambia 3 con il ruolo corretto del tuo studente - -// Escludi alcune pagine dove NON vuoi il redirect (es. login, logout, profile) $current_page = basename($_SERVER['PHP_SELF']); -$no_redirect_pages = ['login.php', 'logout.php', 'student_profile.php', 'register.php']; -if ( - $kindofrole == ROLE_STUDENTE && - !in_array($current_page, $no_redirect_pages) && - !isset($_SESSION['student_profile_completed']) -) { - // Controlla se esiste il record in tabella students - $stmt = $db->prepare("SELECT id FROM students WHERE user_id = ? LIMIT 1"); +// Pagine escluse da TUTTI i redirect/redirect automatici +$excluded_pages = [ + 'login.php', + 'logout.php', + 'register.php', + 'forgot-password.php', // se esiste + 'student_profile.php', + 'select_school.php' +]; + +// ================================================ +// 1. CREAZIONE AUTOMATICA PROFILO STUDENTE (se manca) +// ================================================ +if ($kindofrole === ROLE_STUDENTE && !in_array($current_page, $excluded_pages)) { + + $stmt = $db->prepare("SELECT 1 FROM students WHERE user_id = ? LIMIT 1"); $stmt->execute([$iduserlogin]); - $student_exists = $stmt->fetch(); + $profile_exists = $stmt->fetchColumn(); - if (!$student_exists) { - // Non ha completato il profilo → reindirizza - $_SESSION['student_profile_pending'] = true; - header("Location: student_profile.php"); - exit; + if (!$profile_exists) { + // Crea record minimo obbligatorio + $stmt_insert = $db->prepare(" + INSERT INTO students ( + user_id, + billing_country, + shipping_same_as_billing, + privacy_consent, + created_at, + updated_at + ) VALUES ( + ?, 'Italia', 1, 1, NOW(), NOW() + ) + "); + $stmt_insert->execute([$iduserlogin]); + + // Imposta flag per non rifare controlli inutili + $_SESSION['student_profile_completed'] = true; } else { - // Ha già completato → segna per non controllare più $_SESSION['student_profile_completed'] = true; } } -// --- FINE: Reindirizzamento intelligente --- +// ================================================ +// 2. SALVA DATI UTENTE IN SESSIONE +// ================================================ $_SESSION["iduserlogin"] = $iduserlogin; $_SESSION["nameuser"] = $nameuser; $_SESSION["surnameuser"] = $surnameuser; @@ -64,12 +88,44 @@ $_SESSION["photouser"] = $avatar; $photouser = $_SESSION["photouser"]; +if (defined('SKIP_SCHOOL_CONTEXT') && SKIP_SCHOOL_CONTEXT === true) { + return; // oppure salta SOLO i redirect scuola +} +// ================================================ +// 3. LOGICA SCUOLA (solo se profilo base esiste) +// ================================================ +$has_school_association = false; +$stmt_school_check = $db->prepare("SELECT 1 FROM user_schools WHERE user_id = ? LIMIT 1"); +$stmt_school_check->execute([$iduserlogin]); +$has_school_association = (bool) $stmt_school_check->fetchColumn(); -// include school settings -include('schoolid_select.php'); +if ($has_school_association) { + // include('schoolid_select.php'); +} +// Carica impostazioni scuola solo se c'è school_id valida +$pages_allow_no_school = ['school_profile.php']; -// include school settings -include('school_settings_loader.php'); +if (isset($_SESSION['school_id']) && (int)$_SESSION['school_id'] > 0) { + include('school_settings_loader.php'); +} else { + // Per studenti: se non ha scuola selezionata → vai a select_school + if ($kindofrole === ROLE_STUDENTE && !in_array($current_page, $excluded_pages)) { + header("Location: select_school.php"); + exit; + } + + // Per owner/admin: vai a school_profile se non è una pagina permessa + elseif (!in_array($current_page, $pages_allow_no_school)) { + header("Location: school_profile.php"); + exit; + } + + // Default impostazioni minime + $schoolSettings = [ + 'timezone' => 'Europe/Rome', + 'locale' => 'it', + ]; +} diff --git a/public/userarea/include/navbar.php b/public/userarea/include/navbar.php index ec3ca73..a8b6660 100644 --- a/public/userarea/include/navbar.php +++ b/public/userarea/include/navbar.php @@ -9,8 +9,7 @@ if (!empty($_SESSION['school_id'])) { $stmt_school = $pdo->prepare("SELECT name, logo FROM schools WHERE id = ?"); $stmt_school->execute([$school_id]); $current_school = $stmt_school->fetch(PDO::FETCH_ASSOC); - echo $current_school['name']; - echo "Ciao"; + if ($current_school) { $school_display_name = $current_school['name']; @@ -24,6 +23,14 @@ if (!empty($_SESSION['school_id'])) { } } ?> +hasRole('Admin') || Auth::user()->hasRole('User')) + || (Auth::user()->hasRole('school_owner') && !empty($hasUserSchools)); +?> + @@ -268,12 +311,20 @@ if ($_SERVER['REQUEST_METHOD'] === 'POST') {
- + + + +
NA
+ + +
- + Max 2MB – JPG, PNG, GIF
@@ -473,7 +524,9 @@ if ($_SERVER['REQUEST_METHOD'] === 'POST') { // Salva HTML prima del submit document.getElementById('schoolForm').addEventListener('submit', function(e) { - document.getElementById('description-hidden').value = quill.root.innerHTML; + const html = quill.root.innerHTML.trim(); + document.getElementById('description-hidden').value = (html === '


' ? '' : html); + }); // ====================== MAPPA (invariata, funziona già) ====================== @@ -543,16 +596,54 @@ if ($_SERVER['REQUEST_METHOD'] === 'POST') { } }); - // Slug automatico + // Slug automatico (JS) + function slugify(str) { + return (str || '') + .toString() + .normalize('NFD').replace(/[\u0300-\u036f]/g, '') // rimuove accenti + .toLowerCase() + .trim() + .replace(/[^a-z0-9\s-]/g, '') + .replace(/\s+/g, '-') + .replace(/-+/g, '-'); + } + const nameField = document.querySelector('[name="name"]'); const slugField = document.querySelector('[name="slug"]'); let slugTouched = false; nameField?.addEventListener('input', function() { - if (!slugTouched) slugField.value = generateSlug(this.value); + if (!slugTouched) slugField.value = slugify(this.value); }); slugField?.addEventListener('input', () => slugTouched = true); + + // ====================== LOGO PREVIEW (before save) ====================== + const logoInput = document.getElementById('logoInput'); + const logoPreview = document.getElementById('logoPreview'); + const logoPlaceholder = document.getElementById('logoPreviewPlaceholder'); + + logoInput?.addEventListener('change', function() { + const file = this.files && this.files[0]; + if (!file) return; + + // Basic type check (client-side) + if (!['image/jpeg', 'image/png', 'image/gif'].includes(file.type)) { + alert('Formato non valido. Usa JPG, PNG o GIF.'); + this.value = ''; + return; + } + + const reader = new FileReader(); + reader.onload = function(e) { + if (logoPlaceholder) logoPlaceholder.style.display = 'none'; + if (logoPreview) { + logoPreview.src = e.target.result; + logoPreview.style.display = 'block'; + } + }; + reader.readAsDataURL(file); + }); diff --git a/public/userarea/select_school.php b/public/userarea/select_school.php index af17b6e..fc81800 100644 --- a/public/userarea/select_school.php +++ b/public/userarea/select_school.php @@ -1,5 +1,10 @@ (int)$userSchools[0]['id'], @@ -179,7 +183,7 @@ if (count($userSchools) > 1 && !empty($_SESSION['school_id']) && !empty($_SESSIO exit; } -/* + /* diff --git a/public/userarea/student_profile.php b/public/userarea/student_profile.php index 8060345..1ad985b 100644 --- a/public/userarea/student_profile.php +++ b/public/userarea/student_profile.php @@ -2,6 +2,9 @@ ini_set('display_errors', 1); error_reporting(E_ALL); +session_start(); +define('SKIP_SCHOOL_CONTEXT', true); + include('include/headscript.php'); $dbHandler = DBHandlerSelect::getInstance(); $pdo = $dbHandler->getConnection(); diff --git a/public/userarea/user-settings.php b/public/userarea/user-settings.php index c81bc06..4b18d03 100644 --- a/public/userarea/user-settings.php +++ b/public/userarea/user-settings.php @@ -13,15 +13,26 @@ $pdo = $dbHandler->getConnection(); | 1) Recupera la scuola (come nel tuo esempio) |-------------------------------------------------------------------------- */ -$stmt = $pdo->prepare("SELECT id, name FROM schools WHERE owner_id = ? LIMIT 1"); -$stmt->execute([$iduserlogin]); -$school = $stmt->fetch(PDO::FETCH_ASSOC); +// 1) Recupera school_id dalla sessione (studente) oppure fallback owner (admin/owner) +$school_id = (int)($_SESSION['school_id'] ?? 0); -if (!$school) { - die("Scuola non trovata."); +if ($school_id <= 0) { + // fallback per owner/admin + $stmt = $pdo->prepare("SELECT id, name FROM schools WHERE owner_id = ? LIMIT 1"); + $stmt->execute([(int)$iduserlogin]); + $school = $stmt->fetch(PDO::FETCH_ASSOC); + + if (!$school) die("Scuola non trovata."); + $school_id = (int)$school['id']; +} else { + // carica dati scuola + $stmt = $pdo->prepare("SELECT id, name FROM schools WHERE id = ? LIMIT 1"); + $stmt->execute([$school_id]); + $school = $stmt->fetch(PDO::FETCH_ASSOC); + + if (!$school) die("Scuola non trovata."); } -$school_id = (int)$school['id']; /* |-------------------------------------------------------------------------- @@ -50,6 +61,17 @@ $is_new = !$settings; $success_message = ""; $error = ""; +if (!$settings) { + $pdo->prepare(" + INSERT INTO user_settings (school_id, user_id, locale, timezone, created_at, updated_at) + VALUES (?, ?, 'it', 'Europe/Rome', NOW(), NOW()) + ")->execute([$school_id, (int)$iduserlogin]); + + header("Location: user-settings.php"); + exit; +} + + /* |-------------------------------------------------------------------------- | 4) Salvataggio POST diff --git a/public/userarea/user_dashboard.php b/public/userarea/user_dashboard.php index 0c7ea10..77b5c36 100644 --- a/public/userarea/user_dashboard.php +++ b/public/userarea/user_dashboard.php @@ -90,6 +90,8 @@ if (count($userSchools) === 1 && empty($_SESSION['school_id'])) { $_SESSION['school_id'] = (int)$userSchools[0]['id']; $_SESSION['school_name'] = $userSchools[0]['name']; $_SESSION['school_selected'] = 1; + echo $_SESSION['school_name']; + exit; } // Caso: più scuole -> OBBLIGO selezione esplicita