rhsaas/Controleur/ControleurFichebeneficiaire.php
2026-01-16 07:11:49 +00:00

500 lines
16 KiB
PHP

<?php
require_once 'Framework/Controleur.php';
require_once 'Modele/Menuvueutilisateur.php';
require_once 'Modele/Beneficiaire.php';
require_once 'Modele/Police.php';
require_once 'Modele/Garantieadherent.php';
require 'vendor/autoload.php';
use Aws\Rekognition\RekognitionClient;
class ControleurFichebeneficiaire extends Controleur
{
private $beneficiaire;
private $police;
private $garantieadherent;
public function __construct() {
$this->menuvue = new Menuvueutilisateur();
$this->menuvue->getMenuVue('Fichebeneficiaire');
$this->beneficiaire = new Beneficiaire();
$this->police = new Police();
$this->garantieadherent = new Garantieadherent();
$_SESSION['modeDevis'] = "0";
}
public function index()
{
$this->beneficiaire->getModeBiometrie();
$codeSociete = $this->requete->getSession()->getAttribut('codeSociete');
$id = $this->requete->getParametre("id");
$idBeneficiaire = $id;
$this->beneficiaire->getContexteBeneficiaireId($id);
$codeTypeContrat = $_SESSION['codeTypeContrat'];
$idPolice = $_SESSION['idPolice_C'];
$this->police->getContextePoliceId($idPolice);
$this->beneficiaire->getContexteBeneficiaireId($idBeneficiaire);
$idAdherent = $_SESSION['idAdherent_C'];
$garantieadherents = $this->garantieadherent->getGarantieBeneficiaire($idBeneficiaire);
$message = "";
$nouveau_fichier = "Rien";
if(!empty($_POST))
{
// define('TARGET', $_SESSION['dossierSociete'].'/Photos/'); // Repertoire cible
define('TARGET', $_SESSION['lienPhotoFace']); // Repertoire cible
define('MAX_SIZE', 100000); // Taille max en octets du fichier
define('WIDTH_MAX', 800); // Largeur max de l'image en pixels
define('HEIGHT_MAX', 800); // Hauteur max de l'image en pixels
$tabExt = array('jpg','png','jpeg'); // Extensions autorisees
$infosImg = array();
$extension = '';
$nomImage = '';
if( !is_dir(TARGET) )
{
if( !mkdir(TARGET, 0755) )
{
$message = 'Erreur : le répertoire cible ne peut-être créé ! Vérifiez que vous diposiez des droits suffisants pour le faire ou créez le manuellement !';
}
}
/*
var_dump($_FILES);
exit();
*/
if( !empty($_FILES['fichier_image_a_uploader']['name']) )
{
if(!empty($_FILES['fichier_image_a_uploader']['tmp_name']))
{
$extension = pathinfo($_FILES['fichier_image_a_uploader']['name'], PATHINFO_EXTENSION);
if(in_array(strtolower($extension),$tabExt))
{
$infosImg = getimagesize($_FILES['fichier_image_a_uploader']['tmp_name']);
// On verifie le type de l'image
if($infosImg[2] >= 1 && $infosImg[2] <= 14)
{
// On verifie les dimensions et taille de l'image
// if(($infosImg[0] <= WIDTH_MAX) && ($infosImg[1] <= HEIGHT_MAX) && (filesize($_FILES['fichier_image_a_uploader']['tmp_name']) <= MAX_SIZE))
// {
// Parcours du tableau d'erreurs
if(isset($_FILES['fichier_image_a_uploader']['error'])
&& UPLOAD_ERR_OK === $_FILES['fichier_image_a_uploader']['error'])
{
// On renomme le fichier temporaire
$rand = rand(1,1000000);
$nomImageTemp = $_SESSION['numeroBeneficiaire_C']."_".$rand.'.'. $extension;
// Si c'est OK, on teste l'upload
if(move_uploaded_file($_FILES['fichier_image_a_uploader']['tmp_name'], TARGET.$nomImageTemp))
{
$src = TARGET.$nomImageTemp;
// On va réduire la taille de l'image
// On renomme le fichier
$rand = rand(1,1000000);
$nomImage = $_SESSION['numeroBeneficiaire_C']."_".$rand.'.jpg';
$imgtype = image_type_to_mime_type($infosImg[2]);
switch ($imgtype) {
case 'image/jpeg':
$source_image = imagecreatefromjpeg($src);
break;
case 'image/jpg':
$source_image = imagecreatefromjpeg($src);
break;
case 'image/png':
$source_image = imagecreatefrompng($src);
break;
}
$width = imagesx($source_image);
$desired_width = $width;
if ($desired_width > $_SESSION['largeurPhoto'])
{
$desired_width = $_SESSION['largeurPhoto'];
}
$height = imagesy($source_image);
$desired_height = floor($height * ($desired_width / $width));
$virtual_image = imagecreatetruecolor($desired_width, $desired_height);
imagecopyresampled($virtual_image, $source_image, 0, 0, 0, 0, $desired_width, $desired_height, $width, $height);
imagejpeg($virtual_image, TARGET.$nomImage, -1);
$nouveau_fichier = $nomImage;
$message = 'Chargement réussi !';
$this->beneficiaire->changerPhoto($id, $nomImage);
$this->beneficiaire->registerface($_SESSION['numeroBeneficiaire_C']);
$_SESSION['lienPhoto_C'] = $nomImage;
unlink(TARGET.$nomImageTemp);
$this->rediriger("Fichebeneficiaire/".$idBeneficiaire);
}
else
{
// Sinon on affiche une erreur systeme
$message = 'Problème lors du chargement !';
}
}
else
{
$message = 'Une erreur interne a empêché le chargement';
}
/*
}
else
{
// Sinon erreur sur les dimensions et taille de l'image
$message = 'Erreur dans les dimensions du fichier !';
}
*/
}
else
{
// Sinon erreur sur le type de l'image
$message = 'Le fichier à charger n\'est pas une image !';
}
}
else
{
// Sinon on affiche une erreur pour l'extension
$message = 'L\'extension du fichier est incorrecte !';
}
}
else
{
// Sinon on affiche une erreur pour l'extension
$message = 'Revoir votre fichier image!';
}
}
else
{
// Sinon on affiche une erreur pour le champ vide
$message = 'Veuillez sélectionner un fichier SVP !';
}
// fin upload
}
// dans tous les cas, on lance la page <Fichebeneficiaire> !!!
// On charge maintenant les infos du béneficiaire
$beneficiaire = $this->beneficiaire->getBeneficiaireId($id);
$_SESSION['dateEffetCouvert'] = $beneficiaire['dateEffetCouvert'];
$this->beneficiaire->controlerplafondbeneficiaireannuel($idBeneficiaire);
$limite_beneficiaire = $this->garantieadherent->getLimitesBeneficiaire($idBeneficiaire);
$limite_adherent = $this->garantieadherent->getLimitesAdherent($idAdherent);
$prestationsParMois = $this->beneficiaire->getPrestationsmensuelles($idBeneficiaire);
// Extraction directe des colonnes avec array_column
$tabConsoParMois = [
'mois' => array_column($prestationsParMois, 'mois'),
'consos' => array_column($prestationsParMois, 'consommationBeneficiaire')
];
$tabConsoParGaranties = [
'garanties' => array_column($garantieadherents, 'codeGarantie'),
'depenses' => array_column($garantieadherents, 'consommation'),
'plafonds' => array_column($garantieadherents, 'plafond')
];
// Encodage JSON
$dataConsoParMois = json_encode($tabConsoParMois, JSON_NUMERIC_CHECK);
$dataConsoParGaranties = json_encode($tabConsoParGaranties, JSON_NUMERIC_CHECK);
$this->genererVue(array(
'beneficiaire' => $beneficiaire,
'message' => $message,
'nouveau_fichier' => $nouveau_fichier,
'garantieadherents' => $garantieadherents,
'limite_beneficiaire' => $limite_beneficiaire,
'limite_adherent' => $limite_adherent,
'dataConsoParMois' => $dataConsoParMois,
'dataConsoParGaranties' => $dataConsoParGaranties
));
}
public function supprimer() {
$id = $this->requete->getParametre("id");
$this->beneficiaire->supprimer($id);
$this->rediriger("Ficheadherent/".$_SESSION['idAdherent_C']);
}
/*
public function ebeneenregistrerface()
{
$_SESSION['messageFace'] = "";
if(isset($_POST['image_face']))
{
$_SESSION['okId_face'] = "-1";
$_SESSION['okId'] = "-1";
$path = "Temp/";
$extension = "jpeg";
$data = $_POST['image_face'];
$data = str_replace('data:image/jpeg;base64,', '', $data);
$data = base64_decode($data);
$username = $_SESSION['numeroBeneficiaire_C'];
$date = date('YmdHis');
$file_name = "img_v_".$date.uniqid().".".$extension;
$chemin = $path.$file_name;
file_put_contents($chemin, $data);
$rand = rand(1,1000000);
$nomImage = $username."_".$rand.'.'. $extension;
$nomImageCrypte_0 = $username."_".$rand.'.bin';
$nomImageCrypte = $_SESSION['lienPhotoFace'] . $nomImageCrypte_0;
$this->beneficiaire->init_traiterlaface('1');
$cheminNew = $_SESSION['lienPhotoFace'] . $nomImage;
$_SESSION['okId_face'] = "1";
// réduction de la taille de l'immage
$infosImg = getimagesize($chemin);
$src = $chemin;
$imgtype = image_type_to_mime_type($infosImg[2]);
switch ($imgtype)
{
case 'image/jpeg':
$source_image = imagecreatefromjpeg($src);
break;
case 'image/jpg':
$source_image = imagecreatefromjpeg($src);
break;
case 'image/png':
$source_image = imagecreatefrompng($src);
break;
}
$width = imagesx($source_image);
$desired_width = $width;
if ($desired_width > $_SESSION['largeurPhoto'])
{
$desired_width = $_SESSION['largeurPhoto'];
}
$height = imagesy($source_image);
$desired_height = floor($height * ($desired_width / $width));
$virtual_image = imagecreatetruecolor($desired_width, $desired_height);
imagecopyresampled($virtual_image, $source_image, 0, 0, 0, 0, $desired_width, $desired_height, $width, $height);
if (imagejpeg($virtual_image, $cheminNew, -1))
{
$this->beneficiaire->registerface($username);
$idBeneficiaire = $_SESSION['idBeneficiaire_C'];
$this->beneficiaire->changerPhoto($idBeneficiaire, $nomImage);
$_SESSION['messageFace'] = "Enrôlement effectué avec succès! / Enrollment completed successfully!!";
$this->genererVueAjax(array('messageFace' => $_SESSION['messageFace'], 'msgErreur' => $_SESSION['messageFace'], 'photo_succes' => "1"));
}
$this->beneficiaire->resultat_traitement_face($username, '1', '');
unlink($chemin);
}
}
*/
public function ebeneenregistrerface()
{
$_SESSION['messageFace'] = "";
$compare_face = $_POST['compare_face'];
$del_face = $_POST['del_face'];
if(isset($_POST['image_face']))
{
$_SESSION['okId_face'] = "-1";
$_SESSION['okId'] = "-1";
$path = "Temp/";
$extension = "jpeg";
$data = $_POST['image_face'];
$data = str_replace('data:image/jpeg;base64,', '', $data);
$data = base64_decode($data);
$username = $_SESSION['numeroBeneficiaire_C'];
$date = date('YmdHis');
$file_name = "img_v_".$date.uniqid().".".$extension;
$chemin = $path.$file_name;
file_put_contents($chemin, $data);
$rand = rand(1,1000000);
$nomImage = $username."_".$rand.'.'. $extension;
if ($compare_face=="1")
{
if($del_face=="1")
{
$this->beneficiaire->init_traiterlaface('3');
}
else
{
$this->beneficiaire->init_traiterlaface('2');
}
$arrgs = [
'credentials' => [
'key' => 'AKIA2O2PTXQ7XN5OATO3',
'secret' => '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',
],
'version' => 'latest',
'region' => 'us-west-2'
];
$client = new RekognitionClient($arrgs);
$sourceImage = $chemin;
$targetImage = $_SESSION['dossierPhoto_C'].$_SESSION['dossierSociete'].'/Photos/'.$_SESSION['lienPhoto_C'];
try
{
$result = $client->compareFaces
(
[
'SimilarityThreshold' => 80,
'SourceImage' => [
'Bytes' => file_get_contents($sourceImage)
],
'TargetImage' => [
'Bytes' => file_get_contents($targetImage)
],
]
);
$faceMatches = count($result['FaceMatches']);
if ($faceMatches==0)
{
$_SESSION['messageFace'] = "Les faces ne correspondent pas! / The faces do not match!";
$this->beneficiaire->resultat_traitement_face($username, '0', $_SESSION['messageFace']);
$this->genererVueAjax(array('messageFace' => $_SESSION['messageFace'], 'msgErreur' => $_SESSION['messageFace'], 'photo_succes' => "0"));
}
elseif ($del_face=="1")
{
$motif = $_POST['motif'];
$this->beneficiaire->resultat_traitement_face($username, '1', $motif);
$idBeneficiaire = $_SESSION['idBeneficiaire_C'];
$this->beneficiaire->supprimerPhoto($idBeneficiaire);
$this->beneficiaire->unregisterface($username, $motif);
$_SESSION['messageFace'] = "Face supprimée pour motif : $motif / Face removed for reason : $motif";
$this->genererVueAjax(array('messageFace' => $_SESSION['messageFace'], 'photo_succes' => "1"));
$_SESSION['lienPhoto_C']="";
}
else
{
$this->beneficiaire->resultat_traitement_face($username, '1', '');
$_SESSION['okId_face'] = "1";
$_SESSION['messageFace'] = "Face confirmée! / Face confirmed!";
$this->genererVueAjax(array('messageFace' => $_SESSION['messageFace'], 'msgErreur' => $_SESSION['messageFace'], 'photo_succes' => "1"));
}
}
catch (Exception $e)
{
echo 'Message: ' .$e->getMessage();
// exit();
$msgErreur = $e->getMessage();
// $_SESSION['messageFace'] = "Un problème lors du traitement! / A problem during treatment!";
$_SESSION['messageFace'] = $msgErreur;
$this->beneficiaire->resultat_traitement_face($username, '9', $msgErreur);
$this->genererVueAjax(array('messageFace' => $_SESSION['messageFace'], 'msgErreur' => $_SESSION['messageFace'], 'photo_succes' => "0"));
}
}
else
{
$this->beneficiaire->init_traiterlaface('1');
$cheminNew = $_SESSION['lienPhotoFace'] . $nomImage;
$_SESSION['okId_face'] = "1";
// réduction de la taille de l'immage
$infosImg = getimagesize($chemin);
$src = $chemin;
$imgtype = image_type_to_mime_type($infosImg[2]);
switch ($imgtype)
{
case 'image/jpeg':
$source_image = imagecreatefromjpeg($src);
break;
case 'image/jpg':
$source_image = imagecreatefromjpeg($src);
break;
case 'image/png':
$source_image = imagecreatefrompng($src);
break;
}
$width = imagesx($source_image);
$desired_width = $width;
if ($desired_width > $_SESSION['largeurPhoto'])
{
$desired_width = $_SESSION['largeurPhoto'];
}
$height = imagesy($source_image);
$desired_height = floor($height * ($desired_width / $width));
$virtual_image = imagecreatetruecolor($desired_width, $desired_height);
imagecopyresampled($virtual_image, $source_image, 0, 0, 0, 0, $desired_width, $desired_height, $width, $height);
if (imagejpeg($virtual_image, $cheminNew, -1))
// if (imagejpeg($virtual_image, $cheminNew, 60))
{
$this->beneficiaire->registerface($username);
$idBeneficiaire = $_SESSION['idBeneficiaire_C'];
$this->beneficiaire->changerPhoto($idBeneficiaire, $nomImage);
$_SESSION['messageFace'] = "Enrôlement effectué avec succès! / Enrollment completed successfully!!";
$this->genererVueAjax(array('messageFace' => $_SESSION['messageFace'], 'msgErreur' => $_SESSION['messageFace'], 'photo_succes' => "1"));
}
$this->beneficiaire->resultat_traitement_face($username, '1', '');
}
unlink($chemin);
}
}
}