Commit de louay

This commit is contained in:
stiti 2024-06-10 19:50:27 +02:00
parent 1c75469b90
commit 46674a1b05
4 changed files with 221 additions and 1 deletions

View File

@ -59,6 +59,38 @@ class Musiques extends CI_Controller {
$this->load->view('layout/header_dark', $data);
$this->load->view('musiques_list', $data);
$this->load->view('layout/footer_dark');
}
}
public function view($song_id) {
// Récupérer les détails de la musique
$song = $this->Model_music->get_music_details($song_id);
if (empty($song)) {
show_404(); // Afficher une erreur 404 si la musique n'est pas trouvée
return;
}
// Récupérer les playlists de l'utilisateur s'il est connecté
$user_playlists = array();
if ($this->session->userdata('user_id')) {
$user_id = $this->session->userdata('user_id');
$user_playlists = $this->Model_playlist->get_user_playlists($user_id);
}
// Assurez-vous que $song contient l'ID du genre avant de le passer à la vue
$genre_id = isset($song->genre_id) ? $song->genre_id : null;
// Récupérer des musiques recommandées du même genre ou du même artiste
$recommended_songs = $this->Model_music->get_recommended_songs($genre_id, $song->artist_id);
// Charger la vue avec les données récupérées
$data['song'] = $song;
$data['user_playlists'] = $user_playlists;
$data['recommended_songs'] = $recommended_songs;
$data['title'] = "Détails de la musique - Onzeur";
$data['css'] = "assets/css/music_details.css";
$this->load->view('layout/header_dark', $data);
$this->load->view('music_details', $data);
$this->load->view('layout/footer_dark');
}
}

View File

@ -299,5 +299,53 @@ class Model_music extends CI_Model {
$this->db->join('album', 'track.albumid = album.id');
$this->db->where('album.artistid', $artist_id);
return $this->db->get()->result();
}
public function get_music_details($song_id) {
// Requête pour récupérer les détails de la chanson
$query = $this->db->query("
SELECT song.id, song.name, artist.id as artist_id, artist.name as artistName, album.name as album_name, track.albumid as album_id, cover.jpeg as cover_base64, track.duration
FROM song
JOIN track ON song.id = track.songid
JOIN album ON track.albumid = album.id
JOIN artist ON album.artistid = artist.id
JOIN cover ON album.coverid = cover.id
WHERE song.id = ?", array($song_id)
);
return $query->row(); // Renvoie le résultat unique sous forme d'objet
}
public function get_recommended_songs($genre_id, $artist_id, $limit = 3) {
$where_clause = '';
$params = array();
if ($genre_id) {
$where_clause .= " WHERE genre.id = ?";
$params[] = $genre_id;
} elseif ($artist_id) {
$where_clause .= " WHERE artist.id = ?";
$params[] = $artist_id;
}
// Requête pour récupérer des musiques recommandées en fonction du genre ou de l'artiste
$query = $this->db->query("
SELECT song.id, song.name, artist.id as artist_id, artist.name as artistName, album.id as album_id, album.name as album_name, cover.jpeg as cover_base64
FROM song
JOIN track ON song.id = track.songid
JOIN album ON track.albumid = album.id
JOIN artist ON album.artistid = artist.id
JOIN cover ON album.coverid = cover.id
JOIN genre ON album.genreid = genre.id
$where_clause
ORDER BY RAND()
LIMIT $limit
", $params);
return $query->result();
}
}

View File

@ -0,0 +1,51 @@
<div class="music-details">
<?php if (!empty($song)) : ?>
<h1><?php echo $song->name; ?></h1>
<p><strong>Artiste :</strong> <a href="<?php echo site_url('artiste/index/' . $song->artist_id); ?>"><?php echo $song->artistName; ?></a></p>
<p><strong>Album :</strong> <a href="<?php echo site_url('albums/view/' . $song->album_id); ?>"><?php echo $song->album_name; ?></a></p>
<?php if (!empty($song->cover_base64)) : ?>
<img src="data:image/jpeg;base64,<?php echo base64_encode($song->cover_base64); ?>" alt="Couverture de l'album">
<?php endif; ?>
<p><strong>Durée :</strong> <?php echo gmdate("i:s", $song->duration); ?></p>
<?php if ($this->session->userdata('user_id')): ?>
<?php if (!empty($user_playlists)): ?>
<select id="playlist_music_<?php echo $song->id; ?>" class="select-playlist">
<?php foreach ($user_playlists as $playlist) : ?>
<option value="<?php echo $playlist->id; ?>"><?php echo $playlist->name; ?></option>
<?php endforeach; ?>
</select>
<button onclick="addToPlaylistMusic(<?php echo $song->id; ?>)" class="btn-add-to-playlist">Ajouter la musique à la playlist</button>
<?php else: ?>
<p>Vous n'avez pas encore de playlist. Créez-en une pour ajouter cette chanson !</p>
<?php endif; ?>
<?php endif; ?>
<?php else: ?>
<p>Aucune information sur la musique n'a été trouvée.</p>
<?php endif; ?>
<?php if (!empty($recommended_songs)) : ?>
<h2>Musiques recommandées</h2>
<div class="recommended-songs">
<?php foreach ($recommended_songs as $recommended_song) : ?>
<div class="recommended-song">
<a href="<?php echo site_url('music/details/' . $recommended_song->id); ?>">
<img src="data:image/jpeg;base64,<?php echo base64_encode($recommended_song->cover_base64); ?>" alt="Cover">
</a>
<h3 class="titre"><a href="<?php echo site_url('musiques/view/' . $recommended_song->id); ?>"> <?php echo $recommended_song->name; ?></a></h3>
<p><a href="<?php echo site_url('artiste/index/' . $recommended_song->artist_id); ?>"><?php echo $recommended_song->artistName; ?></a> - <a href="<?php echo site_url('albums/view/' . $recommended_song->album_id); ?>"><?php echo $recommended_song->album_name; ?></a></p>
</div>
<?php endforeach; ?>
</div>
<?php endif; ?>
</div>
<script>
function addToPlaylistMusic(musiqueId) {
// Récupérer l'ID de la playlist sélectionnée
var playlistId = document.getElementById('playlist_music_' + musiqueId).value;
// Redirection vers la méthode du contrôleur Playlists pour ajouter la musique à la playlist spécifiée
window.location.href = "<?php echo base_url('index.php/playlists/add_music_to_playlist/'); ?>" + musiqueId + "/" + playlistId;
}
</script>

View File

@ -0,0 +1,89 @@
/* Style général */
body {
font-family: Arial, sans-serif;
background-color: #f7f7f7;
color: #333;
}
.music-details {
background-color: #fff;
border-radius: 10px;
box-shadow: 0 0 10px rgba(0, 0, 0, 0.1);
padding: 20px;
margin: 20px auto;
max-width: 600px;
}
h1, h3 {
margin: 0;
color: #4a154b; /* Violet foncé */
}
strong {
color: #6a336a; /* Violet moyen */
}
a {
color: #880088; /* Violet */
text-decoration: none;
}
a:hover {
text-decoration: underline;
}
p {
margin: 5px 0;
}
img {
max-width: 100%;
height: auto;
border-radius: 5px;
margin-bottom: 10px;
}
.select-playlist, .btn-add-to-playlist {
padding: 5px 10px;
border: none;
border-radius: 5px;
background-color: #880088; /* Violet */
color: #fff;
cursor: pointer;
margin-bottom: 10px;
}
.select-playlist {
margin-right: 10px;
}
.btn-add-to-playlist {
transition: background-color 0.3s ease;
}
.btn-add-to-playlist:hover {
background-color: #660066; /* Violet foncé au survol */
}
/* Section recommandée */
.recommended-songs {
margin-top: 20px;
}
.recommended-song {
border-bottom: 1px solid #ddd;
padding: 10px 0;
display: flex;
align-items: center;
}
.recommended-song img {
width: 80px;
height: 80px;
margin-right: 10px;
border-radius: 5px;
}
.titre{
margin-right: 10px;
}