117 lines
3.4 KiB
PHP
117 lines
3.4 KiB
PHP
|
<?php
|
||
|
|
||
|
namespace manager\repo;
|
||
|
use \manager\Database;
|
||
|
use \manager\Repo;
|
||
|
use \manager\ManagerError;
|
||
|
use \manager\repo\cluster as clusterRepo;
|
||
|
|
||
|
class association extends parentRepo{
|
||
|
|
||
|
protected static function table_name(){ static $table_name = 'association'; return $table_name; }
|
||
|
|
||
|
|
||
|
/* AJOUT D'UNE PERMISSION ENTRE 2 GROUPES (UTIL -> MACHINE)
|
||
|
*
|
||
|
* @id_target<int> UID d'un groupe MACHINE
|
||
|
* @id_source<int> UID d'un groupe UTILISATEUR
|
||
|
* @id_permission<int> UID d'une PERMISSION
|
||
|
*
|
||
|
* @return error<ManagerError> Retourne l'erreur 'ManagerError' associée
|
||
|
*
|
||
|
*/
|
||
|
public static function addPermission($id_target, $id_source, $id_permission){
|
||
|
|
||
|
/* [1] On vérifie l'existance du groupe 'target'
|
||
|
=========================================================*/
|
||
|
/* (1) On rédige la requête */
|
||
|
$targetCheckR = new Repo('cluster/getById', [
|
||
|
$_SESSION['WAREHOUSE']['id'],
|
||
|
$id_target
|
||
|
]);
|
||
|
$targetCheck = $targetCheckR->answer();
|
||
|
|
||
|
/* (2) Si aucun résultat, on retourne une erreur */
|
||
|
if( $targetCheck === false )
|
||
|
return ManagerError::NoMatchFound;
|
||
|
|
||
|
/* (3) Si il s'agit bien d'un groupe de machines */
|
||
|
if( $targetCheck['class'] != clusterRepo::MACHINE_CLASS )
|
||
|
return ManagerError::NoMatchFound;
|
||
|
|
||
|
|
||
|
/* [2] On vérifie l'existance du groupe 'source'
|
||
|
=========================================================*/
|
||
|
/* (1) On rédige la requête */
|
||
|
$sourceCheckR = new Repo('cluster/getById', [
|
||
|
$_SESSION['WAREHOUSE']['id'],
|
||
|
$id_source
|
||
|
]);
|
||
|
$sourceCheck = $sourceCheckR->answer();
|
||
|
|
||
|
/* (2) Si aucun résultat, on retourne une erreur */
|
||
|
if( $sourceCheck === false )
|
||
|
return ManagerError::NoMatchFound;
|
||
|
|
||
|
/* (3) Si il s'agit bien d'un groupe d'utilisateurs */
|
||
|
if( $sourceCheck['class'] != clusterRepo::USER_CLASS )
|
||
|
return ManagerError::NoMatchFound;
|
||
|
|
||
|
|
||
|
/* [3] On vérifie l'existance de la permission
|
||
|
=========================================================*/
|
||
|
/* (1) On rédige la requête */
|
||
|
$permissionCheckR = new Repo('permission/getById', [ $id_permission ]);
|
||
|
$permissionCheck = $permissionCheckR->answer();
|
||
|
|
||
|
/* (2) Si aucun résultat, on retourne une erreur */
|
||
|
if( $permissionCheck === false )
|
||
|
return ManagerError::NoMatchFound;
|
||
|
|
||
|
|
||
|
/* [4] On vérifie que l'entrée n'existe pas déja
|
||
|
=========================================================*/
|
||
|
/* (1) On effectue la requête */
|
||
|
$checkAlready = self::getByIdTarget($id_target);
|
||
|
|
||
|
/* (2) Si on a un résultat, on continue la vérification */
|
||
|
if( is_array($checkAlready) && count($checkAlready) > 0 ){
|
||
|
|
||
|
/* (3) Si les données sont identiques pour au moins une entrée, on retourne un succès */
|
||
|
foreach($checkAlready as $s=>$sameTarget)
|
||
|
if( $sameTarget['id_source'] == $id_source && $sameTarget['id_permission'] == $id_permission )
|
||
|
return ManagerError::Success;
|
||
|
|
||
|
}
|
||
|
|
||
|
|
||
|
/* [5] On ajoute la permission
|
||
|
=========================================================*/
|
||
|
/* (1) On effectue l'insertion */
|
||
|
$insert = Database::getPDO()->prepare("INSERT INTO association(id_association, id_target, id_source, id_permission)
|
||
|
VALUES(DEFAULT, :id_target, :id_source, :id_permission)");
|
||
|
$inserted = $insert->execute([
|
||
|
':id_target' => $id_target,
|
||
|
':id_source' => $id_source,
|
||
|
':id_permission' => $id_permission
|
||
|
]);
|
||
|
|
||
|
/* (2) Si erreur SQL, on retourne une erreur */
|
||
|
if( !$inserted )
|
||
|
return ManagerError::RepoError;
|
||
|
|
||
|
|
||
|
return ManagerError::Success;
|
||
|
}
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
}
|
||
|
|
||
|
|
||
|
?>
|