SAE_2.02/CodeIgniter-3.1.13/application/models/Model_music.php
2024-05-25 15:44:57 +02:00

220 lines
7.5 KiB
PHP

<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
class Model_music extends CI_Model {
public function __construct(){
$this->load->database();
}
public function getAlbums($limit, $offset, $order_by = 'year', $genre_id = null, $artist_id = null){
$sql = "SELECT album.id, album.name, album.year, artist.name as artistName, genre.name as genreName, cover.jpeg
FROM album
JOIN artist ON album.artistid = artist.id
JOIN genre ON album.genreid = genre.id
JOIN cover ON album.coverid = cover.id";
if ($genre_id) {
$sql .= " WHERE genre.id = ?";
$params[] = $genre_id;
}
if ($artist_id) {
if ($genre_id) {
$sql .= " AND artist.id = ?";
} else {
$sql .= " WHERE artist.id = ?";
}
$params[] = $artist_id;
}
$sql .= " ORDER BY album." . $order_by . " LIMIT ? OFFSET ?";
$params[] = $limit;
$params[] = $offset;
$query = $this->db->query($sql, $params);
return $query->result();
}
public function get_total_albums($genre_id = null, $artist_id = null){
$sql = "SELECT COUNT(*) as total_albums FROM album
JOIN genre ON album.genreid = genre.id
JOIN artist ON album.artistid = artist.id";
$params = array(); // Initialiser le tableau de paramètres
if ($genre_id) {
$sql .= " WHERE genre.id = ?";
$params[] = $genre_id;
}
if ($artist_id) {
if ($genre_id) {
$sql .= " AND artist.id = ?";
} else {
$sql .= " WHERE artist.id = ?";
}
$params[] = $artist_id;
}
$query = $this->db->query($sql, $params);
$result = $query->row();
return $result->total_albums;
}
// Méthodes pour obtenir les genres et les artistes pour les filtres
public function getGenres(){
$query = $this->db->query("SELECT id, name FROM genre ORDER BY name");
return $query->result();
}
public function getArtists(){
$query = $this->db->query("SELECT id, name FROM artist ORDER BY name");
return $query->result();
}
public function get_album_by_id($id){
$query = $this->db->query(
"SELECT album.id, album.name, album.year, artist.name as artistName, genre.name as genreName, cover.jpeg
FROM album
JOIN artist ON album.artistid = artist.id
JOIN genre ON album.genreid = genre.id
JOIN cover ON album.coverid = cover.id
WHERE album.id = ?", array($id)
);
$album = $query->row();
if ($album) {
$query = $this->db->query(
"SELECT track.id, track.diskNumber, track.number, track.duration, song.name as songName
FROM track
JOIN song ON track.songid = song.id
WHERE track.albumid = ?
ORDER BY track.diskNumber, track.number", array($id)
);
$album->tracks = $query->result();
}
return $album;
}
public function getMusiques($limit, $offset, $order_by = 'title', $order_direction = 'ASC') {
$order_column = '';
switch ($order_by) {
case 'artist':
$order_column = 'artist.name';
break;
case 'album':
$order_column = 'album.name';
break;
case 'title':
$order_column = 'song.name';
break;
default:
$order_column = 'song.name';
break;
}
$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
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
ORDER BY $order_column $order_direction
LIMIT $limit OFFSET $offset"
);
return $query->result();
}
public function get_all_songs() {
return $this->db->get('song')->result();
}
public function get_all_albums() {
return $this->db->get('album')->result();
}
public function get_songs_by_album($album_id) {
$this->db->select('song.*');
$this->db->from('track');
$this->db->join('song', 'track.songid = song.id');
$this->db->where('track.albumid', $album_id);
return $this->db->get()->result();
}
public function get_random_songs($limit) {
$this->db->order_by('RAND()');
$this->db->limit($limit);
return $this->db->get('song')->result();
}
public function get_total_musiques(){
$query = $this->db->query("SELECT COUNT(*) as total_musiques FROM song");
$result = $query->row();
return $result->total_musiques;
}
public function getAlbumsByArtiste($artiste_id){
$query = $this->db->query("
SELECT album.id, album.name, album.year, artist.name as artistName, genre.name as genreName, cover.jpeg,
track.id as track_id, track.diskNumber, track.number, track.duration, song.name as songName
FROM album
JOIN artist ON album.artistid = artist.id
JOIN genre ON album.genreid = genre.id
JOIN cover ON album.coverid = cover.id
JOIN track ON track.albumid = album.id
JOIN song ON track.songid = song.id
WHERE artist.id = ?
ORDER BY album.id, track.diskNumber, track.number
", array($artiste_id));
$result = $query->result();
// Organiser les résultats par album
$albums = array();
foreach ($result as $row) {
$album_id = $row->id;
if (!isset($albums[$album_id])) {
$albums[$album_id] = (object)array(
'id' => $row->id,
'name' => $row->name,
'year' => $row->year,
'artistName' => $row->artistName,
'genreName' => $row->genreName,
'jpeg' => $row->jpeg,
'tracks' => array() // Initialiser un tableau pour les pistes de l'album
);
}
// Ajouter la piste à l'album correspondant
$albums[$album_id]->tracks[] = (object)array(
'id' => $row->track_id,
'diskNumber' => $row->diskNumber,
'number' => $row->number,
'duration' => $row->duration,
'songName' => $row->songName
);
}
return array_values($albums); // Réorganiser les albums en utilisant des index numériques
}
public function getMostUsedGenreByArtist($artist_id) {
$query = $this->db->query("
SELECT genre.name as genreName, COUNT(*) as genreCount
FROM album
JOIN genre ON album.genreid = genre.id
WHERE album.artistid = ?
GROUP BY genre.name
ORDER BY genreCount DESC
LIMIT 1
", array($artist_id));
return $query->row();
}
}