From 574dd7bf1db88c56ba24fe2c3565364454f8fa97 Mon Sep 17 00:00:00 2001
From: keraudre <yann.keraudren@etu-upec.fr>
Date: Tue, 18 Jun 2024 17:27:04 +0200
Subject: [PATCH] ajout de fonction de tri dans l'onglet artiste

---
 .../application/controllers/Artistes.php      | 35 +++++++++-
 .../models/Model_music_artistes.php           | 68 +++++++++++++++++++
 .../application/views/artistes_list.php       | 30 ++++++++
 codeigniter/assets/style.css                  |  5 +-
 4 files changed, 134 insertions(+), 4 deletions(-)
 create mode 100644 codeigniter/application/models/Model_music_artistes.php

diff --git a/codeigniter/application/controllers/Artistes.php b/codeigniter/application/controllers/Artistes.php
index a8dbc69..7377849 100644
--- a/codeigniter/application/controllers/Artistes.php
+++ b/codeigniter/application/controllers/Artistes.php
@@ -3,19 +3,50 @@ defined('BASEPATH') OR exit('No direct script access allowed');
 
 class Artistes extends CI_Controller {
 
+    private $sort = 'Tri';
+    
 	public function __construct(){
 		parent::__construct();
-		$this->load->model('model_music');
+		$this->load->model('model_music_artistes');
 		$this->load->helper('html');
 		$this->load->helper('url');
 		$this->load->helper('form');
 	}
+    
 	public function index(){
-		$artistes = $this->model_music->getArtistes();
+		$artistes = $this->model_music_artistes->getArtistes();
 		$this->load->view('layout/header');
 		$this->load->view('artistes_list', ['artistes'=>$artistes]);
 		$this->load->view('layout/footer');
 	}
 
+    public function tri(){
+        $Ctri = $this->input->get('Ctri');
+        $trie = $this->model_music_artistes->get_tri_Artistes($Ctri);
+        $num_results = count($trie);
+        $this->load->view('layout/header');
+        $this->load->view('artistes_list', [
+            'artistes' => $trie, 
+            'sort' => $this->sort, 
+            'num_results' => $num_results, 
+            'is_search' => false
+        ]);
+        $this->load->view('layout/footer');
+    }
+
+    public function search(){
+        $query = $this->input->get('query');
+        $albums = $this->model_music_artistes->searchArtistes($query);
+        $num_results = count($albums);
+        $this->load->view('layout/header');
+        $this->load->view('artistes_list', [
+            'albums' => $albums, 
+            'sort' => $this->sort, 
+            'num_results' => $num_results, 
+            'is_search' => true
+        ]);
+        $this->load->view('layout/footer');
+    }
+
 }
 
diff --git a/codeigniter/application/models/Model_music_artistes.php b/codeigniter/application/models/Model_music_artistes.php
new file mode 100644
index 0000000..8abbc80
--- /dev/null
+++ b/codeigniter/application/models/Model_music_artistes.php
@@ -0,0 +1,68 @@
+<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
+
+class Model_music_artistes extends CI_Model {
+
+    public function __construct(){
+        $this->load->database();
+    }
+
+    public function getArtistes(){
+        $query = $this->db->query(
+            "SELECT artist.id AS artistId, artist.name AS artistName, album.name AS albumName, album.id AS albumId, album.year, cover.jpeg
+            FROM album
+            INNER JOIN artist ON album.artistId = artist.id
+            JOIN cover ON cover.id = album.coverId
+            GROUP BY artist.name, album.year"
+        );
+        return $query->result();
+    }
+
+    public function get_tri_Artistes($Ctri){
+		$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 artist.name $Ctri";
+		}
+	
+		$query = $this->db->query(
+			"SELECT artist.id AS artistId, artist.name AS artistName, album.name AS albumName, album.id AS albumId, album.year, cover.jpeg
+            FROM album
+            INNER JOIN artist ON album.artistId = artist.id
+            JOIN cover ON cover.id = album.coverId
+			$orderBy"
+		);
+		return $query->result();
+	}
+
+
+    public function searchArtistes($query){
+		$sql = "SELECT artist.id AS artistId, artist.name AS artistName, album.name AS albumName, album.id AS albumId, album.year, cover.jpeg
+            FROM album
+            INNER JOIN artist ON album.artistId = artist.id
+            JOIN cover ON cover.id = album.coverId
+            GROUP BY artist.name, album.year";
+	
+		$conditions = [];
+		$params = [];
+	
+		if (!empty($query)) {
+			$conditions[] = "(album.name LIKE ? OR artist.name LIKE ?)";
+			$params[] = "%{$query}%";
+			$params[] = "%{$query}%";
+		}
+	
+	
+		if (count($conditions) > 0) {
+			$sql .= " WHERE " . implode(' AND ', $conditions);
+		}
+	
+		$sql .= " ORDER BY album.id ASC";
+	
+		$query = $this->db->query($sql, $params);
+		return $query->result();
+	}
+
+}
diff --git a/codeigniter/application/views/artistes_list.php b/codeigniter/application/views/artistes_list.php
index 53d55d1..0ff60b2 100644
--- a/codeigniter/application/views/artistes_list.php
+++ b/codeigniter/application/views/artistes_list.php
@@ -1,4 +1,34 @@
 <h5>Artistes list</h5>
+
+<div class="sorting-search">
+<form action="<?= site_url('Artistes/tri'); ?>" method="get" class="tri-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('Artistes/search'); ?>" method="get" class="search-form">
+        <input type="text" name="query" placeholder="Chercher des albums" class="search-input">
+        <button type="submit" class="search-button">Rechercher</button>
+    </form>
+	
+	<?php if(isset($is_search) && $is_search): ?>
+        <form action="<?= site_url('Albums'); ?>" method="get" class="back-form">
+            <button type="submit" class="back-button">Retour à la liste complète</button>
+        </form>
+    <?php endif; ?>
+</div>
+
+<?php if(isset($is_search) && $is_search): ?>
+    <p>Nombre de résultats : <?php echo $num_results; ?></p>
+<?php endif; ?>
+
+        
 <section class="list">
 <?php
 $artistAlbums = array();
diff --git a/codeigniter/assets/style.css b/codeigniter/assets/style.css
index 725f574..70a721e 100644
--- a/codeigniter/assets/style.css
+++ b/codeigniter/assets/style.css
@@ -56,13 +56,14 @@ ul.options {
     background-color: #283d5d;
     position: absolute;
     top: 50px;
-    right: 12px;
-    text-align: center
+    right: 55px;
+    text-align: center;
 }
 
 .sous li {
     display: block!important;
     padding: 5px;
+    margin-right: 5px!important;
 }
 
 nav > ul li:hover .sous {