getConnection(); // ID dell'utente loggato (assumiamo sia definito) if (!isset($iduserlogin)) { die("Errore: ID utente non definito."); } // Recupera i dati dell'insegnante $stmt = $pdo->prepare(" SELECT t.*, u.first_name, u.last_name, u.email FROM auth_users u LEFT JOIN teachers t ON t.user_id = u.id WHERE u.id = ? "); $stmt->execute([$iduserlogin]); $teacher = $stmt->fetch(); if (!$teacher) { die("Errore: Utente non trovato."); } // Determina se è un nuovo insegnante $is_new = !isset($teacher['id']); if ($is_new) { $teacher = [ 'id' => null, 'user_id' => $iduserlogin, 'unique_code' => '', 'phone' => '', 'description' => '', 'specializations' => '', 'profile_picture' => '', 'status' => 'active', 'created_at' => '', 'updated_at' => '', 'first_name' => $teacher['first_name'], 'last_name' => $teacher['last_name'], 'email' => $teacher['email'] ]; } // Funzione per generare un codice univoco function generateUniqueCode($pdo, $length = 16) { do { $code = bin2hex(random_bytes($length / 2)); $stmt = $pdo->prepare("SELECT COUNT(*) FROM teachers WHERE unique_code = ?"); $stmt->execute([$code]); $count = $stmt->fetchColumn(); } while ($count > 0); return $code; } // Generazione del QR Code $qr_code_path = null; if (!$is_new) { try { $unique_code = $teacher['unique_code']; if (empty($unique_code)) { throw new Exception("Errore: unique_code è vuoto."); } $base_dir = __DIR__ . '/../../public/userarea/phototeachers/qrcodes/'; $qr_code_filename = "{$base_dir}{$iduserlogin}-{$unique_code}.png"; $qr_code_path = "phototeachers/qrcodes/{$iduserlogin}-{$unique_code}.png"; if (!file_exists($qr_code_filename)) { if (!is_dir($base_dir)) { mkdir($base_dir, 0755, true) or die("Errore: Impossibile creare la directory."); } if (!is_writable($base_dir)) { die("Errore: La directory non è scrivibile."); } $builder = new Builder(); $result = $builder->build( writer: new PngWriter(), data: $unique_code, size: 150, margin: 10 ); $result->saveToFile($qr_code_filename); } } catch (Exception $e) { $error = "Errore generazione QR Code: " . $e->getMessage(); error_log($error); } } // Gestione del form if ($_SERVER['REQUEST_METHOD'] === 'POST') { $first_name = $_POST['first_name']; $last_name = $_POST['last_name']; $phone = $_POST['phone'] ?? null; $description = $_POST['description'] ?? null; $specializations = $_POST['specializations'] ?? null; $status = $_POST['status'] === 'active' ? 'active' : 'inactive'; // Gestione del caricamento della foto $profile_picture = $teacher['profile_picture']; if (isset($_FILES['profile_picture']) && $_FILES['profile_picture']['error'] === UPLOAD_ERR_OK) { $file = $_FILES['profile_picture']; $timestamp = time(); $original_name = basename($file['name']); $extension = strtolower(pathinfo($original_name, PATHINFO_EXTENSION)); $allowed_extensions = ['jpg', 'jpeg', 'png', 'gif']; if (in_array($extension, $allowed_extensions)) { $new_filename = "phototeachers/{$iduserlogin}-{$timestamp}-{$original_name}"; if (move_uploaded_file($file['tmp_name'], $new_filename)) { $profile_picture = $new_filename; if ($teacher['profile_picture'] && file_exists($teacher['profile_picture']) && !$is_new) { unlink($teacher['profile_picture']); } } else { $error = "Errore durante il caricamento della foto."; } } else { $error = "Estensione del file non consentita. Usa JPG, JPEG, PNG o GIF."; } } // Aggiorna auth_users $stmt = $pdo->prepare("UPDATE auth_users SET first_name = ?, last_name = ? WHERE id = ?"); $stmt->execute([$first_name, $last_name, $iduserlogin]); if ($is_new) { $unique_code = generateUniqueCode($pdo); $stmt = $pdo->prepare(" INSERT INTO teachers (user_id, unique_code, phone, description, specializations, profile_picture, status) VALUES (?, ?, ?, ?, ?, ?, ?) "); $success = $stmt->execute([$iduserlogin, $unique_code, $phone, $description, $specializations, $profile_picture, $status]); if ($success) { $success_message = "Insegnante creato con successo!"; $stmt = $pdo->prepare(" SELECT t.*, u.first_name, u.last_name, u.email FROM auth_users u LEFT JOIN teachers t ON t.user_id = u.id WHERE u.id = ? "); $stmt->execute([$iduserlogin]); $teacher = $stmt->fetch(); $is_new = false; // Genera QR Code per il nuovo insegnante try { $base_dir = __DIR__ . '/../../public/phototeachers/qrcodes/'; $qr_code_filename = "{$base_dir}{$iduserlogin}-{$unique_code}.png"; $qr_code_path = "phototeachers/qrcodes/{$iduserlogin}-{$unique_code}.png"; if (!file_exists($qr_code_filename)) { if (!is_dir($base_dir)) { mkdir($base_dir, 0755, true) or die("Errore: Impossibile creare la directory."); } $builder = new Builder(); $result = $builder->build( writer: new PngWriter(), data: $unique_code, size: 150, margin: 10 ); $result->saveToFile($qr_code_filename); } } catch (Exception $e) { $error = "Errore generazione QR Code: " . $e->getMessage(); error_log($error); } } else { $error = "Errore durante la creazione dell'insegnante."; } } else { $stmt = $pdo->prepare(" UPDATE teachers SET phone = ?, description = ?, specializations = ?, profile_picture = ?, status = ? WHERE user_id = ? "); $success = $stmt->execute([$phone, $description, $specializations, $profile_picture, $status, $iduserlogin]); if ($success) { $success_message = "Dati aggiornati con successo!"; $stmt = $pdo->prepare(" SELECT t.*, u.first_name, u.last_name, u.email FROM auth_users u LEFT JOIN teachers t ON t.user_id = u.id WHERE u.id = ? "); $stmt->execute([$iduserlogin]); $teacher = $stmt->fetch(); } else { $error = "Errore durante l'aggiornamento dei dati."; } } } ?>