Ajout des commentaires

This commit is contained in:
stiti 2024-05-25 02:42:52 +02:00
parent de3f0c7cb5
commit f6e0b034e4
5 changed files with 256 additions and 31 deletions

View File

@ -1,24 +1,32 @@
<?php <?php
defined('BASEPATH') OR exit('No direct script access allowed');
class Home extends CI_Controller { class Home extends CI_Controller {
public function index() { public function __construct() {
parent::__construct();
$this->load->library('session');
}
public function index() {
// Charger le modèle
$this->load->model('Cover_model');
$this->load->model('Utilisateur_model');
$this->load->helper('url');
$this->load->helper('html');
// Appeler la fonction pour récupérer les couvertures d'albums
$data['covers'] = $this->Cover_model->get_covers();
// Récupérer les avis récents
$data['avis'] = $this->Utilisateur_model->get_recent_avis();
// Charger la vue avec les données récupérées
$this->load->view('layout/header_dark');
$this->load->view('accueil', $data);
$this->load->view('layout/footer_dark');
}
// Charger le modèle
$this->load->model('Cover_model');
$this->load->helper('url');
$this->load->helper('html');
// Appeler la fonction pour récupérer les couvertures d'albums
$data['covers'] = $this->Cover_model->get_covers();
// Charger la vue avec les données récupérées
$this->load->view('layout/header_dark');
$this->load->view('accueil', $data);
$this->load->view('layout/footer_dark');
} }
} ?>
?>

View File

@ -49,6 +49,67 @@ class Utilisateur extends CI_Controller {
} }
} }
public function ajouter_avis() {
if(!$this->session->userdata('user_id')) {
redirect('utilisateur/connexion');
}
$this->form_validation->set_rules('commentaire', 'Commentaire', 'required');
$this->form_validation->set_rules('notation', 'Notation', 'required'); // Ajouter une règle de validation pour la notation
if ($this->form_validation->run() == FALSE) {
redirect('/');
} else {
$data = array(
'utilisateur_id' => $this->session->userdata('user_id'),
'commentaire' => $this->input->post('commentaire'),
'notation' => $this->input->post('notation') // Récupérer la valeur de notation depuis le champ caché
);
if ($this->Utilisateur_model->insert_avis($data)) {
$this->session->set_flashdata('success', 'Avis ajouté avec succès.');
} else {
$this->session->set_flashdata('error', 'Une erreur est survenue. Veuillez réessayer.');
}
redirect('/');
}
}
public function supprimer_avis($avis_id) {
// Vérifiez d'abord si l'utilisateur est connecté
if (!$this->session->userdata('user_id')) {
$this->session->set_flashdata('error', 'Vous devez être connecté pour supprimer un avis.');
redirect('utilisateur/connexion');
}
// Vérifiez si l'avis existe
$avis = $this->Utilisateur_model->get_avis($avis_id);
if (!$avis) {
$this->session->set_flashdata('error', 'L\'avis que vous essayez de supprimer n\'existe pas.');
redirect('/');
}
// Vérifiez si l'avis appartient à l'utilisateur connecté
if ($avis->utilisateur_id != $this->session->userdata('user_id')) {
$this->session->set_flashdata('error', 'Vous n\'êtes pas autorisé à supprimer cet avis.');
redirect('/');
}
// Supprimez l'avis
if ($this->Utilisateur_model->supprimer_avis($avis_id)) {
$this->session->set_flashdata('success', 'Avis supprimé avec succès.');
} else {
$this->session->set_flashdata('error', 'Une erreur est survenue lors de la suppression de l\'avis.');
}
redirect('/');
}
public function connexion(){ public function connexion(){
// Définir les règles de validation // Définir les règles de validation
$this->form_validation->set_rules('email', 'Email', 'required|valid_email'); $this->form_validation->set_rules('email', 'Email', 'required|valid_email');

View File

@ -26,5 +26,33 @@ class Utilisateur_model extends CI_Model {
$this->db->where('id', $id); $this->db->where('id', $id);
return $this->db->update('utilisateur', $data); return $this->db->update('utilisateur', $data);
} }
public function insert_avis($data) {
return $this->db->insert('avis', $data);
}
public function get_recent_avis($limit = 3) {
$this->db->select('avis.*, utilisateur.nom, utilisateur.prenom');
$this->db->from('avis');
$this->db->join('utilisateur', 'avis.utilisateur_id = utilisateur.id');
$this->db->order_by('date_creation', 'DESC');
$this->db->limit($limit);
$query = $this->db->get();
return $query->result();
}
public function get_avis($utilisateur_id) {
$this->db->select('*');
$this->db->from('avis');
$this->db->where('utilisateur_id', $utilisateur_id);
$query = $this->db->get();
return $query->result();
}
public function supprimer_avis($avis_id) {
return $this->db->delete('avis', array('id' => $avis_id));
}
} }
?> ?>

View File

@ -31,21 +31,46 @@
</div> </div>
</div> </div>
<div class="testimonials"> <div class="testimonials">
<h2>Avis</h2> <h2>Avis</h2>
<div class="testimonial"> <?php if (!empty($avis)): ?>
<p>"Ce site est incroyable! Depuis que j'utilise Onzeur ma vie as changé ! Je suis devenu riche et célèbre ! Je recommande 🤩"</p> <?php foreach ($avis as $a): ?>
<p>- Mike</p> <div class="testimonial">
</div> <p>"<?= htmlspecialchars($a->commentaire) ?>"</p>
<div class="testimonial"> <p>- <?= htmlspecialchars($a->prenom) ?> <?= htmlspecialchars($a->nom) ?></p>
<p>"Une expérience utilisateur fantastique. Je recommande vivement 🤌."</p> <!-- Ajout de la notation -->
<p>- Laura</p> <div class="rating">
</div> <?php for ($i = 0; $i < $a->notation; $i++): ?>
<div class="testimonial"> <span class="star">&#9733;</span>
<p>"Service client exceptionnel et fonctionnalités géniales. La fonctionnalité de playlist est vraiment top ! 👍"</p> <?php endfor; ?>
<p>- Joe</p> </div>
</div> <!-- Ajout du lien de suppression (sous condition d'être l'utilisateur connecté) -->
<?php if ($this->session->userdata('user_id') && $this->session->userdata('user_id') == $a->utilisateur_id): ?>
<a href="<?php echo site_url('utilisateur/supprimer_avis/' . $a->id); ?>">Supprimer</a>
<?php endif; ?>
</div>
<?php endforeach; ?>
<?php endif; ?>
</div>
<div class="comment-form">
<?php if ($this->session->userdata('user_id')): ?>
<h2>Ajouter un commentaire</h2>
<form action="<?php echo site_url('utilisateur/ajouter_avis'); ?>" method="post">
<textarea name="commentaire" rows="3" placeholder="Écrivez votre commentaire ici..." required></textarea>
<!-- Ajout des étoiles pour la notation -->
<div class="rating">
<input type="radio" id="star1" name="rating" value="1"><label for="star1">&#9733;</label>
<input type="radio" id="star2" name="rating" value="2"><label for="star2">&#9733;</label>
<input type="radio" id="star3" name="rating" value="3"><label for="star3">&#9733;</label>
<input type="radio" id="star4" name="rating" value="4"><label for="star4">&#9733;</label>
<input type="radio" id="star5" name="rating" value="5"><label for="star5">&#9733;</label>
</div>
<!-- Champ caché pour stocker la valeur de notation -->
<input type="hidden" name="notation" id="notation">
<button type="submit">Ajouter</button>
</form>
<?php endif; ?>
</div> </div>
<div class="gallery"> <div class="gallery">
@ -71,4 +96,33 @@
</div> </div>
</div> </div>
</body> </body>
<script>
// Sélectionnez tous les boutons radio d'étoiles
const stars = document.querySelectorAll('.rating input[type="radio"]');
// Sélectionnez le champ caché pour la notation
const notationInput = document.getElementById('notation');
// Parcourez tous les boutons radio d'étoiles
stars.forEach(star => {
// Ajoutez un écouteur d'événement pour le clic sur chaque étoile
star.addEventListener('click', function() {
// Obtenez le numéro de l'étoile sélectionnée
const selectedStar = parseInt(this.value);
// Mettez à jour la valeur du champ caché "notation" avec la valeur de l'étoile sélectionnée
notationInput.value = selectedStar;
// Parcourez toutes les étoiles
stars.forEach(star => {
// Si l'étoile est inférieure ou égale à l'étoile sélectionnée, colorez-la en jaune, sinon, laissez-la grise
if (parseInt(star.value) <= selectedStar) {
star.nextElementSibling.style.color = '#FFD700'; // Colorez l'étoile en jaune
} else {
star.nextElementSibling.style.color = '#ccc'; // Laissez l'étoile grise
}
});
});
});
</script>
</html> </html>

View File

@ -25,6 +25,80 @@ h1, h2, h3 {
text-align: center; text-align: center;
} }
.testimonials {
margin: 20px 0;
padding: 20px;
background: #fff;
border-radius: 8px;
box-shadow: 0 0 10px rgba(0,0,0,0.1);
}
.testimonials h2 {
margin-top: 0;
}
.testimonial {
margin: 10px 0;
border-bottom: 1px solid #ccc;
padding-bottom: 10px;
}
.testimonial p {
margin: 0;
font-style: italic;
}
.rating {
margin-top: 5px;
display: inline-block;
}
.rating input[type="radio"] {
display: none;
}
.rating .star {
color: #FFD700;
font-size: 20px;
}
.rating label {
font-size: 30px;
color: #ccc;
cursor: pointer;
}
.comment-form {
margin: 20px 0;
padding: 20px;
background: #fff;
border-radius: 8px;
box-shadow: 0 0 10px rgba(0,0,0,0.1);
}
.comment-form h2 {
margin-top: 0;
}
.comment-form textarea {
width: 100%;
padding: 10px;
margin: 10px 0;
border: 1px solid #ccc;
border-radius: 4px;
}
.comment-form button {
padding: 10px 20px;
background-color: #333;
color: #fff;
border: none;
border-radius: 4px;
cursor: pointer;
}
.hero button { .hero button {
padding: 15px 40px; padding: 15px 40px;
font-size: 1.2rem; font-size: 1.2rem;