ajout SAE PHP 19/20 Meilleure note de la promo
This commit is contained in:
169
SAE2.02_Application_WEB/application/models/Critique_model.php
Normal file
169
SAE2.02_Application_WEB/application/models/Critique_model.php
Normal file
@@ -0,0 +1,169 @@
|
||||
<?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
|
||||
]);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user