The professor's lastName * @firstName The professor's firstName * @category The professor's category ID * @hoursToDo The professor's number of hours to do * @initials The professor's initials * @isAdmin Whether the professor is an admin * @casLogin The professor's CAS username * * @return prof_id The professor's UID (or NULL on error) * ---------------------------------------------------------*/ public function create(string $lastName, string $firstName, int $category, $hoursToDo = 0, $initials = "", $isAdmin = false , $casLogin = "" ) : ?int{ /* (1) Prepare Statement */ $st = $this->pdo->prepare("INSERT INTO Professeur(`casLogin`, `lastName`, `firstName`, `abreviation`, `admin`, `hoursToDo`, `Categorie_idCategorie`) VALUE (:casLogin, :lastName, :firstName, :abrev, :is_admin, :hoursToDo, :cat);"); /* (2) Bind params and execute */ $success = $st->execute([ ':casLogin' => $casLogin, ':lastName' => $lastName, ':firstName' => $firstName, ':abrev' => $initials, ':is_admin' => $isAdmin ? 1 : 0, ':hoursToDo' => $hoursToDo, ':cat' => $category ]); /* (3) Manage error */ if( !$success ) return NULL; /* (4) Return inserted ID */ return $this->pdo->lastInsertId(); } /* (2) Check if a professor exists (by its names) * * @lastName The professor's lastName * @firstName The professor's firstName * * @return prof_id The professor's UID (or NULL on error) * ---------------------------------------------------------*/ public function exists(string $lastName, string $firstName) : ?int{ /* (1) Prepare Statement */ $st = $this->pdo->prepare("SELECT idProfesseur FROM Professeur WHERE firstName = :firstName AND lastName = :lastName"); /* (2) Bind params and execute */ $success = $st->execute([ ':firstName' => $firstName, ':lastName' => $lastName ]); /* (3) Return NULL on error */ if( !$success ) return NULL; /* (4) Return @prof_id or NULL if nothing found */ return $st->fetch()['idProfesseur'] ?: NULL; } /* (3) Check if a professor exists (by its names) * * @idProf The professor's UID * @lastName [OPT] The professor's new lastName * @firstName [OPT] The professor's new firstName * @category [OPT] The professor's new category ID * @hoursToDo [OPT] The professor's new number of hours to do * @initials [OPT] The professor's new initials * @isAdmin [OPT] Whether the professor is an admin * @casLogin [OPT] The professor's new CAS username * * @return updated Whether the updated have been successful * ---------------------------------------------------------*/ public function update(int $id, ?String $lastName, ?String $firstName, ?int $category, ?int $hoursToDo, ?String $initials, ?bool $isAdmin, ?String $casLogin) : bool{ /* (1) Build request */ $build_rq = []; $bind_param = [ ':idProfesseur' => $id ]; if( !is_null($lastName) ){ $build_rq[] = '`lastName` = :lastName'; $bind_param[':lastName'] = $lastName; } if( !is_null($firstName) ){ $build_rq[] = '`firstName` = :firstName'; $bind_param[':firstName'] = $firstName; } if( !is_null($category) ){ $build_rq[] = '`category` = :category'; $bind_param[':category'] = $category; } if( !is_null($hoursToDo) ){ $build_rq[] = '`hoursToDo` = :hoursToDo'; $bind_param[':hoursToDo'] = $hoursToDo; } if( !is_null($initials) ){ $build_rq[] = '`initials` = :initials'; $bind_param[':initials'] = $initials; } if( !is_null($isAdmin) ){ $build_rq[] = '`isAdmin` = :isAdmin'; $bind_param[':isAdmin'] = $isAdmin; } if( !is_null($casLogin) ){ $build_rq[] = '`casLogin` = :casLogin'; $bind_param[':casLogin'] = $casLogin; } /* (2) ERROR if no updated field */ if( count($build_rq) <= 0 || count($bind_param) <= 1 ) return FALSE; /* (3) Build request */ $sql_rq = "UPDATE `Professeur` SET ".implode(', ', $build_rq)." WHERE `idProfesseur` = :idProfesseur"; /* (4) Prepare statement */ $st = $this->pdo->prepare($sql_rq); /* (5) Return execution success */ return $st->execute($bind_param); } /* (4) Return whether a professor is an admin * * @idProf The professor's UID * * @return is_admin Whether the professor is an admin (FALSE if does not exist) * ---------------------------------------------------------*/ public function isAdmin(int $id) : bool{ /* (1) Prepare statement */ $st = $this->pdo->prepare("SELECT `admin` FROM `Professeur` WHERE `idProfesseur` = :id AND `admin` = 1"); /* (2) Bind params and execute statement */ $success = $st->execute([ ':id' => $id ]); /* (3) FALSE on error */ if( !$success ) return FALSE; /* (4) Return whether we have a result or not */ return $st->fetch() == 1; } /* (5) Gets a professor by its UID * * @idProf The professor's UID * * @return teacher The professor's data (NULL on error / not found) * ---------------------------------------------------------*/ public function get(int $id) : ?array{ /* (1) Prepare Statement */ $st = $this->pdo->prepare("SELECT * FROM `Professeur` WHERE `idProfesseur` = :id"); /* (2) Bind params and execute statement */ $success = $st->execute([ ':id' => $id ]); /* (3) Manage error */ if( !$success ) return NULL; /* (4) Get data */ $fetched = $st->fetch(); /* (5) Return NULL on no result */ if( $fetched === false ) return NULL; /* (6) Return data */ return $fetched; } /* (6) Gets all professors * * @return teachers The professors' data ([] on error) * ---------------------------------------------------------*/ public function getAll() : array{ /* (1) Set query */ $query = $this->pdo->query("SELECT * FROM `Professeur` ORDER BY `abreviation` ASC"); /* (2) If error return empty array */ if( $query === false ) return []; /* (3) Return fetched data */ return $query->fetchAll(); } /* (7) Deletes a professor * * @return deleted Whether the professor have been deleeted successfully * ---------------------------------------------------------*/ public function delete(int $id) : bool{ /* (1) Prepare statement */ $st = $this->pdo->prepare("DELETE FROM `Professeur` WHERE `idProfesseur` = :id"); /* (2) Return the execution status */ return $st->execute([ ':id' => $id ]); } /* (8) Returns a professor's statistic data * * @return data Professor data * ---------------------------------------------------------*/ public function getVH(int $id) : array{ /* (1) Prepare Statement */ $st = $this->pdo->prepare("SELECT VHCours, VHTd, VHTp, Cat.idCategorie idCat, Prof.hoursToDo du FROM Professeur Prof, Categorie Cat, (SELECT IFNULL(SUM(Cours.volume),0) VHCours, Prof.idProfesseur idProf FROM Professeur Prof LEFT JOIN Cours ON Prof.idProfesseur = Cours.Professeur_idProfesseur GROUP BY Prof.idProfesseur) VHCours, (SELECT IFNULL(SUM(TD.volume),0) VHTd , Prof.idProfesseur idProf FROM Professeur Prof LEFT JOIN TD ON TD.Professeur_idProfesseur = Prof.idProfesseur GROUP BY Prof.idProfesseur) VHTd, (SELECT IFNULL(SUM(TP.volume),0) VHTp, Prof.idProfesseur idProf FROM Professeur Prof LEFT JOIN TP ON TP.Professeur_idProfesseur = Prof.idProfesseur GROUP BY Prof.idProfesseur) VHTp WHERE Prof.idProfesseur = :idProf AND Prof.Categorie_idCategorie = Cat.idCategorie AND VHCours.idProf = Prof.idProfesseur AND VHTp.idProf = Prof.idProfesseur AND VHTd.idProf = Prof.idProfesseur;"); /* (2) Bind params and execute */ $success = $st->execute([ ':idProf' => $id ]); /* (3) Manage error */ if( !$success ) return []; /* (4) Return data */ return $st->fetch() ?: []; } }