diff --git a/api.php b/api.php index 7d17900..56be31d 100644 --- a/api.php +++ b/api.php @@ -235,8 +235,8 @@ function fetchTMDBFull($title, $year, $apiKey, $pdo) { 'poster' => !empty($details['poster_path']) ? "https://image.tmdb.org/t/p/w500" . $details['poster_path'] : '', 'length' => !empty($details['runtime']) ? $details['runtime'] . ' min' : '', 'streaming' => $streaming, - 'overview' => $overview, // đŸ”„ NOUVEAU - 'cast' => $cast // đŸ”„ NOUVEAU + 'overview' => $overview, + 'cast' => $cast ]; setCache($pdo, $cacheKey, $result, 'tmdb'); @@ -293,9 +293,17 @@ switch ($action) { break; case 'get_films': - $crit = $pdo->query("SELECT *, 'critique' AS type FROM critiques ORDER BY id DESC")->fetchAll(); - $video = $pdo->query("SELECT *, 'videotheque' AS type FROM videotheque ORDER BY id DESC")->fetchAll(); - echo json_encode(array_merge($crit, $video)); + // Fusion parfaite des deux tables avec des colonnes neutres (NULL) pour harmoniser le flux + $sql = " + SELECT id, title, year, director, poster, rating, review, NULL AS description, streaming, 'critique' AS type + FROM critiques + UNION ALL + SELECT id, title, year, director, poster, NULL AS rating, NULL AS review, description, NULL AS streaming, 'videotheque' AS type + FROM videotheque + ORDER BY id DESC + "; + $result = $pdo->query($sql)->fetchAll(); + echo json_encode($result); break; case 'search_ean_full': @@ -306,7 +314,7 @@ switch ($action) { 'poster' => '', 'publisher' => '', 'format' => '', 'length' => '', 'number_of_discs' => 1, 'aspect_ratio' => '', 'actors' => '' ]; - $upcData = fetchUPCitemdb($ean, $pdo); + $upcData = fetchUPCitemdb($ean, $pdo); $tmdbQueryTitle = ""; if ($upcData) { $tmdbQueryTitle = $upcData['title']; @@ -316,11 +324,10 @@ switch ($action) { $result['format'] = $upcData['format']; } - // đŸ”„ NOUVEAU : DVDFr pour remplacer l'affiche ET le synopsis lors d'un ajout manuel - $dvdfrData = fetchDVDFr($ean, $pdo); - if (!empty($dvdfrData)) { - if (!empty($dvdfrData['poster'])) $result['poster'] = $dvdfrData['poster']; - if (!empty($dvdfrData['synopsis'])) $result['description'] = $dvdfrData['synopsis']; + // đŸ”„ NOUVEAU : DVDFr pour remplacer l'affiche lors d'un ajout manuel + $dvdfrCover = fetchDVDFr($ean, $pdo); + if (!empty($dvdfrCover)) { + $result['poster'] = $dvdfrCover; } $tmdbKey = getTmdbApiKey($pdo); if ($tmdbKey && $tmdbQueryTitle) { @@ -427,7 +434,7 @@ switch ($action) { $actors = implode(', ', array_slice($actorsArray, 0, 4)); } -// 1. UPCitemDB + // 1. UPCitemDB if (!empty($ean)) { $upcData = fetchUPCitemdb($ean, $pdo); if ($upcData) { @@ -437,65 +444,66 @@ switch ($action) { if (empty($format) || $format === 'Blu-ray') $format = $upcData['format']; } - // đŸ”„ 1.5 DVDFr (RĂ©cupĂšre uniquement la vraie jaquette FR) - $dvdfrCover = fetchDVDFr($ean, $pdo); - if (!empty($dvdfrCover)) { - $poster = $dvdfrCover; - } - - // 2. TMDB (DonnĂ©es Officielles & Synopsis) - if ($tmdbApiKey && !empty($title)) { - // Premier essai classique - $tmdbData = fetchTMDBFull($title, $year, $tmdbApiKey, $pdo); - - // đŸ”„ NOUVEAU : Si TMDB ne trouve rien (cas des Coffrets ou titres multiples) - if (!$tmdbData || empty($tmdbData['overview'])) { - $cleanTitle = $title; - - // A. Supprime les mots parasites - $cleanTitle = preg_ireplace(['coffret ', 'l\'intĂ©grale ', 'intĂ©grale ', 'trilogie ', 'quadrilogie ', 'collection '], '', $cleanTitle); - - // B. SĂ©pare les listes de films (ex: "Alien / Aliens" ou "Batman + Batman Le DĂ©fi") - $cleanTitle = preg_split('/(\/|\+)/', $cleanTitle)[0]; - - // C. SĂ©pare les tirets longs (ex: "Le Parrain - L'intĂ©grale") - $cleanTitle = explode(' - ', $cleanTitle)[0]; - - $cleanTitle = trim($cleanTitle); - - // Si le titre a Ă©tĂ© nettoyĂ©, on relance TMDB avec le titre du 1er film - if (!empty($cleanTitle) && $cleanTitle !== $title) { - // On omet volontairement l'annĂ©e, car l'annĂ©e du coffret n'est pas celle du 1er film - $tmdbFallback = fetchTMDBFull($cleanTitle, '', $tmdbApiKey, $pdo); - if ($tmdbFallback && !empty($tmdbFallback['overview'])) { - $tmdbData = $tmdbFallback; - } - } + // đŸ”„ 1.5 DVDFr (RĂ©cupĂšre uniquement la vraie jaquette FR) + $dvdfrCover = fetchDVDFr($ean, $pdo); + if (!empty($dvdfrCover)) { + $poster = $dvdfrCover; } - if ($tmdbData) { - if (!empty($tmdbData['title'])) $title = $tmdbData['title']; + // 2. TMDB (DonnĂ©es Officielles & Synopsis) + if ($tmdbApiKey && !empty($title)) { + // Premier essai classique + $tmdbData = fetchTMDBFull($title, $year, $tmdbApiKey, $pdo); - if (empty($director)) { - $director = $tmdbData['director'] ?? ''; - } elseif (!empty($tmdbData['director']) && strpos($director, ',') === false && strpos($tmdbData['director'], ',') !== false) { - $director = $tmdbData['director']; + // đŸ”„ NOUVEAU : Si TMDB ne trouve rien (cas des Coffrets ou titres multiples) + if (!$tmdbData || empty($tmdbData['overview'])) { + $cleanTitle = $title; + + // A. Supprime les mots parasites + $cleanTitle = preg_ireplace(['coffret ', 'l\'intĂ©grale ', 'intĂ©grale ', 'trilogie ', 'quadrilogie ', 'collection '], '', $cleanTitle); + + // B. SĂ©pare les listes de films (ex: "Alien / Aliens" ou "Batman + Batman Le DĂ©fi") + $cleanTitle = preg_split('/(\/|\+)/', $cleanTitle)[0]; + + // C. SĂ©pare les tirets longs (ex: "Le Parrain - L'intĂ©grale") + $cleanTitle = explode(' - ', $cleanTitle)[0]; + + $cleanTitle = trim($cleanTitle); + + // Si le titre a Ă©tĂ© nettoyĂ©, on relance TMDB avec le titre du 1er film + if (!empty($cleanTitle) && $cleanTitle !== $title) { + // On omet volontairement l'annĂ©e, car l'annĂ©e du coffret n'est pas celle du 1er film + $tmdbFallback = fetchTMDBFull($cleanTitle, '', $tmdbApiKey, $pdo); + if ($tmdbFallback && !empty($tmdbFallback['overview'])) { + $tmdbData = $tmdbFallback; + } + } } - - if (empty($year) && !empty($tmdbData['year'])) $year = $tmdbData['year']; - if (empty($length) && !empty($tmdbData['length'])) $length = $tmdbData['length']; - - // LIGNE DÉSACTIVÉE : TMDB ne touche jamais Ă  l'affiche de la vidĂ©othĂšque - // if (empty($poster) && !empty($tmdbData['poster'])) $poster = $tmdbData['poster']; - - // đŸ”„ RĂ©cupĂ©ration du Synopsis via TMDB (MĂȘme pour le 1er film d'un coffret) - if (!empty($tmdbData['overview'])) { - $description = $tmdbData['overview']; - } - - // RĂ©cupĂ©ration des Acteurs officiels (Top 4) - if (!empty($tmdbData['cast'])) { - $actors = implode(', ', $tmdbData['cast']); + + if ($tmdbData) { + if (!empty($tmdbData['title'])) $title = $tmdbData['title']; + + if (empty($director)) { + $director = $tmdbData['director'] ?? ''; + } elseif (!empty($tmdbData['director']) && strpos($director, ',') === false && strpos($tmdbData['director'], ',') !== false) { + $director = $tmdbData['director']; + } + + if (empty($year) && !empty($tmdbData['year'])) $year = $tmdbData['year']; + if (empty($length) && !empty($tmdbData['length'])) $length = $tmdbData['length']; + + // LIGNE DÉSACTIVÉE : TMDB ne touche jamais Ă  l'affiche de la vidĂ©othĂšque + // if (empty($poster) && !empty($tmdbData['poster'])) $poster = $tmdbData['poster']; + + // đŸ”„ RĂ©cupĂ©ration du Synopsis via TMDB (MĂȘme pour le 1er film d'un coffret) + if (!empty($tmdbData['overview'])) { + $description = $tmdbData['overview']; + } + + // RĂ©cupĂ©ration des Acteurs officiels (Top 4) + if (!empty($tmdbData['cast'])) { + $actors = implode(', ', $tmdbData['cast']); + } } } }