diff --git a/codeigniter-develop/application/controllers/Jeux.php b/codeigniter-develop/application/controllers/Jeux.php index a1a3d52..5ef02cd 100644 --- a/codeigniter-develop/application/controllers/Jeux.php +++ b/codeigniter-develop/application/controllers/Jeux.php @@ -3,71 +3,43 @@ defined('BASEPATH') OR exit('No direct script access allowed'); class Jeux extends CI_Controller { - public function ajouter(){ - $this->load->helper('url'); - $this->load->helper('form'); - $this->load->view("formulaire_ajout"); + public function ajouter() { + $this->load->helper(array('url', 'form')); + $this->load->model('Category_model'); + $this->load->model('Genre_model'); + + $donnees['categories'] = $this->Category_model->get_all(); + $donnees['genres'] = $this->Genre_model->get_all(); + + $this->load->view("formulaire_ajout", $donnees); } public function sauvegarder() { $this->load->helper('url'); - $titre = $this->input->post('titre'); - $annee = $this->input->post('annee'); - $description = $this->input->post('description'); - $prix = $this->input->post('prix'); + + $titre = $this->input->post('name'); + $annee = $this->input->post('releaseYear'); + $description = $this->input->post('shortDescription'); + $prix = $this->input->post('price'); + $developer_name = $this->input->post('developer_name'); + $categories = $this->input->post('categories'); + $genres = $this->input->post('genres'); + + $jpeg_data = NULL; + if (!empty($_FILES['poster']['tmp_name'])) { + $jpeg_data = file_get_contents($_FILES['poster']['tmp_name']); + } $this->load->model('Game_model'); - - $insertion_reussie = $this->Game_model->ajouter_jeu($titre, $annee, $description, $prix); + $insertion_reussie = $this->Game_model->ajouter_jeu($titre, $annee, $description, $prix, $developer_name, $categories, $genres, $jpeg_data); if ($insertion_reussie) { $donnees['titre_message'] = "Succès !"; - $donnees['contenu_message'] = "Le jeu " . html_escape($titre) . " a bien été ajouté à la base de données."; - $donnees['lien_retour'] = 'jeux/ajouter'; + $donnees['contenu_message'] = "Le jeu a bien été ajouté à la base de données avec toutes ses informations."; + $donnees['lien_retour'] = 'jeux/lister'; } else { $donnees['titre_message'] = "Erreur"; - $donnees['contenu_message'] = "impossible d'ajouter le jeu."; - $donnees['lien_retour'] = 'jeux/ajouter'; - } - - $this->load->view('message_vue', $donnees); - } - - - public function mettre_a_jour($id) { - $titre = $this->input->post('titre'); - $annee = $this->input->post('annee'); - $description = $this->input->post('description'); - $prix = $this->input->post('prix'); - - $this->load->model('Game_model'); - $succes = $this->Game_model->modifier_jeu($id, $titre, $annee, $description, $prix); - - if ($succes) { - $donnees['titre_message'] = "Succès !"; - $donnees['contenu_message'] = "Le jeu " . html_escape($titre) . " a bien été modifié."; - $donnees['lien_retour'] = 'jeux/modifier/' . $id; - } else { - $donnees['titre_message'] = "Erreur"; - $donnees['contenu_message'] = "Erreur lors de la modification du jeu."; - $donnees['lien_retour'] = 'jeux/modifier/' . $id; - } - - $this->load->view('message_vue', $donnees); - } - - - public function supprimer($id) { - $this->load->model('Game_model'); - $succes = $this->Game_model->supprimer_jeu($id); - - if ($succes) { - $donnees['titre_message'] = "Succès !"; - $donnees['contenu_message'] = "Le jeu numéro " . $id . " a bien été supprimé de la base de données."; - $donnees['lien_retour'] = 'jeux/ajouter'; - } else { - $donnees['titre_message'] = "Erreur"; - $donnees['contenu_message'] = "Aïe, impossible de supprimer le jeu."; + $donnees['contenu_message'] = "Impossible d'ajouter le jeu."; $donnees['lien_retour'] = 'jeux/ajouter'; } @@ -75,24 +47,69 @@ class Jeux extends CI_Controller { } public function modifier($id) { + $this->load->helper(array('url', 'form')); $this->load->model('Game_model'); + $this->load->model('Category_model'); + $this->load->model('Genre_model'); - $donnees['jeu'] = $this->Game_model->get_jeu($id); + $donnees['jeu'] = $this->Game_model->get_by_id($id); + if (empty($donnees['jeu'])) { show_404(); } + + $donnees['categories'] = $this->Category_model->get_all(); + $donnees['genres'] = $this->Genre_model->get_all(); - if (empty($donnees['jeu'])) { - show_404(); - } + $donnees['jeu_categories'] = array_column($this->Category_model->get_by_game($id), 'id'); + $donnees['jeu_genres'] = array_column($this->Genre_model->get_by_game($id), 'id'); $this->load->view('formulaire_ajout', $donnees); } - public function lister($tri = 'name') { - $this->load->model('Game_model'); + public function mettre_a_jour($id) { + $this->load->helper('url'); - $donnees['jeux'] = $this->Game_model->get_tous_les_jeux($tri); + $titre = $this->input->post('name'); + $annee = $this->input->post('releaseYear'); + $description = $this->input->post('shortDescription'); + $prix = $this->input->post('price'); + $developer_name = $this->input->post('developer_name'); + $categories = $this->input->post('categories'); + $genres = $this->input->post('genres'); - $this->load->view('liste_jeux_vue', $donnees); + $this->load->model('Game_model'); + $succes = $this->Game_model->modifier_jeu($id, $titre, $annee, $description, $prix, $developer_name, $categories, $genres); + + if ($succes) { + $donnees['titre_message'] = "Succès !"; + $donnees['contenu_message'] = "Le jeu a bien été mis à jour."; + $donnees['lien_retour'] = 'jeux/lister'; + } else { + $donnees['titre_message'] = "Erreur"; + $donnees['contenu_message'] = "Erreur lors de la modification."; + $donnees['lien_retour'] = 'jeux/modifier/' . $id; + } + + $this->load->view('message_vue', $donnees); } + public function supprimer($id) { + $this->load->model('Game_model'); + $succes = $this->Game_model->supprimer_jeu($id); + + if ($succes) { + $donnees['titre_message'] = "Succès !"; + $donnees['contenu_message'] = "Le jeu a bien été supprimé."; + $donnees['lien_retour'] = 'jeux/lister'; + } else { + $donnees['titre_message'] = "Erreur"; + $donnees['contenu_message'] = "Impossible de supprimer le jeu."; + $donnees['lien_retour'] = 'jeux/lister'; + } + $this->load->view('message_vue', $donnees); + } -} + public function lister($tri = 'name') { + $this->load->model('Game_model'); + $donnees['jeux'] = $this->Game_model->get_tous_les_jeux($tri); + $this->load->view('liste_jeux_vue', $donnees); + } +} \ No newline at end of file diff --git a/codeigniter-develop/application/models/Game_model.php b/codeigniter-develop/application/models/Game_model.php index 9b7c146..43888bc 100644 --- a/codeigniter-develop/application/models/Game_model.php +++ b/codeigniter-develop/application/models/Game_model.php @@ -7,29 +7,24 @@ class Game_model extends CI_Model { $this->db->select('*'); $this->db->from('game'); $this->db->like('name', $keyword); - $query = $this->db->get(); return $query->result_array(); } - public function get_by_category($category_id) { $this->db->select('game.*'); $this->db->from('game'); - $this->db->join('game_category', 'game_category.gameId = game.id'); // C'était ICI l'erreur ! + $this->db->join('game_category', 'game_category.gameId = game.id'); $this->db->where('game_category.categoryId', $category_id); - $query = $this->db->get(); return $query->result_array(); } - public function get_by_genre($genre_id) { $this->db->select('game.*'); $this->db->from('game'); - $this->db->join('game_genre', 'game_genre.gameId = game.id'); // Et ICI ! + $this->db->join('game_genre', 'game_genre.gameId = game.id'); $this->db->where('game_genre.genreId', $genre_id); - $query = $this->db->get(); return $query->result_array(); } @@ -37,59 +32,110 @@ class Game_model extends CI_Model { public function get_by_id($game_id) { $this->db->select('game.*, developer.name as developer_name, poster.jpeg as poster_url'); $this->db->from('game'); - $this->db->join('developer', 'developer.id = game.developerId', 'left'); $this->db->join('poster', 'poster.id = game.posterId', 'left'); - $this->db->where('game.id', $game_id); - $query = $this->db->get(); return $query->row_array(); } - public function ajouter_jeu($titre, $annee, $description, $prix) { + public function ajouter_jeu($titre, $annee, $description, $prix, $developer_name = null, $categories = [], $genres = [], $jpeg_data = null) { + // 1. Gérer le développeur + $dev_id = NULL; + if (!empty($developer_name)) { + $dev = $this->db->get_where('developer', array('name' => $developer_name))->row_array(); + if ($dev) { + $dev_id = $dev['id']; // Il existe déjà + } else { + $this->db->insert('developer', array('name' => $developer_name)); + $dev_id = $this->db->insert_id(); // On le crée + } + } + + $poster_id = NULL; + if (!empty($jpeg_data)) { + $this->db->insert('poster', array('jpeg' => $jpeg_data)); + $poster_id = $this->db->insert_id(); + } + $donnees = array( 'name' => $titre, 'releaseYear' => $annee, 'shortDescription' => $description, - 'price' => empty($prix) ? NULL : $prix + 'price' => empty($prix) ? NULL : $prix, + 'developerId' => $dev_id, + 'posterId' => $poster_id ); - return $this->db->insert('game', $donnees); + $this->db->insert('game', $donnees); + $game_id = $this->db->insert_id(); + + if (!empty($categories)) { + foreach ($categories as $cat_id) { + $this->db->insert('game_category', array('gameId' => $game_id, 'categoryId' => $cat_id)); + } + } + + if (!empty($genres)) { + foreach ($genres as $gen_id) { + $this->db->insert('game_genre', array('gameId' => $game_id, 'genreId' => $gen_id)); + } + } + + return true; + } + + + public function modifier_jeu($id, $titre, $annee, $description, $prix, $developer_name = null, $categories = [], $genres = []) { + $dev_id = NULL; + if (!empty($developer_name)) { + $dev = $this->db->get_where('developer', array('name' => $developer_name))->row_array(); + if ($dev) { + $dev_id = $dev['id']; + } else { + $this->db->insert('developer', array('name' => $developer_name)); + $dev_id = $this->db->insert_id(); + } + } + + $donnees = array( + 'name' => $titre, + 'releaseYear' => $annee, + 'shortDescription' => $description, + 'price' => empty($prix) ? NULL : $prix, + 'developerId' => $dev_id + ); + $this->db->where('id', $id); + $this->db->update('game', $donnees); + + $this->db->delete('game_category', array('gameId' => $id)); + if (!empty($categories)) { + foreach ($categories as $cat_id) { + $this->db->insert('game_category', array('gameId' => $id, 'categoryId' => $cat_id)); + } + } + + $this->db->delete('game_genre', array('gameId' => $id)); + if (!empty($genres)) { + foreach ($genres as $gen_id) { + $this->db->insert('game_genre', array('gameId' => $id, 'genreId' => $gen_id)); + } + } + + return true; } public function supprimer_jeu($id) { return $this->db->delete('game', array('id' => $id)); } - public function get_jeu($id) { - $leJeu = $this->db->get_where('game', array('id' => $id)); - return $leJeu->row_array(); - } - - public function modifier_jeu($id, $titre, $annee, $description, $prix) { - $donnees = array( - 'name' => $titre, - 'releaseYear' => $annee, - 'shortDescription' => $description, - 'price' => empty($prix) ? NULL : $prix - ); - - $this->db->where('id', $id); - return $this->db->update('game', $donnees); - } - - public function get_tous_les_jeux($critere_tri = 'id') { $tris_autorises = array('id', 'name', 'releaseYear', 'price'); - if (!in_array($critere_tri, $tris_autorises)) { $critere_tri = 'id'; } - $this->db->order_by($critere_tri, 'ASC'); $query = $this->db->get('game'); - return $query->result_array(); } diff --git a/codeigniter-develop/application/views/formulaire_ajout.php b/codeigniter-develop/application/views/formulaire_ajout.php index d0b3a18..6720397 100644 --- a/codeigniter-develop/application/views/formulaire_ajout.php +++ b/codeigniter-develop/application/views/formulaire_ajout.php @@ -1,68 +1,113 @@ +
-