Projet

Général

Profil

Paste
Statistiques
| Branche: | Révision:

root / controllers / mur_controller.php @ acd7c547

Historique | Voir | Annoter | Télécharger (6,22 ko)

1
<?php
2
/************************************************************************************
3
 *
4
 *  Projet AbulEdu Mur de Classe  - Licence: GNU/Affero GPL v3 ou +
5
 *
6
 *  (c) 2020 Frédéric Adamczak <fred@fadamczak.fr>
7
 *
8
 *   This file is part of AbulEdu Mur de Classe.
9
 *
10
 *   AbulEdu Mur de Classe is free software: you can redistribute it and/or modify
11
 *   it under the terms of the GNU Affero General Public License as published by
12
 *   the Free Software Foundation, either version 3 of the License, or
13
 *   (at your option) any later version.
14
 *
15
 *   AbulEdu Mur de Classe is distributed in the hope that it will be useful,
16
 *   but WITHOUT ANY WARRANTY; without even the implied warranty of
17
 *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
18
 *   GNU Affero General Public License for more details.
19
 *
20
 *   You should have received a copy of the GNU General Public License
21
 *   along with ClicAlbum. If not, see <https://www.gnu.org/licenses/>.
22
 *
23
 ************************************************************************************/
24

    
25
include_once("_classes/MyException.php");
26
include_once("_classes/Mur.php");
27
include_once("_classes/Theme.php");
28
include_once("_classes/Brique.php");
29
include_once("_classes/Affiche.php");
30

    
31
//getVar();
32

    
33

    
34

    
35

    
36

    
37
/*
38
    Vérifier que le mur existe
39
*/
40

    
41
$id = getIsMurExiste($_GET["id"]);
42

    
43
if (empty($id)) {
44
  afficheMurInexistant();
45
} else {
46
  $mur = getMur($_GET["id"]);
47

    
48

    
49
  // Si on a au préalable inséré une brique et que tout s'est bien passé,
50
  // on le précise à l'utilisateur
51
  $msg="";
52
  if($_GET['ok']=="1") {
53
    if ($_SESSION['role']=="user") {
54
      $msg = "La brique a été ajoutée au mur";
55
      if ($mur->getMelAdmin()!="") {
56
        $msg.=" l'administrateur a été averti";
57
      } else {
58
        $msg.=" elle doit maintenant être validée par l'administrateur du mur";
59
      }
60
    }
61
  }
62

    
63

    
64
  /*
65
      Vérifier les différents droits d'accès au mur
66
  */
67
  if ($_SESSION["role"]=="admin") {
68
    //debug("role = admin");
69
    if ($_SESSION['mur'] == $mur->getId()) {
70
      prepareMur($mur);
71
    } else {
72
      afficheAccesInterdit();
73
    }
74
  } else {
75

    
76
    //debug("Role = user");
77
    if (isMurPublic($mur)) {
78
      //debug("mur public");
79
      $_SESSION["mur"] = $mur->getId();
80
      prepareMur($mur);
81
    } else {
82

    
83
      // On vérifie qu'il n'y a pas de tentative réussie de connexion admin
84
      if (isset($_POST["password"]))  {
85
        //debug("Tentative de connexion admin");
86
        if (isPasswordIdentique($mur->getMdpAdmin(), $_POST["password"])) {
87
          //debug("connexion admin réussie");
88
          $_SESSION["role"] = "admin";
89
          $_SESSION["mur"] = $mur->getId();
90
          prepareMur($mur);
91
        }
92
      } else {
93

    
94
        //debug("mur privé");
95
        if (!isset($_POST["mdp_acces"])) {
96
          //debug("pas de mot de passe saisi");
97

    
98
          afficheAuthentification($msg);
99

    
100
        } else {
101
          //debug("vérifier le mot de passe");
102
          if (isPasswordIdentique($mur->getMdpAcces(), $_POST["mdp_acces"])) {
103
            //debug("Accès au mur privé autorisé");
104
            $_SESSION["mur"]   = $mur->getId();
105
            $_SESSION["ident"] = $mur->getId();
106
            prepareMur($mur);
107
          } else {
108
            AfficheAuthentification("Erreur de mot de passe, accès au mur privé impossible");
109
          }
110
        }
111
      }
112
    }
113
  }
114
}
115

    
116
/**
117
 * Prépare les informations nécessaires à l'affichage d'un mur
118
 * @param  [String] $mur [id du mur]
119
 */
120
function prepareMur($mur) {
121
  // On recherche le nombre de briques à valider
122
  $aValider = getNbBriquesAValider($mur->getId())[0];
123
  $theme = getNomTheme($mur->getTheme());
124
  // On recherche les briques à afficher (ie, celles qui sont validées)
125
  $briques = getBriques($mur->getId());
126
  // et on les transforme en affiche
127
  $affiches = brique2Affiche($briques);
128

    
129
  // On vérifie s'il n'y a pas de tentative de connexion ADMIN
130
  if(isset($_POST['password']) && ($_POST['password']!="")) {
131
    //debug("tentative de connexion");
132
    //if (hash("md5",$_POST['password'])== $infoMur['mdp_admin']) {
133
    if (isPasswordIdentique($mur->getMdpAdmin(),$_POST["password"])) {
134
      $login['message'] = "";
135
      $login['role'] = "admin";
136
      $_SESSION['role'] = "admin";
137
      $_SESSION['mur'] = $mur->getId();
138
    }
139
    else {
140
      $login['message'] = "Le mot de passe saisi est erroné. ";
141
      $login['role'] = "user";
142
      $_SESSION['role'] = "user";
143
      $_SESSION['mur'] = "";
144
    }
145
  } else {
146
    $login['message']="";
147
    $login['role'] = $_SESSION['role'];
148
    //$login['role'] = "user";
149
  }
150
  // Mise à jour de la date de denrier accès au mur (à la date du jour)
151
  verifierDateAcces($mur);
152

    
153
  $msg="";
154
  if($_GET['ok']=="1") {
155
    if ($_SESSION['role']=="user") {
156
      $msg = "La brique a été ajoutée au mur";
157
      if ($mur->getMelAdmin()!="") {
158
        $msg.=" l'administrateur a été averti";
159
      } else {
160
        $msg.=" elle doit maintenant être validée par l'administrateur du mur";
161
      }
162
    }
163
  }
164

    
165

    
166
  // et enfin on peut afficher le mur...
167
  afficheMur($mur,$theme,$affiches,$aValider,$login,$msg);
168
}
169

    
170
/**
171
 * Compare la date de dernie accès au mur avec la date du jour et si besoin
172
 * met à jour la date de dernier accès (date du jour)
173
 * @param  [Objet] $mur [Instance de Mur]
174
 */
175
function verifierDateAcces($mur) {
176
  $dateDernierAcces = $mur->getDateAcces();
177
  $dateJour = date("Y-m-d");
178
  //debug($dateDernierAcces);
179
  //debug($dateJour);
180
  if ($dateJour != $dateDernierAcces['date_acces']) {
181
    majDateAcces($mur->getId());
182
  }
183
}
184

    
185
/**
186
 * Transformer un objet BRIQUE en objet AFFICHE pour un affichage simplifié
187
 * @param  [Array] $briques [Tableau Associatif de Briques]
188
 * @return [Array]          [Tableau d'objets Affiche]
189
 */
190
function brique2Affiche($briques) {
191
  $affiches = array();
192
  foreach ($briques as $b) {
193
    $affiche = new Affiche($b);
194
    array_push($affiches,$affiche);
195
  }
196
  return $affiches;
197
}
198

    
199
/**
200
 * Compare 2 mots de passe chiffrés
201
 * @param  [String]  $p1 [mot de passe #1 chiffré (issu du mur)]
202
 * @param  [String]  $p2 [mot de passe #2 non chiffré (issu du formulaire)]
203
 * @return boolean     [Vrai si les 2 mots de passe sont identiques]
204
 */
205
function isPasswordIdentique($p1, $p2) {
206
  return $p1 == hashPassword($p2);
207
}
208

    
209
// Renvoi TRUE si le mur est public
210
function isMurPublic($mur) {
211
  return $mur->getMdpAcces()=="";
212
}
Redmine Appliance - Powered by TurnKey Linux