Blame view

orga.php 12.1 KB
bd5b1d78   Geoffrey PREUD'HOMME   [Orga] Fix commit...
1
2
3
4
5
6
7
8
  <?php
  
  if(session_id() == '') {
      session_start();
  }
  
  ?>
  
e4f5453d   Geoffrey PREUD'HOMME   [Orga] Meilleure ...
9
  <h3> Organisation </h3>
97d25235   Erwan Nanrocki   ajout d un titre ...
10
  
27f3beb9   Geoffrey Bontoux-Preud-Homme   Ajout de orga.php
11
  <?php
5f2f48c7   Geoffrey PREUD'HOMME   [Orga] Modificati...
12
  
e4f5453d   Geoffrey PREUD'HOMME   [Orga] Meilleure ...
13
14
  $time = time();
  
27f3beb9   Geoffrey Bontoux-Preud-Homme   Ajout de orga.php
15
  # e_ : est
e6faaa33   Geoffrey PREUD'HOMME   [Orga] Oublié ses...
16
  
d70dd0a0   Geoffrey PREUD'HOMME   [Orga] Intégratio...
17
18
19
  $e_connecte = isset($_SESSION["connected"]) && $_SESSION["connected"];
  $e_admin = isset($_SESSION["admin"]) && $_SESSION["admin"];
  
f84e30e3   Geoffrey PREUD'HOMME   [Orga] Retravail
20
  
e4f5453d   Geoffrey PREUD'HOMME   [Orga] Meilleure ...
21
  if ($e_connecte) {
d70dd0a0   Geoffrey PREUD'HOMME   [Orga] Intégratio...
22
      if ($e_admin) {
e4f5453d   Geoffrey PREUD'HOMME   [Orga] Meilleure ...
23
24
          $droits  = array('voir', 'voter', 'ajouter', 'proposer', 'annuler', 'supprimer', 'modifier', 'valider');
      } else {
e6faaa33   Geoffrey PREUD'HOMME   [Orga] Oublié ses...
25
          $droits = array('voir', 'voter', 'proposer');
e4f5453d   Geoffrey PREUD'HOMME   [Orga] Meilleure ...
26
27
28
29
30
      }
  } else {
      $droits = array('voir');
  }
  
f84e30e3   Geoffrey PREUD'HOMME   [Orga] Retravail
31
32
  class Evenement
  {
3fde9691   Geoffrey PREUD'HOMME   [Orga] Interpréta...
33
34
35
      // TODO Mettre tout en privé et utiliser __get et __set
      public $id = 0;
      public $creationTime = 0;
5f2f48c7   Geoffrey PREUD'HOMME   [Orga] Modificati...
36
  
f84e30e3   Geoffrey PREUD'HOMME   [Orga] Retravail
37
38
39
40
      public $nom = "Sans nom";
      public $description = "Sans description";
      public $annule = false;
      public $valide = false;
5f2f48c7   Geoffrey PREUD'HOMME   [Orga] Modificati...
41
42
      public $duree = 3600;
      public $supprime = false;
f84e30e3   Geoffrey PREUD'HOMME   [Orga] Retravail
43
44
  
      public $dates = array();
5f2f48c7   Geoffrey PREUD'HOMME   [Orga] Modificati...
45
      public $datesVotes = array();
f84e30e3   Geoffrey PREUD'HOMME   [Orga] Retravail
46
  
62a4b843   Geoffrey PREUD'HOMME   [Orga] Chargement...
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
      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
3fde9691   Geoffrey PREUD'HOMME   [Orga] Interpréta...
84
              $this->creationTime = time();
62a4b843   Geoffrey PREUD'HOMME   [Orga] Chargement...
85
              // TODO SQL Récupérer id (AUTOINCREMENT)
3fde9691   Geoffrey PREUD'HOMME   [Orga] Interpréta...
86
          } else { // Évènement existant : on charge
62a4b843   Geoffrey PREUD'HOMME   [Orga] Chargement...
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
              $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';
3fde9691   Geoffrey PREUD'HOMME   [Orga] Interpréta...
102
              }
3fde9691   Geoffrey PREUD'HOMME   [Orga] Interpréta...
103
          }
1d6e24f7   Geoffrey PREUD'HOMME   [Orga] Envoi des ...
104
105
106
107
108
109
      }
  
      public function sauvegarder() {
          // TODO SQL
      }
  
f84e30e3   Geoffrey PREUD'HOMME   [Orga] Retravail
110
      public function html() {
6884541c   Geoffrey PREUD'HOMME   [Orga] Ajout d'id...
111
          $html = '<li id="ev_li_'.$this->id.'" class="ev_li list-group-item';
e4f5453d   Geoffrey PREUD'HOMME   [Orga] Meilleure ...
112
113
114
115
          if ($this->annule) {
              $html .= ' list-group-item-danger';
          }
          $html .= '">';
f84e30e3   Geoffrey PREUD'HOMME   [Orga] Retravail
116
117
  
          # Titre
e4f5453d   Geoffrey PREUD'HOMME   [Orga] Meilleure ...
118
          $html .= '<h4 class="list-group-item-heading">'.$this->nom;
5f2f48c7   Geoffrey PREUD'HOMME   [Orga] Modificati...
119
          if ($this->p_annuler()) {
6884541c   Geoffrey PREUD'HOMME   [Orga] Ajout d'id...
120
              $html .= ' <button type="button" class="ev_annuler btn btn-warning"><span class="glyphicon glyphicon glyphicon-remove"></span> Annuler</button>';
f84e30e3   Geoffrey PREUD'HOMME   [Orga] Retravail
121
          }
5f2f48c7   Geoffrey PREUD'HOMME   [Orga] Modificati...
122
          if ($this->p_supprimer()) {
6884541c   Geoffrey PREUD'HOMME   [Orga] Ajout d'id...
123
              $html .= ' <button type="button" class="ev_supprimer btn btn-danger"><span class="glyphicon glyphicon glyphicon-trash"></span> Supprimer</button>';
f84e30e3   Geoffrey PREUD'HOMME   [Orga] Retravail
124
          }
e4f5453d   Geoffrey PREUD'HOMME   [Orga] Meilleure ...
125
          $html .= '</h4>';
f84e30e3   Geoffrey PREUD'HOMME   [Orga] Retravail
126
127
128
129
  
          # Description
          $html .= '<div class="panel panel-default">';
          $html .= '<div class="panel-heading">';
e4f5453d   Geoffrey PREUD'HOMME   [Orga] Meilleure ...
130
          $html .= '<h5 class="panel-title">Informations';
5f2f48c7   Geoffrey PREUD'HOMME   [Orga] Modificati...
131
          if ($this->p_modifier()) {
6884541c   Geoffrey PREUD'HOMME   [Orga] Ajout d'id...
132
              $html .= ' <button type="button" class="ev_modifier btn btn-default"><span class="glyphicon glyphicon-pencil"></span> Modifier</button>';
f84e30e3   Geoffrey PREUD'HOMME   [Orga] Retravail
133
          }
e4f5453d   Geoffrey PREUD'HOMME   [Orga] Meilleure ...
134
          $html .= '</h5>';
f84e30e3   Geoffrey PREUD'HOMME   [Orga] Retravail
135
136
          $html .= '</div>';
          $html .= '<div class="panel-body">';
6884541c   Geoffrey PREUD'HOMME   [Orga] Ajout d'id...
137
          $html .= '<p class="ev_description">';
f84e30e3   Geoffrey PREUD'HOMME   [Orga] Retravail
138
139
140
141
          $html .= nl2br(htmlspecialchars($this->description));
          $html .= '</p>';
          // $html .= '<hr/>';
          $html .= '<p>';
5f2f48c7   Geoffrey PREUD'HOMME   [Orga] Modificati...
142
143
144
          $heures = floor($this->duree/3600);
          $minutes = floor($this->duree%3600/60);
          $secondes = floor($this->duree%3600%60);
fab2252b   Geoffrey PREUD'HOMME   [Orga] Réponse ad...
145
          $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/>';
f84e30e3   Geoffrey PREUD'HOMME   [Orga] Retravail
146
          if ($this->valide) {
6884541c   Geoffrey PREUD'HOMME   [Orga] Ajout d'id...
147
              $html .= 'Date : le <span class="ev_date">'.date('j/m/o', $this->valide).' à '.date('H:i', $this->valide).'</span><br/>';
f84e30e3   Geoffrey PREUD'HOMME   [Orga] Retravail
148
149
150
          }
          $html .= '</p>';
          if ($this->annule) {
e4f5453d   Geoffrey PREUD'HOMME   [Orga] Meilleure ...
151
              $html .= '<p><span class="label label-danger">Annulé</span></p>';
f84e30e3   Geoffrey PREUD'HOMME   [Orga] Retravail
152
153
154
155
156
157
158
  
          }
          $html .= '</div>';
          $html .= '</div>';
  
          # Dates
          if (!$this->valide && !$this->annule) {
3a23c07d   Geoffrey PREUD'HOMME   [Orga] Ajout d'év...
159
              $html .= '<div class="ev_pos panel panel-default">';
f84e30e3   Geoffrey PREUD'HOMME   [Orga] Retravail
160
              $html .= '<div class="panel-heading">';
e4f5453d   Geoffrey PREUD'HOMME   [Orga] Meilleure ...
161
              $html .= '<h5 class="panel-title">Dates possibles';
5f2f48c7   Geoffrey PREUD'HOMME   [Orga] Modificati...
162
              if ($this->p_proposer()) {
3a23c07d   Geoffrey PREUD'HOMME   [Orga] Ajout d'év...
163
                  $html .= ' <button type="button" class="ev_pos_proposer btn btn-default"><span class="glyphicon glyphicon-plus"></span> Proposer une date</button>';
f84e30e3   Geoffrey PREUD'HOMME   [Orga] Retravail
164
              }
e4f5453d   Geoffrey PREUD'HOMME   [Orga] Meilleure ...
165
              $html .= '</h5>';
f84e30e3   Geoffrey PREUD'HOMME   [Orga] Retravail
166
167
              $html .= '</div>';
              $html .= '<div class="panel-body">';
e4f5453d   Geoffrey PREUD'HOMME   [Orga] Meilleure ...
168
169
170
              if ($this->p_voter()) {
                  $html .= '<p>Sélectionnez les dates qui vous conviennent.</p>';
              }
5f2f48c7   Geoffrey PREUD'HOMME   [Orga] Modificati...
171
172
              $html .= '<div class="list-group">';
              $time = time();
6884541c   Geoffrey PREUD'HOMME   [Orga] Ajout d'id...
173
              foreach ($this->dates as $dateIndex => $date) { // TODO À faire fonctionner (après que le reste fonctionne)
5f2f48c7   Geoffrey PREUD'HOMME   [Orga] Modificati...
174
175
176
177
                  $html .= '<a href="#"class="list-group-item';
                  if ($date < $time) {
                      $html .= ' disabled';
                  }
3a23c07d   Geoffrey PREUD'HOMME   [Orga] Ajout d'év...
178
                  $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>';
f84e30e3   Geoffrey PREUD'HOMME   [Orga] Retravail
179
              }
5f2f48c7   Geoffrey PREUD'HOMME   [Orga] Modificati...
180
181
              $html .= '</div>';
              if ($this->p_valider()) {
3a23c07d   Geoffrey PREUD'HOMME   [Orga] Ajout d'év...
182
                  $html .= '<p><button type="button" class="ev_pos_valider btn btn-primary"><span class="glyphicon glyphicon-ok"></span> Valider la date</button></p>';
f84e30e3   Geoffrey PREUD'HOMME   [Orga] Retravail
183
184
185
186
187
188
189
190
              }
              $html .= '</div>';
              $html .= '</div>';
          }
  
          $html .= '</li>';
          return $html;
      }
5f2f48c7   Geoffrey PREUD'HOMME   [Orga] Modificati...
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
  
      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);
      }
  
e4f5453d   Geoffrey PREUD'HOMME   [Orga] Meilleure ...
217
218
219
220
221
      function p_voter() {
          global $droits;
          return in_array('voter', $droits) && !$this->valide;
      }
  
5f2f48c7   Geoffrey PREUD'HOMME   [Orga] Modificati...
222
223
      function p_proposer() {
          global $droits;
e4f5453d   Geoffrey PREUD'HOMME   [Orga] Meilleure ...
224
          return in_array('proposer', $droits) && !$this->valide;
5f2f48c7   Geoffrey PREUD'HOMME   [Orga] Modificati...
225
226
227
228
      }
  
      function p_valider() {
          global $droits;
e4f5453d   Geoffrey PREUD'HOMME   [Orga] Meilleure ...
229
          # TODO Et si un nombre suffisant de personnes est ok avec la date la plus disponible 
5f2f48c7   Geoffrey PREUD'HOMME   [Orga] Modificati...
230
231
232
233
234
          return in_array('valider', $droits) && !$this->valide;
      }
  
  }
  
62a4b843   Geoffrey PREUD'HOMME   [Orga] Chargement...
235
  Evenement::chargerTout();
5f2f48c7   Geoffrey PREUD'HOMME   [Orga] Modificati...
236
  
62a4b843   Geoffrey PREUD'HOMME   [Orga] Chargement...
237
  # a_ : Récupérer depuis la base de donnée (ou pas)
1d6e24f7   Geoffrey PREUD'HOMME   [Orga] Envoi des ...
238
  
62a4b843   Geoffrey PREUD'HOMME   [Orga] Chargement...
239
240
  function a_evenement($id) { // TODO Méthode statique à Evenement
      foreach (Evenement::$tout as $evenement) {
3fde9691   Geoffrey PREUD'HOMME   [Orga] Interpréta...
241
242
243
244
245
          if ($evenement->id == $id) {
              return $evenement;
          }
      }
  }
1d6e24f7   Geoffrey PREUD'HOMME   [Orga] Envoi des ...
246
  
3fde9691   Geoffrey PREUD'HOMME   [Orga] Interpréta...
247
  # TRAITEMENT DES DONNEES POST
1d6e24f7   Geoffrey PREUD'HOMME   [Orga] Envoi des ...
248
  
3fde9691   Geoffrey PREUD'HOMME   [Orga] Interpréta...
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
  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;
      }
1d6e24f7   Geoffrey PREUD'HOMME   [Orga] Envoi des ...
308
309
310
311
312
  }
  
  
  # AFFICHAGE DE LA PAGE
  
5f2f48c7   Geoffrey PREUD'HOMME   [Orga] Modificati...
313
  # Tri des évènements
5f2f48c7   Geoffrey PREUD'HOMME   [Orga] Modificati...
314
315
316
317
  $evenementsPlanifies = array();
  $evenementsAPlanifier = array();
  $evenementsPasses = array();
  
62a4b843   Geoffrey PREUD'HOMME   [Orga] Chargement...
318
  foreach (Evenement::$tout as $evenement) {
5f2f48c7   Geoffrey PREUD'HOMME   [Orga] Modificati...
319
320
321
322
323
324
325
326
327
328
329
      if (!$evenement->supprime) {
          if ($evenement->valide) {
              if ($evenement->passe()) {
                  $evenementsPasses[] = $evenement;
              } else {
                  $evenementsPlanifies[] = $evenement;
              }
          } else {
              $evenementsAPlanifier[] = $evenement;
          }
      }
f84e30e3   Geoffrey PREUD'HOMME   [Orga] Retravail
330
331
  }
  
3fde9691   Geoffrey PREUD'HOMME   [Orga] Interpréta...
332
  # Affichage
27f3beb9   Geoffrey Bontoux-Preud-Homme   Ajout de orga.php
333
  
e4f5453d   Geoffrey PREUD'HOMME   [Orga] Meilleure ...
334
335
336
337
338
  if (!$e_connecte) {
  ?>
  <div class="alert alert-warning" role="alert">Connectez-vous afin de pouvoir agir sur les évènements.</div>
  <?php    
  }
62a4b843   Geoffrey PREUD'HOMME   [Orga] Chargement...
339
340
  
  
e4f5453d   Geoffrey PREUD'HOMME   [Orga] Meilleure ...
341
  if (in_array('voir', $droits)) {
62a4b843   Geoffrey PREUD'HOMME   [Orga] Chargement...
342
  // TODO Message si catégorie vide
e4f5453d   Geoffrey PREUD'HOMME   [Orga] Meilleure ...
343
  ?>
6884541c   Geoffrey PREUD'HOMME   [Orga] Ajout d'id...
344
345
  <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">
e4f5453d   Geoffrey PREUD'HOMME   [Orga] Meilleure ...
346
  <?php
5f2f48c7   Geoffrey PREUD'HOMME   [Orga] Modificati...
347
348
349
  foreach ($evenementsPlanifies as $evenement) {
      echo $evenement->html();
  }
27f3beb9   Geoffrey Bontoux-Preud-Homme   Ajout de orga.php
350
  ?>
f84e30e3   Geoffrey PREUD'HOMME   [Orga] Retravail
351
352
  </ul>
  
27f3beb9   Geoffrey Bontoux-Preud-Homme   Ajout de orga.php
353
  
6884541c   Geoffrey PREUD'HOMME   [Orga] Ajout d'id...
354
355
  <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">
e4f5453d   Geoffrey PREUD'HOMME   [Orga] Meilleure ...
356
  <?php
5f2f48c7   Geoffrey PREUD'HOMME   [Orga] Modificati...
357
358
359
  foreach ($evenementsAPlanifier as $evenement) {
      echo $evenement->html();
  }
f84e30e3   Geoffrey PREUD'HOMME   [Orga] Retravail
360
361
362
363
  ?>
  </ul>
  
  
e4f5453d   Geoffrey PREUD'HOMME   [Orga] Meilleure ...
364
  <h3>Évènements passés</h3>
6884541c   Geoffrey PREUD'HOMME   [Orga] Ajout d'id...
365
  <ul id="ev_ul_passes" class="list-group">
e4f5453d   Geoffrey PREUD'HOMME   [Orga] Meilleure ...
366
  <?php
5f2f48c7   Geoffrey PREUD'HOMME   [Orga] Modificati...
367
368
369
370
  foreach ($evenementsPasses as $evenement) {
      echo $evenement->html();
  }
  ?>
e4f5453d   Geoffrey PREUD'HOMME   [Orga] Meilleure ...
371
372
  </ul>
  
fab2252b   Geoffrey PREUD'HOMME   [Orga] Réponse ad...
373
  <script type="text/javascript" src="js/orga.js"></script>
3a23c07d   Geoffrey PREUD'HOMME   [Orga] Ajout d'év...
374
  
e4f5453d   Geoffrey PREUD'HOMME   [Orga] Meilleure ...
375
376
377
378
379
380
381
  <?php
  } else {
  ?>
  <div class="alert alert-danger" role="alert">Vous ne pouvez pas voir les évènements.</div>
  <?php
  }
  ?>