vaujdui v2

This commit is contained in:
Vincent TEISSIER 2024-06-19 15:47:11 +02:00
parent 6bfbf46dcc
commit 46e7b0d369
10 changed files with 158 additions and 94 deletions

@ -7,6 +7,7 @@ class Artistes extends CI_Controller {
$this->load->model('Model_artist'); $this->load->model('Model_artist');
$this->load->model('Model_music'); $this->load->model('Model_music');
$this->load->library('pagination'); $this->load->library('pagination');
$this->load->library('session');
} }
public function index() { public function index() {
@ -19,24 +20,39 @@ class Artistes extends CI_Controller {
$config['base_url'] = site_url('artistes'); $config['base_url'] = site_url('artistes');
$config['total_rows'] = $this->Model_artist->get_total_artists($genre, $query); $config['total_rows'] = $this->Model_artist->get_total_artists($genre, $query);
$config['per_page'] = 16; // Nombre d'artistes par page $config['per_page'] = 16; // Nombre d'artistes par page
$config['uri_segment'] = 2; // Segment de l'URI contenant le numéro de la page $config['page_query_string'] = TRUE;
$config['reuse_query_string'] = TRUE; $config['reuse_query_string'] = TRUE;
$config['query_string_segment'] = 'page';
$config['full_tag_open'] = '<nav aria-label="Page navigation"><ul class="pagination">';
$config['full_tag_close'] = '</ul></nav>';
$config['first_link'] = 'First';
$config['last_link'] = 'Last';
$config['first_tag_open'] = '<li class="page-item">';
$config['first_tag_close'] = '</li>';
$config['prev_link'] = '&laquo';
$config['prev_tag_open'] = '<li class="page-item">';
$config['prev_tag_close'] = '</li>';
$config['next_link'] = '&raquo';
$config['next_tag_open'] = '<li class="page-item">';
$config['next_tag_close'] = '</li>';
$config['last_tag_open'] = '<li class="page-item">';
$config['last_tag_close'] = '</li>';
$config['cur_tag_open'] = '<li class="page-item active"><a href="#" class="page-link">';
$config['cur_tag_close'] = '</a></li>';
$config['num_tag_open'] = '<li class="page-item">';
$config['num_tag_close'] = '</li>';
$config['attributes'] = array('class' => 'page-link');
$this->pagination->initialize($config); $this->pagination->initialize($config);
$page = ($this->uri->segment(2)) ? $this->uri->segment(2) : 0; $page = $this->input->get('page');
$page = ($page) ? $page : 0;
// Correction pour éviter l'erreur str_replace()
$pagination_links = $this->pagination->create_links();
if ($pagination_links === null) {
$pagination_links = '';
}
$data = array( $data = array(
'artists' => $this->Model_artist->getArtists($genre, $order, $query, $config['per_page'], $page), 'artists' => $this->Model_artist->getArtists($genre, $order, $query, $config['per_page'], $page),
'genres' => $this->Model_music->researchtype(), 'genres' => $this->Model_music->researchtype(),
'pagination' => $pagination_links, 'is_logged_in' => $this->session->userdata('logged_in'),
'is_logged_in' => $this->session->userdata('logged_in') 'pagination' => $this->pagination->create_links()
); );
$this->load->view('layout/header', $data); $this->load->view('layout/header', $data);
@ -45,8 +61,6 @@ class Artistes extends CI_Controller {
$this->load->view('layout/footer'); $this->load->view('layout/footer');
} }
public function view($artistId) { public function view($artistId) {
$artistDetails = $this->Model_artist->getArtistDetails($artistId); $artistDetails = $this->Model_artist->getArtistDetails($artistId);
@ -66,5 +80,5 @@ class Artistes extends CI_Controller {
$this->load->view('artist_details', $data); $this->load->view('artist_details', $data);
$this->load->view('layout/footer'); $this->load->view('layout/footer');
} }
} }
?>

@ -11,36 +11,45 @@ class Connect extends CI_Controller {
$this->load->helper(['url', 'form']); $this->load->helper(['url', 'form']);
} }
public function create() public function create() {
{
$this->form_validation->set_rules('nom', 'Nom', 'required'); $this->form_validation->set_rules('nom', 'Nom', 'required');
$this->form_validation->set_rules('prenom', 'Prénom', 'required'); $this->form_validation->set_rules('prenom', 'Prénom', 'required');
$this->form_validation->set_rules('email', 'Adresse mail', 'valid_email|required'); $this->form_validation->set_rules('email', 'Adresse mail', 'valid_email|required');
$this->form_validation->set_rules('password', 'Password', 'min_length[5]|required'); $this->form_validation->set_rules('password', 'Password', 'min_length[5]|required');
$this->form_validation->set_rules('cpassword', 'Confirmation Password', 'required|matches[password]'); $this->form_validation->set_rules('cpassword', 'Confirmation Password', 'required|matches[password]');
if ($this->form_validation->run() === FALSE) { if ($this->form_validation->run() === FALSE) {
$this->load->view('layout/header'); $this->load->view('layout/header');
$this->load->view('create'); $this->load->view('create');
$this->load->view('layout/footer'); $this->load->view('layout/footer');
} else { } else {
$data = array( $email = $this->input->post('email');
'nom' => $this->input->post('nom'), if ($this->User_model->emailExists($email)) {
'prenom' => $this->input->post('prenom'), $data['error'] = 'L\'adresse email est déjà utilisée.';
'email' => $this->input->post('email'),
'password' => password_hash($this->input->post('password'), PASSWORD_DEFAULT)
);
if ($this->User_model->create_user($data)) {
redirect('connect/login');
} else {
$data['error'] = 'Erreur lors de la création du compte. Veuillez réessayer.';
$this->load->view('layout/header'); $this->load->view('layout/header');
$this->load->view('create', $data); $this->load->view('create', $data);
$this->load->view('layout/footer'); $this->load->view('layout/footer');
} else {
$data = array(
'nom' => $this->input->post('nom'),
'prenom' => $this->input->post('prenom'),
'email' => $this->input->post('email'),
'password' => password_hash($this->input->post('password'), PASSWORD_DEFAULT)
);
if ($this->User_model->create_user($data)) {
redirect('connect/login');
} else {
$data['error'] = 'Erreur lors de la création du compte. Veuillez réessayer.';
$this->load->view('layout/header');
$this->load->view('create', $data);
$this->load->view('layout/footer');
}
} }
} }
} }
public function login() public function login()
{ {

@ -26,9 +26,11 @@ class Playlist extends CI_Controller {
} }
public function add() { public function add() {
$is_logged_in = $this->session->userdata('logged_in'); if (!$this->session->userdata('logged_in')) {
$user_email = $this->session->userdata('email'); redirect('connect/login');
}
$user_email = $this->session->userdata('email');
$name = $this->input->post('name'); $name = $this->input->post('name');
$type = $this->input->post('type'); $type = $this->input->post('type');
$numSongs = $this->input->post('numSongs'); $numSongs = $this->input->post('numSongs');
@ -55,13 +57,16 @@ class Playlist extends CI_Controller {
} }
public function selectPlaylist() { public function selectPlaylist() {
$is_logged_in = $this->session->userdata('logged_in'); if (!$this->session->userdata('logged_in')) {
redirect('connect/login');
}
$itemId = $this->input->post('itemId'); $itemId = $this->input->post('itemId');
$itemType = $this->input->post('itemType'); $itemType = $this->input->post('itemType');
$playlists = $this->Model_playlist->getPlaylistsByUser($this->session->userdata('email')); $playlists = $this->Model_playlist->getPlaylistsByUser($this->session->userdata('email'));
$data = array( $data = array(
'is_logged_in' => $is_logged_in, 'is_logged_in' => $this->session->userdata('logged_in'),
'itemId' => $itemId, 'itemId' => $itemId,
'itemType' => $itemType, 'itemType' => $itemType,
'playlists' => $playlists 'playlists' => $playlists
@ -73,6 +78,10 @@ class Playlist extends CI_Controller {
} }
public function addItems() { public function addItems() {
if (!$this->session->userdata('logged_in')) {
redirect('connect/login');
}
$playlistId = $this->input->post('playlistId'); $playlistId = $this->input->post('playlistId');
$itemId = $this->input->post('itemId'); $itemId = $this->input->post('itemId');
$itemType = $this->input->post('itemType'); $itemType = $this->input->post('itemType');
@ -98,12 +107,15 @@ class Playlist extends CI_Controller {
} }
public function view($playlistId) { public function view($playlistId) {
$is_logged_in = $this->session->userdata('logged_in'); if (!$this->session->userdata('logged_in')) {
redirect('connect/login');
}
$items = $this->Model_playlist->getPlaylistItems($playlistId); $items = $this->Model_playlist->getPlaylistItems($playlistId);
$itemCount = $this->Model_playlist->getPlaylistItemCount($playlistId); $itemCount = $this->Model_playlist->getPlaylistItemCount($playlistId);
$data = array( $data = array(
'is_logged_in' => $is_logged_in, 'is_logged_in' => $this->session->userdata('logged_in'),
'items' => $items, 'items' => $items,
'itemCount' => $itemCount 'itemCount' => $itemCount
); );
@ -114,29 +126,36 @@ class Playlist extends CI_Controller {
} }
public function deleteItem($playlistId, $itemId) { public function deleteItem($playlistId, $itemId) {
if (!$this->session->userdata('logged_in')) {
redirect('connect/login');
}
$this->Model_playlist->deleteItem($playlistId, $itemId); $this->Model_playlist->deleteItem($playlistId, $itemId);
redirect('playlist/view/' . $playlistId); redirect('playlist/view/' . $playlistId);
} }
public function delete($playlist_id) { public function delete($playlist_id) {
$is_logged_in = $this->session->userdata('logged_in'); if (!$this->session->userdata('logged_in')) {
$user_email = $this->session->userdata('email'); redirect('connect/login');
}
$this->Model_playlist->deletePlaylist($playlist_id); $this->Model_playlist->deletePlaylist($playlist_id);
redirect('playlist'); redirect('playlist');
} }
public function duplicate($playlist_id) { public function duplicate($playlist_id) {
$is_logged_in = $this->session->userdata('logged_in'); if (!$this->session->userdata('logged_in')) {
$user_email = $this->session->userdata('email'); redirect('connect/login');
}
$this->Model_playlist->duplicatePlaylist($playlist_id, $user_email); $this->Model_playlist->duplicatePlaylist($playlist_id);
redirect('playlist'); redirect('playlist');
} }
public function rename() { public function rename() {
$is_logged_in = $this->session->userdata('logged_in'); if (!$this->session->userdata('logged_in')) {
$user_email = $this->session->userdata('email'); redirect('connect/login');
}
$playlistId = $this->input->post('playlistId'); $playlistId = $this->input->post('playlistId');
$newName = $this->input->post('newName'); $newName = $this->input->post('newName');
@ -145,3 +164,4 @@ class Playlist extends CI_Controller {
redirect('playlist'); redirect('playlist');
} }
} }
?>

@ -109,7 +109,7 @@ class Model_playlist extends CI_Model {
$this->db->insert('playlists', $data); $this->db->insert('playlists', $data);
$playlistId = $this->db->insert_id(); $playlistId = $this->db->insert_id();
// Filtrage des chansons par genre // Filtrage des chansons par genre et sélection aléatoire
$this->db->select('track.id'); $this->db->select('track.id');
$this->db->from('track'); $this->db->from('track');
$this->db->join('song', 'track.songid = song.id'); $this->db->join('song', 'track.songid = song.id');
@ -120,17 +120,13 @@ class Model_playlist extends CI_Model {
$this->db->where('genre.name', $genre); $this->db->where('genre.name', $genre);
} }
$this->db->order_by('RAND()');
$this->db->limit($numSongs);
$query = $this->db->get(); $query = $this->db->get();
$songs = $query->result(); $songs = $query->result();
if ($numSongs > count($songs)) { foreach ($songs as $song) {
$numSongs = count($songs);
}
// Sélection aléatoire de chansons
$randomKeys = array_rand($songs, $numSongs);
foreach ($randomKeys as $key) {
$song = $songs[$key];
$this->addItem($playlistId, $song->id, 'song'); $this->addItem($playlistId, $song->id, 'song');
} }

@ -14,6 +14,12 @@ class User_model extends CI_Model {
public function create_user($data) { public function create_user($data) {
return $this->db->insert('user', $data); return $this->db->insert('user', $data);
} }
public function emailExists($email) {
$this->db->where('email', $email);
$query = $this->db->get('user');
return $query->num_rows() > 0;
}
} }
?> ?>

@ -82,23 +82,23 @@
height: 3em; /* Ajuste en fonction de la taille de la police */ height: 3em; /* Ajuste en fonction de la taille de la police */
} }
.pagination a, .pagination span { .pagination a, .pagination span {
padding: 8px 12px; padding: 8px 12px;
margin: 0 2px; margin: 0 2px;
border-radius: 4px; border-radius: 4px;
border: 1px solid #ddd; border: 1px solid #b02dff; /* Couleur violet clair */
color: #333; color: #b02dff; /* Couleur violet clair */
text-decoration: none; text-decoration: none;
} }
.pagination a:hover { .pagination a:hover {
background-color: #f0f0f0; background-color: #f3e8ff; /* Couleur violet très clair */
border-color: #bbb; border-color: #a86bff; /* Couleur violet moyen */
} }
.pagination .is-current { .pagination .is-current {
background-color: #3273dc; background-color: #8a4dff; /* Couleur violet de Bulma */
border-color: #3273dc; border-color: #8a4dff; /* Couleur violet de Bulma */
color: #fff; color: #fff;
} }
</style> </style>

@ -33,19 +33,19 @@
padding: 8px 12px; padding: 8px 12px;
margin: 0 2px; margin: 0 2px;
border-radius: 4px; border-radius: 4px;
border: 1px solid #ddd; border: 1px solid #b02dff; /* Couleur violet clair */
color: #333; color: #b02dff; /* Couleur violet clair */
text-decoration: none; text-decoration: none;
} }
.pagination a:hover { .pagination a:hover {
background-color: #f0f0f0; background-color: #f3e8ff; /* Couleur violet très clair */
border-color: #bbb; border-color: #a86bff; /* Couleur violet moyen */
} }
.pagination .is-current { .pagination .is-current {
background-color: #3273dc; background-color: #8a4dff; /* Couleur violet de Bulma */
border-color: #3273dc; border-color: #8a4dff; /* Couleur violet de Bulma */
color: #fff; color: #fff;
} }
</style> </style>

@ -8,6 +8,11 @@
<div class="column is-5"> <div class="column is-5">
<div class="box"> <div class="box">
<h1 class="title is-1 has-text-centered">Inscription</h1> <h1 class="title is-1 has-text-centered">Inscription</h1>
<?php if (isset($error)): ?>
<div class="notification is-danger">
<?= $error ?>
</div>
<?php endif; ?>
<?=validation_errors(); ?> <?=validation_errors(); ?>
<?=form_open('connect/create')?> <?=form_open('connect/create')?>
<div class="field"> <div class="field">
@ -27,6 +32,9 @@
<div class="control"> <div class="control">
<input class="input is-dark" type="email" id="email" name="email" placeholder="Email" value="<?=set_value('email')?>" required> <input class="input is-dark" type="email" id="email" name="email" placeholder="Email" value="<?=set_value('email')?>" required>
</div> </div>
<?php if (isset($error)): ?>
<p class="help is-danger"><?= $error ?></p>
<?php endif; ?>
</div> </div>
<div class="field"> <div class="field">
<label class="label" for="password">Mot de passe</label> <label class="label" for="password">Mot de passe</label>

@ -38,7 +38,7 @@
<a class="button is-light" href="<?= site_url('connect/logout') ?>">Déconnexion</a> <a class="button is-light" href="<?= site_url('connect/logout') ?>">Déconnexion</a>
<?php else: ?> <?php else: ?>
<a class="button is-light" href="<?= site_url('connect/login') ?>">Connexion</a> <a class="button is-light" href="<?= site_url('connect/login') ?>">Connexion</a>
<a class="button is-primary" href="<?= site_url('connect/create') ?>">Inscription</a> <a class="button is-signup" href="<?= site_url('connect/create') ?>">Inscription</a>
<?php endif; ?> <?php endif; ?>
</div> </div>
</div> </div>
@ -64,5 +64,19 @@
} }
}); });
</script> </script>
<style>
.button.is-signup {
background-color: #b02dff;
border-color: #b02dff;
color: #fff;
}
.button.is-signup:hover {
background-color: #9a29e6;
border-color: #9a29e6;
}
</style>
</body> </body>
</html> </html>

@ -37,28 +37,25 @@
</section> </section>
<style> <style>
.pagination a, .pagination span {
padding: 8px 12px;
margin: 0 2px;
border-radius: 4px;
border: 1px solid #b02dff; /* Couleur violet clair */
color: #b02dff; /* Couleur violet clair */
text-decoration: none;
}
.pagination a, .pagination span { .pagination a:hover {
padding: 8px 12px; background-color: #f3e8ff; /* Couleur violet très clair */
margin: 0 2px; border-color: #a86bff; /* Couleur violet moyen */
border-radius: 4px; }
border: 1px solid #ddd;
color: #333;
text-decoration: none;
}
.pagination a:hover {
background-color: #f0f0f0;
border-color: #bbb;
}
.pagination .is-current {
background-color: #3273dc;
border-color: #3273dc;
color: #fff;
}
.pagination .is-current {
background-color: #8a4dff; /* Couleur violet de Bulma */
border-color: #8a4dff; /* Couleur violet de Bulma */
color: #fff;
}
</style> </style>