Fix unlink method
This commit is contained in:
+47
-31
@@ -150,44 +150,60 @@ class User {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// --- 5. CASSER LE LIEN (DÉLIAISON) ---
|
// --- 5. CASSER LE LIEN (DÉLIAISON) ---
|
||||||
public function unlinkPartner($user_id) {
|
public function unlinkPartner($userId) {
|
||||||
// 1. On cherche d'abord l'ID du partenaire actuel
|
// 1. On récupère l'ID du partenaire
|
||||||
$query = "SELECT partner_id FROM " . $this->table_name . " WHERE id = :user_id LIMIT 1";
|
// (Pense bien à utiliser $this->conn ou $this->db selon ce que tu as corrigé tout à l'heure)
|
||||||
$stmt = $this->conn->prepare($query);
|
$stmt = $this->db->prepare("SELECT partner_id FROM users WHERE id = ?");
|
||||||
$stmt->bindParam(":user_id", $user_id);
|
$stmt->execute([$userId]);
|
||||||
$stmt->execute();
|
$partnerId = $stmt->fetchColumn();
|
||||||
|
|
||||||
$user = $stmt->fetch();
|
if ($partnerId) {
|
||||||
if (!$user || is_null($user['partner_id'])) {
|
// 2. On récupère la liste exacte de tous les films en commun
|
||||||
return ["success" => false, "message" => "Tu n'es lié à personne."];
|
$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 {
|
// S'il ne l'a pas, on lui insère sa copie perso
|
||||||
$this->conn->beginTransaction();
|
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
|
// 4. On repasse TOUS les films de ces deux utilisateurs en perso
|
||||||
$query1 = "UPDATE " . $this->table_name . " SET partner_id = NULL WHERE id = :user_id";
|
$stmt = $this->db->prepare("UPDATE movies SET is_common = 0 WHERE user_id IN (?, ?)");
|
||||||
$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 (?, ?)");
|
|
||||||
$stmt->execute([$userId, $partnerId]);
|
$stmt->execute([$userId, $partnerId]);
|
||||||
|
|
||||||
$this->conn->commit();
|
// 5. On casse le lien dans la table users
|
||||||
return ["success" => true, "message" => "Comptes déliés avec succès."];
|
$stmt = $this->db->prepare("UPDATE users SET partner_id = NULL WHERE id IN (?, ?)");
|
||||||
} catch (Exception $e) {
|
$stmt->execute([$userId, $partnerId]);
|
||||||
$this->conn->rollBack();
|
|
||||||
return ["success" => false, "message" => "Erreur lors de la déliaison."];
|
return ["success" => true, "message" => "Lien rompu et films sauvegardés dans les listes persos."];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return ["success" => false, "message" => "Pas de partenaire trouvé."];
|
||||||
}
|
}
|
||||||
|
|
||||||
// --- UTILS / VALIDATIONS ---
|
// --- UTILS / VALIDATIONS ---
|
||||||
|
|||||||
Reference in New Issue
Block a user