2024-05-20 18:18:00 +02:00
< ? php if ( ! defined ( 'BASEPATH' )) exit ( 'No direct script access allowed' );
2024-05-19 15:27:13 +02:00
class Model_music extends CI_Model {
2024-05-20 18:18:00 +02:00
public function __construct (){
$this -> load -> database ();
}
2024-05-19 15:27:13 +02:00
2024-05-22 20:59:59 +02:00
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 );
2024-05-20 18:18:00 +02:00
return $query -> result ();
}
2024-05-19 15:27:13 +02:00
2024-05-22 20:59:59 +02:00
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 );
2024-05-19 15:27:13 +02:00
$result = $query -> row ();
return $result -> total_albums ;
}
2024-05-22 20:59:59 +02:00
// 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 ();
}
2024-05-20 18:18:00 +02:00
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 ();
2024-05-22 20:59:59 +02:00
2024-05-20 18:18:00 +02:00
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 ();
}
2024-05-22 20:59:59 +02:00
2024-05-20 18:18:00 +02:00
return $album ;
}
2024-05-22 20:59:59 +02:00
2024-05-22 22:05:48 +02:00
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 ;
}
2024-05-20 21:59:37 +02:00
$query = $this -> db -> query (
2024-05-20 22:42:38 +02:00
" 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
2024-05-20 21:59:37 +02:00
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
2024-05-22 22:05:48 +02:00
ORDER BY $order_column $order_direction
2024-05-20 21:59:37 +02:00
LIMIT $limit OFFSET $offset "
);
return $query -> result ();
}
2024-05-22 22:05:48 +02:00
2024-05-25 15:44:57 +02:00
public function get_all_songs () {
return $this -> db -> get ( 'song' ) -> result ();
}
public function get_all_albums () {
return $this -> db -> get ( 'album' ) -> result ();
}
2024-05-20 22:42:38 +02:00
2024-05-25 15:44:57 +02:00
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 ();
}
2024-05-20 21:59:37 +02:00
public function get_total_musiques (){
$query = $this -> db -> query ( " SELECT COUNT(*) as total_musiques FROM song " );
$result = $query -> row ();
return $result -> total_musiques ;
}
2024-05-22 20:59:59 +02:00
2024-05-20 22:42:38 +02:00
public function getAlbumsByArtiste ( $artiste_id ){
$query = $this -> db -> query ( "
2024-05-22 22:05:48 +02:00
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
2024-05-20 22:42:38 +02:00
FROM album
JOIN artist ON album . artistid = artist . id
JOIN genre ON album . genreid = genre . id
JOIN cover ON album . coverid = cover . id
2024-05-22 22:05:48 +02:00
JOIN track ON track . albumid = album . id
JOIN song ON track . songid = song . id
2024-05-20 22:42:38 +02:00
WHERE artist . id = ?
2024-05-22 22:05:48 +02:00
ORDER BY album . id , track . diskNumber , track . number
2024-05-20 22:42:38 +02:00
" , array( $artiste_id ));
2024-05-22 22:05:48 +02:00
$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 ();
2024-05-20 22:42:38 +02:00
}
2024-05-22 22:05:48 +02:00
2024-05-19 15:27:13 +02:00
}