The formation label * @isInternal Whether the formation is internal * * @return form_id The formation UID (or NULL on error) * ---------------------------------------------------------*/ public function create(string $label, bool $isInternal) : ?int{ /* (1) Prepare statement */ $st = $this->pdo->prepare("INSERT INTO `Formation` (`labelFormation`, `isInternal`) VALUE (:label, :isInternal);"); /* (2) Bind params and execute statement */ if( is_bool($st) ) return NULL; $success = $st->execute([ ':label' => $label, ':isInternal' => $isInternal ? 1 : 0 ]); /* (3) Manage error */ if( !$success ) return NULL; /* (4) Return inserted ID */ return $this->pdo->lastInsertId(); } /* (2) Check if a formation exists (by its label) * * @label The formation label * * @return form_id The formation UID (or NULL on error) * ---------------------------------------------------------*/ public function exists(string $label) : ?int{ /* (1) Prepare statement */ $st = $this->pdo->prepare("SELECT `idFormation` FROM `Formation` WHERE `labelFormation` = :label"); /* (2) Bind params and execute statement */ if( is_bool($st) ) return NULL; $success = $st->execute([ ':label' => $label ]); /* (3) Manage error */ if( !$success ) return NULL; /* (4) Return if we have a result */ return $st->fetch()['idFormation'] ?: 0; } /* (3) Deletes a formation * * @return deleted Whether the formation have been deleeted successfully * ---------------------------------------------------------*/ public function delete(int $id) : bool{ /* (1) Prepare statement */ $st = $this->pdo->prepare("DELETE FROM `Formation` WHERE `idFormation` = :id"); /* (2) Bind params and execute request */ if( is_bool($st) ) return false; /* (3) Dispatch the execution status */ return $st->execute([ ':id' => $id ]); } /* (4) Gets a formation by its ID || getAll * * @form_id [OPT] The formation id, if not set, getAll() * * @return formations The formations matching id * ---------------------------------------------------------*/ public function get(?int $form_id) : array{ /* (1) Manage if no id given */ $cond = is_null($form_id) ? '' : 'WHERE Form.idFormation = :form_id'; $parm = is_null($form_id) ? [] : [ ':form_id' => $form_id ]; /* (2) Prepare statement */ $st = $this->pdo->prepare("SELECT IFNULL(VHCours,0) VHCours, IFNULL(VHTd,0) VHTd, IFNULL(VHTp,0) VHTp, (IFNULL(VHCours,0) + IFNULL(VHTd,0) + IFNULL(VHTp,0)) VHTotal, Form.isInternal isInternal, Form.idFormation idForm, Form.labelFormation labelForm FROM Formation Form LEFT JOIN (SELECT IFNULL(SUM(C.volume),0) VHCours, GC.Formation_idFormation idForm FROM GroupeCours GC LEFT JOIN Cours C ON GC.Cours_idCours = C.idCours GROUP BY GC.Formation_idFormation) VHCours ON VHCours.idForm = Form.idFormation LEFT JOIN (SELECT IFNULL(SUM(T.volume),0) VHTd, GTD.Formation_idFormation idForm FROM GroupeTD GTD LEFT JOIN TD T ON GTD.TD_idTD = T.idTD GROUP BY GTD.Formation_idFormation) VHTd ON VHTd.idForm = Form.idFormation LEFT JOIN (SELECT IFNULL(SUM(T2.volume),0) VHTp, GTP.Formation_idFormation idForm FROM GroupeTP GTP LEFT JOIN TP T2 ON GTP.TP_idTP = T2.idTP GROUP BY GTP.Formation_idFormation) VHTp ON VHTp.idForm = Form.idFormation $cond;"); /* (3) Bind params and execute statement */ if( is_bool($st) ) return []; $success = $st->execute($parm); /* (4) Manage error */ if( !$success ) return []; /* (5) Get data */ $fetched = $st->fetchAll(); /* (6) Return [] on no result */ if( $fetched === false ) return []; /* (7) Return data */ return $fetched; } /* (5) Gets all professors who teaches a formation by ids (array) * * @form_id The formation id * * @return professors The professors' UID matching the @form_id formation * ---------------------------------------------------------*/ public function getProfessors(int $form_id) : array{ /* (1) Prepare statement */ $st = $this->pdo->prepare("SELECT p.idProfesseur FROM Professeur p, Formation f WHERE ( p.idProfesseur IN ( SELECT p_cr.idProfesseur FROM Professeur p_cr, UE ue, Cours c WHERE c.Professeur_idProfesseur = p_cr.idProfesseur AND c.UE_code = ue.code AND ue.Formation_idFormation = f.idFormation ) OR p.idProfesseur IN ( SELECT p_td.idProfesseur FROM Professeur p_td, UE ue, TD t WHERE t.Professeur_idProfesseur = p_td.idProfesseur AND t.UE_code = ue.code AND ue.Formation_idFormation = f.idFormation ) OR p.idProfesseur IN ( SELECT p_tp.idProfesseur FROM Professeur p_tp, UE ue, TP t WHERE t.Professeur_idProfesseur = p_tp.idProfesseur AND t.UE_code = ue.code AND ue.Formation_idFormation = f.idFormation ) ) AND f.idFormation = :form_id;"); /* (2) Bind params and execute statement */ if( is_bool($st) ) return []; $success = $st->execute([ ':form_id' => $form_id ]); /* (3) Manage error */ if( !$success ) return []; /* (4) Get data */ $fetched = $st->fetchAll(); /* (5) Return [] on no result */ if( $fetched === false ) return []; /* (6) Return data */ return $fetched; } }