From 4f77b89eeb81bc06211fa20d7a0e28f52a6347e7 Mon Sep 17 00:00:00 2001
From: follea <thomas.follea@gmail.com>
Date: Wed, 19 Jun 2024 15:26:24 +0200
Subject: [PATCH] =?UTF-8?q?Ajout=20de=20g=C3=A9n=C3=A9ration=20par=20genre?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 .../application/controllers/Playlist.php      | 18 ++++++-------
 .../application/models/Model_music.php        | 25 ++++++++++++++-----
 .../application/views/playlist_generate.php   |  9 ++++++-
 .../application/views/playlist_list.php       |  4 +--
 4 files changed, 37 insertions(+), 19 deletions(-)

diff --git a/codeigniter/application/controllers/Playlist.php b/codeigniter/application/controllers/Playlist.php
index a877cfa..92c3c3a 100644
--- a/codeigniter/application/controllers/Playlist.php
+++ b/codeigniter/application/controllers/Playlist.php
@@ -67,7 +67,7 @@ class Playlist extends CI_Controller {
                 echo "Playlist non trouvée.";
             }
         }else{
-            redirect('albums');
+            redirect('playlist');
         }
         
         
@@ -136,20 +136,20 @@ public function choix_playlist($albumId) {
         redirect('playlist/view/' . $playlistId);
     }
 
-    public function generate(){
-        
-        $this->load->view('layout/header');
-        $this->load->view('playlist_generate');
-        $this->load->view('layout/footer');
-    }
-
+  
     public function generate_random(){
+        $genres = $this->model_music->getGenres();
+        $this->load->view('layout/header');
+        $this->load->view('playlist_generate', ['genres' => $genres]);
+        $this->load->view('layout/footer');
+
+        $genre = $this->input->post('genre');
         $numSongs = (int)$this->input->post('numSongs');
         $playlistName = $this->input->post('playlistName');
         $userId = $this->session->userdata('user_id');
     
         if ($numSongs > 0 && !empty($playlistName)) {
-            $playlistId = $this->model_music->generate_random_playlist($numSongs, $playlistName, $userId);
+            $playlistId = $this->model_music->generate_random_playlist($numSongs, $playlistName, $userId, $genre);
             redirect('playlist/view/' . $playlistId);
         } else {
             echo "Erreur : Veuillez entrer un nombre de chansons valide et un nom de playlist.";
diff --git a/codeigniter/application/models/Model_music.php b/codeigniter/application/models/Model_music.php
index 0e3d549..1b2fe75 100644
--- a/codeigniter/application/models/Model_music.php
+++ b/codeigniter/application/models/Model_music.php
@@ -197,10 +197,21 @@ class Model_music extends CI_Model {
         return $query->row(); 
     }
 
-    public function generate_random_playlist($numSongs, $playlistName, $userId) {
-        $query = $this->db->query(
-            "SELECT id FROM song ORDER BY RAND() LIMIT ?", array((int)$numSongs)
-        );
+    public function generate_random_playlist($numSongs, $playlistName, $userId, $genre = '') {
+        $this->db->select('song.id'); 
+        $this->db->from('song');
+        $this->db->join('track', 'track.songId = song.id');
+        $this->db->join('album', 'track.albumId = album.id');
+        $this->db->join('genre', 'album.genreId = genre.id');
+        if (!empty($genre)) {
+            $this->db->where('genre.name', $genre);
+        }
+        $this->db->order_by('RAND()'); 
+        $this->db->limit($numSongs); 
+    
+        $query = $this->db->get();
+    
+        
         $songs = $query->result();
     
         $playlistId = $this->createPlaylist($playlistName, $userId);
@@ -208,10 +219,12 @@ class Model_music extends CI_Model {
         foreach ($songs as $song) {
             $this->addSongToPlaylist($playlistId, $song->id);
         }
-    
-        return $playlistId;
+        redirect('playlist/view/'.$playlistId);
+        
     }
     
     
     
+    
+    
 }
\ No newline at end of file
diff --git a/codeigniter/application/views/playlist_generate.php b/codeigniter/application/views/playlist_generate.php
index 5369f9b..3cdc018 100644
--- a/codeigniter/application/views/playlist_generate.php
+++ b/codeigniter/application/views/playlist_generate.php
@@ -3,7 +3,14 @@
 <form action="<?= site_url('playlist/generate_random'); ?>" method="post" class="generate-playlist-form">
     <input type="text" name="playlistName" placeholder="Nom de la playlist" required>
     <input type="number" min="0" max="1000" name="numSongs" placeholder="Nombre de chansons" required>
-    <button type="submit">Générer</button>
+    
+        <select name="genre" >
+            <option value="">Tous les genres</option>
+            <?php foreach($genres as $genre): ?>
+                <option value="<?= $genre->name ?>"><?= $genre->name ?></option>
+            <?php endforeach; ?>
+        </select>
+        <button type="submit">Générer</button>
 </form>
 
 <a href="<?= site_url('playlist'); ?>" class="btn btn-secondary">Retour aux playlists</a>
diff --git a/codeigniter/application/views/playlist_list.php b/codeigniter/application/views/playlist_list.php
index d84f91d..0a92ebe 100644
--- a/codeigniter/application/views/playlist_list.php
+++ b/codeigniter/application/views/playlist_list.php
@@ -6,11 +6,10 @@
     <button type="submit">Créer</button>
 </form>
 
-<form action="<?= site_url('playlist/generate'); ?>" method="get" class="generate-playlist-form">
+<form action="<?= site_url('playlist/generate_random'); ?>" method="get" class="generate-playlist-form">
     <button type="submit">Générer une Playlist</button>
 </form>
 
-<!-- Affichez les playlist que nous avons -->
 <section class="playlists">
     <?php foreach($playlists as $playlist): ?>
         <div>
@@ -18,7 +17,6 @@
                 <header class="short-text">
                     <?= anchor("playlist/view/{$playlist->id}", "{$playlist->name}"); ?>
                 </header>
-                <!-- Bouton pour supprimer la playlist -->
                 <form action="<?= site_url('playlist/delete/' . $playlist->id); ?>" method="post" class="btn-supp" style="display:inline;">
                     <button type="submit">Supprimer</button>
                 </form>