diff options
| author | Debulois <quentin@debulois.fr> | 2022-03-18 13:22:30 +0100 |
|---|---|---|
| committer | Debulois <quentin@debulois.fr> | 2022-03-18 13:22:30 +0100 |
| commit | f66e40340d62b5c694093bc6d10f99337382d12a (patch) | |
| tree | bda05cfabbe465c3b24c0349dcbda33f21045954 | |
| parent | 473e6eb56ca1211be05d2b5fd814710f2ff78d38 (diff) | |
Réécriture du JS & Modifications de la gestion des informations de l'utilisateur et d'autres trucs
| -rw-r--r-- | Database/meth_dbadmin.php | 11 | ||||
| -rw-r--r-- | Database/meth_dbmission.php | 8 | ||||
| -rw-r--r-- | Database/meth_dbsearch.php | 35 | ||||
| -rw-r--r-- | Database/meth_dbuser.php | 76 | ||||
| -rw-r--r-- | Statics/Js/index.js | 33 | ||||
| -rw-r--r-- | Statics/Js/main.js | 59 | ||||
| -rw-r--r-- | Statics/Js/message.js | 26 | ||||
| -rw-r--r-- | Statics/Js/userinfo.js | 106 | ||||
| -rw-r--r-- | Views/Includes/en/message.php | 64 | ||||
| -rw-r--r-- | Views/Includes/en/text.php | 27 | ||||
| -rw-r--r-- | Views/Includes/fr/message.php | 68 | ||||
| -rw-r--r-- | Views/Includes/fr/text.php | 25 | ||||
| -rw-r--r-- | Views/Includes/incl_form_admin.php | 4 | ||||
| -rw-r--r-- | Views/Includes/incl_form_userInfo.php | 73 | ||||
| -rw-r--r-- | Views/Includes/incl_global_message.php | 14 | ||||
| -rw-r--r-- | Views/Includes/incl_table_myMission.php | 2 | ||||
| -rw-r--r-- | Views/message.php | 1 | ||||
| -rw-r--r-- | Wrapper/Functions/func_info.php | 16 | ||||
| -rw-r--r-- | Wrapper/Functions/func_login.php | 3 | ||||
| -rw-r--r-- | Wrapper/wrapper.php | 54 | ||||
| -rw-r--r-- | favicon.ico | bin | 0 -> 41662 bytes | |||
| -rw-r--r-- | index.php | 1 | ||||
| -rw-r--r-- | todo.txt | 2 |
23 files changed, 479 insertions, 229 deletions
diff --git a/Database/meth_dbadmin.php b/Database/meth_dbadmin.php index 32d6077..883063b 100644 --- a/Database/meth_dbadmin.php +++ b/Database/meth_dbadmin.php @@ -15,8 +15,8 @@ class DbAdmin extends DbMain { // https://www.php.net/manual/fr/pdostatement.fetch.php // "PDO::FETCH_ASSOC: retourne un tableau indexé // par le nom de la colonne comme retourné dans le jeu de résultats" - $data = $this->exec_cmd($reqGetAll, array())->fetchAll(PDO::FETCH_ASSOC); - return $data; + $result = $this->exec_cmd($reqGetAll, array())->fetchAll(PDO::FETCH_ASSOC); + return $result; } // https://stackoverflow.com/questions/1361340/how-can-i-do-insert-if-not-exists-in-mysql @@ -44,13 +44,6 @@ class DbAdmin extends DbMain { return 0; } } - - // Récupérer toutes les infos de la table jobCategory - final public function get_all_job_category() { - $reqGetAll = "SELECT * FROM ".$this->tableJobCategory; - $data = $this->exec_cmd($reqGetAll, array())->fetchAll(PDO::FETCH_ASSOC); - return $data; - } // Ajout d'une categorie final public function job_category_register($jobCategoryNameEn, $jobCategoryNameFr) { diff --git a/Database/meth_dbmission.php b/Database/meth_dbmission.php index 006f572..f39f0b6 100644 --- a/Database/meth_dbmission.php +++ b/Database/meth_dbmission.php @@ -42,8 +42,8 @@ class DbMission extends DbMain { 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; + $result = $this->exec_cmd($reqGetAllMission, array($id))->fetchAll(PDO::FETCH_ASSOC); + return $result; } // Compte le nombre de mission d'un consultant par son nom @@ -52,8 +52,8 @@ class DbMission extends DbMain { INNER JOIN ".$this->tableUserInfo." ON ".$this->tableMission.".proId = ".$this->tableUserInfo.".userId WHERE lastname = ?"; - $data = $this->exec_cmd($reqCountMission, array($name))->fetchAll(PDO::FETCH_ASSOC); - return $data; + $result = $this->exec_cmd($reqCountMission, array($name))->fetchAll(PDO::FETCH_ASSOC); + return $result; } }
\ No newline at end of file diff --git a/Database/meth_dbsearch.php b/Database/meth_dbsearch.php index 8a95a67..5104d15 100644 --- a/Database/meth_dbsearch.php +++ b/Database/meth_dbsearch.php @@ -5,7 +5,7 @@ // **************************************************************************** // Infos pour les "join": // https://www.freecodecamp.org/news/sql-joins-tutorial/ -// + // Import de dbmain require_once(dirname( __FILE__ )."/dbmain.php"); // Extension de cette classe avec dbmain @@ -15,8 +15,8 @@ class DbSearch extends DbMain { final public function get_user_account_by_id($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; + $result = $this->exec_cmd($reqSearchUser, array($id))->fetch(PDO::FETCH_ASSOC); + return $result; } // Récupération des infos d'un utilisateur par son id @@ -25,8 +25,8 @@ class DbSearch extends DbMain { capability, description, phoneNumber, adress, zipCode, city FROM ".$this->tableUserInfo." WHERE userId = ?"; - $data = $this->exec_cmd($reqGetUserInfo, array($id))->fetchAll(PDO::FETCH_ASSOC); - return $data; + $result = $this->exec_cmd($reqGetUserInfo, array($id))->fetchAll(PDO::FETCH_ASSOC); + return $result; } // Récupération des infos d'un pro par son nom @@ -36,19 +36,36 @@ class DbSearch extends DbMain { INNER JOIN ".$this->tableUserAccount." 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; + $result = $this->exec_cmd($reqSearchConsultant, array($research))->fetchAll(PDO::FETCH_ASSOC); + return $result; } + // Récupération des emploies associés à un pro + final public function get_pro_job_category($id) { + $reqGetAll = "SELECT jobCategoryId FROM ".$this->tableUserJob." WHERE userId = ?"; + $result = $this->exec_cmd($reqGetAll, array($id))->fetchAll(PDO::FETCH_NUM); + $proJobs = []; + for ($i = 0; $i < count($result); $i++) { + array_push($proJobs, $result[$i][0]); + } + return $proJobs; + } + // Récupération des notes d'un consultant par son nom final public function get_pro_note_by_lastname($name) { $reqCountMission = "SELECT note FROM ".$this->tableMission." INNER JOIN ".$this->tableUserInfo." ON ".$this->tableMission.".proId = ".$this->tableUserInfo.".userId WHERE lastname = ?"; - $data = $this->exec_cmd($reqCountMission, array($name))->fetchAll(PDO::FETCH_ASSOC); - return $data; + $result = $this->exec_cmd($reqCountMission, array($name))->fetchAll(PDO::FETCH_ASSOC); + return $result; } + // Récupérer toutes les infos de la table jobCategory + final public function get_job_category_all() { + $reqGetAll = "SELECT * FROM ".$this->tableJobCategory; + $result = $this->exec_cmd($reqGetAll, array())->fetchAll(PDO::FETCH_ASSOC); + return $result; + } } ?>
\ No newline at end of file diff --git a/Database/meth_dbuser.php b/Database/meth_dbuser.php index c0afb8c..1b62b46 100644 --- a/Database/meth_dbuser.php +++ b/Database/meth_dbuser.php @@ -24,7 +24,8 @@ class DbUser extends DbMain { // Préparation de la requète $reqAddUser = "INSERT INTO ".$this->tableUserAccount." (email, password, inscriptionDate, isClient, isPro, isAdmin) - VALUES (?, ?, ?, ?, ?, ?)"; + VALUES + (?, ?, ?, ?, ?, ?)"; // Execution de la requète $this->exec_cmd($reqAddUser, array($email, @@ -51,9 +52,9 @@ class DbUser extends DbMain { // Chiffrement du mot de passe $crypt = $this->crypt_pass($pass); // Execution de la requète - $data = $this->exec_cmd($reqCheckCredential, array($email))->fetchAll(PDO::FETCH_ASSOC); + $result = $this->exec_cmd($reqCheckCredential, array($email))->fetchAll(PDO::FETCH_ASSOC); // Vérifiaction de correspondance email & pass - foreach ($data as $rows) { + foreach ($result as $rows) { if ($rows["password"] == $crypt) { return $rows["userId"]; } @@ -61,24 +62,59 @@ class DbUser extends DbMain { } // Mise à jour des infos d'un utilisateur - final public function user_infos_update($lastname, $firstname, $job, $degree, - $capability, $description, $phoneNumber, - $adress, $zipCode, $city, $userId) { + final public function user_infos_update($userInfos, $userId, $isPro, $userJobs = null) { // Préparation de la requète pour mise à jour des infos - $reqAddInfo = "REPLACE INTO ".$this->tableUserInfo." - (lastname, firstname, job, degree, capability, - description, phoneNumber, adress, zipCode, city, userId) - VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)"; - // Exécution de la requète - $this->exec_cmd($reqAddInfo, - array($lastname, $firstname, $job, $degree, - $capability, $description, $phoneNumber, - $adress, $zipCode, $city, $userId - ) - ); + // J'ai préféré faire deux requètes distinctes et ne pas utiliser des valeurs + // passées par $POST ($key => $value) pour gérer les noms des colonnes + // car je préfère les passer en "dur" dans mes requêtes (risque d'injection SQL?). + $reqAddInfoClient = "UPDATE ".$this->tableUserInfo." + SET + lastname = ?, firstname = ?, phoneNumber = ?, + adress = ?, zipCode = ?, city = ? + WHERE + userId = ?"; + $reqAddInfoPro = "UPDATE ".$this->tableUserInfo." + SET + lastname = ?, firstname = ?, phoneNumber = ?, + adress = ?, zipCode = ?, city = ?, + degree = ?, capability = ?, description = ? + WHERE + userId = ?"; + $reqAddInfoProJobs = "INSERT INTO ".$this->tableUserJob." + (jobCategoryId, userId) + VALUES + (?, ?)"; + $reqRemoveInfoProJobs = "DELETE FROM ".$this->tableUserJob." + WHERE + jobCategoryId = ? + AND + userId = ?"; + if (!$isPro) { + // Exécution de la requète + // https://www.php.net/manual/fr/function.array-values.php + // Pour passer de dict a list -> array_values() + $args = array_values($userInfos); + array_push($args, $userId); + $this->exec_cmd($reqAddInfoClient, array_push($args, $userId)); + } else { + // TODO: Commenter + // https://stackoverflow.com/questions/15986235/how-to-use-json-stringify-and-json-decode-properly + $selectedJobs = json_decode(html_entity_decode($userInfos["jobs"])); + unset($userInfos["jobs"]); + $jobsAdded = array_values(array_diff($selectedJobs, $userJobs)); + $jobsRemoved = array_values(array_diff($userJobs, $selectedJobs)); + $args = array_values($userInfos); + array_push($args, $userId); + $this->exec_cmd($reqAddInfoPro, $args); + for ($i = 0; $i < count($jobsAdded); $i++) { + $this->exec_cmd($reqAddInfoProJobs, array($jobsAdded[$i], $userId)); + } + for ($i = 0; $i < count($jobsRemoved); $i++) { + $this->exec_cmd($reqRemoveInfoProJobs, array($jobsRemoved[$i], $userId)); + } + } } - // **************************************************************************** // Gestion du token-autologin // **************************************************************************** @@ -89,9 +125,9 @@ class DbUser extends DbMain { $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); + $result = $this->exec_cmd($reqCheckToken, array($email))->fetchAll(PDO::FETCH_ASSOC); // Vérifiaction de correspondance email & jeton d'auto-connection - foreach ($data as $rows) { + foreach ($result as $rows) { if ($rows["tokenAutoLogin"] == $token) { return $rows["userId"]; } diff --git a/Statics/Js/index.js b/Statics/Js/index.js new file mode 100644 index 0000000..1c89567 --- /dev/null +++ b/Statics/Js/index.js @@ -0,0 +1,33 @@ + +// **************************************************************************** +// INDEX +// **************************************************************************** + +// Slideshow +function start_slideshow() { + let imageNumber = 1; + let images = [ + "/Medias/Images/slide0.jpg", + "/Medias/Images/slide1.jpg", + "/Medias/Images/slide2.jpg" + ]; + + setInterval(() => { + // Changement del'image de fond de de la div + document.getElementById("slideshow").style.backgroundImage = `url("${images[imageNumber]}")`; + // Untoggle les précedents + // Utilisation de ternary, utilisation: condition ? Sivrai : Sifaux + document.getElementById(`textSlide${imageNumber !== 0 ? imageNumber - 1 : images.length - 1}`).classList.toggle("show"); + document.getElementById(`indicatorSlide${imageNumber !== 0 ? imageNumber - 1 : images.length - 1}`).classList.toggle("slideSelected"); + // Toggle le nouveau texte & selecteur + document.getElementById(`textSlide${imageNumber}`).classList.toggle("show"); + document.getElementById(`indicatorSlide${imageNumber}`).classList.toggle("slideSelected") + // +1 sauf si fin + if(imageNumber < images.length - 1) { + imageNumber++; + } else { + imageNumber = 0; + } + } + ,5000); +} diff --git a/Statics/Js/main.js b/Statics/Js/main.js index 120bfb3..b4d0894 100644 --- a/Statics/Js/main.js +++ b/Statics/Js/main.js @@ -1,61 +1,12 @@ -// +// **************************************************************************** +// Main +// **************************************************************************** + // Site web utilisés pour JS: // https://www.w3schools.com/js/default.asp -// https://stackoverflow.com/ -// +// https://stackoverflow.com/ // Changement de langue document.getElementById("langSel").addEventListener("change", () => { document.getElementById("langForm").submit(); }); - -// Redirection -function redirect(page) { - window.location.href = `${page}.php`; -} - -// Timer pour message -function start_timer() { - // var -> global, let -> local{} - let seconds = 3; - let text = document.getElementById("redirect").innerHTML; - setInterval(() => { - if (seconds > 0) { - document.getElementById("redirect").innerHTML = `${text} ${seconds}.`; - seconds --; - } else { - document.getElementById("redirect").innerHTML = `${text} ${seconds}.`; - redirect("/index"); - } - }, - 1000); -} - -// Slideshow -function start_slideshow() { - let imageNumber = 1; - let images = [ - "/Medias/Images/slide0.jpg", - "/Medias/Images/slide1.jpg", - "/Medias/Images/slide2.jpg" - ]; - - setInterval(() => { - // Changement del'image de fond de de la div - document.getElementById("slideshow").style.backgroundImage = `url("${images[imageNumber]}")`; - // Untoggle les précedents - // Utilisation de ternary, utilisation: condition ? Sivrai : Sifaux - document.getElementById(`textSlide${imageNumber !== 0 ? imageNumber - 1 : images.length - 1}`).classList.toggle("show"); - document.getElementById(`indicatorSlide${imageNumber !== 0 ? imageNumber - 1 : images.length - 1}`).classList.toggle("slideSelected"); - // Toggle le nouveau texte & selecteur - document.getElementById(`textSlide${imageNumber}`).classList.toggle("show"); - document.getElementById(`indicatorSlide${imageNumber}`).classList.toggle("slideSelected") - // +1 sauf si fin - if(imageNumber < images.length - 1) { - imageNumber++; - } else { - imageNumber = 0; - } - } - ,5000); -} diff --git a/Statics/Js/message.js b/Statics/Js/message.js new file mode 100644 index 0000000..55eff48 --- /dev/null +++ b/Statics/Js/message.js @@ -0,0 +1,26 @@ + +// **************************************************************************** +// MESSAGES +// **************************************************************************** + +// Redirection +function redirect(page) { + window.location.href = `/${page}.php`; +} + +// Timer pour message +function start_timer(page) { + // var -> global, let -> local{} + let seconds = 1; + let text = document.getElementById("redirect").innerHTML; + setInterval(() => { + if (seconds > 0) { + document.getElementById("redirect").innerHTML = `${text} ${seconds}.`; + seconds --; + } else { + document.getElementById("redirect").innerHTML = `${text} ${seconds}.`; + redirect(page); + } + }, + 1000); +} diff --git a/Statics/Js/userinfo.js b/Statics/Js/userinfo.js new file mode 100644 index 0000000..6b4c1d9 --- /dev/null +++ b/Statics/Js/userinfo.js @@ -0,0 +1,106 @@ + +// **************************************************************************** +// USERINFO +// **************************************************************************** +// Mes sources pour créer cette partie: +// https://stackoverflow.com/questions/1085801/get-selected-value-in-dropdown-list-using-javascript +// https://stackoverflow.com/questions/47951287/dynamically-add-li-to-ul-javascript +// https://developer.mozilla.org/en-US/docs/Web/API/Document/createTextNode +// https://www.encodedna.com/javascript/how-to-get-all-li-elements-in-ul-using-javascript.htm +// https://www.geeksforgeeks.org/javascript-convert-an-array-to-json/ +// https://stackoverflow.com/questions/17785592/difference-between-json-stringify-and-json-parse +// https://www.w3docs.com/snippets/javascript/how-to-remove-an-element-from-an-array-in-javascript.html +// On passe par du JSON pour passer la liste des emplois du pro + +// **************************************************************************** +// GLOBAL +// **************************************************************************** +var payload = []; +var dictJobs = {}; + +// **************************************************************************** +// FONCTIONS ANNEXES +// **************************************************************************** +// Récupération des possibles emplois et stockage dans une variable +function init_dict_jobs() { + // Récupération des emplois disponibles + let selJob = document.getElementById("jobsSel"); + + // Pour chaque emploi disponible + for (i = 0; i < selJob.length; i ++) { + if (selJob[i].value !== "") { + // Création d'un dictionnaire -> "Nom Emploi": "ID" + dictJobs[selJob[i].text] = selJob[i].value; + } + } +} + +// Création et ajout d'un bouton "supprimmer" +function add_bouton_rm(li, jobsId) { + // Création et configuration du bouton + let buttonDel = document.createElement("button"); + buttonDel.type = "button"; + buttonDel.innerHTML = "<i class=\"fas fa-ban\"></i>"; + buttonDel.onclick = () => {remove(li, jobsId);}; + + // Ajout du boutton au "li" passé en argument + li.appendChild(buttonDel); +} + +// **************************************************************************** +// FONCTIONS PRINCIPALES +// **************************************************************************** +// Initiation +function init() { + // Peuplement du dictionnaire des emploies "Nom Emploi": "ID" + init_dict_jobs(); + + // Récupération des emplois déja présent + let jobs = document.getElementById("jobsList").getElementsByTagName("li"); + + // Pour chaque emploi déja enregistré + for (i = 0; i < jobs.length; i ++) { + // Ajout de chaques choix à la liste final "payload" + payload.push(dictJobs[jobs[i].innerHTML]); + // Ajout d'un id et d'un bouton remove à chaque "li". + jobs[i].id = "jobId_" + dictJobs[jobs[i].innerHTML]; + add_bouton_rm(jobs[i], dictJobs[jobs[i].innerHTML]); + } + + // Transformation de la liste des emplois choisis en JSON + // et inscription de ce dernier dans la "value" de l'input "jobs". + document.getElementById("jobs").value = JSON.stringify(payload); +} + +// Ajout d'un emploi +function add() { + // Récupération du nom du choix dans le "select" des emplois + let jobName = document.getElementById("jobsSel").options[jobsSel.selectedIndex].text; + + // Si l'emploi n'est pas deja dans "payload" + // et si il fait bien partie du dictionnaire de tous les emplois + if (jobName in dictJobs && !payload.includes(dictJobs[jobName])) { + // Ajout à payload + payload.push(dictJobs[jobName]); + // Création, configuration et ajout du nouveau "li" + let li = document.createElement("li"); + li.id = "jobId_" + dictJobs[jobName]; + li.appendChild(document.createTextNode(jobName)); + add_bouton_rm(li, dictJobs[jobName]); + document.getElementById("jobsList").appendChild(li); + // Transformation de la liste des emplois choisis en JSON + // et inscription de ce dernier dans la "value" de l'input "jobs". + document.getElementById("jobs").value = JSON.stringify(payload); + } +} + +// Suppression d'un emploi +function remove(li, jobsId) { + // Suppression de l'emploi dans "payload" + payload.splice(payload.indexOf(jobsId), 1); + // Suppression du "li" de l'emploi + document.getElementById("jobsList").removeChild(li); + // Transformation de la liste des emplois choisis en JSON + // et inscription de ce dernier dans la "value" de l'input "jobs". + document.getElementById("jobs").value = JSON.stringify(payload); +} diff --git a/Views/Includes/en/message.php b/Views/Includes/en/message.php index 6e5955f..50417a3 100644 --- a/Views/Includes/en/message.php +++ b/Views/Includes/en/message.php @@ -11,89 +11,105 @@ $message = [ ["success" => true, "title" => "Delete an user.", "info" => "User deleted !", - "timer" => true], + "timer" => true, + "toSrc" => true], // 1 Message échec ["success" => false, "title" => "Delete an user.", "info" => "No user was deleted.", - "timer" => true], + "timer" => true, + "toSrc" => true], // Informations de l'utilisateur // 2 Message réussitee ["success" => true, - "title" => "Update user information.", - "info" => "User informations updated !", - "timer" => true], + "title" => "Update user information.", + "info" => "User informations updated !", + "timer" => true, + "toSrc" => true], // Login sans cookie // 3 Message réussitee ["success" => true, - "title" => "Login.", - "info" => "Successfully logged in!", - "timer" => true], + "title" => "Login.", + "info" => "Successfully logged in!", + "timer" => true, + "toSrc" => false], // 4 Message échec ["success" => false, "title" => "Login.", "info" => "Error bad credentials.", - "timer" => true], + "timer" => true, + "toSrc" => true], // Login avec cookie // 5 Message réussitee ["success" => true, - "title" => "", - "info" => "", - "timer" => false], + "title" => "", + "info" => "", + "timer" => false, + "toSrc" => false], // 6 Message échec ["success" => false, "title" => "Login cookie.", "info" => "Error with the cookie auto-login.", - "timer" => true], + "timer" => true, + "toSrc" => false], // Log out // 7 Message global ["success" => true, - "title" => "Log out.", - "info" => "Successefuly logged out!", - "timer" => true], + "title" => "Log out.", + "info" => "Successefuly logged out!", + "timer" => true, + "toSrc" => false], // Ajout mission // 8 Message réussitee ["success" => true, "title" => "Register a mission.", "info" => "Mission registered !", - "timer" => true], + "timer" => true, + "toSrc" => true], // 9 Message échec ["success" => false, "title" => "Register a mission.", "info" => "Error, probably wrong consultant ID.", - "timer" => true], + "timer" => true, + "toSrc" => true], // Ajout utilisateur // 10 Message réussitee ["success" => true, "title" => "Register an user.", "info" => "User successfully registered !", - "timer" => true], + "timer" => true, + "toSrc" => true], // 11 Message échec ["success" => false, "title" => "Register an user.", "info" => "Error, user not registered.", - "timer" => true], + "timer" => true, + "toSrc" => true], // Ajout categorie // 12 Message réussitee ["success" => true, "title" => "Add a job category.", "info" => "Category added !", - "timer" => true], + "timer" => true, + "toSrc" => true], // 13 Message échec ["success" => false, "title" => "Add a job category.", "info" => "Category not added.", - "timer" => true], + "timer" => true, + "toSrc" => true], // Suppression categorie // 14 Message réussitee ["success" => true, "title" => "Deletion of a job category.", "info" => "Category deleted !", - "timer" => true], + "timer" => true, + "toSrc" => true], // 15 Message échec ["success" => false, "title" => "Deletion of a job category.", "info" => "Category not deleted !", - "timer" => true], + "timer" => true, + "toSrc" => true], ]; ?>
\ No newline at end of file diff --git a/Views/Includes/en/text.php b/Views/Includes/en/text.php index 1111e35..73aa268 100644 --- a/Views/Includes/en/text.php +++ b/Views/Includes/en/text.php @@ -18,18 +18,19 @@ $text = [ "main" => "Made by Debulois Quentin for my professional folder.<br>December 2021, all rights reserved.", ], "incl_form_userInfo" => [ - "h2" => "Informations about the user.", - "lastname" => "Last name", - "firstname" => "First name", - "job" => "Job", - "degree" => "Degree", - "capability" => "Capacities", - "description" => "Descriptions", - "phoneNumber" => "Phone number", - "adress" => "Adress", - "zipCode" => "Zip code", - "city" => "City", - "submit" => "Modify" + "h2" => "Informations about the user.", + "lastname" => "Last name", + "firstname" => "First name", + "phoneNumber" => "Phone number", + "adress" => "Adress", + "zipCode" => "Zip code", + "city" => "City", + "jobsSel" => "Jobs", + "jobsAdd" => "Add", + "degree" => "Degree", + "capability" => "Capacities", + "description" => "Descriptions", + "submit" => "Modify" ], "incl_form_login" => [ "h2" => "Login", @@ -61,7 +62,7 @@ $text = [ "lang" => "Language", "btnLang" => "Select" ], - "incl_form register" => [ + "incl_form_register" => [ "h2" => "Form to sign-in", "email" => "Email", "password" => "Password", diff --git a/Views/Includes/fr/message.php b/Views/Includes/fr/message.php index 408bd82..dbf66f9 100644 --- a/Views/Includes/fr/message.php +++ b/Views/Includes/fr/message.php @@ -9,91 +9,107 @@ $message = [ // Delete // 0 Message réussitee ["success" => true, - "title" => "Supprimer un utilisateur.", - "info" => "Utilisateur Supprimé !", - "timer" => true], + "title" => "Supprimer un utilisateur.", + "info" => "Utilisateur Supprimé !", + "timer" => true, + "toSrc" => true], // 1 Message échec ["success" => false, "title" => "Supprimer un utilisateur.", "info" => "Aucun utilisateur supprimé.", - "timer" => true], + "timer" => true, + "toSrc" => true], // Informations de l'utilisateur // 2 Message réussitee ["success" => true, - "title" => "Modification des infos de l'utilisateur.", - "info" => "Informations mises à jour !", - "timer" => true], + "title" => "Modification des infos de l'utilisateur.", + "info" => "Informations mises à jour !", + "timer" => true, + "toSrc" => true], // Login sans cookie // 3 Message réussitee ["success" => true, - "title" => "Connection.", - "info" => "Connection réussie !", - "timer" => true], + "title" => "Connection.", + "info" => "Connection réussie !", + "timer" => true, + "toSrc" => false], // 4 Message échec ["success" => false, "title" => "Connection.", "info" => "Erreur, mauvais email / mot de passe.", - "timer" => true], + "timer" => true, + "toSrc" => true], // Login avec cookie // 5 Message réussitee ["success" => true, - "title" => "", - "info" => "", - "timer" => false], + "title" => "", + "info" => "", + "timer" => false, + "toSrc" => false], // 6 Message échec ["success" => false, "title" => "Connection avec cookie.", "info" => "Erreur lors de la connection automatique.", - "timer" => true], + "timer" => true, + "toSrc" => false], // Log out // 7 Message global ["success" => true, - "title" => "Déconnection.", - "info" => "Vous êtes déconnecté!", - "timer" => true], + "title" => "Déconnection.", + "info" => "Vous êtes déconnecté!", + "timer" => true, + "toSrc" => false], // Ajout mission // 8 Message réussitee ["success" => true, "title" => "Enregistrement d'une mission.", "info" => "Mission enregistrée !", - "timer" => true], + "timer" => true, + "toSrc" => true], // 9 Message échec ["success" => false, "title" => "Enregistrement d'une mission.", "info" => "Erreur, l'ID du consultant est probablement faux.", - "timer" => true], + "timer" => true, + "toSrc" => true], // Ajout utilisateur // 10 Message réussitee ["success" => true, "title" => "Inscription", "info" => "Utilisateur inscrit !", - "timer" => true], + "timer" => true, + "toSrc" => true], // 11 Message échec ["success" => false, "title" => "Inscription.", "info" => "Erreur, utilisateur non enregistré.", - "timer" => true], + "timer" => true, + "toSrc" => true], // Ajout categorie // 12 Message réussitee ["success" => true, "title" => "Ajout d'une categorie.", "info" => "Categorie ajoutée !", - "timer" => true], + "timer" => true, + "toSrc" => true], // 13 Message échec ["success" => false, "title" => "Ajout d'une categorie.", "info" => "Categorie non ajoutée.", - "timer" => true], + "timer" => true, + "toSrc" => true], // Suppression categorie // 14 Message réussitee ["success" => true, "title" => "Suppression d'une categorie.", "info" => "Categorie supprimée !", - "timer" => true], + "timer" => true, + "toSrc" => true], // 15 Message échec ["success" => false, "title" => "Suppression d'une categorie.", "info" => "Categorie non supprimée.", - "timer" => true], + "timer" => true, + "toSrc" => true], ]; ?>
\ No newline at end of file diff --git a/Views/Includes/fr/text.php b/Views/Includes/fr/text.php index 3b7b989..dd6d655 100644 --- a/Views/Includes/fr/text.php +++ b/Views/Includes/fr/text.php @@ -18,18 +18,19 @@ $text = [ "main" => "Réalisé par Debulois Quentin pour mon dossier professionel.<br>Decembre 2021, tous droits réservés.", ], "incl_form_userInfo" => [ - "h2" => "Informations sur l'utilisateur.", - "lastname" => "Nom", - "firstname" => "Prénom", - "job" => "Emploi", - "degree" => "Diplômes", - "capability" => "Capacités", - "description" => "Description", - "phoneNumber" => "Numéro de télephone", - "adress" => "Adresse", - "zipCode" => "Code postal", - "city" => "Ville", - "submit" => "Modifier" + "h2" => "Informations sur l'utilisateur.", + "lastname" => "Nom", + "firstname" => "Prénom", + "phoneNumber" => "Numéro de télephone", + "adress" => "Adresse", + "zipCode" => "Code postal", + "city" => "Ville", + "jobsSel" => "Emplois", + "jobsAdd" => "Ajouter", + "degree" => "Diplômes", + "capability" => "Capacités", + "description" => "Description", + "submit" => "Modifier" ], "incl_form_login" => [ "h2" => "Identification", diff --git a/Views/Includes/incl_form_admin.php b/Views/Includes/incl_form_admin.php index ef34daa..7f7963d 100644 --- a/Views/Includes/incl_form_admin.php +++ b/Views/Includes/incl_form_admin.php @@ -9,9 +9,11 @@ require_once(dirname(__FILE__)."/".$_SESSION["lang"]."/text.php"); require_once(dirname( __FILE__ )."/".$_SESSION["lang"]."/table.php"); // Import des metodes de la base de donnée pour les recherches. require_once(dirname( __FILE__ )."/../../Database/meth_dbadmin.php"); +require_once(dirname( __FILE__ )."/../../Database/meth_dbsearch.php"); // Instanciation de la bdd avec les méthodes de recherche. $dbadmin = new DbAdmin; +$dbsearch = new DbSearch; // Form pour ajout d'une catégorie d'emploi echo(' <!-- Separateur --> <div class="separator"></div> @@ -33,7 +35,7 @@ echo(' <!-- Separateur --> <select name="delCategoryId" required> <option value="" selected>'.$text[basename(__FILE__, ".php")]["selJobDel"].'</option>'.PHP_EOL); -$result = $dbadmin->get_all_job_category(); +$result = $dbsearch->get_job_category_all(); for ($i = 0; $i < count($result); $i++){ echo(' <option value="'.$result[$i]["jobCategoryId"].'">'.$result[$i]["jobCategoryName".ucwords($_SESSION["lang"])].'</option>'.PHP_EOL); } diff --git a/Views/Includes/incl_form_userInfo.php b/Views/Includes/incl_form_userInfo.php index 760838d..80d61ad 100644 --- a/Views/Includes/incl_form_userInfo.php +++ b/Views/Includes/incl_form_userInfo.php @@ -14,14 +14,13 @@ if (!$info) { $info = [ ["lastname" => "", "firstname" => "", - "job" => "", - "degree" => "", - "capability" => "", - "description" => "", "phoneNumber" => "", "adress" => "", "zipCode" => "", - "city" => ""] + "city" => "", + "degree" => "", + "capability" => "", + "description" => ""] ]; } echo(' <!-- Separateur --> @@ -39,22 +38,6 @@ echo(' <!-- Separateur --> <input type="text" name="firstname" id="firstname" maxlength="128" placeholder="'.$text[basename(__FILE__, ".php")]["firstname"].'" value="'.$info[0]["firstname"].'" required> </label> <label> - <i class="fas fa-wrench"></i> - <input type="text" name="job" id="job" maxlength="128" placeholder="'.$text[basename(__FILE__, ".php")]["job"].'" value="'.$info[0]["job"].'"> - </label> - <label> - <i class="fas fa-user-graduate"></i> - <input type="text" name="degree" id="degree" maxlength="128" placeholder="'.$text[basename(__FILE__, ".php")]["degree"].'"value="'.$info[0]["degree"].'"> - </label> - <label> - <i class="fas fa-cogs"></i> - <textarea name="capability" id="capability" placeholder="'.$text[basename(__FILE__, ".php")]["capability"].'" cols="30" rows="2" >'.$info[0]["capability"].'</textarea> - </label> - <label> - <i class="fas fa-file-signature"></i> - <textarea name="description" id="description" placeholder="'.$text[basename(__FILE__, ".php")]["description"].'" cols="30" rows="2" >'.$info[0]["description"].'</textarea> - </label> - <label> <i class="fas fa-mobile-alt"></i> <input type="text" name="phoneNumber" id="phoneNumber" maxlength="10" placeholder="'.$text[basename(__FILE__, ".php")]["phoneNumber"].'" value="'.$info[0]["phoneNumber"].'" required> </label> @@ -69,8 +52,52 @@ echo(' <!-- Separateur --> <label> <i class="fas fa-city"></i> <input type="text" name="city" id="city" maxlength="128" placeholder="'.$text[basename(__FILE__, ".php")]["city"].'" value="'.$info[0]["city"].'" required> + </label>'.PHP_EOL); +// TODO : Commenter +if ($_SESSION["isPro"]) { + $allJobs = $dbsearch->get_job_category_all(); + $proJobs = $dbsearch->get_pro_job_category($_SESSION["userId"]); + $dictJobs = []; + for ($i = 0; $i < count($allJobs); $i++) { + $dictJobs[$allJobs[$i]["jobCategoryId"]] = $allJobs[$i]["jobCategoryName".ucwords($_SESSION["lang"])]; + } + echo(' <label> + <i class="fas fa-wrench"></i> + Add a job:'.PHP_EOL); + // Select + echo(' <select id="jobsSel"> + <option value="" selected>'.$text[basename(__FILE__, ".php")]["jobsSel"].'</option>'.PHP_EOL); + foreach ($dictJobs as $jobId => $jobName) { + echo(' <option value="'.$jobId.'">'.$jobName.'</option>'.PHP_EOL); + } + echo(' </select> + <button type="button" onclick="add()">'.$text[basename(__FILE__, ".php")]["jobsAdd"].'</button> + </label>'.PHP_EOL); + // Mes jobs + echo(' Mes jobs + <ul id="jobsList">'.PHP_EOL); + for ($i = 0; $i < count($proJobs); $i++) { + echo(' <li>'.$dictJobs[$proJobs[$i]].'</li>'.PHP_EOL); + } + echo(' </ul> + <input type="hidden" name="jobs" id="jobs" value="">'.PHP_EOL); + // Keep going + echo(' <label> + <i class="fas fa-user-graduate"></i> + <input type="text" name="degree" id="degree" maxlength="128" placeholder="'.$text[basename(__FILE__, ".php")]["degree"].'"value="'.$info[0]["degree"].'" required> </label> - <input type="submit" value="'.$text[basename(__FILE__, ".php")]["submit"].'"> + <label> + <i class="fas fa-cogs"></i> + <textarea name="capability" id="capability" placeholder="'.$text[basename(__FILE__, ".php")]["capability"].'" cols="30" rows="2" required>'.$info[0]["capability"].'</textarea> + </label> + <label> + <i class="fas fa-file-signature"></i> + <textarea name="description" id="description" placeholder="'.$text[basename(__FILE__, ".php")]["description"].'" cols="30" rows="2" required>'.$info[0]["description"].'</textarea> + </label>'.PHP_EOL); +} +echo(' <input type="submit" value="'.$text[basename(__FILE__, ".php")]["submit"].'"> </form> - </div>') + </div> + <script src="/Statics/Js/userinfo.js"></script> + <script>init()</script>') ?>
\ No newline at end of file diff --git a/Views/Includes/incl_global_message.php b/Views/Includes/incl_global_message.php index b4b653d..b15d00e 100644 --- a/Views/Includes/incl_global_message.php +++ b/Views/Includes/incl_global_message.php @@ -14,9 +14,19 @@ if ($message[$_SESSION["messageNumber"]]["success"]) { echo("<p>".$message[$_SESSION["messageNumber"]]["info"]."</p>"); echo('<p id="redirect" class="info">'.$redirect.'</p></div>'); echo('<script src="/Statics/Js/main.js"></script>'); +echo('<script src="/Statics/Js/message.js"></script>'); +if ($message[$_SESSION["messageNumber"]]["toSrc"]) { + if ($_SESSION["src"] !== "index") { + $dest = "Views/".$_SESSION["src"]; + } else { + $dest = "index"; + } +} else { + $dest = "index"; +} if ($message[$_SESSION["messageNumber"]]["timer"]) { - echo('<script>start_timer();</script>'); + echo('<script>start_timer("'.$dest.'");</script>'); } else { - echo('<script>redirect("/index")</script>'); + echo('<script>redirect("'.$dest.'")</script>'); } ?>
\ No newline at end of file diff --git a/Views/Includes/incl_table_myMission.php b/Views/Includes/incl_table_myMission.php index 35e69d4..b4c7e04 100644 --- a/Views/Includes/incl_table_myMission.php +++ b/Views/Includes/incl_table_myMission.php @@ -7,7 +7,7 @@ require_once(dirname(__FILE__)."/".$_SESSION["lang"]."/text.php"); // Import des en-tête des tables. require_once(dirname(__FILE__)."/".$_SESSION["lang"]."/table.php"); // Import des metodes de la base de donnée pour les recherches. -require_once(dirname(__FILE__)."/../../Database/meth_dbsearch.php"); +require_once(dirname(__FILE__)."/../../Database/meth_dbmission.php"); // Instanciation de la bdd avec les méthodes de recherche. $dbmission = new DbMission; // Recherches des missions avec l'id de l'utilisateur actuellement connecté. diff --git a/Views/message.php b/Views/message.php index 489d01f..f2a93a5 100644 --- a/Views/message.php +++ b/Views/message.php @@ -24,6 +24,7 @@ if (!isset($_SESSION["messageNumber"])) { <?php require_once(dirname( __FILE__ )."/Includes/incl_global_navbar.php"); ?> <?php require_once(dirname( __FILE__ )."/Includes/incl_global_message.php"); ?> <?php require_once(dirname( __FILE__ )."/Includes/incl_global_footer.php"); ?> + <script src="/Statics/Js/main.js"></script> </body> </html> <?php unset($_SESSION["messageNumber"]); ?> diff --git a/Wrapper/Functions/func_info.php b/Wrapper/Functions/func_info.php index 97c12c5..b5013e2 100644 --- a/Wrapper/Functions/func_info.php +++ b/Wrapper/Functions/func_info.php @@ -2,13 +2,15 @@ // **************************************************************************** // Description: Fonction de modifications des informations de l'utilisateur par ID // **************************************************************************** -function modify_user_info($lastname, $firstname, $job, $degree, - $capabilty, $description, $phoneNumber, - $adress, $zipCode, $city, $userId) { - $dbuser = new DbUser; - $dbuser->user_infos_update($lastname, $firstname, $job, $degree, - $capabilty, $description, $phoneNumber, - $adress, $zipCode, $city, $userId); +function modify_user_info($userInfos, $userId, $isPro) { + $dbuser = new DbUser; + $dbsearch = new DbSearch; + if ($isPro) { + $userJobs = $dbsearch->get_pro_job_category($userId); + $dbuser->user_infos_update($userInfos, $userId, $isPro, $userJobs); + } else { + $dbuser->user_infos_update($userInfos, $userId, $isPro); + } // Redirection vers message avec l'index du message à afficher. $messageNumber = 2; $_SESSION["messageNumber"] = $messageNumber; diff --git a/Wrapper/Functions/func_login.php b/Wrapper/Functions/func_login.php index 39cf931..488f592 100644 --- a/Wrapper/Functions/func_login.php +++ b/Wrapper/Functions/func_login.php @@ -4,8 +4,7 @@ // ou par un cookie dans lequel est stocké l'email et une chaine // de caractère aléatoire valable pour une seule tentative. // **************************************************************************** -function login($cookie, $email = null, $pass = null, $remember = false) { - print_r($email, $pass); +function login($cookie, $email = null, $pass = null, $remember = 0) { // 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/wrapper.php b/Wrapper/wrapper.php index 62077c2..13e0713 100644 --- a/Wrapper/wrapper.php +++ b/Wrapper/wrapper.php @@ -44,16 +44,16 @@ if (isset($_SESSION["src"])) { && $_POST["password"] !== "" ) { if (isset($_POST["rememberMe"]) && $_POST["rememberMe"] == "on") { - $_POST["rememberMe"] = true; + $_POST["rememberMe"] = 1; } else { - $_POST["rememberMe"] = false; + $_POST["rememberMe"] = 0; } login(0, $_POST["email"], $_POST["password"], $_POST["rememberMe"]); // Condition pour une connection auto } elseif ($_SESSION["src"] == "autoLogin" && isset($_COOKIE["autoLogin"]) - && $_SESSION["loggedIn"] == false + && $_SESSION["loggedIn"] ) { // Si connection par cookie, on le décode avant de le passer à la fonction. login(json_decode(base64_decode($_COOKIE["autoLogin"]))); @@ -61,7 +61,7 @@ if (isset($_SESSION["src"])) { // Condition pour une déconnection } elseif ($_SESSION["src"] == "logout" && isset($_SESSION["loggedIn"]) - && $_SESSION["loggedIn"] == true + && $_SESSION["loggedIn"] ) { logout(); @@ -96,28 +96,39 @@ if (isset($_SESSION["src"])) { ); // Condition pour une modification des infos - } elseif ($_SESSION["src"] == "userInfo" - && 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["userId"] !== "" - && $_POST["lastname"] !== "" && $_POST["firstname"] !== "" + } elseif ($_SESSION["src"] == "userInfo" + // Vérification des données si client + && (isset($_SESSION["loggedIn"], $_SESSION["userId"], $_SESSION["isClient"], + $_POST["lastname"], $_POST["firstname"], $_POST["phoneNumber"], + $_POST["adress"], $_POST["zipCode"], $_POST["city"] + ) + && $_SESSION["isClient"] + && $_POST["lastname"] !== "" && $_POST["firstname"] !== "" + && $_POST["phoneNumber"] !== "" && $_POST["adress"] !== "" + && $_POST["zipCode"] !== "" && $_POST["city"] !== "" + // Ou si pro + || isset($_SESSION["loggedIn"], $_SESSION["userId"], $_SESSION["isPro"], + $_POST["lastname"], $_POST["firstname"], $_POST["phoneNumber"], + $_POST["adress"], $_POST["zipCode"], $_POST["city"], $_POST["jobs"], + $_POST["degree"], $_POST["capability"], $_POST["description"] + ) + && $_SESSION["isPro"] + && $_POST["lastname"] !== "" && $_POST["firstname"] !== "" + && $_POST["phoneNumber"] !== "" && $_POST["adress"] !== "" + && $_POST["zipCode"] !== "" && $_POST["city"] !== "" + && $_POST["degree"] !== "" && $_POST["capability"] !== "" + && $_POST["description"] !== "" + ) ) { - modify_user_info($_POST["lastname"], $_POST["firstname"], $_POST["job"], - $_POST["degree"], $_POST["capability"], $_POST["description"], - $_POST["phoneNumber"], $_POST["adress"], $_POST["zipCode"], - $_POST["city"], $_SESSION["userId"] - ); + modify_user_info($_POST, $_SESSION["userId"], $_SESSION["isPro"]); // Condition pour l'administration du site } elseif ($_SESSION["src"] == "admin" && isset($_SESSION["loggedIn"], $_SESSION["isAdmin"], ) - && $_SESSION["loggedIn"] == true - && $_SESSION["isAdmin"] == true + && $_SESSION["loggedIn"] + && $_SESSION["isAdmin"] && (isset($_POST["userId"]) || isset($_POST["addCategoryNameEn"], $_POST["addCategoryNameFr"] @@ -125,6 +136,7 @@ if (isset($_SESSION["src"])) { || isset($_POST["delCategoryId"]) ) ) { + // Suppression d'un utilisateur if (isset($_POST["userId"]) && $_POST["userId"] !== "" ) { @@ -149,8 +161,8 @@ if (isset($_SESSION["src"])) { $_POST["subject"], $_POST["note"], $_POST["review"], $_POST["proId"] ) - && $_SESSION["loggedIn"] == true - && $_SESSION["isClient"] == true + && $_SESSION["loggedIn"] + && $_SESSION["isClient"] && $_POST["subject"] !== "" && $_POST["note"] !== "" && $_POST["review"] !== "" diff --git a/favicon.ico b/favicon.ico Binary files differnew file mode 100644 index 0000000..7c550a3 --- /dev/null +++ b/favicon.ico @@ -44,6 +44,7 @@ if (isset($_COOKIE["autoLogin"]) && $_SESSION["loggedIn"] == false) { <?php require_once("./Views/Includes/incl_index_search.php");?> <?php require_once("./Views/Includes/incl_global_footer.php"); ?> <script src="/Statics/Js/main.js"></script> + <script src="/Statics/Js/index.js"></script> <!-- Activation du slider --> <script>start_slideshow();</script> </body> @@ -7,7 +7,7 @@ - Revoir front Client & Pro - Requète de mission pour un pro sur le moteur de recherche. (3) - Page mes missions, passés, en cours, terminées. (3) - - Revoir mes infos pour adapter aux clients & pros. (2) + - Revoir mes infos pour adapter aux clients & pros. (DONE) - Revoir front Admin - Doit pouvoir supprimer une mission (4) |
