mirror of
https://grond.iut-fbleau.fr/stiti/SAE_2.02
synced 2024-11-09 21:11:40 +01:00
Ajout des commentaires
This commit is contained in:
parent
de3f0c7cb5
commit
f6e0b034e4
@ -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 __construct() {
|
||||||
|
parent::__construct();
|
||||||
|
$this->load->library('session');
|
||||||
|
}
|
||||||
|
|
||||||
public function index() {
|
public function index() {
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// Charger le modèle
|
// Charger le modèle
|
||||||
$this->load->model('Cover_model');
|
$this->load->model('Cover_model');
|
||||||
|
$this->load->model('Utilisateur_model');
|
||||||
|
|
||||||
$this->load->helper('url');
|
$this->load->helper('url');
|
||||||
|
|
||||||
$this->load->helper('html');
|
$this->load->helper('html');
|
||||||
|
|
||||||
// Appeler la fonction pour récupérer les couvertures d'albums
|
// Appeler la fonction pour récupérer les couvertures d'albums
|
||||||
$data['covers'] = $this->Cover_model->get_covers();
|
$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
|
// Charger la vue avec les données récupérées
|
||||||
$this->load->view('layout/header_dark');
|
$this->load->view('layout/header_dark');
|
||||||
$this->load->view('accueil', $data);
|
$this->load->view('accueil', $data);
|
||||||
$this->load->view('layout/footer_dark');
|
$this->load->view('layout/footer_dark');
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
?>
|
?>
|
@ -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');
|
||||||
|
@ -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));
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
?>
|
?>
|
||||||
|
@ -31,21 +31,46 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|
||||||
<div class="testimonials">
|
<div class="testimonials">
|
||||||
<h2>Avis</h2>
|
<h2>Avis</h2>
|
||||||
|
<?php if (!empty($avis)): ?>
|
||||||
|
<?php foreach ($avis as $a): ?>
|
||||||
<div class="testimonial">
|
<div class="testimonial">
|
||||||
<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>
|
<p>"<?= htmlspecialchars($a->commentaire) ?>"</p>
|
||||||
<p>- Mike</p>
|
<p>- <?= htmlspecialchars($a->prenom) ?> <?= htmlspecialchars($a->nom) ?></p>
|
||||||
|
<!-- Ajout de la notation -->
|
||||||
|
<div class="rating">
|
||||||
|
<?php for ($i = 0; $i < $a->notation; $i++): ?>
|
||||||
|
<span class="star">★</span>
|
||||||
|
<?php endfor; ?>
|
||||||
</div>
|
</div>
|
||||||
<div class="testimonial">
|
<!-- Ajout du lien de suppression (sous condition d'être l'utilisateur connecté) -->
|
||||||
<p>"Une expérience utilisateur fantastique. Je recommande vivement 🤌."</p>
|
<?php if ($this->session->userdata('user_id') && $this->session->userdata('user_id') == $a->utilisateur_id): ?>
|
||||||
<p>- Laura</p>
|
<a href="<?php echo site_url('utilisateur/supprimer_avis/' . $a->id); ?>">Supprimer</a>
|
||||||
|
<?php endif; ?>
|
||||||
</div>
|
</div>
|
||||||
<div class="testimonial">
|
<?php endforeach; ?>
|
||||||
<p>"Service client exceptionnel et fonctionnalités géniales. La fonctionnalité de playlist est vraiment top ! 👍"</p>
|
<?php endif; ?>
|
||||||
<p>- Joe</p>
|
|
||||||
</div>
|
</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">★</label>
|
||||||
|
<input type="radio" id="star2" name="rating" value="2"><label for="star2">★</label>
|
||||||
|
<input type="radio" id="star3" name="rating" value="3"><label for="star3">★</label>
|
||||||
|
<input type="radio" id="star4" name="rating" value="4"><label for="star4">★</label>
|
||||||
|
<input type="radio" id="star5" name="rating" value="5"><label for="star5">★</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>
|
||||||
|
@ -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;
|
||||||
|
Loading…
Reference in New Issue
Block a user