Fix unlink method

This commit is contained in:
2026-07-12 16:10:25 +02:00
parent dd32a2dd12
commit c74140aaad
+47 -31
View File
@@ -150,44 +150,60 @@ class User {
}
// --- 5. CASSER LE LIEN (DÉLIAISON) ---
public function unlinkPartner($user_id) {
// 1. On cherche d'abord l'ID du partenaire actuel
$query = "SELECT partner_id FROM " . $this->table_name . " WHERE id = :user_id LIMIT 1";
$stmt = $this->conn->prepare($query);
$stmt->bindParam(":user_id", $user_id);
$stmt->execute();
public function unlinkPartner($userId) {
// 1. On récupère l'ID du partenaire
// (Pense bien à utiliser $this->conn ou $this->db selon ce que tu as corrigé tout à l'heure)
$stmt = $this->db->prepare("SELECT partner_id FROM users WHERE id = ?");
$stmt->execute([$userId]);
$partnerId = $stmt->fetchColumn();
$user = $stmt->fetch();
if (!$user || is_null($user['partner_id'])) {
return ["success" => false, "message" => "Tu n'es lié à personne."];
}
if ($partnerId) {
// 2. On récupère la liste exacte de tous les films en commun
$stmt = $this->db->prepare("
SELECT tmdb_id, title, poster_path, media_type
FROM movies
WHERE is_common = 1 AND user_id IN (?, ?)
GROUP BY tmdb_id, title, poster_path, media_type
");
$stmt->execute([$userId, $partnerId]);
$commonMovies = $stmt->fetchAll(PDO::FETCH_ASSOC);
$partner_id = $user['partner_id'];
// 3. La distribution des biens : on s'assure que chacun a sa copie
foreach ($commonMovies as $movie) {
foreach ([$userId, $partnerId] as $uid) {
// On vérifie si l'utilisateur possède déjà la ligne physique du film
$checkStmt = $this->db->prepare("SELECT id FROM movies WHERE user_id = ? AND tmdb_id = ?");
$checkStmt->execute([$uid, $movie['tmdb_id']]);
try {
$this->conn->beginTransaction();
// S'il ne l'a pas, on lui insère sa copie perso
if (!$checkStmt->fetch()) {
$insertStmt = $this->db->prepare("
INSERT INTO movies (user_id, tmdb_id, title, poster_path, media_type, is_common)
VALUES (?, ?, ?, ?, ?, 0)
");
$insertStmt->execute([
$uid,
$movie['tmdb_id'],
$movie['title'],
$movie['poster_path'],
$movie['media_type']
]);
}
}
}
// On passe le partner_id à NULL pour les deux utilisateurs
$query1 = "UPDATE " . $this->table_name . " SET partner_id = NULL WHERE id = :user_id";
$stmt1 = $this->conn->prepare($query1);
$stmt1->bindParam(":user_id", $user_id);
$stmt1->execute();
$query2 = "UPDATE " . $this->table_name . " SET partner_id = NULL WHERE id = :partner_id";
$stmt2 = $this->conn->prepare($query2);
$stmt2->bindParam(":partner_id", $partner_id);
$stmt2->execute();
// 2. On repasse TOUS leurs films en mode perso (is_common = 0)
$stmt = $this->conn->prepare("UPDATE movies SET is_common = 0 WHERE user_id IN (?, ?)");
// 4. On repasse TOUS les films de ces deux utilisateurs en perso
$stmt = $this->db->prepare("UPDATE movies SET is_common = 0 WHERE user_id IN (?, ?)");
$stmt->execute([$userId, $partnerId]);
$this->conn->commit();
return ["success" => true, "message" => "Comptes déliés avec succès."];
} catch (Exception $e) {
$this->conn->rollBack();
return ["success" => false, "message" => "Erreur lors de la déliaison."];
// 5. On casse le lien dans la table users
$stmt = $this->db->prepare("UPDATE users SET partner_id = NULL WHERE id IN (?, ?)");
$stmt->execute([$userId, $partnerId]);
return ["success" => true, "message" => "Lien rompu et films sauvegardés dans les listes persos."];
}
return ["success" => false, "message" => "Pas de partenaire trouvé."];
}
// --- UTILS / VALIDATIONS ---