prepare($query); $stmt->bindParam(':user_id', $user_id, PDO::PARAM_INT); $stmt->execute(); $user = $stmt->fetch(PDO::FETCH_ASSOC); // Se il ruolo non è 'admin' o 'paid', reindirizza if ($user && !in_array($user['role'], ['admin', 'paid'])) { exit(); } elseif (!$user) { // Se l'utente non esiste nel db (sessione corrotta, ecc.) exit(); } // --------------------------------------------------------------------- // RECUPERO DATI E COSTRUZIONE DELLE RELEASE POSSEDUTE // --------------------------------------------------------------------- // Preleva i color_variation_ids salvati per l'utente $query = "SELECT color_variation_ids FROM users WHERE id = :user_id"; $stmt = $pdo->prepare($query); $stmt->bindParam(':user_id', $_SESSION['user_id'], PDO::PARAM_INT); $stmt->execute(); $user = $stmt->fetch(PDO::FETCH_ASSOC); $user_color_variation_ids = json_decode($user['color_variation_ids'] ?? '[]', true); // Array per memorizzare le release possedute $releases = []; $processed_releases = []; // Per ognuno dei color_variation_ids dell'utente, risaliamo alla release corrispondente foreach ($user_color_variation_ids as $color_variation_id) { $release_id_stmt = $pdo->prepare("SELECT release_id FROM color_variations WHERE id = :color_variation_id"); $release_id_stmt->bindParam(':color_variation_id', $color_variation_id, PDO::PARAM_INT); $release_id_stmt->execute(); $release_id = $release_id_stmt->fetchColumn(); // Evita di inserire la stessa release se già processata if ($release_id && !in_array($release_id, $processed_releases)) { $processed_releases[] = $release_id; // Carica i dati della release (id, catalog_number, artist, album, ecc.) $release_stmt = $pdo->prepare(" SELECT id, catalog_number, artist, album, release_date, front_image FROM releases WHERE id = :release_id "); $release_stmt->bindParam(':release_id', $release_id, PDO::PARAM_INT); $release_stmt->execute(); $release = $release_stmt->fetch(PDO::FETCH_ASSOC); if ($release) { // Carica tutte le color_variations relative a questa release $color_variations_stmt = $pdo->prepare(" SELECT id, color_name, disc_image FROM color_variations WHERE release_id = :release_id "); $color_variations_stmt->bindParam(':release_id', $release_id, PDO::PARAM_INT); $color_variations_stmt->execute(); $color_variations = $color_variations_stmt->fetchAll(PDO::FETCH_ASSOC); // Rimuovi eventuali duplicati di disc_image e aggiungi flag "owned" $unique_images = []; foreach ($color_variations as $cv) { if (!isset($unique_images[$cv['disc_image']])) { $cv['owned'] = in_array($cv['id'], $user_color_variation_ids); $unique_images[$cv['disc_image']] = $cv; } } // Assegna le variazioni de-duplicate alla release $release['color_variations'] = array_values($unique_images); // Aggiungi la release all'array generale $releases[] = $release; } } } // Ordina le release in base al catalog_number (ordinamento naturale es. RL001, RL010, RL011) usort($releases, fn($a, $b) => strnatcmp($a['catalog_number'], $b['catalog_number'])); // --------------------------------------------------------------------- // OUTPUT HTML // --------------------------------------------------------------------- ?>