From 497ce42637ebaad0c388d309d6b5bbf91db2dfa4 Mon Sep 17 00:00:00 2001 From: Debulois Date: Wed, 9 Mar 2022 19:37:55 +0100 Subject: Mise à jour des fonctions de la bdd avec le nouveau modèle, renommage des fichier pour plus de clarte et ajout des documents et infos MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Database/dbmain.php | 181 +++++++++++++++------ Database/meth_dbsearch.php | 20 +-- Database/meth_dbuser.php | 36 ++-- Documents_et_infos/Bdd_mysql/mld_bdd_original.png | Bin 0 -> 41354 bytes Documents_et_infos/Bdd_mysql/mysql_alphajob.mwb | Bin 0 -> 13609 bytes .../Bdd_mysql/mysql_alphajob.mwb.bak | Bin 0 -> 13622 bytes Documents_et_infos/Bdd_mysql/mysql_alphajob.png | Bin 0 -> 47201 bytes Documents_et_infos/Bdd_mysql/mysql_alphajob.sql | 143 ++++++++++++++++ .../arborescence_alphajob.jpg | Bin 0 -> 107544 bytes .../Structure_plan_de_site/depth_optimised.jpg | Bin 0 -> 76763 bytes .../logigramme_fonction_login.jpg | Bin 0 -> 383335 bytes .../structure_projet web.jpg | Bin 0 -> 163893 bytes .../Zooning_maquette_graphique/infos_css.txt | 16 ++ .../maquette_page_web.jpg | Bin 0 -> 32246 bytes .../Zooning_maquette_graphique/zooning_avance.epgz | Bin 0 -> 60712 bytes .../Zooning_maquette_graphique/zooning_simple.epgz | Bin 0 -> 13568 bytes .../cahier_des_charges_fonctionnalitees.jpg | Bin 0 -> 317462 bytes Documents_et_infos/infos_generales.txt | 73 +++++++++ Views/Includes/en/table.php | 2 +- Views/Includes/en/text.php | 16 +- Views/Includes/fr/text.php | 16 +- Views/Includes/incl_delete_form.php | 60 ------- Views/Includes/incl_footer.php | 13 -- Views/Includes/incl_form_delete.php | 60 +++++++ Views/Includes/incl_form_login.php | 26 +++ Views/Includes/incl_form_mission.php | 38 +++++ Views/Includes/incl_form_register.php | 28 ++++ Views/Includes/incl_form_userInfo.php | 76 +++++++++ Views/Includes/incl_global_footer.php | 13 ++ Views/Includes/incl_global_header.php | 15 ++ Views/Includes/incl_global_message.php | 22 +++ Views/Includes/incl_global_navbar.php | 59 +++++++ Views/Includes/incl_header.php | 15 -- Views/Includes/incl_login_form.php | 26 --- Views/Includes/incl_message.php | 22 --- Views/Includes/incl_mission_form.php | 38 ----- Views/Includes/incl_myMission_table.php | 39 ----- Views/Includes/incl_navbar.php | 59 ------- Views/Includes/incl_register_form.php | 28 ---- Views/Includes/incl_table_myMission.php | 39 +++++ Views/Includes/incl_userInfo_form.php | 76 --------- Views/delete.php | 8 +- Views/login.php | 8 +- Views/message.php | 8 +- Views/mission.php | 12 +- Views/myMission.php | 12 +- Views/register.php | 8 +- Views/userInfo.php | 8 +- Wrapper/Functions/func_delete.php | 4 +- Wrapper/Functions/func_login.php | 1 + Wrapper/Functions/func_mission.php | 6 +- Wrapper/Functions/func_register.php | 8 +- Wrapper/Functions/func_sanitize.php | 2 +- Wrapper/wrapper.php | 79 +++++---- index.php | 6 +- 55 files changed, 881 insertions(+), 544 deletions(-) create mode 100644 Documents_et_infos/Bdd_mysql/mld_bdd_original.png create mode 100644 Documents_et_infos/Bdd_mysql/mysql_alphajob.mwb create mode 100644 Documents_et_infos/Bdd_mysql/mysql_alphajob.mwb.bak create mode 100644 Documents_et_infos/Bdd_mysql/mysql_alphajob.png create mode 100644 Documents_et_infos/Bdd_mysql/mysql_alphajob.sql create mode 100644 Documents_et_infos/Structure_plan_de_site/arborescence_alphajob.jpg create mode 100644 Documents_et_infos/Structure_plan_de_site/depth_optimised.jpg create mode 100644 Documents_et_infos/Structure_plan_de_site/logigramme_fonction_login.jpg create mode 100644 Documents_et_infos/Structure_plan_de_site/structure_projet web.jpg create mode 100644 Documents_et_infos/Zooning_maquette_graphique/infos_css.txt create mode 100644 Documents_et_infos/Zooning_maquette_graphique/maquette_page_web.jpg create mode 100644 Documents_et_infos/Zooning_maquette_graphique/zooning_avance.epgz create mode 100644 Documents_et_infos/Zooning_maquette_graphique/zooning_simple.epgz create mode 100644 Documents_et_infos/cahier_des_charges_fonctionnalitees.jpg create mode 100644 Documents_et_infos/infos_generales.txt delete mode 100644 Views/Includes/incl_delete_form.php delete mode 100644 Views/Includes/incl_footer.php create mode 100644 Views/Includes/incl_form_delete.php create mode 100644 Views/Includes/incl_form_login.php create mode 100644 Views/Includes/incl_form_mission.php create mode 100644 Views/Includes/incl_form_register.php create mode 100644 Views/Includes/incl_form_userInfo.php create mode 100644 Views/Includes/incl_global_footer.php create mode 100644 Views/Includes/incl_global_header.php create mode 100644 Views/Includes/incl_global_message.php create mode 100644 Views/Includes/incl_global_navbar.php delete mode 100644 Views/Includes/incl_header.php delete mode 100644 Views/Includes/incl_login_form.php delete mode 100644 Views/Includes/incl_message.php delete mode 100644 Views/Includes/incl_mission_form.php delete mode 100644 Views/Includes/incl_myMission_table.php delete mode 100644 Views/Includes/incl_navbar.php delete mode 100644 Views/Includes/incl_register_form.php create mode 100644 Views/Includes/incl_table_myMission.php delete mode 100644 Views/Includes/incl_userInfo_form.php diff --git a/Database/dbmain.php b/Database/dbmain.php index 43e39ef..532bb7c 100644 --- a/Database/dbmain.php +++ b/Database/dbmain.php @@ -10,7 +10,7 @@ // protected: accesible depuis l'extérieur et donc via extend mais non modifiable // public: accessible et modifiable depuis l'extérieur // final: ne peut etre ré-écris (overload) -// + class DbMain { // Salt pour chiffrement private $salt = "cTKXHBoN3oxymlhNem2h"; @@ -19,54 +19,120 @@ class DbMain { private $host = "127.0.0.1"; private $user = "root"; private $pass = ""; + private $debug = True; // Déclaration des tables - private $database = "ExoPhp"; - // UserAccount, infos du compte nécessaire à la connection + private $database = "alphajob"; + // Timestamp auto si non renseigné - private $createTableUserAccount = "userAccount ( - id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY, - email VARCHAR(128) NOT NULL, - password VARCHAR(128) NOT NULL, - tokenAutoLogin VARCHAR(128), - inscriptionDate TIMESTAMP NOT NULL, - isUser BOOL NOT NULL, - isConsultant BOOL NOT NULL, - isAdmin BOOL NOT NULL - )"; - // Infos complémentaires des utilisateur, liée à userAccount par userId à id - private $createTableUserInfo = "userInfo ( - lastname VARCHAR(128) NOT NULL, - firstname VARCHAR(128) NOT NULL, - job varchar(128), - degree VARCHAR(128), - capability TEXT, - description TEXT, - phoneNumber VARCHAR(10), - adress VARCHAR(128), - zipCode VARCHAR(6), - city VARCHAR(128), - userId INT UNSIGNED PRIMARY KEY, - FOREIGN KEY (userId) - REFERENCES userAccount(id) - )"; - // Infos sur les missions effectuées, liée à userAccount par userId et consultantId à id - private $createTableMission = "mission ( - id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY, - date TIMESTAMP NOT NULL, - subject VARCHAR(128), - note INT(1) UNSIGNED, - review TEXT, - userId INT UNSIGNED NOT NULL, - FOREIGN KEY (userId) - REFERENCES userAccount(id), - consultantId INT UNSIGNED NOT NULL, - FOREIGN KEY (consultantId) - REFERENCES userAccount(id) - )"; - + // UserAccount, infos du compte nécessaire à la connection + private $createTableUserAccount = "CREATE TABLE IF NOT EXISTS `alphajob`.`userAccount` ( + `userId` INT UNSIGNED NOT NULL AUTO_INCREMENT, + `email` VARCHAR(128) NOT NULL, + `password` VARCHAR(128) NOT NULL, + `tokenAutoLogin` VARCHAR(128) NULL DEFAULT NULL, + `inscriptionDate` TIMESTAMP NOT NULL, + `isClient` TINYINT(1) NOT NULL, + `isPro` TINYINT(1) NOT NULL, + `isAdmin` TINYINT(1) NOT NULL, + PRIMARY KEY (`userId`) + ) + ENGINE = InnoDB + DEFAULT CHARACTER SET = utf8;"; + + // Infos complémentaires des utilisateur, liée à userAccount par userId + private $createTableUserInfo = "CREATE TABLE IF NOT EXISTS `alphajob`.`userInfo` ( + `lastname` VARCHAR(128) NOT NULL, + `firstname` VARCHAR(128) NOT NULL, + `phoneNumber` VARCHAR(10) NOT NULL, + `adress` VARCHAR(128) NOT NULL, + `zipCode` VARCHAR(6) NOT NULL, + `city` VARCHAR(128) NOT NULL, + `job` VARCHAR(128) NULL DEFAULT NULL, + `degree` VARCHAR(128) NULL DEFAULT NULL, + `capability` TEXT NULL DEFAULT NULL, + `description` TEXT NULL DEFAULT NULL, + `userId` INT UNSIGNED NOT NULL, + PRIMARY KEY (`userId`), + INDEX `fk_userinfo_userId_idx` (`userId` ASC) VISIBLE, + CONSTRAINT `fk_userinfo_userId` + FOREIGN KEY (`userId`) + REFERENCES `alphajob`.`userAccount` (`userId`) + ON DELETE CASCADE + ON UPDATE CASCADE + ) + ENGINE = InnoDB + DEFAULT CHARACTER SET = utf8;"; + + // Liste des categories d'emploie possible + private $createTableJobCategory = "CREATE TABLE IF NOT EXISTS `alphajob`.`jobCategory` ( + `jobCategoryId` INT UNSIGNED NOT NULL, + `categoryName` VARCHAR(128) NOT NULL, + PRIMARY KEY (`jobCategoryId`) + ) + ENGINE = InnoDB + DEFAULT CHARACTER SET = utf8;"; + + // Assosications des emploies à un utilisateur + private $createTableUserJob = "CREATE TABLE IF NOT EXISTS `alphajob`.`userJob` ( + `userId` INT UNSIGNED NOT NULL, + `jobCategoryId` INT UNSIGNED NOT NULL, + INDEX `fk_userInfo_userId_idx` (`userId` ASC) VISIBLE, + INDEX `fk_jobCategory_jobCategoryId_idx` (`jobCategoryId` ASC) VISIBLE, + CONSTRAINT `fk_userJob_userId` + FOREIGN KEY (`userId`) + REFERENCES `alphajob`.`userAccount` (`userId`) + ON DELETE NO ACTION + ON UPDATE CASCADE, + CONSTRAINT `fk_userJob_jobCategoryId` + FOREIGN KEY (`jobCategoryId`) + REFERENCES `alphajob`.`jobCategory` (`jobCategoryId`) + ON DELETE NO ACTION + ON UPDATE CASCADE + ) + ENGINE = InnoDB + DEFAULT CHARACTER SET = utf8;"; + + // Infos sur les missions effectuées, liée à userAccount par userId et consultantId + private $createTableMission = "CREATE TABLE IF NOT EXISTS `alphajob`.`mission` ( + `missionId` INT UNSIGNED NOT NULL AUTO_INCREMENT, + `date` TIMESTAMP NOT NULL, + `subject` VARCHAR(128) NULL DEFAULT NULL, + `note` INT UNSIGNED NULL DEFAULT NULL, + `review` TEXT NULL DEFAULT NULL, + `acceptedByPro` TIMESTAMP NULL DEFAULT NULL, + `validatedByClient` TIMESTAMP NULL DEFAULT NULL, + `validatedByPro` TIMESTAMP NULL DEFAULT NULL, + `clientId` INT UNSIGNED NOT NULL, + `proId` INT UNSIGNED NOT NULL, + `jobCategoryId` INT UNSIGNED NOT NULL, + PRIMARY KEY (`missionId`), + INDEX `fk_mission_clientId_idx` (`clientId` ASC) VISIBLE, + INDEX `fk_mission_proId_idx` (`proId` ASC) VISIBLE, + INDEX `fk_mission_jobCategoryId_idx` (`jobCategoryId` ASC) VISIBLE, + CONSTRAINT `fk_mission_clientId` + FOREIGN KEY (`clientId`) + REFERENCES `alphajob`.`userAccount` (`userId`) + ON DELETE NO ACTION + ON UPDATE CASCADE, + CONSTRAINT `fk_mission_proId` + FOREIGN KEY (`proId`) + REFERENCES `alphajob`.`userAccount` (`userId`) + ON DELETE NO ACTION + ON UPDATE CASCADE, + CONSTRAINT `fk_mission_jobCategoryId` + FOREIGN KEY (`jobCategoryId`) + REFERENCES `alphajob`.`jobCategory` (`jobCategoryId`) + ON DELETE NO ACTION + ON UPDATE CASCADE + ) + ENGINE = InnoDB + DEFAULT CHARACTER SET = utf8;"; + // Noms des tables protected $tableUserAccount = "userAccount"; protected $tableUserInfo = "userInfo"; + protected $tableJobCategory = "jobCategory"; + protected $tableUserJob = "userJob"; protected $tableMission = "mission"; // Création de la DB si elle n'existe pas @@ -85,13 +151,24 @@ class DbMain { // Création des tables si elles n'existent pas private function create_table() { - $reqInitUserAccount = "CREATE TABLE IF NOT EXISTS ".$this->createTableUserAccount; + // userAccount + $reqInitUserAccount = $this->createTableUserAccount; $res = $this->conn->prepare($reqInitUserAccount); $res->execute(); - $reqInitUserInfo = "CREATE TABLE IF NOT EXISTS ".$this->createTableUserInfo; + // userInfo + $reqInitUserInfo = $this->createTableUserInfo; $res = $this->conn->prepare($reqInitUserInfo); $res->execute(); - $reqInitMission = "CREATE TABLE IF NOT EXISTS ".$this->createTableMission; + // jobCategory + $reqInitJobCategory = $this->createTableJobCategory; + $res = $this->conn->prepare($reqInitJobCategory); + $res->execute(); + // userJob + $reqInitUserJob = $this->createTableUserJob; + $res = $this->conn->prepare($reqInitUserJob); + $res->execute(); + // mission + $reqInitMission = $this->createTableMission; $res = $this->conn->prepare($reqInitMission); $res->execute(); } @@ -127,8 +204,8 @@ class DbMain { } // Vérifie si l'id est un consultant dans la table userAccount de la BDD - final public function check_exist_consultant($id) { - $reqCheckExistConsultant = "SELECT EXISTS(SELECT * FROM ".$this->tableUserAccount." WHERE id = ? AND isConsultant = '1')"; + final public function check_exist_pro($id) { + $reqCheckExistConsultant = "SELECT EXISTS(SELECT * FROM ".$this->tableUserAccount." WHERE id = ? AND isPro = '1')"; $data = $this->exec_cmd($reqCheckExistConsultant, array($id))->fetchAll(PDO::FETCH_NUM); // Retourne 1 si existe, sinon 0 return $data[0][0]; @@ -137,7 +214,11 @@ class DbMain { // Fonction "auto", déclenchée à l'instanciation final public function __construct() { // Essaie de se connecter a la BDD - $this->conn = new PDO("mysql:host=".$this->host, $this->user, $this->pass); + if ($this->debug) { + $this->conn = new PDO("mysql:host=".$this->host, $this->user, $this->pass, array(PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION)); + } else { + $this->conn = new PDO("mysql:host=".$this->host, $this->user, $this->pass, array(PDO::ATTR_ERRMODE => PDO::ERRMODE_SILENT)); + } } } ?> \ No newline at end of file diff --git a/Database/meth_dbsearch.php b/Database/meth_dbsearch.php index 0a325aa..a90925c 100644 --- a/Database/meth_dbsearch.php +++ b/Database/meth_dbsearch.php @@ -19,8 +19,8 @@ class DbSearch extends DbMain { // Récupération des infos d'un compte par son id final public function search_user_by_id($id) { - $reqSearchUser = "SELECT id, email, inscriptionDate, isAdmin, isUser, isConsultant - FROM ".$this->tableUserAccount." WHERE id = ?"; + $reqSearchUser = "SELECT userId, email, inscriptionDate, isClient, isPro, isAdmin + FROM ".$this->tableUserAccount." WHERE userId = ?"; $data = $this->exec_cmd($reqSearchUser, array($id))->fetch(PDO::FETCH_ASSOC); return $data; } @@ -37,10 +37,10 @@ class DbSearch extends DbMain { // Récupération des infos d'un consultant par son nom final public function search_consultant_by_name($research) { - $reqSearchConsultant = "SELECT id, lastname, firstname, job, capability FROM ".$this->tableUserInfo." + $reqSearchConsultant = "SELECT userId, lastname, firstname, job, capability FROM ".$this->tableUserInfo." INNER JOIN ".$this->tableUserAccount." - ON ".$this->tableUserInfo.".userId = ".$this->tableUserAccount.".id - WHERE isConsultant = '1' AND lastname LIKE CONCAT('%', ?, '%')"; + ON ".$this->tableUserInfo.".userId = ".$this->tableUserAccount.".userId + WHERE isPro = '1' AND lastname LIKE CONCAT('%', ?, '%')"; $data = $this->exec_cmd($reqSearchConsultant, array($research))->fetchAll(PDO::FETCH_ASSOC); return $data; } @@ -49,7 +49,7 @@ class DbSearch extends DbMain { final public function get_consultant_note_by_name($name) { $reqCountMission = "SELECT note FROM ".$this->tableMission." INNER JOIN ".$this->tableUserInfo." - ON ".$this->tableMission.".consultantId = ".$this->tableUserInfo.".userId + ON ".$this->tableMission.".proId = ".$this->tableUserInfo.".userId WHERE lastname = ?"; $data = $this->exec_cmd($reqCountMission, array($name))->fetchAll(PDO::FETCH_ASSOC); return $data; @@ -58,9 +58,9 @@ class DbSearch extends DbMain { // Récupérations des missions d'un consultant par son id final public function get_all_mission_by_id($id) { $reqGetAllMission = "SELECT subject, note, review, lastname FROM ".$this->tableMission." - INNER JOIN ".$this->tableUserInfo." - ON ".$this->tableMission.".userId = ".$this->tableUserInfo.".userId - WHERE consultantId = ?"; + LEFT JOIN ".$this->tableUserInfo." + ON ".$this->tableMission.".missionId = ".$this->tableUserInfo.".userId + WHERE proId = ?"; $data = $this->exec_cmd($reqGetAllMission, array($id))->fetchAll(PDO::FETCH_ASSOC); return $data; } @@ -69,7 +69,7 @@ class DbSearch extends DbMain { final public function count_consultant_mission_by_name($name) { $reqCountMission = "SELECT COUNT(*) FROM ".$this->tableMission." INNER JOIN ".$this->tableUserInfo." - ON ".$this->tableMission.".consultantId = ".$this->tableUserInfo.".userId + ON ".$this->tableMission.".proId = ".$this->tableUserInfo.".userId WHERE lastname = ?"; $data = $this->exec_cmd($reqCountMission, array($name))->fetchAll(PDO::FETCH_ASSOC); return $data; diff --git a/Database/meth_dbuser.php b/Database/meth_dbuser.php index 8e6ec35..cba1683 100644 --- a/Database/meth_dbuser.php +++ b/Database/meth_dbuser.php @@ -9,7 +9,7 @@ require_once(dirname( __FILE__ )."/dbmain.php"); // Extension de cette classe avec dbmain class DbUser extends DbMain { // Enregistrement d'un nouvel utilisateur - final public function add_user($email, $pass, $is_admin, $is_user, $is_consultant) { + final public function add_user($email, $pass, $is_client, $is_pro, $is_admin) { // On vérifie si l'email existe deja dans la bdd $exist = $this->check_exist_email($email); // Si non @@ -18,16 +18,16 @@ class DbUser extends DbMain { $crypt = $this->crypt_pass($pass); // Préparation de la requète $reqAddUser = "INSERT INTO ".$this->tableUserAccount." - (email, password, inscriptionDate, isAdmin, isUser, isConsultant) + (email, password, inscriptionDate, isClient, isPro, isAdmin) VALUES (?, ?, ?, ?, ?, ?)"; // Execution de la requète $this->exec_cmd($reqAddUser, array($email, $crypt, date("Y-m-d H:i:s"), - $is_admin, - $is_user, - $is_consultant + $is_client, + $is_pro, + $is_admin ) ); // Retourne 1 pour réussite @@ -39,17 +39,17 @@ class DbUser extends DbMain { } // Suppresion d'un utilisateur - final public function del_user($id) { + final public function del_user($userId) { // Préparation de la requète pour voir si l'utilisateur existe - $reqCheckExistId = "SELECT EXISTS(SELECT * FROM ".$this->tableUserAccount." WHERE id = ?)"; + $reqCheckExistId = "SELECT EXISTS(SELECT * FROM ".$this->tableUserAccount." WHERE userId = ?)"; // Exécution de la requète - $data = $this->exec_cmd($reqCheckExistId, array($id))->fetchAll(PDO::FETCH_NUM); + $data = $this->exec_cmd($reqCheckExistId, array($userId))->fetchAll(PDO::FETCH_NUM); // Si il existe if ($data[0][0]) { // Préparation de la requète pour suppression - $reqDelUser = "DELETE FROM ".$this->tableUserAccount." WHERE id = ?"; + $reqDelUser = "DELETE FROM ".$this->tableUserAccount." WHERE userId = ?"; // Exécution de la requète - $this->exec_cmd($reqDelUser, array($id)); + $this->exec_cmd($reqDelUser, array($userId)); // Retourne 1 pour réussite return 1; } else { @@ -77,20 +77,20 @@ class DbUser extends DbMain { } // Enregistrement d'une mission - final public function register_mission($subject, $note, $review, $userId, $consultantId) { + final public function register_mission($subject, $note, $review, $clientId, $proId) { // Vérification de l'existance de l'id de consultant - $exist = $this->check_exist_consultant($consultantId); + $exist = $this->check_exist_pro($proId); // Si il existe if ($exist) { // Préparation de la requète pour enregistrement de la mission $reqAddMission = "INSERT INTO ".$this->tableMission." - (date, subject, note, review, userId, consultantId) + (date, subject, note, review, clientId, proId) VALUES (?, ?, ?, ?, ?, ?)"; // Exécution de la requète $this->exec_cmd($reqAddMission, array(date("Y-m-d H:i:s"), $subject, $note, $review, - $userId, $consultantId + $clientId, $proId ) ); // Retourne 1 pour réussite @@ -104,7 +104,7 @@ class DbUser extends DbMain { // Vérification de la combinaison email - pass pour authentification final public function check_credential($email, $pass) { // Préparation de la requète pour récupérer les infos ou l'email est présent - $reqCheckCredential = "SELECT id, password + $reqCheckCredential = "SELECT userId, password FROM ".$this->tableUserAccount." WHERE email = ? "; // Chiffrement du mot de passe $crypt = $this->crypt_pass($pass); @@ -113,7 +113,7 @@ class DbUser extends DbMain { // Vérifiaction de correspondance email & pass foreach ($data as $rows) { if ($rows["password"] == $crypt) { - return $rows["id"]; + return $rows["userId"]; } } } @@ -121,14 +121,14 @@ class DbUser extends DbMain { // Vérification de la combinaison email - jeton d'auto-login pour authentification final public function check_token_autologin($email, $token) { // Préparation de la requète pour récupérer les infos ou l'email est présent - $reqCheckToken = "SELECT id, tokenAutoLogin + $reqCheckToken = "SELECT userId, tokenAutoLogin FROM ".$this->tableUserAccount." WHERE email = ?"; // Exécution de la requète $data = $this->exec_cmd($reqCheckToken, array($email))->fetchAll(PDO::FETCH_ASSOC); // Vérifiaction de correspondance email & jeton d'auto-connection foreach ($data as $rows) { if ($rows["tokenAutoLogin"] == $token) { - return $rows["id"]; + return $rows["userId"]; } } } diff --git a/Documents_et_infos/Bdd_mysql/mld_bdd_original.png b/Documents_et_infos/Bdd_mysql/mld_bdd_original.png new file mode 100644 index 0000000..228e677 Binary files /dev/null and b/Documents_et_infos/Bdd_mysql/mld_bdd_original.png differ diff --git a/Documents_et_infos/Bdd_mysql/mysql_alphajob.mwb b/Documents_et_infos/Bdd_mysql/mysql_alphajob.mwb new file mode 100644 index 0000000..3a0658c Binary files /dev/null and b/Documents_et_infos/Bdd_mysql/mysql_alphajob.mwb differ diff --git a/Documents_et_infos/Bdd_mysql/mysql_alphajob.mwb.bak b/Documents_et_infos/Bdd_mysql/mysql_alphajob.mwb.bak new file mode 100644 index 0000000..5f39098 Binary files /dev/null and b/Documents_et_infos/Bdd_mysql/mysql_alphajob.mwb.bak differ diff --git a/Documents_et_infos/Bdd_mysql/mysql_alphajob.png b/Documents_et_infos/Bdd_mysql/mysql_alphajob.png new file mode 100644 index 0000000..89e8df5 Binary files /dev/null and b/Documents_et_infos/Bdd_mysql/mysql_alphajob.png differ diff --git a/Documents_et_infos/Bdd_mysql/mysql_alphajob.sql b/Documents_et_infos/Bdd_mysql/mysql_alphajob.sql new file mode 100644 index 0000000..d556d0a --- /dev/null +++ b/Documents_et_infos/Bdd_mysql/mysql_alphajob.sql @@ -0,0 +1,143 @@ +-- MySQL Script generated by MySQL Workbench +-- Wed Mar 2 13:18:27 2022 +-- Model: New Model Version: 1.0 +-- MySQL Workbench Forward Engineering + +SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0; +SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0; +SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION'; + +-- ----------------------------------------------------- +-- Schema exophp +-- ----------------------------------------------------- + +-- ----------------------------------------------------- +-- Schema exophp +-- ----------------------------------------------------- +CREATE SCHEMA IF NOT EXISTS `exophp` DEFAULT CHARACTER SET utf8 ; +USE `exophp` ; + +-- ----------------------------------------------------- +-- Table `exophp`.`userAccount` +-- ----------------------------------------------------- +CREATE TABLE IF NOT EXISTS `exophp`.`userAccount` ( + `userId` INT UNSIGNED NOT NULL AUTO_INCREMENT, + `email` VARCHAR(128) NOT NULL, + `password` VARCHAR(128) NOT NULL, + `tokenAutoLogin` VARCHAR(128) NULL DEFAULT NULL, + `inscriptionDate` TIMESTAMP NOT NULL, + `isClient` TINYINT(1) UNSIGNED NOT NULL, + `isPro` TINYINT(1) UNSIGNED NOT NULL, + `isAdmin` TINYINT(1) UNSIGNED NOT NULL, + PRIMARY KEY (`userId`)) +ENGINE = InnoDB +DEFAULT CHARACTER SET = utf8; + + +-- ----------------------------------------------------- +-- Table `exophp`.`jobCategrory` +-- ----------------------------------------------------- +CREATE TABLE IF NOT EXISTS `exophp`.`jobCategrory` ( + `jobCategoryId` INT UNSIGNED NOT NULL AUTO_INCREMENT, + `categoryName` VARCHAR(128) NOT NULL, + PRIMARY KEY (`jobCategoryId`)) +ENGINE = InnoDB; + + +-- ----------------------------------------------------- +-- Table `exophp`.`mission` +-- ----------------------------------------------------- +CREATE TABLE IF NOT EXISTS `exophp`.`mission` ( + `missionId` INT UNSIGNED NOT NULL AUTO_INCREMENT, + `date` TIMESTAMP NOT NULL, + `subject` VARCHAR(128) NOT NULL, + `note` TINYINT(1) UNSIGNED NULL DEFAULT NULL, + `review` TEXT NULL DEFAULT NULL, + `acceptedByPro` TINYINT(1) UNSIGNED NOT NULL DEFAULT 0, + `validatedByClient` TINYINT(1) UNSIGNED NOT NULL DEFAULT 0, + `validatedByPro` TINYINT(1) UNSIGNED NOT NULL DEFAULT 0, + `clientId` INT UNSIGNED NOT NULL, + `proId` INT UNSIGNED NOT NULL, + `jobCategroryId` INT UNSIGNED NOT NULL, + PRIMARY KEY (`missionId`), + INDEX `fk_mission_clientId_idx` (`clientId` ASC) VISIBLE, + INDEX `fk_mission_proId_idx` (`proId` ASC) VISIBLE, + INDEX `fk_mission_jobCategroryId_idx` (`jobCategroryId` ASC) VISIBLE, + CONSTRAINT `fk_mission_userId` + FOREIGN KEY (`clientId`) + REFERENCES `exophp`.`userAccount` (`userId`) + ON DELETE NO ACTION + ON UPDATE NO ACTION, + CONSTRAINT `fk_mission_consultantId` + FOREIGN KEY (`proId`) + REFERENCES `exophp`.`userAccount` (`userId`) + ON DELETE NO ACTION + ON UPDATE NO ACTION, + CONSTRAINT `fk_mission_jobcategrory1` + FOREIGN KEY (`jobCategroryId`) + REFERENCES `exophp`.`jobCategrory` (`jobCategoryId`) + ON DELETE NO ACTION + ON UPDATE NO ACTION) +ENGINE = InnoDB +DEFAULT CHARACTER SET = utf8; + + +-- ----------------------------------------------------- +-- Table `exophp`.`userInfo` +-- ----------------------------------------------------- +CREATE TABLE IF NOT EXISTS `exophp`.`userInfo` ( + `lastName` VARCHAR(128) NOT NULL, + `firstName` VARCHAR(128) NOT NULL, + `phoneNumber` VARCHAR(10) NOT NULL, + `adress` VARCHAR(128) NOT NULL, + `zipCode` VARCHAR(6) NOT NULL, + `city` VARCHAR(128) NOT NULL, + `job` VARCHAR(128) NULL DEFAULT NULL, + `degree` VARCHAR(128) NULL DEFAULT NULL, + `capability` TEXT NULL DEFAULT NULL, + `description` TEXT NULL DEFAULT NULL, + `userId` INT UNSIGNED NOT NULL, + PRIMARY KEY (`userId`), + INDEX `fk_userinfo_userId_idx` (`userId` ASC) VISIBLE, + CONSTRAINT `fk_userinfo_userId` + FOREIGN KEY (`userId`) + REFERENCES `exophp`.`userAccount` (`userId`) + ON DELETE CASCADE + ON UPDATE CASCADE) +ENGINE = InnoDB +DEFAULT CHARACTER SET = utf8; + + +-- ----------------------------------------------------- +-- Table `exophp`.`category` +-- ----------------------------------------------------- +CREATE TABLE IF NOT EXISTS `exophp`.`category` ( + `category_id` INT NOT NULL, + `name` VARCHAR(255) NOT NULL, + PRIMARY KEY (`category_id`)); + + +-- ----------------------------------------------------- +-- Table `exophp`.`userJob` +-- ----------------------------------------------------- +CREATE TABLE IF NOT EXISTS `exophp`.`userJob` ( + `jobCategroryId` INT UNSIGNED NOT NULL, + `userId` INT UNSIGNED NOT NULL, + INDEX `fk_userJob_jobcategrory1_idx` (`jobCategroryId` ASC) VISIBLE, + INDEX `fk_userJob_userinfo1_idx` (`userId` ASC) VISIBLE, + CONSTRAINT `fk_userJob_jobCategroryId` + FOREIGN KEY (`jobCategroryId`) + REFERENCES `exophp`.`jobCategrory` (`jobCategoryId`) + ON DELETE NO ACTION + ON UPDATE NO ACTION, + CONSTRAINT `fk_userJob_userId` + FOREIGN KEY (`userId`) + REFERENCES `exophp`.`userInfo` (`userId`) + ON DELETE NO ACTION + ON UPDATE NO ACTION) +ENGINE = InnoDB; + + +SET SQL_MODE=@OLD_SQL_MODE; +SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS; +SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS; diff --git a/Documents_et_infos/Structure_plan_de_site/arborescence_alphajob.jpg b/Documents_et_infos/Structure_plan_de_site/arborescence_alphajob.jpg new file mode 100644 index 0000000..1a543f2 Binary files /dev/null and b/Documents_et_infos/Structure_plan_de_site/arborescence_alphajob.jpg differ diff --git a/Documents_et_infos/Structure_plan_de_site/depth_optimised.jpg b/Documents_et_infos/Structure_plan_de_site/depth_optimised.jpg new file mode 100644 index 0000000..5a7303b Binary files /dev/null and b/Documents_et_infos/Structure_plan_de_site/depth_optimised.jpg differ diff --git a/Documents_et_infos/Structure_plan_de_site/logigramme_fonction_login.jpg b/Documents_et_infos/Structure_plan_de_site/logigramme_fonction_login.jpg new file mode 100644 index 0000000..5aef760 Binary files /dev/null and b/Documents_et_infos/Structure_plan_de_site/logigramme_fonction_login.jpg differ diff --git a/Documents_et_infos/Structure_plan_de_site/structure_projet web.jpg b/Documents_et_infos/Structure_plan_de_site/structure_projet web.jpg new file mode 100644 index 0000000..d4564ad Binary files /dev/null and b/Documents_et_infos/Structure_plan_de_site/structure_projet web.jpg differ diff --git a/Documents_et_infos/Zooning_maquette_graphique/infos_css.txt b/Documents_et_infos/Zooning_maquette_graphique/infos_css.txt new file mode 100644 index 0000000..98eaea4 --- /dev/null +++ b/Documents_et_infos/Zooning_maquette_graphique/infos_css.txt @@ -0,0 +1,16 @@ + +Tailles écrans: +https://gbksoft.com/blog/common-screen-sizes-for-responsive-web-design/ +https://www.w3schools.com/browsers/browsers_display.asp +https://99designs.fr/blog/design-web-digital/lconception-sites-web-adaptatifs/ + +Infos utiles: +https://kinsta.com/fr/wp-content/uploads/sites/4/2020/09/points-rupture-responsives-bootstrap.png +https://raidboxes.io/fr/blog/webdesign-development/webdesign-trends-2021/ +https://webdesign.tutsplus.com/tutorials/how-to-create-a-frosted-glass-effect-in-css--cms-32535 + +Fonds: +https://unsplash.com/photos/eMNevd6ErCU + +Lisibilité et texte: +http://all-for-design.com/web-design/lisibilite-des-sites-web-font-size-100-16px/ \ No newline at end of file diff --git a/Documents_et_infos/Zooning_maquette_graphique/maquette_page_web.jpg b/Documents_et_infos/Zooning_maquette_graphique/maquette_page_web.jpg new file mode 100644 index 0000000..2e4a256 Binary files /dev/null and b/Documents_et_infos/Zooning_maquette_graphique/maquette_page_web.jpg differ diff --git a/Documents_et_infos/Zooning_maquette_graphique/zooning_avance.epgz b/Documents_et_infos/Zooning_maquette_graphique/zooning_avance.epgz new file mode 100644 index 0000000..db034cb Binary files /dev/null and b/Documents_et_infos/Zooning_maquette_graphique/zooning_avance.epgz differ diff --git a/Documents_et_infos/Zooning_maquette_graphique/zooning_simple.epgz b/Documents_et_infos/Zooning_maquette_graphique/zooning_simple.epgz new file mode 100644 index 0000000..a2051a0 Binary files /dev/null and b/Documents_et_infos/Zooning_maquette_graphique/zooning_simple.epgz differ diff --git a/Documents_et_infos/cahier_des_charges_fonctionnalitees.jpg b/Documents_et_infos/cahier_des_charges_fonctionnalitees.jpg new file mode 100644 index 0000000..8519988 Binary files /dev/null and b/Documents_et_infos/cahier_des_charges_fonctionnalitees.jpg differ diff --git a/Documents_et_infos/infos_generales.txt b/Documents_et_infos/infos_generales.txt new file mode 100644 index 0000000..05ef1f6 --- /dev/null +++ b/Documents_et_infos/infos_generales.txt @@ -0,0 +1,73 @@ +******************************************************************************* + Infos: Déroulé de la réalisation de l'exercice. +******************************************************************************* + +Le cahier des charges que je me suis fixé pour cet exercice est un peu plus chargé +que ce qui était demandé initalement: +-Mettre en place un sytème de client / consultant (et non uniquement pour moi). +-Mettre en place un système d'inscription. +-Mettre en place un système de connection. +-Rechercher par nom un consultant. +-Afficher les capacités d'un consultant. +-Pouvoir enregistrer et noter une mission effectuée auprès d'un consultant en +tant que client. +-Pouvoir supprimer un utilisateur du site. + +Pour cet exercice, j'ai tout d'abord voulu créer mes pages web indépendamment les +unes des autres (index, login, register, etc...), il m'a rapidement paru évident +de séparer la gestion de la base de données dans un fichier à part, et mettre ce +système dans une classe m'a également paru être un bon choix car on pouvait avec +une classe définir les différents paramatres de connection à la base de données +dans les attributs de cette dernière et initier la connection à l'instanciation. +Ce système me permettait de mettre en place des requêtes en créant des méthodes et la classe +grossissant j'ai décidé de la scinder en trois, le fichier principal contenant les +informations de connection et d'initialisation de la base de données ainsi que quelques +requêtes basiques, un second fichier contenant toutes les méthodes pour effectuer des +recherches, et un dernier fichier contenant toutes les méthodes permettant de pouvoir +modifier les éléments de la base de données. + +En avancant dans l'exercice, j'ai voulu séparer la partie "logique" (traitement des données) +de la partie "rendue" (partie envoyée au client), les fichiers grossissants rapidement +cela permettait de gérer plus clairement ces deux parties du site. + +J'ai alors décidé de faire un fichier logique que j'ai appelé "wrapper", +ce wrapper avait deux objectifs: +- Récupérer les données transmises par les formulaires. +- Effectuer toute la partie logique (le traitement des données). +Je souhaitais renvoyer toutes les données vers un seul fichier pour minimiser +l'exposition d'informations transmises au client quand au fonctionnement du site web, +dans une optique de sécurité je souhaite afficher au client +uniquement le strict minimum. Ce fichier wrapper a lui aussi rapidement grossi, +et dans un soucis de lisibilité et de facilité de maintenance, j'ai décidé de le diviser +en plusieurs fichiers qui sont devenus ses fonctions. + +Enfin la partie "rendue" contenait les différentes pages accessibles par le client, +voulant éviter la répétition dans les différentes pages, j'ai séparé les parties +communes dans des fichiers à part (header, navbar, footer) cela me permettait en +modifiant un seul fichier de modifier le rendu sur toutes les pages, et dans un +soucis d'uniformité, j'ai décidé de "sortir" également les parties principales des +différentes pages et de placer le tout dans un dossier nommé "includes" dans lequel +les pages pourraient importer leur contenu. Enfin pour la gestion des langues, il +m'a paru opportun de créer des fichiers contenant le texte pour chaque langue à la +manière de fichier de traduction pour vidéo, et le site allait importer ensuite le +fichier en fonction de la langue sélectionnée, pour le faire j'ai créé deux dossiers +"fr" et "en" et je change la source de l'import en fonction de la langue choisie +par le client. + +Pour permettre une retention d'information entre les pages, le système de session +m'a paru inévitable et grâce à ce dernier, j'ai pu mettre en place le système +de changement de langue (défini dans une variable de cette dernière), un système de +connection (on affiche différents éléments en fonction du contenu de variable défini dans la session). + +J'ai également choisi de créer un système d'auto-connection car je voulais +expérimenter l'utilisation de cookie en PHP pour mettre en place ce système +le but était de créer un "jeton d'auto-connection": une chaine de caractères aléatoires +permettant la connection, valable une seule fois et qui serait stoqué 7 jours +sur le navigateur du client. La session ne restant ouverte +par défaut que 24 min (https://stackoverflow.com/questions/9904105/php-sessions-default-timeout). + +Pour la charte graphique, j'ai mis en place ce qui me parait être la structure la plus basique +pour un site web: En-tête avec barre de navigation -> corps de la page -> pied de page. +J'ai choisi un style clair, anguleux et épuré avec une dominance pour le rouge. + +Et enfin pour pouvoir faire un peu de JS, j'ai choisi de créer un slideshow. diff --git a/Views/Includes/en/table.php b/Views/Includes/en/table.php index 1ce9816..0b778af 100644 --- a/Views/Includes/en/table.php +++ b/Views/Includes/en/table.php @@ -39,7 +39,7 @@ $header = [ ["Subject", "Note", "Review", - "CLient Lastname"] + "Client Lastname"] ]; $yes = "Yes"; $no = "No"; diff --git a/Views/Includes/en/text.php b/Views/Includes/en/text.php index 872ca62..7caf330 100644 --- a/Views/Includes/en/text.php +++ b/Views/Includes/en/text.php @@ -3,15 +3,15 @@ // Description: Texte du site // **************************************************************************** $text = [ - "incl_delete_form" => [ + "incl_form_delete" => [ "h2" => "Delete an user", "id" => "ID to delete", "submit" => "Delete", ], - "incl_footer" => [ + "incl_global_footer" => [ "main" => "Made by Debulois Quentin for my professional folder.
December 2021, all rights reserved.", ], - "incl_userInfo_form" => [ + "incl_form_userInfo" => [ "h2" => "Informations about the user.", "lastname" => "Last name", "firstname" => "First name", @@ -25,24 +25,24 @@ $text = [ "city" => "City", "submit" => "Modify" ], - "incl_login_form" => [ + "incl_form_login" => [ "h2" => "Login", "email" => "Email", "password" => "Password", "rememberMe" => "Remember me", "submit" => "Sign-in" ], - "incl_mission_form" => [ + "incl_form_mission" => [ "h2" => "Form to register a mission", "subject" => "Subject", "review" => "Review", "consultantId" => "Consultant ID", "submit" => "Register" ], - "incl_myMission_table" => [ + "incl_table_myMission" => [ "h2" => "My missions" ], - "incl_navbar" => [ + "incl_global_navbar" => [ "h2" => "AlphaJob", "btnSearch" => "Search", "btnInfos" => "Modif. infos", @@ -55,7 +55,7 @@ $text = [ "lang" => "Language", "btnLang" => "Select" ], - "incl_register_form" => [ + "incl_form register" => [ "h2" => "Form to sign-in", "email" => "Email", "password" => "Password", diff --git a/Views/Includes/fr/text.php b/Views/Includes/fr/text.php index 7820ea3..8d72f26 100644 --- a/Views/Includes/fr/text.php +++ b/Views/Includes/fr/text.php @@ -3,15 +3,15 @@ // Description: Texte du site // **************************************************************************** $text = [ - "incl_delete_form" => [ + "incl_form_delete" => [ "h2" => "Supprimer un utilisateur", "id" => "ID à supprimer", "submit" => "Supprimer", ], - "incl_footer" => [ + "incl_global_footer" => [ "main" => "Réalisé par Debulois Quentin pour mon dossier professionel.
Decembre 2021, tous droits réservés.", ], - "incl_userInfo_form" => [ + "incl_form_userInfo" => [ "h2" => "Informations sur l'utilisateur.", "lastname" => "Nom", "firstname" => "Prénom", @@ -25,24 +25,24 @@ $text = [ "city" => "Ville", "submit" => "Modifier" ], - "incl_login_form" => [ + "incl_form_login" => [ "h2" => "Identification", "email" => "Email", "password" => "Mot de passe", "rememberMe" => "Se souvenir de moi", "submit" => "Connection" ], - "incl_mission_form" => [ + "incl_form_mission" => [ "h2" => "Formulaire pour enregistrer une mission", "subject" => "Sujet", "review" => "Commentaire", "consultantId" => "ID du consultant", "submit" => "Enregistrer" ], - "incl_myMission_table" => [ + "incl_table_myMission" => [ "h2" => "Mes missions" ], - "incl_navbar" => [ + "incl_global_navbar" => [ "h2" => "AlphaJob", "btnSearch" => "Rechercher", "btnInfos" => "Modif. infos", @@ -55,7 +55,7 @@ $text = [ "lang" => "Langue", "btnLang" => "Sélectionner" ], - "incl_register_form" => [ + "incl_form_register" => [ "h2" => "Formulaire d'inscription", "email" => "Email", "password" => "Mot de passe", diff --git a/Views/Includes/incl_delete_form.php b/Views/Includes/incl_delete_form.php deleted file mode 100644 index bc1dc80..0000000 --- a/Views/Includes/incl_delete_form.php +++ /dev/null @@ -1,60 +0,0 @@ - -
- -
-

'.$text[basename(__FILE__, ".php")]["h2"].'

-
- - -
'.PHP_EOL); -// Récupération de tous les utilisateurs. -$result = $dbsearch->search_all(); -// Affichage de la table. -echo(" - - - ".PHP_EOL); -// Affichage des en-tête de colonne. -foreach($header[0] as $header) { - echo(" ".PHP_EOL); -} -echo(" ".PHP_EOL); -// Affichage du résultat de la recherche. -foreach ($result as $rows) { - echo(" - ".PHP_EOL); - foreach ($rows as $key => $value) { - // Traduction du résultat si reponse binaire en Oui / Non. - if (($key == "isUser" || $key == "isConsultant" || $key == "isAdmin") && $value == "1") { - echo(" ".PHP_EOL); - } elseif (($key == "isUser" || $key == "isConsultant" || $key == "isAdmin") && $value == "0") { - echo(" ".PHP_EOL); - } else { - echo(" ".PHP_EOL); - } - } - echo(" ".PHP_EOL); -} -echo('
".$header."
".$yes."
".$no."
".$value."
- -
-
'.PHP_EOL); - -?> \ No newline at end of file diff --git a/Views/Includes/incl_footer.php b/Views/Includes/incl_footer.php deleted file mode 100644 index 6aa4014..0000000 --- a/Views/Includes/incl_footer.php +++ /dev/null @@ -1,13 +0,0 @@ - -
- - '.PHP_EOL) -?> \ No newline at end of file diff --git a/Views/Includes/incl_form_delete.php b/Views/Includes/incl_form_delete.php new file mode 100644 index 0000000..99ce216 --- /dev/null +++ b/Views/Includes/incl_form_delete.php @@ -0,0 +1,60 @@ + +
+ +
+

'.$text[basename(__FILE__, ".php")]["h2"].'

+
+ + +
'.PHP_EOL); +// Récupération de tous les utilisateurs. +$result = $dbsearch->search_all(); +// Affichage de la table. +echo(" + + + ".PHP_EOL); +// Affichage des en-tête de colonne. +foreach($header[0] as $header) { + echo(" ".PHP_EOL); +} +echo(" ".PHP_EOL); +// Affichage du résultat de la recherche. +foreach ($result as $rows) { + echo(" + ".PHP_EOL); + foreach ($rows as $key => $value) { + // Traduction du résultat si reponse binaire en Oui / Non. + if (($key == "isClient" || $key == "isPro" || $key == "isAdmin") && $value == "1") { + echo(" ".PHP_EOL); + } elseif (($key == "isClient" || $key == "isPro" || $key == "isAdmin") && $value == "0") { + echo(" ".PHP_EOL); + } else { + echo(" ".PHP_EOL); + } + } + echo(" ".PHP_EOL); +} +echo('
".$header."
".$yes."
".$no."
".$value."
+ +
+
'.PHP_EOL); + +?> \ No newline at end of file diff --git a/Views/Includes/incl_form_login.php b/Views/Includes/incl_form_login.php new file mode 100644 index 0000000..5f76160 --- /dev/null +++ b/Views/Includes/incl_form_login.php @@ -0,0 +1,26 @@ + +
+

'.$text[basename(__FILE__, ".php")]["h2"].'

+
+ + + + +
+
'.PHP_EOL) +?> \ No newline at end of file diff --git a/Views/Includes/incl_form_mission.php b/Views/Includes/incl_form_mission.php new file mode 100644 index 0000000..4d6d311 --- /dev/null +++ b/Views/Includes/incl_form_mission.php @@ -0,0 +1,38 @@ + +
+

'.$text[basename(__FILE__, ".php")]["h2"].'

+
+ + + + + +
+
'.PHP_EOL); +?> \ No newline at end of file diff --git a/Views/Includes/incl_form_register.php b/Views/Includes/incl_form_register.php new file mode 100644 index 0000000..bb046ce --- /dev/null +++ b/Views/Includes/incl_form_register.php @@ -0,0 +1,28 @@ + +
+ +
+

'.$text[basename(__FILE__, ".php")]["h2"].'

+
+ + + + + + + +
+
'.PHP_EOL); +?> \ No newline at end of file diff --git a/Views/Includes/incl_form_userInfo.php b/Views/Includes/incl_form_userInfo.php new file mode 100644 index 0000000..4cc509c --- /dev/null +++ b/Views/Includes/incl_form_userInfo.php @@ -0,0 +1,76 @@ +get_user_info_by_id($_SESSION["userId"]); +if (!$info) { + $info = [ + ["lastname" => "", + "firstname" => "", + "job" => "", + "degree" => "", + "capability" => "", + "description" => "", + "phoneNumber" => "", + "adress" => "", + "zipCode" => "", + "city" => ""] + ]; +} +echo(' +
+ +
+

'.$text[basename(__FILE__, ".php")]["h2"].'

+
+ + + + + + + + + + + +
+
') +?> \ No newline at end of file diff --git a/Views/Includes/incl_global_footer.php b/Views/Includes/incl_global_footer.php new file mode 100644 index 0000000..6aa4014 --- /dev/null +++ b/Views/Includes/incl_global_footer.php @@ -0,0 +1,13 @@ + +
+ + '.PHP_EOL) +?> \ No newline at end of file diff --git a/Views/Includes/incl_global_header.php b/Views/Includes/incl_global_header.php new file mode 100644 index 0000000..060340c --- /dev/null +++ b/Views/Includes/incl_global_header.php @@ -0,0 +1,15 @@ + + + + + + + + + +'); +?> \ No newline at end of file diff --git a/Views/Includes/incl_global_message.php b/Views/Includes/incl_global_message.php new file mode 100644 index 0000000..b4b653d --- /dev/null +++ b/Views/Includes/incl_global_message.php @@ -0,0 +1,22 @@ +'); +echo('

'.$message[$_SESSION["messageNumber"]]["title"].'

'); +if ($message[$_SESSION["messageNumber"]]["success"]) { + echo('

'.$success.'

'); +} else { + echo('

'.$error.'

'); +} +echo("

".$message[$_SESSION["messageNumber"]]["info"]."

"); +echo('

'.$redirect.'

'); +echo(''); +if ($message[$_SESSION["messageNumber"]]["timer"]) { + echo(''); +} else { + echo(''); +} +?> \ No newline at end of file diff --git a/Views/Includes/incl_global_navbar.php b/Views/Includes/incl_global_navbar.php new file mode 100644 index 0000000..86241e9 --- /dev/null +++ b/Views/Includes/incl_global_navbar.php @@ -0,0 +1,59 @@ + + '.PHP_EOL); +?> \ No newline at end of file diff --git a/Views/Includes/incl_header.php b/Views/Includes/incl_header.php deleted file mode 100644 index 060340c..0000000 --- a/Views/Includes/incl_header.php +++ /dev/null @@ -1,15 +0,0 @@ - - - - - - - - - -'); -?> \ No newline at end of file diff --git a/Views/Includes/incl_login_form.php b/Views/Includes/incl_login_form.php deleted file mode 100644 index 5f76160..0000000 --- a/Views/Includes/incl_login_form.php +++ /dev/null @@ -1,26 +0,0 @@ - -
-

'.$text[basename(__FILE__, ".php")]["h2"].'

-
- - - - -
-
'.PHP_EOL) -?> \ No newline at end of file diff --git a/Views/Includes/incl_message.php b/Views/Includes/incl_message.php deleted file mode 100644 index b4b653d..0000000 --- a/Views/Includes/incl_message.php +++ /dev/null @@ -1,22 +0,0 @@ -'); -echo('

'.$message[$_SESSION["messageNumber"]]["title"].'

'); -if ($message[$_SESSION["messageNumber"]]["success"]) { - echo('

'.$success.'

'); -} else { - echo('

'.$error.'

'); -} -echo("

".$message[$_SESSION["messageNumber"]]["info"]."

"); -echo('

'.$redirect.'

'); -echo(''); -if ($message[$_SESSION["messageNumber"]]["timer"]) { - echo(''); -} else { - echo(''); -} -?> \ No newline at end of file diff --git a/Views/Includes/incl_mission_form.php b/Views/Includes/incl_mission_form.php deleted file mode 100644 index 2fed999..0000000 --- a/Views/Includes/incl_mission_form.php +++ /dev/null @@ -1,38 +0,0 @@ - -
-

'.$text[basename(__FILE__, ".php")]["h2"].'

-
- - - - - -
-
'.PHP_EOL); -?> \ No newline at end of file diff --git a/Views/Includes/incl_myMission_table.php b/Views/Includes/incl_myMission_table.php deleted file mode 100644 index 9a50f5c..0000000 --- a/Views/Includes/incl_myMission_table.php +++ /dev/null @@ -1,39 +0,0 @@ -get_all_mission_by_id($_SESSION["id"]); -echo(' -
- -
-

'.$text[basename(__FILE__, ".php")]["h2"].'

- - - '.PHP_EOL); -foreach($header[3] as $header) { - echo(" ".PHP_EOL); -} -echo(" ".PHP_EOL); -foreach ($result as $rows) { - echo(" - ".PHP_EOL); - foreach ($rows as $value) { - echo(" ".PHP_EOL); - } - echo(" ".PHP_EOL); -} -echo('
".$header."
".$value."
- -
-
'.PHP_EOL); -?> \ No newline at end of file diff --git a/Views/Includes/incl_navbar.php b/Views/Includes/incl_navbar.php deleted file mode 100644 index 178f2e6..0000000 --- a/Views/Includes/incl_navbar.php +++ /dev/null @@ -1,59 +0,0 @@ - - '.PHP_EOL); -?> \ No newline at end of file diff --git a/Views/Includes/incl_register_form.php b/Views/Includes/incl_register_form.php deleted file mode 100644 index d95f552..0000000 --- a/Views/Includes/incl_register_form.php +++ /dev/null @@ -1,28 +0,0 @@ - -
- -
-

'.$text[basename(__FILE__, ".php")]["h2"].'

-
- - - - - - - -
-
'.PHP_EOL); -?> \ No newline at end of file diff --git a/Views/Includes/incl_table_myMission.php b/Views/Includes/incl_table_myMission.php new file mode 100644 index 0000000..b7e4ba9 --- /dev/null +++ b/Views/Includes/incl_table_myMission.php @@ -0,0 +1,39 @@ +get_all_mission_by_id($_SESSION["userId"]); +echo(' +
+ +
+

'.$text[basename(__FILE__, ".php")]["h2"].'

+ + + '.PHP_EOL); +foreach($header[3] as $header) { + echo(" ".PHP_EOL); +} +echo(" ".PHP_EOL); +foreach ($result as $rows) { + echo(" + ".PHP_EOL); + foreach ($rows as $value) { + echo(" ".PHP_EOL); + } + echo(" ".PHP_EOL); +} +echo('
".$header."
".$value."
+ +
+
'.PHP_EOL); +?> \ No newline at end of file diff --git a/Views/Includes/incl_userInfo_form.php b/Views/Includes/incl_userInfo_form.php deleted file mode 100644 index 200a3f5..0000000 --- a/Views/Includes/incl_userInfo_form.php +++ /dev/null @@ -1,76 +0,0 @@ -get_user_info_by_id($_SESSION["id"]); -if (!$info) { - $info = [ - ["lastname" => "", - "firstname" => "", - "job" => "", - "degree" => "", - "capability" => "", - "description" => "", - "phoneNumber" => "", - "adress" => "", - "zipCode" => "", - "city" => ""] - ]; -} -echo(' -
- -
-

'.$text[basename(__FILE__, ".php")]["h2"].'

-
- - - - - - - - - - - -
-
') -?> \ No newline at end of file diff --git a/Views/delete.php b/Views/delete.php index af7c286..c11c768 100644 --- a/Views/delete.php +++ b/Views/delete.php @@ -22,14 +22,14 @@ if (!isset($_SESSION["loggedIn"], $_SESSION["isAdmin"]) '.PHP_EOL); ?> - + ".$title[basename(__FILE__, ".php")]."".PHP_EOL); ?> - - - + + + \ No newline at end of file diff --git a/Views/login.php b/Views/login.php index 19b1a3c..0bdeda3 100644 --- a/Views/login.php +++ b/Views/login.php @@ -13,14 +13,14 @@ $_SESSION["src"] = basename(__FILE__, ".php"); '.PHP_EOL); ?> - + ".$title[basename(__FILE__, ".php")]."".PHP_EOL); ?> - - - + + + \ No newline at end of file diff --git a/Views/message.php b/Views/message.php index fa90ccd..489d01f 100644 --- a/Views/message.php +++ b/Views/message.php @@ -16,14 +16,14 @@ if (!isset($_SESSION["messageNumber"])) { '.PHP_EOL); ?> - + ".$title[basename(__FILE__, ".php")]."".PHP_EOL); ?> - - - + + + diff --git a/Views/mission.php b/Views/mission.php index e1dc2ef..4d84777 100644 --- a/Views/mission.php +++ b/Views/mission.php @@ -5,9 +5,9 @@ // Démarrage de la session. session_start(); // Vérification si connecté et si a le statut utilisateur sinon: raise 404 -if (!isset($_SESSION["loggedIn"], $_SESSION["isUser"]) +if (!isset($_SESSION["loggedIn"], $_SESSION["isClient"]) || $_SESSION["loggedIn"] == false - || $_SESSION["isUser"] == false + || $_SESSION["isClient"] == false ) { http_response_code(404); die(); @@ -21,14 +21,14 @@ $_SESSION["src"] = basename(__FILE__, ".php"); '.PHP_EOL); ?> - + ".$title[basename(__FILE__, ".php")]."".PHP_EOL); ?> - - - + + + \ No newline at end of file diff --git a/Views/myMission.php b/Views/myMission.php index 0c9b6a7..49d7107 100644 --- a/Views/myMission.php +++ b/Views/myMission.php @@ -5,9 +5,9 @@ // Démarrage de la session. session_start(); // Si n'est pas connecté ou n'est pas consultant: raise 404. -if (!isset($_SESSION["loggedIn"], $_SESSION["isConsultant"]) +if (!isset($_SESSION["loggedIn"], $_SESSION["isPro"]) || $_SESSION["loggedIn"] == false - || $_SESSION["isConsultant"] == false + || $_SESSION["isPro"] == false ) { http_response_code(404); die(); @@ -21,14 +21,14 @@ $_SESSION["src"] = basename(__FILE__, ".php"); '.PHP_EOL); ?> - + ".$title[basename(__FILE__, ".php")]."".PHP_EOL); ?> - - - + + + \ No newline at end of file diff --git a/Views/register.php b/Views/register.php index 3b0605c..5774615 100644 --- a/Views/register.php +++ b/Views/register.php @@ -13,14 +13,14 @@ $_SESSION["src"] = basename(__FILE__, ".php"); '.PHP_EOL); ?> - + ".$title[basename(__FILE__, ".php")]."".PHP_EOL); ?> - - - + + + \ No newline at end of file diff --git a/Views/userInfo.php b/Views/userInfo.php index c4e9f8b..0936590 100644 --- a/Views/userInfo.php +++ b/Views/userInfo.php @@ -19,14 +19,14 @@ $_SESSION["src"] = basename(__FILE__, ".php"); '.PHP_EOL); ?> - + ".$title[basename(__FILE__, ".php")]."".PHP_EOL); ?> - - - + + + \ No newline at end of file diff --git a/Wrapper/Functions/func_delete.php b/Wrapper/Functions/func_delete.php index 291704d..b118e56 100644 --- a/Wrapper/Functions/func_delete.php +++ b/Wrapper/Functions/func_delete.php @@ -2,9 +2,9 @@ // **************************************************************************** // Description: Fonction de suppréssion d'un utilisateur par son ID // **************************************************************************** -function delete ($id) { +function delete ($userId) { $dbuser = new DbUser; - $deleted = $dbuser->del_user($id); + $deleted = $dbuser->del_user($userId); // Sélection du message à affiché en fonction de réussite ou pas. if ($deleted) { $messageNumber = 0; diff --git a/Wrapper/Functions/func_login.php b/Wrapper/Functions/func_login.php index bb670ba..3966301 100644 --- a/Wrapper/Functions/func_login.php +++ b/Wrapper/Functions/func_login.php @@ -5,6 +5,7 @@ // de caractère aléatoire valable pour une seule tentative. // **************************************************************************** function login($cookie, $email = null, $pass = null, $remember = false) { + print_r($email, $pass); // Instanciation de la gestion de la BDD utilisateur. $dbuser = new DbUser; // On vérifie si la connection se fait via le formulaire de connection ou par cookie diff --git a/Wrapper/Functions/func_mission.php b/Wrapper/Functions/func_mission.php index 8c2d90c..8875685 100644 --- a/Wrapper/Functions/func_mission.php +++ b/Wrapper/Functions/func_mission.php @@ -2,13 +2,13 @@ // **************************************************************************** // Description: Fonction d'enregistrement d'une mission // **************************************************************************** -function register_mission($subject, $note, $review, $userId, $consultantId) { +function register_mission($subject, $note, $review, $clientId, $proId) { $dbuser = new DbUser; $registered = $dbuser->register_mission($subject, $note, $review, - $userId, - $consultantId + $clientId, + $proId ); // Sélection du message à afficher en fonction de réussite ou pas. if ($registered) { diff --git a/Wrapper/Functions/func_register.php b/Wrapper/Functions/func_register.php index 99741a3..6a081a9 100644 --- a/Wrapper/Functions/func_register.php +++ b/Wrapper/Functions/func_register.php @@ -2,13 +2,13 @@ // **************************************************************************** // Description: Fonction d'inscription d'un nouvel utilisateur // **************************************************************************** -function register($email, $password, $is_admin, $is_user, $is_consultant) { +function register($email, $password, $is_client, $is_pro, $is_admin) { $dbuser = new DbUser; $registered = $dbuser->add_user($email, $password, - $is_admin, - $is_user, - $is_consultant + $is_client, + $is_pro, + $is_admin ); // Sélection du message à afficher en fonction de la réussite de l'inscription. if ($registered) { diff --git a/Wrapper/Functions/func_sanitize.php b/Wrapper/Functions/func_sanitize.php index 2821413..cd45c28 100644 --- a/Wrapper/Functions/func_sanitize.php +++ b/Wrapper/Functions/func_sanitize.php @@ -5,7 +5,7 @@ function sanitize($data) { // Retrait des espaces en début et fin de la variable. $trimmed = trim($data); - // Retrait des charactères HTML. + // Retrait des charactères HTML (XSS). $htmlChars = htmlspecialchars($trimmed); return $htmlChars; } diff --git a/Wrapper/wrapper.php b/Wrapper/wrapper.php index 2bdcf32..4a39429 100644 --- a/Wrapper/wrapper.php +++ b/Wrapper/wrapper.php @@ -7,6 +7,7 @@ // pour rediréger tout mes formulaires vers une page unique. // **************************************************************************** // Import de toutes les fonctions et des méthodes pour gérer la BDD. + require_once(dirname( __FILE__ )."/../Database/meth_dbuser.php"); require_once(dirname( __FILE__ )."/../Database/meth_dbsearch.php"); require_once(dirname( __FILE__ )."/Functions/func_info.php"); @@ -19,9 +20,13 @@ require_once(dirname( __FILE__ )."/Functions/func_register.php"); require_once(dirname( __FILE__ )."/Functions/func_language.php"); require_once(dirname( __FILE__ )."/Functions/func_sanitize.php"); session_start(); + // Si la session existe et que la variable src est bien présente. +// Ensuite on redirige en fonction de la varaible "src" de la session +// et on vérifie que la data nécessaire est bien présente. +// Sinon: raise 404 if (isset($_SESSION["src"])) { - // Avant toutes chose on sanitarize la data reçue. + // Avant toutes choses, on nettoie la data reçue. if (isset($_POST)) { foreach ($_POST as $key => $value) { if ($key !== "password") { @@ -29,9 +34,8 @@ if (isset($_SESSION["src"])) { } } } - // Ensuite on redirige en fonction de la varaible "src" de la session - // et on vérifie que la data nécessaire est bien présente. - // Sinon: raise 404 + + // Condition pour une connection if ($_SESSION["src"] == "login" && isset($_POST["email"], $_POST["password"]) && $_POST["email"] !== "" @@ -43,17 +47,23 @@ if (isset($_SESSION["src"])) { $_POST["rememberMe"] = false; } login(0, $_POST["email"], $_POST["password"], $_POST["rememberMe"]); + + // Condition pour une connection auto } elseif ($_SESSION["src"] == "autoLogin" && isset($_COOKIE["autoLogin"]) && $_SESSION["loggedIn"] == false ) { // Si connection par cookie, on le décode avant de le passer à la fonction. login(json_decode(base64_decode($_COOKIE["autoLogin"]))); + + // Condition pour une déconnection } elseif ($_SESSION["src"] == "logout" && isset($_SESSION["loggedIn"]) && $_SESSION["loggedIn"] == true ) { logout(); + + // Condition pour une inscription } elseif ($_SESSION["src"] == "register" && isset($_POST["email"], $_POST["password"] @@ -61,69 +71,77 @@ if (isset($_SESSION["src"])) { && $_POST["email"] !== "" && $_POST["password"] !== "" ) { - if (isset($_POST["is_admin"]) && $_POST["is_admin"] == "on") { - $_POST["is_admin"] = 1; + if (isset($_POST["is_client"]) && $_POST["is_client"] == "on") { + $_POST["is_client"] = 1; } else { - $_POST["is_admin"] = 0; + $_POST["is_client"] = 0; } - if (isset($_POST["is_user"]) && $_POST["is_user"] == "on") { - $_POST["is_user"] = 1; + if (isset($_POST["is_pro"]) && $_POST["is_pro"] == "on") { + $_POST["is_pro"] = 1; } else { - $_POST["is_user"] = 0; + $_POST["is_pro"] = 0; } - if (isset($_POST["is_consultant"]) && $_POST["is_consultant"] == "on") { - $_POST["is_consultant"] = 1; + if (isset($_POST["is_admin"]) && $_POST["is_admin"] == "on") { + $_POST["is_admin"] = 1; } else { - $_POST["is_consultant"] = 0; + $_POST["is_admin"] = 0; } register($_POST["email"], $_POST["password"], - $_POST["is_admin"], - $_POST["is_user"], - $_POST["is_consultant"] + $_POST["is_client"], + $_POST["is_pro"], + $_POST["is_admin"] ); + + // Condition pour une modification des infos } elseif ($_SESSION["src"] == "userInfo" - && isset($_SESSION["loggedIn"], $_SESSION["id"], + && isset($_SESSION["loggedIn"], $_SESSION["userId"], $_POST["lastname"], $_POST["firstname"], $_POST["job"], $_POST["degree"], $_POST["capability"], $_POST["description"], $_POST["phoneNumber"], $_POST["adress"], $_POST["zipCode"], $_POST["city"] ) - && $_SESSION["loggedIn"] == true && $_SESSION["id"] !== "" + && $_SESSION["loggedIn"] == true && $_SESSION["userId"] !== "" && $_POST["lastname"] !== "" && $_POST["firstname"] !== "" ) { modify_user_info($_POST["lastname"], $_POST["firstname"], $_POST["job"], $_POST["degree"], $_POST["capability"], $_POST["description"], $_POST["phoneNumber"], $_POST["adress"], $_POST["zipCode"], - $_POST["city"], $_SESSION["id"] + $_POST["city"], $_SESSION["userId"] ); + + // Condition pour une suppression d'un utilisateur } elseif ($_SESSION["src"] == "delete" && isset($_SESSION["loggedIn"], $_SESSION["isAdmin"], - $_POST["id"] + $_POST["userId"] ) && $_SESSION["loggedIn"] == true && $_SESSION["isAdmin"] == true - && $_POST["id"] !== "" + && $_POST["userId"] !== "" ) { - delete($_POST["id"]); + delete($_POST["userId"]); + + // Condition pour un enregistrement d'une mission } elseif ($_SESSION["src"] == "mission" - && isset($_SESSION["loggedIn"], $_SESSION["isUser"], + && isset($_SESSION["loggedIn"], $_SESSION["isClient"], $_POST["subject"], $_POST["note"], - $_POST["review"], $_POST["consultantId"] + $_POST["review"], $_POST["proId"] ) && $_SESSION["loggedIn"] == true - && $_SESSION["isUser"] == true + && $_SESSION["isClient"] == true && $_POST["subject"] !== "" && $_POST["note"] !== "" && $_POST["review"] !== "" - && $_POST["consultantId"] !== "" + && $_POST["proId"] !== "" ) { register_mission($_POST["subject"], $_POST["note"], $_POST["review"], - $_SESSION["id"], - $_POST["consultantId"] + $_SESSION["userId"], + $_POST["proId"] ); + + // Condition pour une recherche } elseif ($_SESSION["src"] == "index" && (isset($_POST["search"]) && $_POST["search"] !== "") || (isset($_POST["searchInfo"]) && $_POST["searchInfo"] !== "") @@ -133,14 +151,19 @@ if (isset($_SESSION["src"])) { } else { search($_POST["searchInfo"], false); } + + // Condition pour le changement de la langue } elseif (isset($_SESSION["src"], $_POST["langSel"]) && ($_POST["langSel"] == "en" || $_POST["langSel"] == "fr") ) { set_language($_POST["langSel"]); + + // Enfin, si requete invalide } else { http_response_code(404); die(); } + } else { http_response_code(404); die(); diff --git a/index.php b/index.php index 1e732df..ed9b111 100644 --- a/index.php +++ b/index.php @@ -34,15 +34,15 @@ if (isset($_COOKIE["autoLogin"]) && $_SESSION["loggedIn"] == false) { '.PHP_EOL); ?> - + ".$title[basename(__FILE__, ".php")]."".PHP_EOL); ?> - + - + -- cgit v1.2.3