Files
DEV/SAE2.02_Application_WEB/application/models/Critique_model.php
2025-12-05 10:30:43 +01:00

170 lines
4.6 KiB
PHP

<?php
defined('BASEPATH') OR exit('No direct script access allowed');
class Critique_model extends CI_Model {
public function __construct() {
parent::__construct();
$this->load->database();
}
/**
* Ajouter une critique
*/
public function add_critique($data)
{
if (empty($data['user_id']) || empty($data['note'])) {
return false;
}
// Vérifie si une critique existe déjà pour cette série et cette saison (ou pour la série entière si saison_id est NULL)
$sql_check = "
SELECT id FROM critiques
WHERE user_id = ? AND tvshow_id = ? AND (
(season_id IS NULL AND ? IS NULL) OR season_id = ?
)
";
$season_id = $data['season_id'] ?? null;
$existing = $this->db->query($sql_check, [
$data['user_id'],
$data['tvshow_id'],
$season_id,
$season_id
])->row();
if ($existing) {
return false; // Critique déjà existante
}
// Insertion de la critique
$sql_insert = "
INSERT INTO critiques (user_id, tvshow_id, season_id, note, commentaire, date_creation)
VALUES (?, ?, ?, ?, ?, ?)
";
$this->db->query($sql_insert, [
$data['user_id'],
$data['tvshow_id'],
$season_id,
$data['note'],
$data['commentaire'],
$data['date_creation']
]);
return $this->db->affected_rows() > 0;
}
/**
* Moyenne des notes pour une série
*/
public function getAverageRating($tvshow_id) {
$sql = "
SELECT AVG(note) AS moyenne, COUNT(*) AS nb_votes
FROM critiques
WHERE tvshow_id = ?
";
return $this->db->query($sql, [$tvshow_id])->row_array();
}
/**
* Récupère les critiques d'une série avec email auteur
*/
public function get_critiques_by_tvshow($tvshow_id) {
$sql = "
SELECT c.*, u.email AS auteur
FROM critiques c
JOIN users u ON u.id = c.user_id
WHERE c.tvshow_id = ?
";
return $this->db->query($sql, [$tvshow_id])->result();
}
/**
* Récupère les critiques d'une saison
*/
public function get_critiques_by_season($season_id) {
$sql = "
SELECT c.*, u.username
FROM critiques c
JOIN users u ON u.id = c.user_id
WHERE c.season_id = ?
ORDER BY c.date_creation DESC
";
return $this->db->query($sql, [$season_id])->result();
}
/**
* Récupère les critiques d'un utilisateur
*/
public function get_critiques_by_user($user_id) {
$sql = "
SELECT c.*,
t.name AS tvshow_name,
t.id AS tvshow_id,
p.jpeg,
u.email AS auteur
FROM critiques c
JOIN users u ON u.id = c.user_id
JOIN tvshow t ON t.id = c.tvshow_id
LEFT JOIN poster p ON p.id = t.posterId
WHERE c.user_id = ?
ORDER BY c.id DESC
";
return $this->db->query($sql, [$user_id])->result();
}
/**
* Récupère toutes les critiques
*/
public function get_all_critiques() {
$sql = "
SELECT c.*, u.username, t.name AS tvshow_name, s.season_number
FROM critiques c
JOIN users u ON u.id = c.user_id
LEFT JOIN tvshow t ON t.id = c.tvshow_id
LEFT JOIN season s ON s.id = c.season_id
ORDER BY c.date_creation DESC
";
return $this->db->query($sql)->result();
}
/**
* Récupère une critique par ID
*/
public function get_by_id($id) {
$sql = "
SELECT c.*,
t.name AS tvshow_name,
t.id AS tvshow_id,
p.jpeg,
u.email AS auteur
FROM critiques c
JOIN users u ON u.id = c.user_id
JOIN tvshow t ON t.id = c.tvshow_id
LEFT JOIN poster p ON p.id = t.posterId
WHERE c.id = ?
LIMIT 1
";
return $this->db->query($sql, [$id])->row();
}
/**
* Mise à jour d'une critique
*/
public function update_critique($id, $data) {
$sql = "
UPDATE critiques
SET note = ?, commentaire = ?, date_creation = NOW()
WHERE id = ?
";
return $this->db->query($sql, [
$data['note'],
$data['commentaire'],
$id
]);
}
}