From 08fdeb6dd0d19d320943c3ae7fec96c39ec09ed1 Mon Sep 17 00:00:00 2001 From: follea <thomas.follea@gmail.com> Date: Mon, 17 Jun 2024 22:48:07 +0200 Subject: [PATCH] Ajout trie croissant decroissanant, recherche de genre --- .../application/controllers/Albums.php | 52 +++++++++----- .../application/models/Model_music.php | 67 ++++++++++++++----- codeigniter/application/views/albums_list.php | 19 ++++-- .../application/views/layout/header.php | 11 +-- codeigniter/assets/style.css | 27 +++++++- 5 files changed, 132 insertions(+), 44 deletions(-) diff --git a/codeigniter/application/controllers/Albums.php b/codeigniter/application/controllers/Albums.php index 25a0fe9..62c5b01 100644 --- a/codeigniter/application/controllers/Albums.php +++ b/codeigniter/application/controllers/Albums.php @@ -5,23 +5,30 @@ class Albums extends CI_Controller { private $sort = 'Tri'; + public function __construct(){ + parent::__construct(); + $this->load->model('model_music'); + $this->load->helper('html'); + $this->load->helper('url'); + $this->load->helper('form'); + } - public function __construct(){ - parent::__construct(); - $this->load->model('model_music'); - $this->load->helper('html'); - $this->load->helper('url'); - $this->load->helper('form'); - } - public function index(){ + public function index(){ $albums = $this->model_music->getAlbums(); + $genres = $this->model_music->getGenres(); $num_results = count($albums); $this->load->view('layout/header'); - $this->load->view('albums_list', ['albums' => $albums, 'sort' => $this->sort, 'num_results' => $num_results, 'is_search' => false]); + $this->load->view('albums_list', [ + 'albums' => $albums, + 'sort' => $this->sort, + 'num_results' => $num_results, + 'is_search' => false, + 'genres' => $genres + ]); $this->load->view('layout/footer'); } - public function view($id){ + public function view($id){ $tracks = $this->model_music->getTracksByAlbumId($id); $this->load->view('layout/header'); $this->load->view('album_info', ['tracks' => $tracks]); @@ -31,20 +38,35 @@ class Albums extends CI_Controller { public function tri(){ $Ctri = $this->input->get('Ctri'); $trie = $this->model_music->get_tri_Albums($Ctri); + $genres = $this->model_music->getGenres(); $num_results = count($trie); $this->load->view('layout/header'); - $this->load->view('albums_list', ['albums' => $trie, 'sort' => $this->sort, 'num_results' => $num_results, 'is_search' => false]); + $this->load->view('albums_list', [ + 'albums' => $trie, + 'sort' => $this->sort, + 'num_results' => $num_results, + 'is_search' => false, + 'genres' => $genres + ]); $this->load->view('layout/footer'); } - public function search(){ + public function search(){ $query = $this->input->get('query'); - $albums = $this->model_music->searchAlbums($query); + $genre = $this->input->get('genre'); + $albums = $this->model_music->searchAlbums($query, $genre); + $genres = $this->model_music->getGenres(); $num_results = count($albums); $this->load->view('layout/header'); - $this->load->view('albums_list', ['albums' => $albums, 'sort' => $this->sort, 'num_results' => $num_results, 'is_search' => true]); + $this->load->view('albums_list', [ + 'albums' => $albums, + 'sort' => $this->sort, + 'num_results' => $num_results, + 'is_search' => true, + 'genres' => $genres + ]); $this->load->view('layout/footer'); } - } + diff --git a/codeigniter/application/models/Model_music.php b/codeigniter/application/models/Model_music.php index e57b388..8482578 100644 --- a/codeigniter/application/models/Model_music.php +++ b/codeigniter/application/models/Model_music.php @@ -76,29 +76,60 @@ class Model_music extends CI_Model { } public function get_tri_Albums($Ctri){ - $query = $this->db->query( - "SELECT album.name,album.id,year,artist.name as artistName, genre.name as genreName,jpeg + $orderBy = ''; + if ($Ctri == 'year ASC') { + $orderBy = 'ORDER BY year ASC'; + } elseif ($Ctri == 'year DESC') { + $orderBy = 'ORDER BY year DESC'; + } elseif ($Ctri == 'ASC' || $Ctri == 'DESC') { + $orderBy = "ORDER BY album.name $Ctri"; + } + + $query = $this->db->query( + "SELECT album.name, album.id, year, artist.name as artistName, genre.name as genreName, jpeg FROM album JOIN artist ON album.artistid = artist.id JOIN genre ON genre.id = album.genreid JOIN cover ON cover.id = album.coverid - ORDER BY album.name $Ctri - " + $orderBy" ); - return $query->result(); + return $query->result(); } - public function searchAlbums($query){ - $this->db->select('album.name, album.id, year, artist.name as artistName, genre.name as genreName, jpeg'); - $this->db->from('album'); - $this->db->join('artist', 'album.artistid = artist.id'); - $this->db->join('genre', 'genre.id = album.genreid'); - $this->db->join('cover', 'cover.id = album.coverid'); - $this->db->like('album.name', $query); - $this->db->or_like('artist.name', $query); - $this->db->order_by('album.id', 'ASC'); - $query = $this->db->get(); - return $query->result(); - } + public function getGenres(){ + $query = $this->db->query("SELECT * FROM genre"); + return $query->result(); + } + + public function searchAlbums($query, $genre){ + $sql = "SELECT album.name, album.id, year, artist.name as artistName, genre.name as genreName, jpeg + FROM album + JOIN artist ON album.artistid = artist.id + JOIN genre ON genre.id = album.genreid + JOIN cover ON cover.id = album.coverid"; + + $conditions = []; + $params = []; + + if (!empty($query)) { + $conditions[] = "(album.name LIKE ? OR artist.name LIKE ?)"; + $params[] = "%{$query}%"; + $params[] = "%{$query}%"; + } + + if (!empty($genre)) { + $conditions[] = "genre.id = ?"; + $params[] = $genre; + } + + if (count($conditions) > 0) { + $sql .= " WHERE " . implode(' AND ', $conditions); + } + + $sql .= " ORDER BY album.id ASC"; + + $query = $this->db->query($sql, $params); + return $query->result(); + } -} +} \ No newline at end of file diff --git a/codeigniter/application/views/albums_list.php b/codeigniter/application/views/albums_list.php index 4101410..1b7948b 100644 --- a/codeigniter/application/views/albums_list.php +++ b/codeigniter/application/views/albums_list.php @@ -1,11 +1,23 @@ <h5>Albums list</h5> <div class="sorting-search"> <form action="<?= site_url('Albums/tri'); ?>" method="get" class="tri-form"> - <button type="submit" name="Ctri" value="ASC" class="tri-button">Tri A-Z</button> - <button type="submit" name="Ctri" value="DESC" class="tri-button">Tri Z-A</button> - </form> + <select name="Ctri" class="tri-select"> + <option value="">Trier</option> + <option value="ASC"<?php echo isset($_GET['Ctri']) && $_GET['Ctri'] == 'ASC' ? ' selected' : ''; ?>>Trie A-Z</option> + <option value="DESC"<?php echo isset($_GET['Ctri']) && $_GET['Ctri'] == 'DESC' ? ' selected' : ''; ?>>Trie Z-A</option> + <option value="year ASC"<?php echo isset($_GET['Ctri']) && $_GET['Ctri'] == 'year ASC' ? ' selected' : ''; ?>>Trie par année (croissant)</option> + <option value="year DESC"<?php echo isset($_GET['Ctri']) && $_GET['Ctri'] == 'year DESC' ? ' selected' : ''; ?>>Trie par année (décroissant)</option> + </select> + <button type="submit" class="tri-button">Appliquer le tri</button> + </form> </ul> <form action="<?= site_url('Albums/search'); ?>" method="get" class="search-form"> + <select name="genre" class="search-genre"> + <option value="">Tous les genres</option> + <?php foreach($genres as $genre): ?> + <option value="<?= $genre->id ?>"><?= $genre->name ?></option> + <?php endforeach; ?> + </select> <input type="text" name="query" placeholder="Chercher des albums" class="search-input"> <button type="submit" class="search-button">Rechercher</button> </form> @@ -17,7 +29,6 @@ <?php endif; ?> </div> - <?php if(isset($is_search) && $is_search): ?> <p>Nombre de résultats : <?php echo $num_results; ?></p> <?php endif; ?> diff --git a/codeigniter/application/views/layout/header.php b/codeigniter/application/views/layout/header.php index dda6178..94759bb 100644 --- a/codeigniter/application/views/layout/header.php +++ b/codeigniter/application/views/layout/header.php @@ -21,11 +21,12 @@ <ul class="option"> <li><?=anchor('albums','Albums');?></li> <li><?=anchor('artistes','Artistes');?></li> - <li><?=anchor('playlist','Playlist');?></li> -<?php if ($this->session->userdata('pseudo')) : /* Vérifier si l'utilisateur est connecté */ ?> - - <li class="deroulant"><a><?= $this->session->userdata('pseudo'); ?></a> - <ul class="sous"> + <?php if ($this->session->userdata('pseudo')) : /* Vérifier si l'utilisateur est connecté */ ?> + <li><?=anchor('playlist','Playlist');?></li> + <?php endif; ?> + <?php if ($this->session->userdata('pseudo')) : /* Vérifier si l'utilisateur est connecté */ ?> + <li class="deroulant"><a><?= $this->session->userdata('pseudo'); ?></a> + <ul class="sous"> <li><?= anchor('profil', 'Profil'); ?></li> <li><?=anchor('deconnexion', 'Se déconnecter'); ?></li> diff --git a/codeigniter/assets/style.css b/codeigniter/assets/style.css index 7ceda3b..725f574 100644 --- a/codeigniter/assets/style.css +++ b/codeigniter/assets/style.css @@ -18,6 +18,15 @@ section.list img { text-overflow: ellipsis; } +strong { + margin-left: 233px; +} + +ul.option li { + margin-right: 50px; +} + + /* modification par Yann */ @@ -35,8 +44,8 @@ main.container { } -.options { - margin-right : 20px!important; +ul.options { + margin-right : 50px; } @@ -172,3 +181,17 @@ div.new { .back-form { display: inline-block; } + +.search-genre { + margin-right: 10px; + padding: 5px; + font-size: 14px; +} + +.tri-select { + width: 55%; +} + +.tri-button { + width: 55%!important; +}