ptut-vhost/build/database/repo/ue.php

191 lines
6.0 KiB
PHP

<?php
/**
* Created by PhpStorm.
* User: lucas
* Date: 20/02/18
* Time: 20:30
*/
namespace database\repo;
use database\core\Repo_i;
class ue extends Repo_i {
/* (1) Create a new UE
*
* @code<String> The code of the UE
* @label<String> The UE label (name)
* @volumeCours<float> The UE required volume of COURSES
* @volumeTD<float> The UE required volume of TD
* @volumeTP<float> The UE required volume of TP
* @disabled<bool> If it is disabled
* @defaultFormation<bool> If there is a foreign key for a default formation (if only one formation)
*
* @return created_code<String> Code of the created UE (NULL on error)
*
---------------------------------------------------------*/
public function create(string $code, string $label, bool $required, float $volumeCours, float $volumeTD, float $volumeTP, bool $disabled = false, ?int $defaultFormation = null) : ?int {
/* (1) Prepare request */
$st = $this->pdo->prepare("INSERT INTO UE(`code`, `label`, `required`, `volumeCours`, `volumeTD`, `volumeTP`, `disabled`, `Formation_idFormation`)
VALUE(:code, :label, :required, :volCours, :volTD, :volTP, :disabled, :idFormation) ");
/* (2) Manage statement error */
if( $st === false )
return null;
/* (3) Bind params and execute request */
$success = $st->execute([
"code" => $code,
"label" => $label,
"required" => $required ? 1 : 0,
"volCours" => $volumeCours,
"volTD" => $volumeTD,
"volTP" => $volumeTP,
"disabled" => $disabled ? 1 : 0,
"idFormation" => $defaultFormation
]);
/* (4) Manage execution error */
if( !$success )
return null;
/* (5) Return insert id */
return $this->pdo->lastInsertId();
}
/* (2) Updates an UE data
*
* @code<String> The UE code
* @label<String> [OPT] The UE's new label
* @required<bool> [OPT] Whether the UE is required
* @volumeCours<float> [OPT] The UE's new volume of COURSES
* @volumeTD<float> [OPT] The UE's new volume of TD
* @volumeTP<float> [OPT] The UE's new volume of TP
* @disabled<bool> [OPT] Whether the UE is disabled
* @defaultFormation<int> [OPT] The default formation foreign key
*
* @return updated<bool> Whether the update have been successful
*
---------------------------------------------------------*/
public function update(string $code, ?String $label, ?bool $required, ?float $volumeCours, ?float $volumeTD, ?float $volumeTP, ?bool $disabled, ?int $defaultFormation) : bool{
/* (1) Build request */
$build_rq = [];
$bind_param = [ ':code' => $code ];
if( !is_null($label) ){ $build_rq[] = '`label` = :label'; $bind_param[':label'] = $label; }
if( !is_null($required) ){ $build_rq[] = '`required` = :required'; $bind_param[':required'] = $required; }
if( !is_null($volumeCours) ){ $build_rq[] = '`volumeCours` = :volumeCours'; $bind_param[':volumeCours'] = $volumeCours; }
if( !is_null($volumeTD) ){ $build_rq[] = '`volumeTD` = :volumeTD'; $bind_param[':volumeTD'] = $volumeTD; }
if( !is_null($volumeTP) ){ $build_rq[] = '`volumeTP` = :volumeTP'; $bind_param[':volumeTP'] = $volumeTP; }
if( !is_null($disabled) ){ $build_rq[] = '`disabled` = :disabled'; $bind_param[':disabled'] = $disabled; }
if( !is_null($defaultFormation) ){ $build_rq[] = '`Formation_idFormation` = :defaultFormation'; $bind_param[':defaultFormation'] = $defaultFormation; }
/* (2) ERROR if no updated field */
if( count($build_rq) <= 0 || count($bind_param) <= 1 )
return FALSE;
/* (3) Build request */
$sql_rq = "UPDATE `UE` SET ".implode(', ', $build_rq)." WHERE `code` = :code";
/* (4) Prepare statement */
$st = $this->pdo->prepare($sql_rq);
/* (5) Return execution success */
return $st->execute($bind_param);
}
/* (3) Deletes an UE
*
* @code<String> The UE code
*
* @return deleted<bool> Whether the UE have been deleeted successfully
*
---------------------------------------------------------*/
public function delete(string $code) : bool {
/* (1) Prepare statement */
$st = $this->pdo->prepare('DELETE FROM UE WHERE code = :code');
/* (2) Manage error */
if( $st === false )
return false;
/* (3) Bind params and execute request */
return $st->execute([ ':code' => $code ]);
}
/* (4) Disables an UE
*
* @code<String> The UE code
*
* @return disabled<bool> Whether the UE have been disabled successfully
*
---------------------------------------------------------*/
public function disable(string $code) : bool {
return $this->update($code, null, null, null, null, null, true, null);
}
/* (5) Enables an UE
*
* @code<String> The UE code
*
* @return enabled<bool> Whether the UE have been enabled successfully
*
---------------------------------------------------------*/
public function enable(string $code) : bool {
return $this->update($code, null, null, null, null, null, false, null);
}
/* (6) Gets a UE by its code || getAll
*
* @code<String> [OPT] The UE code, if not set, getAll()
*
* @return ues<array> The UEs matching code (NULL on error)
*
---------------------------------------------------------*/
public function get(?String $code=null) : ?array{
/* (1) Manage if no id given */
$cond = is_null($code) ? '' : ' WHERE `code` = :code';
$parm = is_null($code) ? [] : [':code' => $code];
/* (2) Prepare Statement */
$st = $this->pdo->prepare("SELECT * FROM `UE`$cond GROUP BY `label` ASC");
/* (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;
}
}