summaryrefslogtreecommitdiff
path: root/Database
diff options
context:
space:
mode:
authorDebulois <quentin@debulois.fr>2022-03-13 12:42:37 +0100
committerDebulois <quentin@debulois.fr>2022-03-13 12:42:37 +0100
commit473e6eb56ca1211be05d2b5fd814710f2ff78d38 (patch)
tree4544b6c5c2ecaa3198d3583520f3199d7c056ed4 /Database
parent497ce42637ebaad0c388d309d6b5bbf91db2dfa4 (diff)
Mise ç jour de pas mal de chose et ajout de la possibilité de pouvoir ajouter/supprimer des catégories d'emploi
Diffstat (limited to 'Database')
-rw-r--r--Database/dbmain.php10
-rw-r--r--Database/meth_dbadmin.php108
-rw-r--r--Database/meth_dbmission.php59
-rw-r--r--Database/meth_dbsearch.php38
-rw-r--r--Database/meth_dbuser.php89
5 files changed, 207 insertions, 97 deletions
diff --git a/Database/dbmain.php b/Database/dbmain.php
index 532bb7c..262c55a 100644
--- a/Database/dbmain.php
+++ b/Database/dbmain.php
@@ -12,6 +12,8 @@
// final: ne peut etre ré-écris (overload)
class DbMain {
+ // Pour gérer si "en production"
+ private $debug = True;
// Salt pour chiffrement
private $salt = "cTKXHBoN3oxymlhNem2h";
// Configuration du serveur MYSQL / MARIADB
@@ -19,10 +21,9 @@ class DbMain {
private $host = "127.0.0.1";
private $user = "root";
private $pass = "";
- private $debug = True;
- // Déclaration des tables
private $database = "alphajob";
+ // Déclaration des tables
// Timestamp auto si non renseigné
// UserAccount, infos du compte nécessaire à la connection
private $createTableUserAccount = "CREATE TABLE IF NOT EXISTS `alphajob`.`userAccount` (
@@ -65,8 +66,9 @@ class DbMain {
// 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,
+ `jobCategoryId` INT UNSIGNED NOT NULL AUTO_INCREMENT,
+ `jobCategoryNameEn` VARCHAR(128) NOT NULL,
+ `jobCategoryNameFr` VARCHAR(128) NOT NULL,
PRIMARY KEY (`jobCategoryId`)
)
ENGINE = InnoDB
diff --git a/Database/meth_dbadmin.php b/Database/meth_dbadmin.php
new file mode 100644
index 0000000..32d6077
--- /dev/null
+++ b/Database/meth_dbadmin.php
@@ -0,0 +1,108 @@
+<?php
+// ****************************************************************************
+// Description: Ensemble de méthodes pour étendre dbmain
+// afin de gérer l'administration du site
+// ****************************************************************************
+
+// Import de dbmain
+require_once(dirname( __FILE__ )."/dbmain.php");
+// Extension de cette classe avec dbmain
+class DbAdmin extends DbMain {
+
+ // Récupérer toutes les infos de la table userAccount
+ final public function get_all_users_account() {
+ $reqGetAll = "SELECT * FROM ".$this->tableUserAccount;
+ // 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;
+ }
+
+ // https://stackoverflow.com/questions/1361340/how-can-i-do-insert-if-not-exists-in-mysql
+ // Suppresion d'un utilisateur
+ final public function user_del($userId) {
+ // Préparation de la requète pour voir si l'utilisateur existe
+ // https://stackoverflow.com/questions/1676551/best-way-to-test-if-a-row-exists-in-a-mysql-table
+ $reqCheckExistId = "SELECT EXISTS(SELECT 1 FROM ".$this->tableUserAccount." WHERE userId = ? LIMIT 1)";
+ // Exécution de la requète, fetchall pour avoir le résultat
+ // https://www.php.net/manual/fr/pdostatement.fetch.php
+ // struct par défaut req et index (fetch_both) = arr([0] => arr("req" => BOOL, [0] => BOOL))
+ // PDO::FETCH_NUM : retourne un tableau indexé par le numéro de la colonne comme elle
+ // est retourné dans votre jeu de résultat, commençant à 0
+ $reqResult = $this->exec_cmd($reqCheckExistId, array($userId))->fetchAll(PDO::FETCH_NUM);
+ // Si il existe
+ if ($reqResult[0][0]) {
+ // Préparation de la requète pour suppression
+ $reqDelUser = "DELETE FROM ".$this->tableUserAccount." WHERE userId = ?";
+ // Exécution de la requète
+ $this->exec_cmd($reqDelUser, array($userId));
+ // Retourne 1 pour réussite
+ return 1;
+ } else {
+ // Retourne 0 pour échec
+ 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) {
+ // Préparation et execution de la requète pour voir si la categorie existe en anglais
+ $reqCheckjobCategoryNameEn = "SELECT EXISTS(SELECT 1 FROM ".$this->tableJobCategory." WHERE jobCategoryNameEn = ? LIMIT 1)";
+ $reqResultEn = $this->exec_cmd($reqCheckjobCategoryNameEn, array($jobCategoryNameEn))->fetchAll(PDO::FETCH_NUM);
+ // Si il n'existe pas en anglais
+ if (!$reqResultEn[0][0]) {
+ // Préparation et execution de la requète pour voir si la categorie existe en Français
+ $reqCheckjobCategoryNameFr = "SELECT EXISTS(SELECT 1 FROM ".$this->tableJobCategory." WHERE jobCategoryNameFr = ? LIMIT 1)";
+ $reqResultFr = $this->exec_cmd($reqCheckjobCategoryNameFr, array($jobCategoryNameFr))->fetchAll(PDO::FETCH_NUM);
+ // Si il n'existe pas en Français non plus
+ if (!$reqResultFr[0][0]) {
+ // Préparation de la requète pour l'ajout
+ $reqjobCategoryNameAdd = "INSERT INTO ".$this->tableJobCategory."
+ (jobCategoryNameEn, jobCategoryNameFr)
+ VALUES
+ (? ,?)";
+ // Exécution de la requète
+ $this->exec_cmd($reqjobCategoryNameAdd, array($jobCategoryNameEn, $jobCategoryNameFr));
+ // Retourne 1 pour réussite
+ return 1;
+ } else {
+ // Retourne 0 pour échec
+ return 0;
+ }
+ } else {
+ // Retourne 0 pour échec
+ return 0;
+ }
+ }
+
+ // Suppresion d'un utilisateur
+ final public function job_category_del($jobCategoryId) {
+ // Préparation de la requète pour voir si l'utilisateur existe
+ $reqCheckExistId = "SELECT EXISTS(SELECT 1 FROM ".$this->tableJobCategory." WHERE jobCategoryId = ? LIMIT 1)";
+ // Exécution de la requète, fetchall pour avoir le résultat
+ // struct par défaut req et index (fetch_both) = arr([0] => arr("req" => BOOL, [0] => BOOL))
+ // fetch_num pour casser l'index "req" en chiffre, dict -> list
+ $reqResult = $this->exec_cmd($reqCheckExistId, array($jobCategoryId))->fetchAll(PDO::FETCH_NUM);
+ // Si il existe
+ if ($reqResult[0][0]) {
+ // Préparation de la requète pour suppression
+ $reqDelJobCategory = "DELETE FROM ".$this->tableJobCategory." WHERE jobCategoryId = ?";
+ // Exécution de la requète
+ $this->exec_cmd($reqDelJobCategory, array($jobCategoryId));
+ // Retourne 1 pour réussite
+ return 1;
+ } else {
+ // Retourne 0 pour échec
+ return 0;
+ }
+ }
+}
+?> \ No newline at end of file
diff --git a/Database/meth_dbmission.php b/Database/meth_dbmission.php
new file mode 100644
index 0000000..006f572
--- /dev/null
+++ b/Database/meth_dbmission.php
@@ -0,0 +1,59 @@
+<?php
+// ****************************************************************************
+// Description: Ensemble de méthodes pour étendre dbmain afin
+// d'effectuer des recherches dans la bdd
+// ****************************************************************************
+// 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
+class DbMission extends DbMain {
+
+ // Enregistrement d'une mission
+ final public function register_mission($subject, $note, $review, $clientId, $proId) {
+ // Vérification de l'existance de l'id de consultant
+ $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, clientId, proId)
+ VALUES (?, ?, ?, ?, ?, ?)";
+ // Exécution de la requète
+ $this->exec_cmd($reqAddMission,
+ array(date("Y-m-d H:i:s"), $subject,
+ $note, $review,
+ $clientId, $proId
+ )
+ );
+ // Retourne 1 pour réussite
+ return 1;
+ } else {
+ // Retourne 0 pour échec
+ return 0;
+ }
+ }
+
+ // Récupérations des missions d'un pro par son id
+ final public function get_mission_by_id($id) {
+ $reqGetAllMission = "SELECT subject, note, review, lastname FROM ".$this->tableMission."
+ 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;
+ }
+
+ // Compte le nombre de mission d'un consultant par son nom
+ final public function count_pro_missions_by_lastname($name) {
+ $reqCountMission = "SELECT COUNT(*) 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;
+ }
+
+} \ No newline at end of file
diff --git a/Database/meth_dbsearch.php b/Database/meth_dbsearch.php
index a90925c..8a95a67 100644
--- a/Database/meth_dbsearch.php
+++ b/Database/meth_dbsearch.php
@@ -10,21 +10,15 @@
require_once(dirname( __FILE__ )."/dbmain.php");
// Extension de cette classe avec dbmain
class DbSearch extends DbMain {
- // Récupérer toutes les infos de la table userAccount
- final public function search_all() {
- $reqGetAll = "SELECT * FROM ".$this->tableUserAccount;
- $data = $this->exec_cmd($reqGetAll, array())->fetchAll(PDO::FETCH_ASSOC);
- return $data;
- }
// Récupération des infos d'un compte par son id
- final public function search_user_by_id($id) {
+ 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;
}
-
+
// Récupération des infos d'un utilisateur par son id
final public function get_user_info_by_id($id) {
$reqGetUserInfo = "SELECT lastname, firstname, job, degree,
@@ -35,9 +29,10 @@ class DbSearch extends DbMain {
return $data;
}
- // Récupération des infos d'un consultant par son nom
- final public function search_consultant_by_name($research) {
- $reqSearchConsultant = "SELECT userId, lastname, firstname, job, capability FROM ".$this->tableUserInfo."
+ // Récupération des infos d'un pro par son nom
+ final public function get_pro_info_by_lastname($research) {
+ $reqSearchConsultant = "SELECT ".$this->tableUserInfo.".userId, lastname, firstname, job, capability
+ FROM ".$this->tableUserInfo."
INNER JOIN ".$this->tableUserAccount."
ON ".$this->tableUserInfo.".userId = ".$this->tableUserAccount.".userId
WHERE isPro = '1' AND lastname LIKE CONCAT('%', ?, '%')";
@@ -46,7 +41,7 @@ class DbSearch extends DbMain {
}
// Récupération des notes d'un consultant par son nom
- final public function get_consultant_note_by_name($name) {
+ 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
@@ -55,24 +50,5 @@ class DbSearch extends DbMain {
return $data;
}
- // 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."
- 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;
- }
-
- // Compte le nombre de mission d'un consultant par son nom
- final public function count_consultant_mission_by_name($name) {
- $reqCountMission = "SELECT COUNT(*) 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;
- }
}
?> \ No newline at end of file
diff --git a/Database/meth_dbuser.php b/Database/meth_dbuser.php
index cba1683..c0afb8c 100644
--- a/Database/meth_dbuser.php
+++ b/Database/meth_dbuser.php
@@ -8,8 +8,13 @@
require_once(dirname( __FILE__ )."/dbmain.php");
// Extension de cette classe avec dbmain
class DbUser extends DbMain {
+
+ // ****************************************************************************
+ // Gestion d'un utilisateur
+ // ****************************************************************************
+
// Enregistrement d'un nouvel utilisateur
- final public function add_user($email, $pass, $is_client, $is_pro, $is_admin) {
+ final public function user_register($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
@@ -38,28 +43,25 @@ class DbUser extends DbMain {
}
}
- // Suppresion d'un utilisateur
- 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 userId = ?)";
- // Exécution de la requète
- $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 userId = ?";
- // Exécution de la requète
- $this->exec_cmd($reqDelUser, array($userId));
- // Retourne 1 pour réussite
- return 1;
- } else {
- // Retourne 0 pour échec
- return 0;
+ // Vérification de la combinaison email - pass pour authentification
+ final public function user_check_credential($email, $pass) {
+ // Préparation de la requète pour récupérer les infos ou l'email est présent
+ $reqCheckCredential = "SELECT userId, password
+ FROM ".$this->tableUserAccount." WHERE email = ? ";
+ // 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);
+ // Vérifiaction de correspondance email & pass
+ foreach ($data as $rows) {
+ if ($rows["password"] == $crypt) {
+ return $rows["userId"];
+ }
}
}
// Mise à jour des infos d'un utilisateur
- final public function update_user_info($lastname, $firstname, $job, $degree,
+ final public function user_infos_update($lastname, $firstname, $job, $degree,
$capability, $description, $phoneNumber,
$adress, $zipCode, $city, $userId) {
// Préparation de la requète pour mise à jour des infos
@@ -76,50 +78,13 @@ class DbUser extends DbMain {
);
}
- // Enregistrement d'une mission
- final public function register_mission($subject, $note, $review, $clientId, $proId) {
- // Vérification de l'existance de l'id de consultant
- $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, clientId, proId)
- VALUES (?, ?, ?, ?, ?, ?)";
- // Exécution de la requète
- $this->exec_cmd($reqAddMission,
- array(date("Y-m-d H:i:s"), $subject,
- $note, $review,
- $clientId, $proId
- )
- );
- // Retourne 1 pour réussite
- return 1;
- } else {
- // Retourne 0 pour échec
- return 0;
- }
- }
- // 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 userId, password
- FROM ".$this->tableUserAccount." WHERE email = ? ";
- // 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);
- // Vérifiaction de correspondance email & pass
- foreach ($data as $rows) {
- if ($rows["password"] == $crypt) {
- return $rows["userId"];
- }
- }
- }
+ // ****************************************************************************
+ // Gestion du token-autologin
+ // ****************************************************************************
// Vérification de la combinaison email - jeton d'auto-login pour authentification
- final public function check_token_autologin($email, $token) {
+ final public function autologin_token_check($email, $token) {
// Préparation de la requète pour récupérer les infos ou l'email est présent
$reqCheckToken = "SELECT userId, tokenAutoLogin
FROM ".$this->tableUserAccount." WHERE email = ?";
@@ -134,7 +99,7 @@ class DbUser extends DbMain {
}
// Mise à jour du jeton d'auto-login
- final public function update_token_autologin($email, $token) {
+ final public function autologin_token_update($email, $token) {
// Préparation de la requète pour mise à jour du jeton d'auto-connection
$reqUpdateToken = "UPDATE ".$this->tableUserAccount." SET tokenAutoLogin = ?
WHERE email = ?";
@@ -143,7 +108,7 @@ class DbUser extends DbMain {
}
// Supression du jeton d'auto-login
- final public function delete_token_autologin($email) {
+ final public function autologin_token_delete($email) {
// Préparation de la requète pour supression du jeton d'auto-connection
$reqDeleteToken = "UPDATE ".$this->tableUserAccount." SET tokenAutoLogin = NULL
WHERE email = ?";