230 lines
7.4 KiB
PHP
230 lines
7.4 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(){
|
|
$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 year"
|
|
);
|
|
return $query->result();
|
|
}
|
|
|
|
public function get_tri_Albums($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 album.name $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
|
|
$orderBy"
|
|
);
|
|
return $query->result();
|
|
}
|
|
|
|
|
|
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 getMusics(){
|
|
$query = $this->db->query(
|
|
"SELECT
|
|
track.id AS trackId,
|
|
track.number AS trackNumber,
|
|
track.duration AS trackDuration,
|
|
track.diskNumber AS diskNumber,
|
|
album.id AS albumId,
|
|
album.name AS albumName,
|
|
album.year AS albumYear,
|
|
artist.name AS artistName,
|
|
song.id AS songId,
|
|
song.name AS songName,
|
|
cover.jpeg AS coverImage
|
|
FROM track
|
|
JOIN album ON track.albumId = album.id
|
|
JOIN artist ON album.artistId = artist.id
|
|
JOIN song ON track.songId = song.id
|
|
JOIN cover ON album.coverId = cover.id
|
|
ORDER BY album.id, track.diskNumber, track.number"
|
|
);
|
|
return $query->result();
|
|
}
|
|
|
|
public function getMusicsByAlbum($albumId){
|
|
$query = $this->db->query(
|
|
"SELECT
|
|
track.id AS trackId,
|
|
track.number AS trackNumber,
|
|
track.duration AS trackDuration,
|
|
track.diskNumber AS diskNumber,
|
|
album.id AS albumId,
|
|
album.name AS albumName,
|
|
artist.name AS artistName,
|
|
song.id AS songId,
|
|
song.name AS songName
|
|
FROM track
|
|
JOIN album ON track.albumId = album.id
|
|
JOIN artist ON album.artistId = artist.id
|
|
JOIN song ON track.songId = song.id
|
|
WHERE album.id = ?
|
|
ORDER BY track.diskNumber, track.number",
|
|
array($albumId) );
|
|
return $query->result();
|
|
}
|
|
|
|
public function getGenres(){
|
|
$query = $this->db->query("SELECT * FROM genre");
|
|
return $query->result();
|
|
}
|
|
|
|
|
|
public function playlistOfUser($id){
|
|
$user_id = $this->session->userdata('user_id');
|
|
$this->db->select('id');
|
|
|
|
$this->db->from('playlist');
|
|
$this->db->where('userId', $user_id);
|
|
$this->db->where('id', $id);
|
|
|
|
$query = $this->db->get();
|
|
|
|
return $query->num_rows() > 0;
|
|
}
|
|
|
|
|
|
|
|
public function searchAlbums($query, $genre) {
|
|
// Sélection des colonnes
|
|
$this->db->select('album.name, album.id, year, artist.name as artistName, genre.name as genreName, jpeg');
|
|
|
|
// Tables et jointures
|
|
$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');
|
|
|
|
// Conditions de recherche
|
|
$this->db->group_start();
|
|
$this->db->like('album.name', $query);
|
|
$this->db->or_like('artist.name', $query);
|
|
$this->db->group_end();
|
|
|
|
// Condition supplémentaire par genre si spécifié
|
|
if (!empty($genre)) {
|
|
$this->db->where('genre.id', $genre);
|
|
}
|
|
|
|
// Tri par défaut
|
|
$this->db->order_by('album.id', 'ASC');
|
|
|
|
// Exécution de la requête
|
|
$query = $this->db->get();
|
|
|
|
// Renvoi des résultats
|
|
return $query->result();
|
|
}
|
|
|
|
public function createPlaylist($name, $userId) {
|
|
$data = array(
|
|
'name' => $name,
|
|
'userId' => $userId
|
|
);
|
|
$this->db->insert('playlist', $data);
|
|
return $this->db->insert_id();
|
|
}
|
|
public function deletePlaylist($playlistId) {
|
|
$this->db->delete('playlist', array('id' => $playlistId));
|
|
$this->db->delete('playlistsong', array('playlistId' => $playlistId));
|
|
}
|
|
|
|
public function getPlaylistsByUser($userId) {
|
|
$query = $this->db->get_where('playlist', array('userId' => $userId));
|
|
return $query->result();
|
|
}
|
|
|
|
public function getPlaylistById($playlistId) {
|
|
$query = $this->db->get_where('playlist', array('id' => $playlistId), 1);
|
|
return $query->row(); // Renvoie la première ligne trouvée (la playlist correspondant à l'ID)
|
|
}
|
|
|
|
public function addSongToPlaylist($playlistId, $songId) {
|
|
$data = array(
|
|
'playlistId' => $playlistId,
|
|
'songId' => $songId
|
|
);
|
|
return $this->db->insert('playlistsong', $data);
|
|
}
|
|
|
|
public function removeSongFromPlaylist($playlistId, $songId) {
|
|
$this->db->delete('playlistsong', array('playlistId' => $playlistId, 'songId' => $songId));
|
|
}
|
|
|
|
public function getSongsByPlaylist($playlistId) {
|
|
$this->db->select('song.*');
|
|
$this->db->from('playlistsong');
|
|
$this->db->join('song', 'playlistsong.songId = song.id');
|
|
$this->db->where('playlistsong.playlistId', $playlistId);
|
|
$query = $this->db->get();
|
|
return $query->result();
|
|
}
|
|
|
|
public function findSongByName($songName) {
|
|
$query = $this->db->get_where('song', array('name' => $songName));
|
|
return $query->row();
|
|
}
|
|
|
|
public function generate_random_playlist($numSongs, $playlistName, $userId, $genre = '') {
|
|
$this->db->select('song.id');
|
|
$this->db->from('song');
|
|
$this->db->join('track', 'track.songId = song.id');
|
|
$this->db->join('album', 'track.albumId = album.id');
|
|
$this->db->join('genre', 'album.genreId = genre.id');
|
|
if (!empty($genre)) {
|
|
$this->db->where('genre.name', $genre);
|
|
}
|
|
$this->db->order_by('RAND()');
|
|
$this->db->limit($numSongs);
|
|
|
|
$query = $this->db->get();
|
|
|
|
|
|
$songs = $query->result();
|
|
|
|
$playlistId = $this->createPlaylist($playlistName, $userId);
|
|
|
|
foreach ($songs as $song) {
|
|
$this->addSongToPlaylist($playlistId, $song->id);
|
|
}
|
|
redirect('playlist/view/'.$playlistId);
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
} |