<?php if(session_id() == '') { session_start(); } ?> <h3> Organisation </h3> <?php $time = time(); # e_ : est $e_connecte = isset($_SESSION["connected"]) && $_SESSION["connected"]; $e_admin = isset($_SESSION["admin"]) && $_SESSION["admin"]; if ($e_connecte) { if ($e_admin) { $droits = array('voir', 'voter', 'ajouter', 'proposer', 'annuler', 'supprimer', 'modifier', 'valider'); } else { $droits = array('voir', 'voter', 'proposer'); } } else { $droits = array('voir'); } class Evenement { // TODO Mettre tout en privé et utiliser __get et __set public $id = 0; public $creationTime = 0; public $nom = "Sans nom"; public $description = "Sans description"; public $annule = false; public $valide = false; public $duree = 3600; public $supprime = false; public $dates = array(); public $datesVotes = array(); private static $bddOK = false; private static $bdd = null; public static $tout = array(); private static function connecterBDD() { if (!Evenement::$bddOK) { require_once("creds.php"); try { Evenement::$bdd = mysql_connect(__MYSQL_HOSTNAME__, __MYSQL_USERNAME__, __MYSQL_PASSWORD__); mysql_query("SET NAMES 'utf8'"); } catch(Exception $e) { echo 'Nop connect'; return; // TODO Message d'erreur digne de ce nom } if (mysql_select_db('crep', Evenement::$bdd)) { Evenement::$bddOK = true; } else { echo 'Nop db'; } } } public static function chargerTout() { Evenement::$tout = array(); Evenement::connecterBDD(); $requete = 'SELECT id FROM events'; // TODO SQL Protéger $resultat = mysql_query($requete); while ($row = mysql_fetch_assoc($resultat)) { Evenement::$tout[] = new Evenement($row['id']); } } function __construct($id = null) { Evenement::connecterBDD(); if ($id == null) { // Nouvel évènement $this->creationTime = time(); // TODO SQL Récupérer id (AUTOINCREMENT) } else { // Évènement existant : on charge $requete = 'SELECT id, creationTime, nom, description, annule, valide, duree, supprime FROM events WHERE id='.$id; // TODO SQL Protéger $resultat = mysql_query($requete); if ($resultat && $row = mysql_fetch_assoc($resultat)) { $this->id = $row['id']; $this->creationTime = $row['creationTime']; $this->nom = $row['nom']; $this->description = $row['description']; $this->annule = $row['annule']; $this->valide = $row['valide']; $this->duree = $row['duree']; $this->supprime = $row['supprime']; } else { echo 'Nop resultat'; } } } public function sauvegarder() { // TODO SQL } public function html() { $html = '<li id="ev_li_'.$this->id.'" class="ev_li list-group-item'; if ($this->annule) { $html .= ' list-group-item-danger'; } $html .= '">'; # Titre $html .= '<h4 class="list-group-item-heading">'.$this->nom; if ($this->p_annuler()) { $html .= ' <button type="button" class="ev_annuler btn btn-warning"><span class="glyphicon glyphicon glyphicon-remove"></span> Annuler</button>'; } if ($this->p_supprimer()) { $html .= ' <button type="button" class="ev_supprimer btn btn-danger"><span class="glyphicon glyphicon glyphicon-trash"></span> Supprimer</button>'; } $html .= '</h4>'; # Description $html .= '<div class="panel panel-default">'; $html .= '<div class="panel-heading">'; $html .= '<h5 class="panel-title">Informations'; if ($this->p_modifier()) { $html .= ' <button type="button" class="ev_modifier btn btn-default"><span class="glyphicon glyphicon-pencil"></span> Modifier</button>'; } $html .= '</h5>'; $html .= '</div>'; $html .= '<div class="panel-body">'; $html .= '<p class="ev_description">'; $html .= nl2br(htmlspecialchars($this->description)); $html .= '</p>'; // $html .= '<hr/>'; $html .= '<p>'; $heures = floor($this->duree/3600); $minutes = floor($this->duree%3600/60); $secondes = floor($this->duree%3600%60); $html .= 'Durée : <span class="ev_duree">'.($heures > 0 ? '<span class="ev_duree_h">'.$heures.'</span> heure'.($heures > 1 ? 's' : '').' ' : '').($minutes > 0 ? '<span class="ev_duree_m">'.$minutes.'</span> minute'.($minutes > 1 ? 's' : '').' ' : '').($secondes > 0 ? '<span class="ev_duree_s">'.$secondes.'</span> seconde'.($secondes > 1 ? 's' : '').' ' : '').'</span><br/>'; if ($this->valide) { $html .= 'Date : le <span class="ev_date">'.date('j/m/o', $this->valide).' à '.date('H:i', $this->valide).'</span><br/>'; } $html .= '</p>'; if ($this->annule) { $html .= '<p><span class="label label-danger">Annulé</span></p>'; } $html .= '</div>'; $html .= '</div>'; # Dates if (!$this->valide && !$this->annule) { $html .= '<div class="ev_pos panel panel-default">'; $html .= '<div class="panel-heading">'; $html .= '<h5 class="panel-title">Dates possibles'; if ($this->p_proposer()) { $html .= ' <button type="button" class="ev_pos_proposer btn btn-default"><span class="glyphicon glyphicon-plus"></span> Proposer une date</button>'; } $html .= '</h5>'; $html .= '</div>'; $html .= '<div class="panel-body">'; if ($this->p_voter()) { $html .= '<p>Sélectionnez les dates qui vous conviennent.</p>'; } $html .= '<div class="list-group">'; $time = time(); foreach ($this->dates as $dateIndex => $date) { // TODO À faire fonctionner (après que le reste fonctionne) $html .= '<a href="#"class="list-group-item'; if ($date < $time) { $html .= ' disabled'; } $html .= '">Le <span class="ev_pos_date">'.date('j/m/o', $date).' à '.date('H:i', $date).'</span> (<span class="ev_pos_nb">'.$this->datesVotes[$dateIndex].'</span> <span class="glyphicon glyphicon-user"></span>)</a>'; } $html .= '</div>'; if ($this->p_valider()) { $html .= '<p><button type="button" class="ev_pos_valider btn btn-primary"><span class="glyphicon glyphicon-ok"></span> Valider la date</button></p>'; } $html .= '</div>'; $html .= '</div>'; } $html .= '</li>'; return $html; } public function passe() { global $time; if ($this->valide) { return $this->valide+$this->duree < $time; } else { return false; } } # p_ : Il est possible de ... function p_annuler() { global $droits; return in_array('annuler', $droits) && !$this->annule && !$this->passe(); } function p_supprimer() { global $droits; return in_array('supprimer', $droits) && !$this->valide; } function p_modifier() { global $droits; return in_array('modifier', $droits); } function p_voter() { global $droits; return in_array('voter', $droits) && !$this->valide; } function p_proposer() { global $droits; return in_array('proposer', $droits) && !$this->valide; } function p_valider() { global $droits; # TODO Et si un nombre suffisant de personnes est ok avec la date la plus disponible return in_array('valider', $droits) && !$this->valide; } } Evenement::chargerTout(); # a_ : Récupérer depuis la base de donnée (ou pas) function a_evenement($id) { // TODO Méthode statique à Evenement foreach (Evenement::$tout as $evenement) { if ($evenement->id == $id) { return $evenement; } } } # TRAITEMENT DES DONNEES POST function mauvaiseRequete($code = 0) { echo '<div class="alert alert-danger" role="alert">Le serveur n\'a pas compris votre requête <small>(code d\'erreur n°'.$code.')</small>.</div>'; } function bonneRequete($message = 'Action correctement effectuée.') { echo '<div class="alert alert-success" role="alert">'.$message.'</div>'; } if (isset($_POST['action'])) { switch ($_POST['action']) { case 'modifier': if (isset($_POST['id']) && isset($_POST['description']) && isset($_POST['duree'])) { if ($evenement = a_evenement($_POST['id'])) { if (($duree = intval($_POST['duree'])) >= 0) { $evenement->description = $_POST['description']; // TODO Protection nécessaire pour SQL $evenement->duree = $duree; bonneRequete('Élement correctement modifié.'); } else { mauvaiseRequete(4); } } else { mauvaiseRequete(3); } } else { mauvaiseRequete(2); } break; case 'annuler': if (isset($_POST['id'])) { if ($evenement = a_evenement($_POST['id'])) { $evenement->annule = true; bonneRequete('Évènement annulé.'); } else { mauvaiseRequete(3); } } else { mauvaiseRequete(2); } break; case 'supprimer': if (isset($_POST['id'])) { if ($evenement = a_evenement($_POST['id'])) { $evenement->supprime = true; bonneRequete('Évènement supprimé.'); } else { mauvaiseRequete(3); } } else { mauvaiseRequete(2); } break; default: mauvaiseRequete(1); break; } } # AFFICHAGE DE LA PAGE # Tri des évènements $evenementsPlanifies = array(); $evenementsAPlanifier = array(); $evenementsPasses = array(); foreach (Evenement::$tout as $evenement) { if (!$evenement->supprime) { if ($evenement->valide) { if ($evenement->passe()) { $evenementsPasses[] = $evenement; } else { $evenementsPlanifies[] = $evenement; } } else { $evenementsAPlanifier[] = $evenement; } } } # Affichage if (!$e_connecte) { ?> <div class="alert alert-warning" role="alert">Connectez-vous afin de pouvoir agir sur les évènements.</div> <?php } if (in_array('voir', $droits)) { // TODO Message si catégorie vide ?> <h3>Évènements plannifiés <?php if (in_array('ajouter', $droits)) { ?><button id="ev_ajouter_fixe" type="button" class="btn btn-primary"><span class="glyphicon glyphicon-plus"></span> Ajouter un évènement avec une date fixée</button><?php } ?></h3> <ul id="ev_ul_planifies" class="list-group"> <?php foreach ($evenementsPlanifies as $evenement) { echo $evenement->html(); } ?> </ul> <h3>Évènements à plannifier <?php if (in_array('ajouter', $droits)) { ?><button id="ev_ajouter_choix" type="button" class="btn btn-primary"><span class="glyphicon glyphicon-plus"></span> Ajouter un évènement avec une date à choisir</button><?php } ?></h3> <ul id="ev_ul_aplanifier" class="list-group"> <?php foreach ($evenementsAPlanifier as $evenement) { echo $evenement->html(); } ?> </ul> <h3>Évènements passés</h3> <ul id="ev_ul_passes" class="list-group"> <?php foreach ($evenementsPasses as $evenement) { echo $evenement->html(); } ?> </ul> <script type="text/javascript" src="js/orga.js"></script> <?php } else { ?> <div class="alert alert-danger" role="alert">Vous ne pouvez pas voir les évènements.</div> <?php } ?>