sdisM2/src/java/form/PompierForm.java
thomas.millot eae43733b0 Merge origin/master
Conflicts:
	src/java/bdd/PompierMysql.java
	web/WEB-INF/ProfilJSP.jsp
2021-12-14 08:44:24 +01:00

170 lines
7.0 KiB
Java

/*
* form/PompierForm.java
* Contrôle des données saisies dans le formulaire pompier et maj bdd
*/
package form;
import bdd.ParamMySQL;
import bdd.PompierMySQL;
import bean.Parametre;
import bean.Pompier;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpSession;
import java.util.ArrayList;
import java.util.Comparator;
import java.util.Enumeration;
import java.util.HashMap;
import util.CtrlSaisie;
import util.MD5;
/**
*
* @author domin
*/
public class PompierForm {
String message;
HttpServletRequest request;
public PompierForm(HttpServletRequest request) {
this.request = request;
}
public boolean ctrlPompier() {
request.removeAttribute("message");
// Vérification de la présence des zones obligatoires
String[] champsObligatoires = {"ztNom", "ztPrenom", "ztAdresse", "ztCP",
"zlVille", "ztMail", "ztLogin", "ztMdp", "ztBip", "ldrGrade", "ldrStatut", "ldrType"};
if (!CtrlSaisie.CtrlChampsObligatoires(request, champsObligatoires)) {
return false;
}
// Contrôle caractères indésirables
if (!CtrlSaisie.CtrlChevron(request)) {
return false;
}
// Contrôle des zones grade, statut et typerPers
HttpSession maSession = request.getSession();
Pompier lePompierConnecte = (Pompier) maSession.getAttribute("lePompierConnecte");
boolean chef = lePompierConnecte.getLeStatut().getCode() == 2;
ParamMySQL pm = new ParamMySQL();
if (chef) { // contrôle uniquement pour les chefs de centre
int statut, type, grade = -1;
try {
statut = Integer.parseInt(request.getParameter("ldrStatut"));
type = Integer.parseInt(request.getParameter("ldrType"));
grade = Integer.parseInt(request.getParameter("ldrGrade"));
} catch (Exception e) {
System.out.println("Statut, type ou grade transmis non numérique - " + e.getMessage());
request.setAttribute("message", "Erreur au niveau de la saisie du statut, du grade ou du type");
return false;
}
Parametre leStatut = pm.read("statAgt", statut);
Parametre leType = pm.read("typePer", type);
Parametre leGrade = pm.read("grade", grade);
if (leStatut == null || leType == null || leGrade == null) {
System.out.println("Statut, type ou grade transmis inexistant dans la table paramètre - "
+ "Statut:" + statut + " - Type:" + type + " - Grade:" + grade);
request.setAttribute("message", "Erreur au niveau de la saisie du statut, du grade ou du type");
return false;
}
}
return true;
}
// Mise à jour de la fiche du pompier
public Pompier majBDD() {
HttpSession maSession = request.getSession();
Pompier lePompierConnecte = (Pompier) maSession.getAttribute("lePompierConnecte");
boolean chef = lePompierConnecte.getLeStatut().getCode() == 2;
Pompier lepompierAffiche = (Pompier) maSession.getAttribute("lePompier");
// Recherche du type de mise à jour à effectuer
int typMaj = -1;
if (chef && maSession.getAttribute("lePompier") == null) {
System.out.println("Creation d'un nouveau pompier");
typMaj = 1;
} else {
if (chef && lepompierAffiche.getId() != lePompierConnecte.getId()) {
System.out.println("Maj d'un pompier par le chef de centre");
typMaj = 2;
} else {
System.out.println("Maj du pompier connecté par lui-même");
typMaj = 3;
}
}
ArrayList<String> nonModifParPompier = new ArrayList<>();
nonModifParPompier.add("ldrGrade");
nonModifParPompier.add("ldrStatut");
nonModifParPompier.add("ldrType");
nonModifParPompier.add("ztBip");
// Zones saisies
HashMap<String, Object> lesParametres = new HashMap();
Enumeration<String> names = request.getParameterNames();
while (names.hasMoreElements()) {
String name = names.nextElement();
// Exclusion des zones non modifiables pour les pompiers
if (typMaj == 1 || typMaj == 2 || !nonModifParPompier.contains(name)) {
Object value = request.getParameter(name);
lesParametres.put(name, value);
}
}
// Zones implicites
if (typMaj == 1) {
int idC = lePompierConnecte.getLaCaserne().getId();
lesParametres.put("idC", idC); // Caserne
}
// if (typMaj == 2 || typMaj == 3) {
// int idP = lepompierAffiche.getId();
// lesParametres.put("idP", idP); // id du pompier
// }
// Cas particulier du mot de passe, actuellement non modifiable
String ztMdp = MD5.encode((String) lesParametres.get("ztLogin"));
lesParametres.put("ztMdp", ztMdp); // Mot de passe défini à partir du login
/* Pb pour les zones numériques :
elles doivent être mémorisées dans le dictionnaire en entier, pour
une lecture par la suite */
Pompier lePompierMaj = null;
PompierMySQL pompierMySQL = new PompierMySQL();
if (typMaj == 1) {
lePompierMaj = pompierMySQL.create(lesParametres);
} else {
lePompierMaj = pompierMySQL.update(lesParametres, lepompierAffiche.getId());
}
if (lePompierMaj != null) {
request.setAttribute("message", "Le pompier no " + lePompierMaj.getId() + " a été mis à jour");
} else {
request.setAttribute("message", "Erreur lors de la mise à jour du pompier");
}
// Mise à jour de la collection les Pompiers, si le pompier mis à jour est volontaire
if (chef && lePompierMaj != null) {
// ArrayList<Pompier> lesPompiers = (ArrayList<Pompier>) maSession.getAttribute("lesPompiers");
// if (lesPompiers.contains(lePompierMaj)) {
// lesPompiers.remove(lePompierMaj);
// }
// if (lePompierConnecte.getId() != lePompierMaj.getId()) {
// lesPompiers.add(lePompierMaj);
// }
ArrayList<Pompier> lesPompiers = pompierMySQL.readLesPompiersCaserne(lePompierConnecte.getLaCaserne().getId());
maSession.setAttribute("lesPompiers", lesPompiers);
maSession.setAttribute("lePompier", lesPompiers.get(0));
}
if (typMaj==3) {
maSession.setAttribute("lePompierConnecte", lePompierMaj);
maSession.setAttribute("lePompier", lePompierMaj);
}
return lePompierMaj;
}
}