Fix unlink method
This commit is contained in:
+47
-31
@@ -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 ---
|
||||
|
||||
Reference in New Issue
Block a user