diff --git a/codeigniter/application/config/routes.php b/codeigniter/application/config/routes.php index 3d780ab..35608bd 100644 --- a/codeigniter/application/config/routes.php +++ b/codeigniter/application/config/routes.php @@ -51,8 +51,7 @@ defined('BASEPATH') OR exit('No direct script access allowed'); */ $route['default_controller'] = 'albums'; $route['connexion'] = 'ConnexionController/connexion'; -$route['inscription'] = 'InscriptionController/inscription'; -$route['traitement'] = 'InscriptionController/traitement'; +$route['traitement'] = 'ConnexionController/traitement'; $route['authentifier'] = 'ConnexionController/authentifier'; $route['deconnexion'] = 'ConnexionController/deconnexion'; $route['404_override'] = ''; diff --git a/codeigniter/application/controllers/Albums.php b/codeigniter/application/controllers/Albums.php index 98e3358..25a0fe9 100644 --- a/codeigniter/application/controllers/Albums.php +++ b/codeigniter/application/controllers/Albums.php @@ -3,7 +3,8 @@ defined('BASEPATH') OR exit('No direct script access allowed'); class Albums extends CI_Controller { - private $filter = 'default'; + private $sort = 'Tri'; + public function __construct(){ parent::__construct(); @@ -13,13 +14,37 @@ class Albums extends CI_Controller { $this->load->helper('form'); } public function index(){ + $albums = $this->model_music->getAlbums(); + $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('layout/footer'); + } + public function view($id){ + $tracks = $this->model_music->getTracksByAlbumId($id); + $this->load->view('layout/header'); + $this->load->view('album_info', ['tracks' => $tracks]); + $this->load->view('layout/footer'); + } - $albums = $this->model_music->getAlbums(); - $this->load->view('layout/header'); - $this->load->view('albums_list',['albums'=>$albums]); - $this->load->view('layout/footer'); - } + public function tri(){ + $Ctri = $this->input->get('Ctri'); + $trie = $this->model_music->get_tri_Albums($Ctri); + $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('layout/footer'); + } + public function search(){ + $query = $this->input->get('query'); + $albums = $this->model_music->searchAlbums($query); + $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('layout/footer'); + } + } diff --git a/codeigniter/application/controllers/ConnexionController.php b/codeigniter/application/controllers/ConnexionController.php index 2790c49..f521bbc 100644 --- a/codeigniter/application/controllers/ConnexionController.php +++ b/codeigniter/application/controllers/ConnexionController.php @@ -38,6 +38,39 @@ class ConnexionController extends CI_Controller { } } + + + public function traitement() { + if(isset($_POST['ok'])){ + $this->load->database(); + + + $prenom = ucfirst(strtolower($this->input->post('prenom'))); + $nom = strtoupper($this->input->post('nom')); + $pseudo = $this->input->post('pseudo'); + $mdp = $this->input->post('pass'); + $email = $this->input->post('email'); + + $data = array( + 'pseudo' => $pseudo, + 'nom' => $nom, + 'prenom' => $prenom, + 'mdp' => $mdp, + 'email' => $email + ); + + $this->db->insert('users', $data); + + $this->session->set_userdata('pseudo', $pseudo); + redirect('../index.php'); + + + $this->load->view('layout/header'); + $this->load->view('connexion', $data); + $this->load->view('layout/footer'); + } + } + public function deconnexion() { $this->session->unset_userdata('pseudo'); $this->session->sess_destroy(); diff --git a/codeigniter/application/controllers/InscriptionController.php b/codeigniter/application/controllers/InscriptionController.php index 324dc8e..b99d932 100644 --- a/codeigniter/application/controllers/InscriptionController.php +++ b/codeigniter/application/controllers/InscriptionController.php @@ -10,7 +10,7 @@ class InscriptionController extends CI_Controller { public function inscription() { $this->load->view('layout/header'); - $this->load->view('inscription'); + $this->load->view('connexion'); $this->load->view('layout/footer'); } @@ -38,7 +38,7 @@ class InscriptionController extends CI_Controller { $data['confirmation_message'] = "Inscription réussie ! Vous êtes maintenant inscrit."; $this->load->view('layout/header'); - $this->load->view('inscription', $data); + $this->load->view('connexion', $data); $this->load->view('layout/footer'); } } diff --git a/codeigniter/application/models/Model_music.php b/codeigniter/application/models/Model_music.php index 8564460..9c26d73 100644 --- a/codeigniter/application/models/Model_music.php +++ b/codeigniter/application/models/Model_music.php @@ -17,6 +17,7 @@ class Model_music extends CI_Model { return $query->result(); } +<<<<<<< HEAD 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 @@ -70,8 +71,61 @@ class Model_music extends CI_Model { JOIN song ON track.songId = song.id WHERE album.id = ? ORDER BY track.diskNumber, track.number", +======= + public function getArtistes(){ + $query = $this->db->query( + "SELECT artist.id AS artistId, artist.name AS artistName, album.name AS albumName, 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 getTracksByAlbumId($albumId){ + $query = $this->db->query( + "SELECT track.number, track.duration, song.name as songName + FROM track + JOIN album ON album.id = track.albumid + JOIN artist ON artist.id = album.artistId + JOIN song ON song.id = track.songId + WHERE track.albumId = ? + ORDER BY track.number", +>>>>>>> 1bd8d93ce58f04d7fc10d62db226dd012b1f7560 array($albumId) ); return $query->result(); } +<<<<<<< HEAD +======= + + 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 + 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 + " + ); + 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(); + } +>>>>>>> 1bd8d93ce58f04d7fc10d62db226dd012b1f7560 } diff --git a/codeigniter/application/views/album_info.php b/codeigniter/application/views/album_info.php new file mode 100644 index 0000000..e35a64c --- /dev/null +++ b/codeigniter/application/views/album_info.php @@ -0,0 +1,16 @@ +<h5>Détail de l'Album :</h5> +<section class="track-list"> +<?php +if(!empty($tracks)) { + foreach($tracks as $track){ + echo "<div><article>"; + echo "<header class='track-id'>Id : {$track->number}</header>"; + echo "<div class='track-name'>Nom : {$track->songName}</div>"; + echo "<footer class='track_time'>Durée (en secondes) : {$track->duration}</footer>"; + echo "</article></div>"; + } +} else { + echo "<p>Aucune piste trouvée pour cet album.</p>"; +} +?> +</section> diff --git a/codeigniter/application/views/albums_list.php b/codeigniter/application/views/albums_list.php index 92c15ef..4101410 100644 --- a/codeigniter/application/views/albums_list.php +++ b/codeigniter/application/views/albums_list.php @@ -1,4 +1,27 @@ <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> + </ul> + <form action="<?= site_url('Albums/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 foreach($albums as $album){ diff --git a/codeigniter/application/views/connexion.php b/codeigniter/application/views/connexion.php index dc92fbf..a94ba8b 100644 --- a/codeigniter/application/views/connexion.php +++ b/codeigniter/application/views/connexion.php @@ -1,12 +1,53 @@ -<h1>Se connecter</h1> -<form action="authentifier" method="POST"> - <label for="email">Email:</label> - <input type="email" id="email" name="email" required> - <label for="password">Mot de passe:</label> - <input type="password" id="password" name="password" required> - <button type="submit">Connexion</button> -</form> -<?php if(isset($error_msg)): ?> - <div class="error-message"><?= $error_msg ?></div> -<?php endif; ?> \ No newline at end of file +<section class="connexion"> + + <div class="authentification"> + + <h3> Déjà abonné </h3> + + <form action="authentifier" method="POST"> + + <label for="email">Email:</label> + <input type="email" id="email" name="email" placeholder="Entrez votre email" required> + + <label for="password">Mot de passe:</label> + <input type="password" id="password" name="password" placeholder="Entrez votre mot de passe" required> + + <button type="submit">Connexion</button> + + </form> + + </div> + + <div class="new"> + + <h3> Création de compte </h3> + + <form action="traitement" method="POST"> + <label for="nom">Votre nom*</label> + <input type="text" id="nom" name="nom" placeholder="Entrez votre nom" required> + + <label for="prenom">Votre prénom*</label> + <input type="text" id="prenom" name="prenom" placeholder="Entrez votre prénom" required> + + <label for="pseudo">Votre pseudo*</label> + <input type="text" id="pseudo" name="pseudo" placeholder="Entrez votre pseudo" required> + + <label for="email">Votre email*</label> + <input type="email" id="email" name="email" placeholder="Entrez votre adresse email" required> + + <label for="pass">Votre mot de passe*</label> + <input type="password" id="pass" name="pass" placeholder="Entrez votre mdp" required> + + <input type="submit" value="M'inscrire" name="ok"> + + </form> + +<?php if(isset($confirmation_message)): ?> + <div class="confirmation-message"><?= $confirmation_message ?></div> +<?php endif; ?> + + </div> +</section> + + diff --git a/codeigniter/application/views/inscription.php b/codeigniter/application/views/inscription.php deleted file mode 100644 index f7178e1..0000000 --- a/codeigniter/application/views/inscription.php +++ /dev/null @@ -1,24 +0,0 @@ -<h1>S'inscrire</h1> -<form action="traitement" method="POST"> - <label for="nom">Votre nom*</label> - <input type="text" id="nom" name="nom" placeholder="Entrez votre nom" required> - - <label for="prenom">Votre prénom*</label> - <input type="text" id="prenom" name="prenom" placeholder="Entrez votre prénom" required> - - <label for="pseudo">Votre pseudo*</label> - <input type="text" id="pseudo" name="pseudo" placeholder="Entrez votre pseudo" required> - - <label for="email">Votre email*</label> - <input type="email" id="email" name="email" placeholder="Entrez votre adresse email" required> - - <label for="pass">Votre mot de passe*</label> - <input type="password" id="pass" name="pass" placeholder="Entrez votre mdp" required> - - <input type="submit" value="M'inscrire" name="ok"> - -</form> - -<?php if(isset($confirmation_message)): ?> - <div class="confirmation-message"><?= $confirmation_message ?></div> -<?php endif; ?> \ No newline at end of file diff --git a/codeigniter/application/views/layout/header.php b/codeigniter/application/views/layout/header.php index c539c92..dda6178 100644 --- a/codeigniter/application/views/layout/header.php +++ b/codeigniter/application/views/layout/header.php @@ -17,17 +17,25 @@ <ul> <li><strong>Music APP</strong></li> </ul> - <ul> - <li><?=anchor('albums','Albums');?></li> - <li><?=anchor('artistes','Artistes');?></li> - <?php if ($this->session->userdata('pseudo')) : // Vérifier si l'utilisateur est connecté ?> - <li><?= $this->session->userdata('pseudo'); ?></li> - <li><?= anchor('deconnexion', 'Se déconnecter'); ?></li> - <?php else : ?> - <li><?= anchor('connexion', 'Se connecter'); ?></li> - <li><?= anchor('inscription', 'Inscription'); ?></li> - <?php endif; ?> - </ul> + + <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"> + + <li><?= anchor('profil', 'Profil'); ?></li> + <li><?=anchor('deconnexion', 'Se déconnecter'); ?></li> + </ul> + </li> +<?php else : ?> + <li><?=anchor('connexion', 'Se connecter'); ?></li> +<?php endif; ?> + </ul> + </div> </nav> </body> </html> diff --git a/codeigniter/assets/style.css b/codeigniter/assets/style.css index 1efafa1..7ceda3b 100644 --- a/codeigniter/assets/style.css +++ b/codeigniter/assets/style.css @@ -25,7 +25,7 @@ section.list img { nav { position: fixed; width: 100%; - + background-color: #283d5d; top: 0; right: 0; } @@ -34,15 +34,47 @@ main.container { margin-top: 60px; } -.container ul { - left: 0; + +.options { + margin-right : 20px!important; + } -.container li { - margin-right : 20px; +.sous { + display: none; + border-radius: 5px; + border: solid 1px black; + background-color: #283d5d; + position: absolute; + top: 50px; + right: 12px; + text-align: center } +.sous li { + display: block!important; + padding: 5px; +} +nav > ul li:hover .sous { + display: block; +} + +.deroulant a { + text-decoration: none; + color: white; + display: inline-block; +} + +.deroulant > a::after { + content: " ▼ "; + font-size: 17px; + +} + +.sous a:hover{ + color: #1399fc; +} section.connexion { display: flex; @@ -56,3 +88,87 @@ div.authentification { div.new { width: 45%; } + +/* Styles pour les détails des pistes */ + +.track-list { + width: 100%; + margin: 0 auto; +} + +.track-id { + display: flex; + justify-content: space-between; + padding: 10px; + border-bottom: 1px solid #ccc; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; +} + +.track-name { + flex-grow: 1; + overflow: visible; + text-overflow: clip; +} + +.track-time { + flex-shrink: 0; + margin-left: 20px; +} + +#tri { + text-align: right; +} +/* mise en forme du tri */ + + +/*.sous_tri { + display: none; + position: absolute; + text-align: right; + background-color: black; +} + +.tri { + color: #a4acba; + text-align: right; + display: inline-block; +} + +.tri:hover sous_tri { + display: block; +} + + +.sous_tri a:hover{ + color: #1399fc; +}*/ + +.sorting-search { + display: flex; + justify-content: space-between; + align-items: center; + margin-bottom: 20px; + width: 100%; +} + +.tri-container { + display: flex; + align-items: center; +} + +.search-container { + display: flex; + align-items: center; +} + +.search-input { + width: 200px; + padding: 5px; + margin-right: 10px; +} + +.back-form { + display: inline-block; +}