From b637d625216e50602d0bde8a544c281ca00af5fa Mon Sep 17 00:00:00 2001 From: Debulois Date: Thu, 31 Mar 2022 14:56:45 +0200 Subject: Grosse maj encore avec ajout de fonctionnalités dans l'admin principalement et grosse remise en page / rennomage et preparation pour retravailler le CSS MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Core/Functions/func_admin.php | 81 ++++++++++ Core/Functions/func_info.php | 41 +++++ Core/Functions/func_language.php | 22 +++ Core/Functions/func_login.php | 78 ++++++++++ Core/Functions/func_logout.php | 40 +++++ Core/Functions/func_mission.php | 54 +++++++ Core/Functions/func_myMission.php | 58 +++++++ Core/Functions/func_register.php | 30 ++++ Core/Functions/func_sanitize.php | 17 +++ Core/Functions/func_search.php | 81 ++++++++++ Core/wrapper.php | 310 ++++++++++++++++++++++++++++++++++++++ 11 files changed, 812 insertions(+) create mode 100644 Core/Functions/func_admin.php create mode 100644 Core/Functions/func_info.php create mode 100644 Core/Functions/func_language.php create mode 100644 Core/Functions/func_login.php create mode 100644 Core/Functions/func_logout.php create mode 100644 Core/Functions/func_mission.php create mode 100644 Core/Functions/func_myMission.php create mode 100644 Core/Functions/func_register.php create mode 100644 Core/Functions/func_sanitize.php create mode 100644 Core/Functions/func_search.php create mode 100644 Core/wrapper.php (limited to 'Core') diff --git a/Core/Functions/func_admin.php b/Core/Functions/func_admin.php new file mode 100644 index 0000000..16cf7c0 --- /dev/null +++ b/Core/Functions/func_admin.php @@ -0,0 +1,81 @@ +del_user_by_userid($userId); + + // Sélection du message à affiché en fonction de réussite ou pas. + if ($deleted) { + $message = ["adminDelUser", "success"]; + } else { + $message = ["adminDelUser", "fail"]; + } + + // Redirection vers message avec l'index du message à afficher. + $_SESSION["message"] = $message; + header("Location: /Templates/message.php"); + die(); +} + +function admin_job_add($jobNameEn, $jobNameFr) { + $dbadmin = new DbAdmin; + // https://www.w3schools.com/php/func_string_strtolower.asp + $added = $dbadmin->register_job_category( + ucwords(strtolower($jobNameEn)), + ucwords(strtolower($jobNameFr)) + ); + + // Sélection du message à affiché en fonction de réussite ou pas. + if ($added) { + $message = ["adminAddJob", "success"]; + } else { + $message = ["adminAddJob", "fail"]; + } + + // Redirection vers message avec l'index du message à afficher. + $_SESSION["message"] = $message; + header("Location: /Templates/message.php"); + die(); +} + +function admin_job_del($jobId) { + $dbadmin = new DbAdmin; + $deleted = $dbadmin->del_job_category_by_jobid($jobId); + + // Sélection du message à affiché en fonction de réussite ou pas. + if ($deleted) { + $message = ["adminDelJob", "success"]; + } else { + $message = ["adminDelJob", "fail"]; + } + + // Redirection vers message avec l'index du message à afficher. + $_SESSION["message"] = $message; + header("Location: /Templates/message.php"); + die(); +} + +function admin_mission_del($missionId) { + $dbadmin = new DbAdmin; + $deleted = $dbadmin->del_mission_by_missionid($missionId); + + // Sélection du message à affiché en fonction de réussite ou pas. + if ($deleted) { + $message = ["adminDelMission", "success"]; + } else { + $message = ["adminDelMission", "fail"]; + } + + // Redirection vers message avec l'index du message à afficher. + $_SESSION["message"] = $message; + header("Location: /Templates/message.php"); + die(); +} + +?> \ No newline at end of file diff --git a/Core/Functions/func_info.php b/Core/Functions/func_info.php new file mode 100644 index 0000000..8464fe1 --- /dev/null +++ b/Core/Functions/func_info.php @@ -0,0 +1,41 @@ +get_pro_job_by_proid($userId); + $userJobsId = []; + for ($i = 0; $i < count($userJobs); $i++) { + array_push($userJobsId, $userJobs[$i]["jobCategoryId"]); + } + $dbuser->update_user_infos($userInfos, $userId, $isPro, $userJobsId); + } else { + $dbuser->update_user_infos($userInfos, $userId, $isPro); + } + + // Redirection vers message avec l'index du message à afficher. + $message = ["infosUpdate", "success"]; + $_SESSION["message"] = $message; + header("Location: /Templates/message.php"); + die(); +} + +?> \ No newline at end of file diff --git a/Core/Functions/func_language.php b/Core/Functions/func_language.php new file mode 100644 index 0000000..a1c1498 --- /dev/null +++ b/Core/Functions/func_language.php @@ -0,0 +1,22 @@ + \ No newline at end of file diff --git a/Core/Functions/func_login.php b/Core/Functions/func_login.php new file mode 100644 index 0000000..6456ba1 --- /dev/null +++ b/Core/Functions/func_login.php @@ -0,0 +1,78 @@ +check_user_credential($email, $pass); + // ou par cookie. + } else { + // On essaie une fois. + $userId = $dbuser->check_token_autologin($cookie[0], $cookie[1]); + // Et on le supprime. + $dbuser->del_token_autologin($cookie[0]); + } + + // Si on a un résultat valide. + if ($userId) { + $dbsearch = new DbSearch; + // LoggedIn devien "true". + $_SESSION["loggedIn"] = "1"; + // et on remplie les variables de la session avec les infos de l'utilisateur. + $userInfo = $dbsearch->get_user_account_by_userid($userId); + foreach ($userInfo as $key => $value) { + $_SESSION[$key] = $value; + } + + // Si était coché remember me ou que la connection s'est faite via cookie, + // on en génère un nouveau. + if ($remember || $cookie) { + $name = "autoLogin"; + // On génère une chaine de caractère aléatoire en supprimant les caractères spéciaux de base64. + $token = str_replace(["+", "/", "="], "", base64_encode(random_bytes(32))); + // On update le nouveau token. + $dbuser->update_token_autologin($_SESSION["email"], $token); + // Enfin on place l'ensemble sur le navigateur du client codé en base64. + setcookie($name, + base64_encode(json_encode(array($_SESSION["email"], $token))), + time() + (86400 * 7), + "/" + ); + } + + // On sélectionne le bon message en fonction du type de connection. + if (!$cookie) { + $message = ["login", "success"]; + } else { + $message = ["loginCookie", "success"]; + } + } else { + // Si la connection a échoué. + if (!$cookie) { + $message = ["login", "fail"]; + // Si la connection à échoué par cookie. + } else { + // Suppression du cookie. + unset($_COOKIE["autoLogin"]); + setcookie("autoLogin", "", time() - 3600, "/"); + $message = ["loginCookie", "fail"]; + } + } + + // On redirige vers message. + $_SESSION["message"] = $message; + header("Location: /Templates/message.php"); + die(); +} + +?> \ No newline at end of file diff --git a/Core/Functions/func_logout.php b/Core/Functions/func_logout.php new file mode 100644 index 0000000..dd6a411 --- /dev/null +++ b/Core/Functions/func_logout.php @@ -0,0 +1,40 @@ +del_token_autologin($_SESSION["email"]); + // Et le cookie + if (isset($_COOKIE["autoLogin"])) { + unset($_COOKIE["autoLogin"]); + setcookie("autoLogin", "", time() - 3600, "/"); + } + + // Et on en redémarre une nouvelle. + session_start(); + $_SESSION["loggedIn"] = "0"; + $_SESSION["lang"] = $lang; + + // Enfin on redirige avec le bon message. + $message = ["logout", "success"]; + $_SESSION["message"] = $message; + header("Location: /Templates/message.php"); + die(); +} + +?> \ No newline at end of file diff --git a/Core/Functions/func_mission.php b/Core/Functions/func_mission.php new file mode 100644 index 0000000..9d009c5 --- /dev/null +++ b/Core/Functions/func_mission.php @@ -0,0 +1,54 @@ + $proId, + "proJobs" => $dbsearch->get_pro_job_by_proid($proId) + ]; + header("Location: /Templates/mission.php"); + die(); +} + +function mission_register($subject, $clientId, $proId, $jobId) { + $dbmission = new DbMission; + $registered = $dbmission->register_mission($subject, $clientId, $proId, $jobId); + + // Sélection du message à afficher en fonction de réussite ou pas. + if ($registered) { + $message = ["missionRegister", "success"]; + } else { + $message = ["missionRegister", "fail"]; + } + + // Redirection vers message avec l'index du message à afficher. + $_SESSION["message"] = $message; + header("Location: /Templates/message.php"); + die(); +} + +function mission_review($missionId, $review, $note) { + $dbmission = new DbMission; + $reviewed = $dbmission->review_mission($missionId, $review, $note); + + // Sélection du message à afficher en fonction de réussite ou pas. + if ($reviewed) { + $message = ["missionReview", "success"]; + } else { + $message = ["missionReview", "fail"]; + } + + // Redirection vers message avec l'index du message à afficher. + $_SESSION["message"] = $message; + header("Location: /Templates/message.php"); + die(); +} + +?> \ No newline at end of file diff --git a/Core/Functions/func_myMission.php b/Core/Functions/func_myMission.php new file mode 100644 index 0000000..3531c48 --- /dev/null +++ b/Core/Functions/func_myMission.php @@ -0,0 +1,58 @@ +accept_mission_by_missionid($missionId); + + // Sélection du message à afficher en fonction de réussite ou pas. + if ($accepted) { + $message = ["missionAccepted", "success"]; + } else { + $message = ["missionAccepted", "fail"]; + } + + // Redirection vers message avec l'index du message à afficher. + $_SESSION["message"] = $message; + header("Location: /Templates/message.php"); + die(); +} + +function mymission_complete_mission($missionId, $userStatus) { + $dbmission = new DbMission; + + switch ($userStatus) { + // Pro + case 1: + $validated = $dbmission->validate_mission_pro_by_missionid($missionId); + break; + // Client + case 2: + $validated = $dbmission->validate_mission_client_by_missionid($missionId); + $_SESSION["missionCompleted"] = [ + "missionId" => $missionId + ]; + header("Location: /Templates/mission.php"); + die(); + default: + break; + } + + // Sélection du message à afficher en fonction de réussite ou pas. + if ($validated) { + $message = ["missionValidated", "success"]; + } else { + $message = ["missionValidated", "fail"]; + } + + // Redirection vers message avec l'index du message à afficher. + $_SESSION["message"] = $message; + header("Location: /Templates/message.php"); + die(); +} + +?> \ No newline at end of file diff --git a/Core/Functions/func_register.php b/Core/Functions/func_register.php new file mode 100644 index 0000000..b7c02cd --- /dev/null +++ b/Core/Functions/func_register.php @@ -0,0 +1,30 @@ +register_user($email, + $password, + $userStatus + ); + + // Sélection du message à afficher en fonction de la réussite de l'inscription. + if ($registered) { + $message = ["userAdd", "success"]; + } else { + $message = ["userAdd", "fail"]; + } + + // Redirection vers message avec l'index du message à afficher. + $_SESSION["message"] = $message; + header("Location: /Templates/message.php"); + die(); +} + +?> \ No newline at end of file diff --git a/Core/Functions/func_sanitize.php b/Core/Functions/func_sanitize.php new file mode 100644 index 0000000..afee91c --- /dev/null +++ b/Core/Functions/func_sanitize.php @@ -0,0 +1,17 @@ + \ No newline at end of file diff --git a/Core/Functions/func_search.php b/Core/Functions/func_search.php new file mode 100644 index 0000000..69740da --- /dev/null +++ b/Core/Functions/func_search.php @@ -0,0 +1,81 @@ +get_pro_info_by_lastname($request); + break; + case 2: + $result = $dbsearch->get_all_pro_by_jobid($request); + break; + default: + break; + } + + // Pour chaque utilisateur avec un nom qui "match". + for ($i = 0; $i < count($result); $i++) { + $result[$i]["jobs"] = $dbsearch->get_pro_job_by_proid($result[$i]["userId"]); + // récupération du nombre de mission effectué. + $numberMission = $dbmission->count_pro_missions_by_proid($result[$i]["userId"]); + $result[$i]["numberOfMissions"] = $numberMission[0][0]; + // récupération des notes de l'utilisateur. + $allNotes = $dbsearch->get_pro_note_by_proid($result[$i]["userId"]); + // Pour chaque note on la "push" (ajoute) dans une liste. + $notes = array(); + for ($j = 0; $j < count($allNotes); $j++) { + if ($allNotes[$j][0]) { + array_push($notes, $allNotes[$j][0]); + } + } + + // On fait la moyenne des notes, + // et pour les étoiles on "coupe" tout ce qui est après la virgule en castant en "int". + if ($notes) { + $average = array_sum($notes) / count($notes); + $result[$i]["note"] = round($average, 2); + $result[$i]["star"] = (int)$average; + // Si il n'y a pas encore de note. + } else { + $result[$i]["note"] = 0; + $result[$i]["star"] = 0; + } + } + // Si c'est "plus d'info" et non une recherche. + } else { + $result = $dbsearch->get_user_info_by_userid($request); + for ($i = 0; $i < count($result); $i++) { + $result[$i]["jobs"] = $dbsearch->get_pro_job_by_proid($request); + } + } + + // Redirection vers l'index avec le "payload" (contenu) en fonction du type de recherche. + if ($isResearch) { + $search = array( + "result" => $result, + "isResearch" => true + ); + } else { + $search = array( + "result" => $result, + "isResearch" => false + ); + } + $_SESSION["search"] = $search; + + header("Location: /index.php#separator2"); + die(); +} + +?> \ No newline at end of file diff --git a/Core/wrapper.php b/Core/wrapper.php new file mode 100644 index 0000000..89e7b96 --- /dev/null +++ b/Core/wrapper.php @@ -0,0 +1,310 @@ + $value) { + if ($key !== "password") { + $_POST[$key] = sanitize($value); + } + } + } + + +// **************************************************************************** +// LANGUE +// **************************************************************************** + // Condition pour le changement de la langue + if (isset($_POST["langSel"]) + && ($_POST["langSel"] == "en" + || $_POST["langSel"] == "fr") + ) { + language_set($_POST["langSel"]); + + +// **************************************************************************** +// RECHERCHE +// **************************************************************************** + // Condition pour une recherche +} elseif ($_SESSION["src"] == "index" + && (isset($_POST["moreInfoProId"]) && $_POST["moreInfoProId"] !== "") + || (isset($_POST["searchByName"]) && $_POST["searchbyName"] !== "") + || (isset($_POST["searchByJob"]) && $_POST["searchbyJob"] !== "") + ) { + + if ($_POST["moreInfoProId"]) { + search($_POST["moreInfoProId"], 0); + + } elseif ($_POST["searchByName"]) { + search($_POST["searchByName"], 1); + + } elseif ($_POST["searchByJob"]) { + search($_POST["searchByJob"], 2); + + } else { + http_response_code(404); + die(); + } + + +// **************************************************************************** +// INSCRIPTION +// **************************************************************************** + // Condition pour une inscription + } elseif ($_SESSION["src"] == "register" + && isset($_POST["email"], + $_POST["password"], + $_POST["userStatus"] + ) + && $_POST["email"] !== "" + && $_POST["password"] !== "" + ) { + register($_POST["email"], + $_POST["password"], + $_POST["userStatus"] + ); + + +// **************************************************************************** +// CONNECTION SANS ET AVEC COOKIE +// **************************************************************************** + } elseif ($_SESSION["src"] == "login" + && isset($_POST["email"], $_POST["password"]) + && $_POST["email"] !== "" + && $_POST["password"] !== "" + ) { + if (isset($_POST["rememberMe"]) && $_POST["rememberMe"] == "on") { + $_POST["rememberMe"] = 1; + } else { + $_POST["rememberMe"] = 0; + } + login(0, $_POST["email"], $_POST["password"], $_POST["rememberMe"]); + + } elseif ($_SESSION["src"] == "autoLogin" + && isset($_COOKIE["autoLogin"]) + && $_SESSION["loggedIn"] + ) { + // Si connection par cookie, on le décode avant de le passer à la fonction. + login(json_decode(base64_decode($_COOKIE["autoLogin"]))); + + +// **************************************************************************** +// DECONNECTION +// **************************************************************************** + } elseif ($_SESSION["src"] == "logout" + && isset($_SESSION["loggedIn"]) + && $_SESSION["loggedIn"] + ) { + logout(); + + +// **************************************************************************** +// MODIFICATION DES INFOS UTILISATEUR +// **************************************************************************** + // Condition pour une modification des infos + } elseif ($_SESSION["src"] == "userInfo" + // Vérification des données si client + && (isset($_SESSION["loggedIn"], $_SESSION["userId"], $_SESSION["userStatus"], + $_POST["lastname"], $_POST["firstname"], $_POST["phoneNumber"], + $_POST["adress"], $_POST["zipCode"], $_POST["city"] + ) + && $_SESSION["userStatus"] == 2 + && $_POST["lastname"] !== "" && $_POST["firstname"] !== "" + && $_POST["phoneNumber"] !== "" && $_POST["adress"] !== "" + && $_POST["zipCode"] !== "" && $_POST["city"] !== "" + // Ou si pro + || isset($_SESSION["loggedIn"], $_SESSION["userId"], $_SESSION["userStatus"], + $_POST["lastname"], $_POST["firstname"], $_POST["phoneNumber"], + $_POST["adress"], $_POST["zipCode"], $_POST["city"], $_POST["jobs"], + $_POST["degree"], $_POST["capability"], $_POST["description"] + ) + && $_SESSION["userStatus"] == 1 + && $_POST["lastname"] !== "" && $_POST["firstname"] !== "" + && $_POST["phoneNumber"] !== "" && $_POST["adress"] !== "" + && $_POST["zipCode"] !== "" && $_POST["city"] !== "" + && $_POST["degree"] !== "" && $_POST["capability"] !== "" + && $_POST["description"] !== "" + ) + ) { + info_update_user_infos($_POST, $_SESSION["userId"], $_SESSION["userStatus"]); + + +// **************************************************************************** +// MISSION - MANDATER, ENREGISTRER UNE REQUETE, VALIDER ET AVIS +// **************************************************************************** + // mandater une mission + } elseif ($_SESSION["src"] == "index" + && (isset($_POST["mandateProId"]) && $_POST["mandateProId"] !== "") + ) { + mission_initiate($_POST["mandateProId"]); + + } elseif ($_SESSION["src"] == "mission" + && isset($_SESSION["loggedIn"], $_SESSION["userStatus"], + $_POST["missionSubject"], $_POST["missionJob"], + $_POST["missionProId"] + ) + && $_SESSION["loggedIn"] + && $_SESSION["userStatus"] == 2 + && $_POST["missionSubject"] !== "" + && $_POST["missionJob"] !== "" + && $_POST["missionProId"] !== "" + ) { + mission_register($_POST["missionSubject"], + $_SESSION["userId"], + $_POST["missionProId"], + $_POST["missionJob"] + ); + + } elseif ($_SESSION["src"] == "mission" + && isset($_SESSION["loggedIn"], $_SESSION["userStatus"], + $_POST["missionCompletedId"], $_POST["review"], + $_POST["note"] + ) + && $_SESSION["loggedIn"] + && $_SESSION["userStatus"] == 2 + && $_POST["missionCompletedId"] !== "" + && $_POST["review"] !== "" + && $_POST["note"] !== "" + ) { + mission_review($_POST["missionCompletedId"], + $_POST["review"], + $_POST["note"] + ); + + +// **************************************************************************** +// GESTION DE SES MISSIONS +// **************************************************************************** + } elseif ($_SESSION["src"] == "myMission" + && isset($_SESSION["loggedIn"], + $_SESSION["userStatus"], + ) + && ($_SESSION["userStatus"] == 1 + || $_SESSION["userStatus"] == 2 + ) + ) { + + if (isset($_POST["acceptedMissionId"]) + && $_POST["acceptedMissionId"] !== "" + ) { + mymission_accept_mission($_POST["acceptedMissionId"]); + + } elseif (isset($_POST["validatedMissionId"], $_SESSION["userStatus"]) + && $_POST["validatedMissionId"] !== "" + && ($_SESSION["userStatus"] == 1 + ||$_SESSION["userStatus"] == 2 + ) + ) { + mymission_complete_mission($_POST["validatedMissionId"], $_SESSION["userStatus"]); + + } else { + http_response_code(404); + die(); + } + + +// **************************************************************************** +// ADMINISTRATION +// **************************************************************************** + // Condition pour l'administration du site + } elseif ($_SESSION["src"] == "admin" + && isset($_SESSION["loggedIn"], + $_SESSION["userStatus"] + ) + && $_SESSION["loggedIn"] + && $_SESSION["userStatus"] == 0 + && (isset($_POST["delUserId"]) + || isset($_POST["addJobNameEn"], + $_POST["addJobNameFr"] + ) + || isset($_POST["delJobId"]) + || isset($_POST["delMissionId"]) + ) + ) { + + // Suppression d'un utilisateur + if (isset($_POST["delUserId"]) + && $_POST["delUserId"] !== "" + ) { + admin_user_del($_POST["delUserId"]); + + // Ajout d'un catégorie d'emploi + } elseif (isset($_POST["addJobNameEn"]) + && isset($_POST["addJobNameFr"]) + && $_POST["addJobNameEn"] !== "" + && $_POST["addJobNameFr"] !== "" + ) { + admin_job_add($_POST["addJobNameEn"], $_POST["addJobNameFr"]); + + // Suppression d'une categorie d'emploi + } elseif (isset($_POST["delJobId"]) + && $_POST["delJobId"] !== "" + ) { + admin_job_del($_POST["delJobId"]); + + // Suppression d'une mission + } elseif (isset($_POST["delMissionId"]) + && $_POST["delMissionId"] !== "" + ) { + admin_mission_del($_POST["delMissionId"]); + + // sinon + } else { + http_response_code(404); + die(); + } + + +// **************************************************************************** +// SI ERREUR DANS $_SESSION ou $_POST +// **************************************************************************** + // Enfin, si requete invalide + } else { + http_response_code(404); + die(); + } + + +// **************************************************************************** +// SI "src" N'EST PAS DEFINI DANS $_SESSION +// **************************************************************************** +} else { + http_response_code(404); + die(); +} +?> \ No newline at end of file -- cgit v1.2.3