<?php
namespace App\Controller;
use Psr\Log\LoggerInterface;
use Doctrine\ORM\EntityManagerInterface;
use App\Entity\VCard;
use App\Form\VCardType;
use App\Repository\VCardRepository;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Component\Mailer\MailerInterface;
use Symfony\Component\Mime\Email;
use Symfony\Component\Mailer\Exception\TransportExceptionInterface;
use Symfony\Component\Filesystem\Exception\IOExceptionInterface;
use Symfony\Component\Filesystem\Filesystem;
use Symfony\Component\Filesystem\Path;
use JeroenDesloovere\VCard\VCard as VCardFile;
use chillerlan\QRCode\QRCode;
use chillerlan\QRCode\QROptions;
use phpCAS;
use DateTime;
use DateTimeZone;
/**
* @Route("/v/card")
*/
class VCardController extends CustomController // AbstractController
{
private $applicationSender = 'no-reply';
private $uploadsDIR = __DIR__.'/../../public/uploads/';
private $qrcodeOutDIR = __DIR__.'/../../public/uploads/';
private $pendingMailDatas = array(
'à valider' => array(
'subject' => '[Rappel] Carte de visite',
'content' => 'La carte de {PRENOM} {NOM} attend votre validation, cliquez sur le lien pour accéder à la demande de validation.<br/>'
. '<a href="{URI}/v/card/manager">'
. 'Voir...'
. '</a><br/>'
. '<i>Ce message a été créé automatiquement par le gestionnaire de carte de visites des Arts et Métiers, merci de ne pas y répondre.</i>'
),
'enregistrée' => array('subject' => '[Rappel] Carte de visite',
'content' => "N'oubliez-pas de soumettre votre carte de visite pour sa publication...<br/>"
.'Cliquez sur le lien pour la soumettre.<br/>'
. '<a href="{URI}/v/card/">'
. 'Voir...'
. '</a><br/>'
. '<i>Ce message a été créé automatiquement par le gestionnaire de carte de visites des Arts et Métiers, merci de ne pas y répondre.</i>'
),
'rejetée' => array('subject' => '[Rappel] Carte de visite',
'content' => 'Votre carte de visite a été rejetée.<br/>'
.'Vous pouvez la modifier à cette adresse:<br/>'
. '<a href="{URI}/v/card/{ID_VCARD}">'
. 'Voir...'
. '</a><br/>'
. '<i>Ce message a été créé automatiquement par le gestionnaire de carte de visites des Arts et Métiers, merci de ne pas y répondre.</i>'
// "VALIDATE_CONTENT"
),
);
function DEP_twig_json_decode($json)
{
return json_decode($json, true);
}
/**
* @Route("/", name="app_v_card_index", methods={"GET"})
*/
public function index(Request $request, VCardRepository $vCardRepository): Response
{
$session = $request->getSession();
$is_auth = $session->get('is_auth');
$user_email = $session->get('user_email');
/*
if (isset($_GET['DBG']) && $_GET['DBG'] == '1') {
$personnel_datas = $this->getPersonnelFromEnv($session);
print(__METHOD__.' session: '.var_export($session, true).'<br/>');
print(__METHOD__.' personnel_datas: '.var_export($personnel_datas, true)); exit();
}
*/
if (!$is_auth) {
$session->set('previous', 'app_v_card_index');
return new Response(null, 302, array(
'Location' => '/v/card/auth',
));
} else if (isset($_GET['admin']) && $_GET['admin'] == 1) {
// echo(__METHOD__.': user_mail:'.var_export($user_email, true)); exit();
return $this->render('v_card/index.html.twig', [
'v_cards' => $vCardRepository->findAll(),
]);
} else {
$content = __METHOD__.': user not found...';
$personnel_datas = $this->getPersonnelFromEnv($session);
$is_manager = $session->get('is_manager'); // $this->isManager($personnel_datas, $session);
// echo(__METHOD__.': personnel_datas: '.var_export($personnel_datas, true)); exit();
if (isset($personnel_datas['IDE_DOSSIER'])) {
$ide_dossier = $personnel_datas['IDE_DOSSIER'];
$last_card = $this->getRecentVCardByIdeDossier($ide_dossier);
// $content = var_export($last_card, true);
if (isset($last_card['IDE_DOSSIER'])) {
/*
if ($last_card['STATUT'] == 'validé') {
return $this->redirectToRoute('app_v_card_last', [], Response::HTTP_SEE_OTHER);
} else { //*/
return $this->redirectToRoute('app_v_card_show', ['id_vcard' => $last_card['ID_VCARD']], Response::HTTP_SEE_OTHER);
// }
} else {
return $this->redirectToRoute('app_v_card_new', [], Response::HTTP_SEE_OTHER);
}
}
return new Response($content, 200, array(
)
);
}
}
/**
* @Route("/dispuser", name="app_v_card_dispuser", methods={"GET","POST"})
*/
public function dispuser(Request $request): Response {
$content = 'Hello';
//*
// echo(__METHOD__.': hello'); exit();
$session = $request->getSession();
$is_auth = $session->get('is_auth');
$personnel_datas = $this->getPersonnelFromEnv($session);
echo(__METHOD__.': personnel_datas: '.var_export($personnel_datas, true).'<br/>');
echo(__METHOD__.': isSelfValidator: '. (true && $this->isSelfValidator($personnel_datas)).'<br/>');
if (isset($_GET['email'])
&& !empty($_GET['email'])
) {
$user_datas = $this->getPersonnelFromEmail($_GET['email']);
$content = __METHOD__.': user_datas: '. var_export($user_datas, true);
}
// $content = __METHOD__.': session: '. var_export($_SESSION, true);
//*/
return new Response($content, 200, array(
'Content-type' => 'text/html',
)
);
}
protected function formatPhoneNumber($phoneNumber) {
$out = '';
// Format the phone number
$formattedNumber = '+' . substr($phoneNumber, 1, 3) . ' ' . substr($phoneNumber, 4, 2) . ' ' . substr($phoneNumber, 6, 2) . ' ' . substr($phoneNumber, 8, 2) . ' ' . substr($phoneNumber, 10, 2);
$out = $formattedNumber;
return $out;
}
protected function getNewVCardId() {
$out = -1;
$query = 'select max(id_vcard) + 1 as NEW_ID from vcard';
$result = $this->selectRaw($query);
if (isset($result[0]['NEW_ID'])) {
$out = $result[0]['NEW_ID'];
}
return $out;
}
public function retrieveFromSession($session, $key) {
$out = null;
if (!empty($session)
&& !empty($key)
) {
$out = $session->get($key);
$this->storeInSession($session, null, $key);
}
return $out;
}
public function storeInSession($session, $value, string $key = '') : string {
$out = '';
if ($session != null) {
if (empty($key)) {
$key = md5(microtime());
}
$session->set($key, $value);
$out = $key;
}
return $out;
}
protected function deleteUploadedFile($filename) {
if (!empty($filename)) {
// TODO: get file path from key
// remove file
}
}
protected function uploadFile($filename = null, $target_dir = 'public/uploads/') {
$out = 0;
$out_file = '';
if (empty($filename)
&& isset($_FILES["fileToUpload"]["name"])
) {
$filename = basename($_FILES["fileToUpload"]["name"]);
}
$out_file = '/'.basename($target_dir).'/'.$filename;
$target_file = __DIR__.'/../../'.$target_dir.$filename; // basename($_FILES["fileToUpload"]["name"]);
// echo(__METHOD__.': '.$target_file);
$uploadOk = 1;
$imageFileType = strtolower(pathinfo($target_file,PATHINFO_EXTENSION));
// Check if image file is a actual image or fake image
if(isset($_POST["submit"])) {
$check = getimagesize($_FILES["fileToUpload"]["tmp_name"]);
if($check !== false) {
echo "File is an image - " . $check["mime"] . ".";
$uploadOk = 1;
} else {
echo "File is not an image.";
$uploadOk = 0;
}
}
if ($_FILES["fileToUpload"]["size"] > 15500000) {
echo "Sorry, your file is too large.";
$uploadOk = 0;
}
// Allow certain file formats
if($imageFileType != "jpg" && $imageFileType != "png" && $imageFileType != "jpeg"
&& $imageFileType != "gif" ) {
// echo "Sorry, only JPG, JPEG, PNG & GIF files are allowed.";
$uploadOk = 0;
}
// Check if $uploadOk is set to 0 by an error
if ($uploadOk == 0) {
// echo "Sorry, your file was not uploaded.";
// if everything is ok, try to upload file
} else {
if (move_uploaded_file($_FILES["fileToUpload"]["tmp_name"], $target_file)) {
// echo "The file ". htmlspecialchars( basename( $_FILES["fileToUpload"]["name"])). " has been uploaded.";
$uploadOk = $out_file;
} else {
// echo "Sorry, there was an error uploading your file.";
$uploadOk = 0;
}
}
$out = $uploadOk;
return $out;
}
/**
* @Route("/unsetres", name="app_v_card_unsetres", methods={"GET", "POST"})
*/
public function unsetres(Request $request, VCardRepository $vCardRepository): Response {
$datas = array(
'status' => 'FAIL'
);
$params = array_merge($_GET, $_POST);
$session = $request->getSession();
// $is_auth = $session->get('is_auth');
// echo(__METHOD__.': hello'); exit();
$img_filename = $this->retrieveFromSession($session, $params['rel']); // $session->get($params['rel']);
$img_filename; // (isset($params['rel']) && !empty($params['rel']) && isset($img_filename)) ? file_get_contents($img_filename) : '';
if (file_exists($img_filename) && @unlink($img_filename)) {
// echo(__METHOD__.': removed: '. $img_filename);
$datas['status'] = 'ok';
$datas['msg'] = 'DELETED';
}
$content = json_encode($datas);
return new Response($content, 200, array(
'Content-type' => 'application/json'
)
);
}
/**
* @Route("/uploadres", name="app_v_card_uploadres", methods={"GET", "POST"})
*/
public function uploadres(Request $request, VCardRepository $vCardRepository): Response
{
$session = $request->getSession();
$is_auth = $session->get('is_auth');
if (!$is_auth) {
$session->set('previous', 'app_v_card_show');
$session->set('prev_id', $vCard->getId());
return new Response(null, 302, array(
'Location' => 'auth',
));
} else {
$user_email = $session->get('user_email');
$personnel_datas = $this->getPersonnelFromEnv($session);
$ide_dossier = $personnel_datas['IDE_DOSSIER'];
/*
$filename = '/mnt/recadre/E-94824323.jpg';
$target_dir = 'public/uploads/';
if (!isset($_GET['key'])) {
$key = $this->storeInSession($session, $filename);
// echo(__METHOD__.': key: '.$key);
} else {
$val = $session->get($_GET['key']);
echo(__METHOD__.': val: '.$val);
}
// exit();
//
//
*/
if (isset($_FILES['fileToUpload']['name'])) { // (isset($_POST['submit']))
$file_out = $this->uploadFile('photo_'.$ide_dossier.'.jpg');
$file_path = __DIR__.'/../../public'.$file_out;
// echo(__METHOD__.': file_out: '.$file_path);
$key = $this->storeInSession($session, $file_path);
$del_key = $this->storeInSession($session, $file_path);
$data_out = array(
'src' => '/v/card/photo?rel='.$key,
'del_key' => $del_key,
);
$content = json_encode($data_out);
// $content = 'Done.';
return new Response($content, 200, array(
'Content-type' => 'text/html'
)
);
} else if (!empty($_GET['remove'])){
$datas = array();
$datas['status'] = $this->deleteUploadedFile($_GET['remove']);
$content = json_encode($datas);
return new Response($content, 200, array(
'Content-type' => 'text/html'
));
} else {
return $this->render('v_card/upload.html.twig', []);
}
} // END else not auth
}
/**
* @Route("/photo", name="app_v_card_photo", methods={"GET", "POST"})
*/
public function photo(Request $request, VCardRepository $vCardRepository): Response
{
$params = array_merge($_GET, $_POST);
$session = $request->getSession();
// $is_auth = $session->get('is_auth');
$img_filename = $this->retrieveFromSession($session, $params['rel']); // $session->get($params['rel']);
$content = (isset($params['rel']) && !empty($params['rel']) && isset($img_filename)) ? file_get_contents($img_filename) : '';
return new Response($content, 200, array(
'Content-type' => 'image/jpeg'
)
);
}
/**
* @Route("/new", name="app_v_card_new", methods={"GET", "POST"})
*/
public function new(Request $request, VCardRepository $vCardRepository): Response
{
$session = $request->getSession();
$is_auth = $session->get('is_auth');
$user_email = $session->get('user_email');
$personnel_datas = $this->getPersonnelFromEnv($session);
// echo(__METHOD__.': personnel_datas:'.var_export($personnel_datas, true)); // exit();
if (!$is_auth) {
$session->set('previous', 'app_v_card_new');
return new Response(null, 302, array(
'Location' => '/v/card/auth',
));
} else {
// echo(__METHOD__.': request:'. var_export($session, true)); exit();
/*
// $session = $request->getSession();
echo(__METHOD__.': request:'. var_export($session, true)); exit();
// */
$vCard = new VCard();
if (!empty($personnel_datas['TEL_PRO'])) {
$vCard->settel('0'.substr($personnel_datas['TEL_PRO'], 3));
}
$form = $this->createForm(VCardType::class, $vCard);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$vcard_id = $vCard->getId();
if (empty($vcard_id)) {
$next_version = 1;
$vcard_id = $this->getNewVCardId();
$to_valid_vcard = $this->selectLastVCardByIdeDossier($personnel_datas['IDE_DOSSIER'], 'enregistrée');
if (isset($to_valid_vcard['IDE_DOSSIER'])) {
$next_version = $to_valid_vcard['VERSION'];
} else {
$last_valid = $this->getVcardDatasSummary($personnel_datas['IDE_DOSSIER']);
if (isset($last_valid['IDE_DOSSIER'])) {
// $next_version = ($last_valid['VERSION'] * 1) + 1; // NOTE: see duplicate vcard
}
}
// echo(__METHOD__.' vcard_id: '.var_export($vcard_id, true)); exit();
$vCard->setid_vcard($vcard_id);
// echo(__METHOD__.' personnel_datas: '.var_export($personnel_datas, true)); exit();
$vCard->setide_dossier($personnel_datas['IDE_DOSSIER']);
$vCard->setide_manager($personnel_datas['IDE_MANAGER']);
$vCard->setVERSION($next_version);
// $vCard->setDCREATION((new DateTime('now', new DateTimeZone('Europe/Budapest'))));
// echo(__METHOD__.' personnel_datas: '.var_export($personnel_datas, true)); exit();
}
if ($this->isSelfValidator($personnel_datas)) {
$vCard->setstatut('validé');
}
$vCardRepository->add($vCard, true);
return $this->redirectToRoute('app_v_card_show', ['id_vcard' => $vCard->getId()], Response::HTTP_SEE_OTHER);
}
// echo(__METHOD__.': user_email:'.$user_email);
return $this->renderForm('v_card/new.html.twig', [
'v_card' => $vCard,
'user_email' => $user_email,
'personnel' => $personnel_datas,
'is_new' => true,
'disp_form' => true,
'is_manager' => $session->get('is_manager'),
'form' => $form,
]);
} // END if is_auth
}
public function isCardManager(VCard $vCard = null, $session = null, $DBG = false): bool {
$out = isset($vCard);
$personnel_datas = null;
if ($out
&& isset($session)
) {
$personnel_datas = $session->get('personnel_datas');
$out = $out
&& isset($personnel_datas['IDE_DOSSIER'])
; // isset($_GET['manager']) && $_GET['manager'] && true;
$vcard_ide_manager = $vCard->getide_manager();
$out = $out
&& ($personnel_datas['IDE_DOSSIER'] == $vcard_ide_manager)
;
$is_test_mgr = $session->get('TEST_MNGR_IDE');
if ($is_test_mgr != null) {
$out = true;
}
}
// echo(__METHOD__.': out: '.$out); exit();
/* TODO: disable this testonly
$out = true;
// */
return $out;
}
public function isManager($personnel_datas, $session = null, $DBG = false): bool {
if (isset($session)
) {
$is_manager = $session->get('is_manager');
$out = $is_manager && true;
} else {
$out = !empty($personnel_datas)
&& isset($personnel_datas['EST_MANAGER'])
&& $personnel_datas['EST_MANAGER'] == 'OUI'
&& true;
}
/*
echo(__METHOD__.' session: '.var_export($session, true));
echo(__METHOD__.' out: '.$out); exit();
//*/
return $out;
}
/**
* @Route("/testgenqrcodefile", name="app_v_card_testgenqrcodefile", methods={"GET"})
*/
public function testgenqrcodefile(Request $request, LoggerInterface $logger): Response {
$url = "https://{$_SERVER['HTTP_HOST']}/v/card/last?";
$content = $url;
$this->generateQrCodeFile($url, $_GET['email']);
$logger->debug('Coucou');
return new Response($content, 200, array(
'Content-type' => 'text/html',
)
);
}
/**
* @Route("/genqrcodefiles", name="app_v_card_genqrcodefiles", methods={"GET","POST"})
*/
public function genqrcodefiles(Request $request, LoggerInterface $logger): Response {
$url = "https://{$_SERVER['HTTP_HOST']}/v/card/last?";
$out_buff = array();
$content = $url;
$ids = explode(':', $_POST['ids']);
foreach($ids as $k => $id_val) {
$pers_datas = $this->getPersonnelFromIdeDossier($id_val);
if (isset($pers_datas['EMAIL_PRO'])) {
$email = $pers_datas['EMAIL_PRO'];
$this->generateQrCodeFile($url, $email);
$out_buff[] =$url. 'download=1&email='.$email;
}
}
$content = implode('<br/>', $out_buff);
$logger->debug('QRCode regenerated:'
. "\n". implode("\n", $out_buff)
. "\n--------------------------\n"
);
return new Response($content, 200, array(
'Content-type' => 'text/html',
)
);
}
public function isNewQRCode($filename = '') {
$out = !is_null($filename)
&& file_exists($filename)
&& ((strpos(file($filename)[0], 'CREATOR')) != 0)
;
if (isset($_GET['DBG'])) {
echo(__METHOD__.': '.var_export($out, true));
}
return $out;
}
public function generateQrCodeFile($uri, $email = '', $prefix = 'QRC') {
// $uri = "https://{$_SERVER['HTTP_HOST']}{$_SERVER['REQUEST_URI']}";
// $uri .=(isset($_GET['email']) || isset($_GET['embedded']) ? '&' : '?');
$dwnl = $uri . 'download=1&email='.$email;
$DBG = isset($_GET['DBG']);
if (!is_null($uri)
&& !is_null($email)
) {
// TODO: write to file
$vcard = $this->getVCardFromEmail($email);
if ($DBG) {
echo(__METHOD__.': vcard: '. var_export($vcard, true));
}
if (isset($vcard['IDE_DOSSIER'])) {
$filename = $vcard['IDE_DOSSIER'].'.JPG';
$filesystem = new Filesystem();
try {
$filename = Path::normalize('/mnt/qrcode/'
// .'TEST__' // TEST ONLY
.$prefix.$filename
); // sys_get_temp_dir().'/'. $filename);
if (!$this->isNewQRCode($filename)) {
if (file_exists($filename)) {
rename($filename, $filename.'.OLD'); // NOTE: backup old version
}
$options = new QROptions([
'version' => 5,
'eccLevel' => QRCode::ECC_L,
'scale' => 6, // 275x275
'outputType' => QRCode::OUTPUT_IMAGE_JPG,
'imageTransparent' => false,
]);
// echo(strpos(file('/mnt/qrcode/TEST__QRC5474.jpg')[0], 'CREATOR'));
$content = (new QRCode($options))->render($dwnl, $filename);
/* $filesystem->appendToFile(
$filename, $content, true
);
*/
if ($DBG) {
echo(__METHOD__.': dwnl:'.$dwnl.'<br/>File: '.$filename);
}
} else {
if ($DBG) {
echo(__METHOD__.': filename: '.$filename.' already updated....');
}
}
} catch (IOExceptionInterface $exception) {
echo "An error occurred while creating your directory at ".$exception->getPath();
}
} // END if IDE_DOSSIER
}
}
public function generateQrCode($datas): string{
// set_include_path(get_include_path() . PATH_SEPARATOR . __DIR__.'/../../vendor/phpqrcode');
// require_once('qrlib.php');
$out = '';
/*
$uri = "http://{$_SERVER['HTTP_HOST']}{$_SERVER['REQUEST_URI']}";
$uri .=(strpos('?', $uri) ? '?' : '&');
$dwnl = $uri . 'download=1';
// */
if (isset($datas['v_datas_card'])) {
$dwnl = $datas['download_url'];
$filename = 'phpqrcode/temp/image-qrcode-'.$datas['v_datas_card']['ID_VCARD'].'.png';
// QRcode::png($dwnl, $filename);
$out = (new QRCode)->render($dwnl);
}
return $out;
}
public function getVCardFileContent($datas): string {
$out = '';
// echo(__METHOD__.': datas:' .var_export($datas,true)); exit();
// define vcard
$vcard = new VCardFile();
// define variables
$lastname = $datas['v_datas_card']['NOM'];
$firstname = $datas['v_datas_card']['PRENOM'];
$additional = '';
$prefix = '';
$suffix = '';
$service = // FALSE &&
isset($datas['personnel_datas']['SERVICE']) ? ', '. $datas['personnel_datas']['SERVICE'] : '';
// add personal data
$vcard->addName($lastname, $firstname, $additional, $prefix, $suffix);
// add work data
$vcard->addCompany('ENSAM'.$service);
// $vcard->addJobtitle('Personnel');
$title_items = json_decode($datas['v_datas_card']['TITRE']);
$t_item = implode(', ', $title_items);
/*
foreach ($title_items as $t_idx => $t_item) {
$vcard->addJobtitle($t_item);
// $vcard->addRole($t_item);
}
*/
$vcard->addJobtitle($t_item);
$vcard->addEmail($datas['v_datas_card']['EMAIL_PRO'], 'WORK');
$vcard->addPhoneNumber($datas['v_datas_card']['TEL_PRO'], 'PREF;WORK');
$tel_items = json_decode($datas['v_datas_card']['TEL']);
foreach($tel_items as $tel_idx => $tel_item) {
if ($tel_idx > 0) { // NOTE: first is PRO
$vcard->addPhoneNumber($tel_item, 'WORK');
}
}
$mail_items = json_decode($datas['v_datas_card']['EMAIL']);
foreach($mail_items as $mail_idx => $mail_item) {
if ($mail_idx > 0) { // NOTE: first is PRO
$vcard->addEmail($mail_item, 'WORK');
}
}
$vcard->addAddress(null, null, $datas['v_datas_card']['ADRESSE_PRO'], null, null, null, 'FRANCE');
$vcard->addLabel( $datas['v_datas_card']['ADRESSE_PRO'].' FRANCE');
$vcard->addURL('https://www.artsetmetiers.fr');
$ide_dossier = $datas['v_datas_card']['IDE_DOSSIER'];
// echo(__METHOD__.': '.var_export($datas['v_card'], true)); exit();
$custom_photo_file = $this->uploadsDIR.'photo_'.$ide_dossier.'.jpg';
if (isset($datas['v_card']) && ($datas['v_card'])->getavec_photo() == 'oui'
|| (($datas['v_card'])->getavec_photo() != 'oui' && file_exists($custom_photo_file))
) {
$photo_file = '/mnt/recadre/'.$ide_dossier.'.jpg';
if (($datas['v_card'])->getavec_photo() != 'oui' && file_exists($custom_photo_file)) {
$photo_file = $custom_photo_file;
}
$vcard->addPhoto($photo_file);
}
// $vcard->addPhoto(__DIR__ . '/landscape.jpeg');
// return vcard as a string
$out = $vcard->getOutput();
return $out;
}
/**
* @Route("/{id}/download", name="app_my_test_crud_vcard", methods={"GET"})
*/
public function download(VCard $myTestCrud): Response // BinaryFileResponse
{
// echo(__METHOD__.': vcard');
$ide_dossier = $myTestCrud->getide_dossier();
$vcard_datas = $this->getVcardDatasSummary($ide_dossier);
/*
$file = new File('/var/tmp/beurk.txt');
return $this->file($file, 'vcard_'.$myTestCrud->getId() .'.txt');
//*/
$filename = 'vcard_'.$myTestCrud->getId().'.vcf';
$content = $this->getVCardFileContent($vcard_datas);
return new Response($content, 200, array(
'X-Sendfile' => $filename,
'Content-type' => 'application/octet-stream',
'Content-Disposition' => sprintf('attachment; filename="%s"', $filename))
);
}
/**
* @Route("/logout", name="app_v_card_logout", methods={"GET"})
*/
public function logout(Request $request): Response {
$session = $request->getSession();
$session->set('is_auth', false);
$session->set('user_email', '');
$previous = 'app_v_card_index';
$prev_args = [];
return $this->redirectToRoute($previous, $prev_args, Response::HTTP_SEE_OTHER);
}
/**
* @Route("/setuser", name="app_v_card_setuser", methods={"GET"})
*/
public function setuser(Request $request): Response {
$session = $request->getSession();
$is_auth = $session->get('is_auth');
// $personnel_datas = $this->getPersonnelFromEnv($session);
if (isset(($session->get('personnel_datas'))['IDE_DOSSIER'])
&& ($session->get('personnel_datas'))['IDE_DOSSIER'] == '5474'
&& !empty($_GET['email'])
) {
$session->set('user_email', $_GET['email']);
$personnel_datas = $this->getPersonnelFromEnv($session);
$session->set('personnel_datas', $personnel_datas);
if (isset($personnel_datas['EST_MANAGER'])
&& $personnel_datas['EST_MANAGER'] == 'OUI'
) {
$session->set('is_manager', true);
}
echo(__METHOD__.': personnel_datas: '.var_export($personnel_datas, true).'<br/>');
echo(__METHOD__.': isSelfValidator: '. (true && $this->isSelfValidator($personnel_datas)).'<br/>');
}
// echo(__METHOD__.': personnel_datas: '.var_export($personnel_datas, true).'<br/>');
$content = __METHOD__.': session: '. var_export($_SESSION, true);
return new Response($content, 200, array(
'Content-type' => 'text/html',
)
);
}
/**
* @Route("/testauth", name="app_v_card_testauth", methods={"GET"})
*/
public function testauth(Request $request): Response {
$session = $request->getSession();
$is_auth = $session->get('is_auth');
$personnel_datas = $this->getPersonnelFromEnv($session);
echo(__METHOD__.': personnel_datas: '.var_export($personnel_datas, true).'<br/>');
echo(__METHOD__.': isSelfValidator: '. (true && $this->isSelfValidator($personnel_datas)).'<br/>');
$content = __METHOD__.': session: '. var_export($_SESSION, true);
return new Response($content, 200, array(
'Content-type' => 'text/html',
)
);
}
/**
* @Route("/beurk", name="app_v_card_beurk")
*/
public function beurk(): Response
{
echo(__METHOD__); exit();
}
/**
* @Route("/notfound", name="app_v_card_notfound", methods={"GET"})
*/
public function notfound(Request $request): Response
{
// echo(__METHOD__); exit();
$v_datas = array();
$session = $request->getSession();
$is_auth = $session->get('is_auth');
$tpl_name = 'v_card/message.html.twig';
$needs_create = false;
$v_datas[ 'disp_message'] = true;
$v_datas['message'] = ($needs_create ? 'Aucune carte' : 'Carte non').' trouvée....';
if (isset($_GET['embedded'])) {
$v_datas['embedded'] = true;
// $v_datas['message'] = 'Carte non trouvée.<br/>Créer votre carte de visite <a href="/v/card">ici</a>';
if (isset($_GET['needs_create']) && $_GET['needs_create'] == 1) {
$v_datas['needs_create'] = $needs_create = true;
}
$tpl_name = 'v_card/notfound_embedded.html.twig';
}
return $this->render($tpl_name, $v_datas);
}
/**
* @Route("/auth", name="app_v_card_auth", methods={"GET"})
*/
public function auth(Request $request): Response {
$out = null;
$content = '';
$prev_args = array();
$previous = 'app_v_card_index';
// echo(__METHOD__.' userEmail:'.$this->userEmail); exit();
//*
// $session = $request->getSession();
// $is_auth = $session->get('is_auth');
if (!$this->isAuth
// && !isset($_GET['ticket'])
) {
$this->getAuthCAS($request);
// echo(__METHOD__.' session:'.var_export($session, true)); exit();
//
$session = $request->getSession();
$prev_pg = $session->get('previous');
$personnel_datas = $this->getPersonnelFromEnv($session);
$session->set('personnel_datas', $personnel_datas);
if (isset($personnel_datas['EST_MANAGER'])
&& $personnel_datas['EST_MANAGER'] == 'OUI'
) {
$session->set('is_manager', true);
}
if (!empty($prev_pg)) {
$previous = $prev_pg;
$prev_id = $session->get('prev_id');
if (!empty($prev_id)) {
$prev_args['id_vcard'] = $prev_id;
}
}
} else {
//*/
$session = $request->getSession();
$is_auth = $session->get('is_auth');
$prev_pg = $session->get('previous');
if (!empty($prev_pg)) {
$previous = $prev_pg;
$prev_id = $session->get('prev_id');
if (!empty($prev_id)) {
$prev_args['id_vcard'] = $prev_id;
}
}
// echo(__METHOD__.': session: '.var_export($_SESSION, true));
// echo(__METHOD__.': is_auth: '. $is_auth);
// echo(__METHOD__.': prev_pg: '. $prev_pg);
// echo(__METHOD__.': authenticated: '.var_export($this->userEmail, true)); exit();
/*
// Load the settings from the central config file
require_once 'config_CAS.php';
// Load the CAS lib
// echo(__METHOD__.': phpcas_path: '.$phpcas_path); exit();
require_once $phpcas_path . '/CAS.php';
// Enable debugging
phpCAS::setLogger();
// Enable verbose error messages. Disable in production!
phpCAS::setVerbose(true);
// Initialize phpCAS
phpCAS::client(CAS_VERSION_2_0, $cas_host, $cas_port, $cas_context, $client_service_name);
// For production use set the CA certificate that is the issuer of the cert
// on the CAS server and uncomment the line below
// phpCAS::setCasServerCACert($cas_server_ca_cert_path);
// For quick testing you can disable SSL validation of the CAS server.
// THIS SETTING IS NOT RECOMMENDED FOR PRODUCTION.
// VALIDATING THE CAS SERVER IS CRUCIAL TO THE SECURITY OF THE CAS PROTOCOL!
phpCAS::setNoCasServerValidation();
// force CAS authentication
phpCAS::forceAuthentication();
// at this step, the user has been authenticated by the CAS server
// and the user's login name can be read with phpCAS::getUser().
// echo(__METHOD__.': authenticated!'); exit();
// logout if desired
if (isset($_REQUEST['logout'])) {
phpCAS::logout();
}
//*/
// $this->getAuthCAS();
/*
echo(__METHOD__.': Hello '.phpCAS::getUser());
return new Response($content, 200, array(
// 'X-Sendfile' => $filename,
'Content-type' => 'text/text',
// 'Content-Disposition' => sprintf('attachment; filename="%s"', $filename)
)
);
// */
//
}
/*
return new Response(null, 302, array(
'Location' => 'auth',
));
//*/
// echo(__METHOD__.': prev_args: '.var_export($prev_args, true)); exit();
return $this->redirectToRoute($previous, $prev_args, Response::HTTP_SEE_OTHER);
}
public function sendemail(MailerInterface $mailer, $to, $subject, $content, LoggerInterface $logger = null) {
// DBG
// $content = __METHOD__.': FAIL';
if (isset($mailer)) {
// DBG
// $content = __METHOD__.': SENT';
$email = (new Email())
->from($this->applicationSender.'@'.$_SERVER['HTTP_HOST'])
->to($to)
->subject($subject)
// ->text($content)
->html($content); // '<p>See Twig integration for better HTML integration!</p>')
;
// ...
try {
$mailer->send($email);
if (!is_null($logger)) {
$logger->info('Sent to:'.$to.' Subject:'.$subject);
}
} catch (TransportExceptionInterface $e) {
// some error prevented the email sending; display an
// error message or try to resend the message
//
$content = __METHOD__.': ERR: '.$e->getDebug();
}
}
/*
return new Response($content, 200, array(
'Content-type' => 'text/html',
)
);
//*/
// echo($content);
}
/**
* @Route("/testemail", name="app_v_card_testemail", methods={"GET", "POST"})
*/
public function testemail(MailerInterface $mailer, Request $request): Response {
//*
$session = $request->getSession();
$is_auth = $session->get('is_auth');
$personnel_datas = $session->get('personnel_datas');
$datas = array();
echo(__METHOD__.': personnel_datas: '.var_export($personnel_datas, true));
//*/
/*
$email = (new Email())
->from('hello@example.com')
//->cc('cc@example.com')
//->bcc('bcc@example.com')
//->replyTo('fabien@example.com')
//->priority(Email::PRIORITY_HIGH)
->subject('Time for Symfony Mailer!')
->text('Sending emails is fun again!')
->html('<p>See Twig integration for better HTML integration!</p>')
;
$content = __METHOD__.': SENT';
// ...
try {
$mailer->send($email);
} catch (TransportExceptionInterface $e) {
// some error prevented the email sending; display an
// error message or try to resend the message
//
$content = __METHOD__.': ERR: '.$e->getDebug();
}
//*/
//
//
$this->sendemail($mailer, 'herimamy.ratefiarivony@ensam.eu', 'Route testemail....', __METHOD__.': Hello');
$content = __METHOD__.': done....';
/*
if (!$is_auth) {
$datas['needs_auth'] = true;
} else if (isset($_GET['disable']) && $_GET['disable'] == 1) {
$datas['is_manager'] = $session->set('is_manager', false);
} else {
$datas['is_manager'] = $session->set('is_manager', true);
$content = 'MANAGER';
}
// */
return new Response($content, 200, array(
'Content-type' => 'text/html',
)
);
}
// TODO: disable this TESTONLY
/**
* @Route("/setmanager", name="app_v_card_setmanager", methods={"GET", "POST"})
*/
public function setmanager(Request $request): Response {
$session = $request->getSession();
$is_auth = $session->get('is_auth');
$datas = array();
$content = 'NOT_MANAGER';
$personnel_datas = $session->get('personnel_datas');
$ide_manager = $this->getManagerIdeDossier($personnel_datas);
if (!$is_auth) {
$datas['needs_auth'] = true;
} else if (isset($_GET['disable']) && $_GET['disable'] == 1) {
$datas['is_manager'] = $session->set('is_manager', false);
} else {
$datas['is_manager'] = $session->set('is_manager', true);
$ide_manager = null;
if (isset($_GET['ide_manager'])) {
$ide_manager = $_GET['ide_manager'];
} else if (isset($personnel_datas['IDE_MANAGER'])) {
$ide_manager = $personnel_datas['IDE_MANAGER'];
}
/* // REMOVE this TESTONLY
$datas['is_manager'] = $session->set('TEST_MNGR_IDE', $ide_manager);
$content = 'MANAGER: '. $ide_manager;
//*/
}
return new Response($content, 200, array(
'Content-type' => 'text/html',
)
);
}
/**
* @Route("/search", name="app_v_card_search", methods={"GET", "POST"})
*/
public function search(Request $request): Response {
// echo(__METHOD__.' _POST: '.var_export($_POST, true)); exit();
$session = $request->getSession();
$is_auth = $session->get('is_auth');
$datas = array();
$datas['is_manager'] = $session->get('is_manager');
if (!$is_auth) {
$datas['needs_auth'] = true;
}
$datas['disp_search'] = true;
if (isset($_POST['email'])
&& $_POST['email'] != ''
) {
$ans = array('msg' => 'NOT_FOUND');
$found = $this->selectMailLike($_POST['email']); // getVCardFromEmail($_POST['email'], $get_like = true);
// echo(__METHOD__.' found: '.var_export($found, true));
/*
if (isset($found['EMAIL_PRO'])) {
$ans['msg'] = 'ok';
$ans['EMAIL_PRO'] = $found['EMAIL_PRO'];
}
//*/
//
if (count($found) > 0) {
$ans = $found;
}
$content = json_encode($ans);
return new Response($content, 200, array(
'Content-type' => 'text/json',
)
);
} else {
return $this->render('v_card/search.html.twig', $datas);
}
}
/**
* @Route("/getuserinfos", name="app_v_card_getuserinfos", methods={"GET"})
*/
public function getuserinfos(Request $request, VCardRepository $vCardRepository, MailerInterface $mailer): Response {
$session = $request->getSession();
$is_auth = $session->get('is_auth');
$content = __METHOD__;
$user_id = '';
if ($is_auth === true) {
if (isset($_GET['email'])) {
$datas_from_mail = $this->getPersonnelFromEmail($_GET['email']);
echo(__METHOD__.' datas_from_mail: '.var_export($datas_from_mail, true)); exit();
}
$user_id = $_GET['user_id'];
$owner_datas = $this->getPersonnelFromIdeDossier($user_id);
$mgr_ide = $owner_datas['IDE_MANAGER'];
$manager_datas = $this->getPersonnelFromIdeDossier($mgr_ide);
$content = 'DBG: owner_datas: '.var_export($owner_datas, true)
.'<br/>'
. 'manager_datas: '. var_export($manager_datas, true);
}
return new Response($content, 200, array(
'Content-type' => 'text/html',
)
);
}
/**
* @Route("/refreshstudentcache", name="app_v_card_refreshstudentcache", methods={"GET"})
*/
public function refreshstudentcache(Request $request, VCardRepository $vCardRepository, MailerInterface $mailer): Response {
echo(__METHOD__.':'); exit();
}
/**
* @Route("/refreshpending", name="app_v_card_refreshpending", methods={"GET"})
*/
public function refreshpending(Request $request, VCardRepository $vCardRepository, MailerInterface $mailer): Response {
$RAW_QUERY = 'select *
from vcard
order by rank() over (partition by ide_dossier order by d_modification desc)
fetch first row with ties';
$DBG = isset($_GET['dbg']) && $_GET['dbg'] == '1';
$found = $this->selectRaw($RAW_QUERY, false);
$rjc_items = array();
$svd_items = array();
$pnd_items = array();
foreach($found as $k => $datas) {
if (isset($datas['ID_VCARD'])
&& isset($datas['STATUT'])
) {
/*
if ($datas['STATUT'] == 'à valider') {
$pnd_items[] = $datas;
} else if ($datas['STATUT'] == 'rejetée') {
$rjc_items[] = $datas;
} else if ($datas['STATUT'] == 'enregistrée') {
$svd_items[] = $datas;
}
//*/
$this->sendPendingRequest($mailer, $datas);
}
}
/*
$this->sendPendingRequest($mailer, $pnd_items[0]); // , true);
$this->sendPendingRequest($mailer, $rjc_items[0]); // , true);
$this->sendPendingRequest($mailer, $svd_items[0]); // , true);
//*/
$content = 'Done';
/*
$content = __METHOD__.': getting pending requests....<br/>'
// . ($DBG ? var_export($pnd_items, true): '')
;
//*/
return new Response($content, 200, array(
'Content-type' => 'text/html',
)
);
}
/**
* @Route("/last", name="app_v_card_last", methods={"GET"})
*/
public function last(Request $request): Response {
$vcard_datas = array();
$found = null;
$last_vcard = null;
$ide_dossier = null;
$session = $request->getSession();
$is_auth = $session->get('is_auth');
$needs_create = false;
$personnel_datas = $this->getPersonnelFromEnv($session);
$is_manager = $session->get('is_manager'); // $this->isManager($personnel_datas);
if (isset($personnel_datas['IDE_DOSSIER'])) {
$ide_dossier = $personnel_datas['IDE_DOSSIER'];
if (!empty($ide_dossier)) {
$vcard_datas = $this->getVcardDatasSummary($ide_dossier); // $this->selectLastVCardByIdeDossier($ide_dossier);
$vcard_datas['can_validate'] = false;
$vcard_datas['needs_submit'] = false;
$vcard_datas['can_duplicate'] = false;
$found = $this->selectLastVCardByIdeDossier($ide_dossier, "enregistrée' OR STATUT='à valider");
$last_vcard = $this->selectLastVCardByIdeDossier($ide_dossier, "validé");
if (count($last_vcard) > 0) {
$tmp_vcard = new VCard();
$tmp_vcard->setid_vcard($last_vcard['ID_VCARD']);
$tmp_vcard->settitre($last_vcard['TITRE']);
$tmp_vcard->settel($last_vcard['TEL']);
$tmp_vcard->setemail($last_vcard['EMAIL']);
$tmp_vcard->setavec_photo($last_vcard['AVEC_PHOTO']);
$vcard_datas['v_card'] = $tmp_vcard;
// echo(__METHOD__.' adding v_card....');
} else { // No card found needs to create one
$needs_create = true;
}
$vcard_datas['new_version'] = count($found) == 0;
$photo_file = '/mnt/recadre/'.$ide_dossier.'.jpg';
// echo(__METHOD__.': '. var_export($last_vcard, true)); exit();
if (isset($last_vcard['AVEC_PHOTO']) && $last_vcard['AVEC_PHOTO'] == 'oui'
|| (file_exists($this->uploadsDIR.('photo_'.$ide_dossier.'.jpg')))
) {
if (!isset($last_vcard['AVEC_PHOTO']) || $last_vcard['AVEC_PHOTO'] != 'oui') {
$photo_file = $this->uploadsDIR.('photo_'.$ide_dossier.'.jpg');
}
$key = $this->storeInSession($session, $photo_file);
if (!empty($key)) {
$vcard_datas['PHOTO_K'] = $key;
}
}
if (!$is_auth) {
$vcard_datas['needs_auth'] = true;
}
}
// echo(__METHOD__.': vcard_datas: '. var_export($vcard_datas['v_datas_card']['IDE_DOSSIER'], true)); exit();
}
if (isset($vcard_datas['v_datas_card']['IDE_DOSSIER'])
&& isset($vcard_datas['v_card'])
) {
$uri = "https://{$_SERVER['HTTP_HOST']}{$_SERVER['REQUEST_URI']}";
$uri .=(isset($_GET['email']) || isset($_GET['embedded']) ? '&' : '?');
$dwnl = $uri . 'download=1'.(isset($_GET['email']) ? '' : '&email='.$personnel_datas['EMAIL_PRO']);
$vcard_datas['download_url'] = $dwnl;
$vcard_datas['qr_code_url'] = $this->generateQrCode($vcard_datas);
$vcard_datas['disp_vcard'] = true;
$vcard_datas['is_last'] = true;
$is_download = (
(isset($_GET['download']) && $_GET['download'] == 1)
|| (isset($_POST['download']) && $_POST['download'] == 1)
);
if (!$is_download) {
$vcard_datas['is_search'] = true;
if (isset($_GET['back'])
&& !empty($_GET['back'])
) {
$vcard_datas['back_url'] = '/v/card/search';
}
if (isset($_GET['embedded'])) {
$vcard_datas['embedded'] = true;
}
$vcard_datas['is_manager'] = $is_manager;
$vcard_datas['published'] = true;
$vcard_datas['published_card'] = true;
if (isset($_GET['back'])
&& $_GET['back'] == 'search'
) {
$vcard_datas['from_search'] = true;
}
$tpl_name = isset($_GET['embedded']) // ($_GET['v2'])
? 'v_card/embedded.html.twig'
: 'v_card/last.html.twig';
if (isset($_GET['embedded'])
&& isset($_GET['v4'])
) {
$tpl_name = 'v_card/embedded_v4.html.twig';
}
return $this->render($tpl_name, $vcard_datas);
} else {
// echo(__METHOD__.' vcard_datas: '. var_export($vcard_datas, true)); exit();
$content = $this->getVCardFileContent($vcard_datas);
$filename = 'vcard_'.$ide_dossier.'.vcf';
// echo(__METHOD__.' content:'.$content); exit();
return new Response($content, 200, array(
'X-Sendfile' => $filename,
'Content-type' => 'application/octet-stream',
'Content-Disposition' => sprintf('attachment; filename="%s"', $filename))
);
}
} else { // else vcard not found
$v_datas = array(
'Location' => 'notfound',
);
if (isset($_GET['embedded']) && $_GET['embedded']) {
$v_datas['embedded'] = 1;
}
if ($needs_create || isset($_GET['login'])) {
$v_datas['needs_create'] = 1;
}
return $this->redirectToRoute('app_v_card_notfound', $v_datas, Response::HTTP_SEE_OTHER);
// new Response(null, 302, $v_datas);
/*
return new Response('', 404, array(
'Content-type' => 'text/html',
)
);
*/
}
}
protected function getVcardDatasSummary($ide_dossier): array {
$out = array();
$personnel_datas = $this->getV_PERSONNEL($ide_dossier);
$infos_carte = $this->getV_INFOS_CARTE($ide_dossier);
/*
if ( false &&
isset($personnel_datas['SERVICE'])) {
$service_items = explode(' -> ', $personnel_datas['SERVICE']); // NOTE: dept stored with ' -> ' separator....
$nb_items = count($service_items);
if ($nb_items > 1) {
$personnel_datas['SERVICE'] = $service_items[count($service_items)-1];
}
// echo(var_export($personnel_datas, true)); exit();
}
//*/
$v_datas_card = $this->getV_DATA_VCARD($ide_dossier);
if (count($v_datas_card) == 0) { // NO entry in V (new card) get from table VCard
$v_datas_card = $this->selectLastVCardByIdeDossier($ide_dossier, "enregistrée' OR STATUT='à valider' OR STATUT='rejetée");
if (isset($v_datas_card['IDE_DOSSIER'])
// && isset($infos_carte['NOM_PHOTO'])
) {
if (isset($infos_carte['NOM_PHOTO'])) {
$v_datas_card['PHOTO'] = $infos_carte['NOM_PHOTO'];
}
$v_datas_card['SITE_RATTACHEMENT'] = (isset($personnel_datas['SITE_RATTACHEMENT']) ? $personnel_datas['SITE_RATTACHEMENT']: $infos_carte['SITE']);
$v_datas_card['ADRESSE_PRO'] = '';
if (!empty($v_datas_card['SITE_RATTACHEMENT'])) {
$v_datas_card['ADRESSE_PRO'] = $this->getV_SITE($v_datas_card['SITE_RATTACHEMENT']);
}
// echo(__METHOD__.': v_datas_card: '.var_export($v_datas_card, true));
}
}
if (isset($personnel_datas['EMAIL_PRO'])
&& count($v_datas_card) > 0
) {
// echo(__METHOD__.' v_datas_card: '.var_export($v_datas_card, true));
$vcard_datas = array(
'tel' => json_decode($v_datas_card['TEL']),
'titre' => json_decode($v_datas_card['TITRE']),
'email' => json_decode($v_datas_card['EMAIL']),
);
$out = [
// 'v_card' => $vCard,
'vcard_datas' => $vcard_datas,
'v_datas_card' => $v_datas_card, // NOTE: contains main user infos....
'personnel_datas' => $personnel_datas,
'infos_carte' => $infos_carte,
// 'can_validate' => $this->isCardManager($vCard),
];
} // END if EMAIL_PRO
// echo(__METHOD__.' out: '.var_export($out, true)); exit();
return $out;
}
protected function getManagerIdeDossier($datas) {
$out = null;
// echo(__METHOD__.': '.var_export($datas, true));
if (isset($personnel_datas['IDE_MANAGER'])) {
$out = $personnel_datas['IDE_MANAGER'];
}
return $out;
}
/**
* @Route("/manager", name="app_v_card_manager", methods={"GET", "POST"})
*/
public function manager(Request $request, VCardRepository $vCardRepository): Response
{
// $this->getAuthCAS();
$session = $request->getSession();
$is_auth = $session->get('is_auth');
$user_email = $session->get('user_email');
$personnel_datas = $session->get('personnel_datas'); // $this->getPersonnelFromEnv($session);
// echo(__METHOD__.': personnel_datas: '.var_export($personnel_datas, true)); exit();
$ide_dossier = (isset($personnel_datas['IDE_DOSSIER']) ? $personnel_datas['IDE_DOSSIER'] : '');
if (!$is_auth) {
$session->set('previous', 'app_v_card_manager');
return new Response(null, 302, array(
'Location' => 'auth',
));
} else if ($session->get('is_manager')) { // else if ($this->isManager($personnel_datas)) {
/* TODO: REMOVE TESTONLY get the real value
$ide_dossier = $session->get('TEST_MNGR_IDE');
echo(__METHOD__.': ide_dossier: '.$ide_dossier);
//*/
$vcards = $this->getManagedCards($ide_dossier, (isset($_GET['DBG']) && $_GET['DBG'] == 1));
// echo(__METHOD__.' found: ' .var_export($vcards, true)); exit();
return $this->renderForm('v_card/manager.html.twig', [
'v_cards' => $vcards,
// 'manager_v' => true,
'disp_manager' => true,
'is_manager' => true,
]);
} else {
return new Response(null, 302, array(
'Location' => 'notfound',
));
/*
return new Response(null, 404, array(
// 'Location' => 'auth',
));
*/
} // END if is_auth
}
/**
* @Route("/embedded", name="app_v_card_embedded", methods={"GET", "POST"})
*/
public function embedded(Request $request): Response
{
// $this->getAuthCAS();
$session = $request->getSession();
$is_auth = $session->get('is_auth');
$user_email = $session->get('user_email');
$personnel_datas = $this->getPersonnelFromEnv($session);
// $user_email = $session->get('is_auth');
// echo(__METHOD__.': session:'.var_export($_SESSION, true)); exit();
$is_manager = $session->get('is_manager'); // $this->isManager($personnel_datas);
// echo(__METHOD__.': is_manager: '.var_export($is_manager, true)); exit();
if (!$is_auth) {
$session->set('previous', 'app_v_card_embedded');
$session->set('prev_id', $vCard->getId());
return new Response(null, 302, array(
'Location' => 'auth',
));
} else {
// echo(__METHOD__.': vcard_datas: '.var_export($vcard_datas['vcard_datas'], true));
return $this->redirectToRoute('app_v_card_last', ['embedded' => 1], Response::HTTP_SEE_OTHER);
} // END if is_auth
}
/**
* @Route("/{id_vcard}", name="app_v_card_show", methods={"GET", "POST"})
*/
public function show(Request $request, VCard $vCard, VCardRepository $vCardRepository): Response
{
// $this->getAuthCAS();
$session = $request->getSession();
$is_auth = $session->get('is_auth');
$user_email = $session->get('user_email');
$personnel_datas = $this->getPersonnelFromEnv($session);
// $user_email = $session->get('is_auth');
// echo(__METHOD__.': session:'.var_export($_SESSION, true)); exit();
$is_manager = $session->get('is_manager'); // $this->isManager($personnel_datas);
// echo(__METHOD__.': is_manager: '.var_export($is_manager, true)); exit();
if (!$is_auth) {
$session->set('previous', 'app_v_card_show');
$session->set('prev_id', $vCard->getId());
return new Response(null, 302, array(
'Location' => 'auth',
));
} else {
$ide_dossier = $vCard->getide_dossier();
$is_owner = $ide_dossier == $personnel_datas['IDE_DOSSIER'];
$is_card_manager = $this->isCardManager($vCard, $session);
if (!isset($_GET['admin_popup']) && !isset($_GET['DBG_DUMP']) && !$is_owner && !isset($_GET['embedded'])) { // redirect card_manager
return $this->redirectToRoute('app_v_card_index', [], Response::HTTP_SEE_OTHER);
}
$vcard_datas = $this->getVcardDatasSummary($ide_dossier);
$vcard_datas['v_card'] = $vCard;
$vcard_datas['can_validate'] = true
&& $session->get('is_manager')
&& $is_card_manager // $this->isCardManager($vCard, $session)
&& ($vCard->getstatut() == 'à valider')
;
// echo(__METHOD__.'vCard->getstatut: '.$vCard->getstatut());
$vcard_datas['needs_submit'] = ($vCard->getstatut() == 'enregistrée');
$vcard_datas['can_duplicate'] = ($vCard->getstatut() == 'rejetée');
if ($vCard->getstatut() == 'validé') {
$vcard_datas['validated'] = true;
$vcard_datas['new_version'] = false;
}
$vcard_datas['user_email'] = $user_email;
$vcard_datas['disp_vcard'] = true;
$vcard_datas['is_manager'] = $is_manager;
$vcard_datas['current_card'] = true;
if (!$is_owner) {
$vcard_datas['not_owner'] = true;
}
$photo_file = '/mnt/recadre/'.$ide_dossier.'.jpg';
if ($vCard->getavec_photo() == 'oui'
|| (file_exists($this->uploadsDIR.('photo_'.$ide_dossier.'.jpg')))
) {
if ($vCard->getavec_photo() != 'oui') {
$photo_file = $this->uploadsDIR.('photo_'.$ide_dossier.'.jpg');
}
$key = $this->storeInSession($session, $photo_file);
if (!empty($key)) {
$vcard_datas['PHOTO_K'] = $key;
}
}
$form = $this->createForm(VCardType::class, $vCard);
$form->handleRequest($request);
// echo(__METHOD__.': form: '.var_export($form->vars, true)); exit();
// echo(__METHOD__.': vcard_datas: '.var_export($vcard_datas, true)); exit();
$vcard_datas['form'] = $form;
if ( $form->isSubmitted() && $form->isValid()
&& ($is_owner || $is_manager)
) {
// echo(__METHOD__.' submit... vars:'.var_export($form->getData())); exit();
// TODO: check if reject/accepted and if manager then save
$vCardRepository->add($vCard, true);
//*
//*
if ($vCard->getstatut() == 'à valider') { // NOTE: submited to validate
return $this->redirectToRoute('app_v_card_submited', ['id_vcard' => $vCard->getId()], Response::HTTP_SEE_OTHER);
} else if ($vCard->getstatut() == 'rejetée'){
return $this->redirectToRoute('app_v_card_rejected', ['id_vcard' => $vCard->getId()], Response::HTTP_SEE_OTHER);
} else if ($vCard->getstatut() == 'validé'){
return $this->redirectToRoute('app_v_card_accepted', ['id_vcard' => $vCard->getId()], Response::HTTP_SEE_OTHER);
} else {
// */
return $this->redirectToRoute('app_v_card_index', [], Response::HTTP_SEE_OTHER);
}
// */
}
$vcard_datas['is_manager'] = $is_manager; // $session->get('is_manager');
if ($this->isSelfValidator($personnel_datas)) {
// TODO: enable this
$vcard_datas['is_self_validator'] = true;
}
if (isset($_GET['embedded'])) {
$vcard_datas['manager_embedded'] = true;
return $this->renderForm('v_card/_vcard.html.twig', $vcard_datas);
}
if (isset($_GET['DBG_DUMP'])) {
$ide_dossier = $vCard->getide_dossier();
$owner_datas = $this->getPersonnelFromIdeDossier($ide_dossier);
echo(__METHOD__.' is_manager: '.var_export($is_manager, true).'<BR/>');
echo(__METHOD__.' is_card_manager: '.var_export($is_card_manager, true).'<BR/>');
echo(__METHOD__.' can_validate: '.var_export($vcard_datas['can_validate'], true).'<BR/>');
echo(__METHOD__.' personnel_datas: '.var_export($personnel_datas, true).'<BR/>');
echo(__METHOD__.' owner_datas: '.var_export($owner_datas, true).'<BR/>');
echo(__METHOD__.' vCard: '.var_export($vCard, true)); exit();
}
// echo(__METHOD__.': vcard_datas: '.var_export($vcard_datas['vcard_datas'], true));
return $this->renderForm('v_card/show.html.twig', $vcard_datas);
/*
[
'v_card' => $vCard,
'vcard_datas' => $vcard_datas,
'v_datas_card' => $v_datas_card,
'personnel_datas' => $personnel_datas,
'infos_carte' => $infos_carte,
'can_validate' => $this->isCardManager($vCard),
]
);
*/
} // END if is_auth
}
public function getV_INFOS_CARTE($ide_dossier, $DBG = false) : array {
return $this->selectViewBy_ide_dossier('V_INFOS_CARTE', $ide_dossier, $DBG);
}
public function getV_PER_DEMANDE_CARTE_PROF($ide_dossier, $DBG = false) : array {
return $this->selectViewBy_ide_dossier('V_PER_DEMANDE_CARTE_PROF', $ide_dossier, $DBG);
}
public function getV_DATA_VCARD($ide_dossier, $DBG = false) : array {
return $this->selectViewBy_ide_dossier('V_DATA_VCARD', $ide_dossier, $DBG);
}
public function getV_PERSONNEL($ide_dossier, $DBG = false) : array {
return $this->selectViewBy_ide_dossier('V_PERSONNEL', $ide_dossier, $DBG);
// return $this->selectViewBy_ide_dossier('V_PERSONNEL_NEW', $ide_dossier, $DBG); // TODO: V_PERSONNEL needs to be merged
}
public function getV_SITE($site, $DBG = false) {
return $this->getFromSite($site);
}
protected function disableOldPendingCards(VCard $vCard) {
if ($vCard !== null) {
$ide_dossier = $vCard->getide_dossier();
$card_id = $vCard->getId();
$RAW_QUERY = "update vcard set STATUT='old à valider' where ID_VCARD != ".$card_id." and STATUT='à valider' and IDE_DOSSIER = ". $ide_dossier;
// echo(__METHOD__.': query: '.$RAW_QUERY); exit();
if (
!empty($RAW_QUERY)) {
$em = $this->getDoctrine()->getManager();
$statement = $em->getConnection()->prepare($RAW_QUERY);
$res = $statement->execute();
}
}
}
protected function getVCardFromEmail($email, $get_like = false) : array {
$out = array();
$criteria = ($get_like === false ? '=' : ' like ') ."'".strtolower($email)
.($get_like === false ? '' : '%')
."'";
$found = $this->selectViewWhere('V_DATA_VCARD', 'LOWER(EMAIL_PRO)'. $criteria, $get_like); // "LOWER(EMAIL_PRO)='".strtolower($email)."'");
// echo(__METHOD__.' found: '.var_export($found, true)); exit();
if (count($found) > 0) {
$out = $found;
}
return $out;
}
protected function getPersonnelFromLogin($search) : array {
$out = array();
$found = $this->selectViewWhere('V_PERSONNEL', "LOWER(LOGIN)='".strtolower($search)."'");
// echo(__METHOD__.' found: '.var_export($found, true)); exit();
if (count($found) > 0) {
$out = $found;
}
return $out;
}
protected function getPersonnelFromEmail($email) : array {
$out = array();
$found = $this->selectViewWhere('V_PERSONNEL', "LOWER(EMAIL_PRO)='".strtolower($email)."'");
// echo(__METHOD__.' found: '.var_export($found, true)); exit();
if (count($found) > 0) {
$out = $found;
}
return $out;
}
protected function getFromSite($site) {
$out = null;
if (strpos($site, "'") !== false) {
$site = str_replace("'", "''", $site); // NOTE: ORA-01756 escaping quote
}
$found = $this->selectViewWhere('V_SITE', "LOWER(SITE)='".strtolower($site)."'");
// echo(__METHOD__.' found: '.var_export($found, true)); // exit();
if (count($found) > 0
&& isset($found['ADRESSE'])
) {
$out = $found['ADRESSE'];
}
return $out;
}
protected function getPersonnelFromIdeDossier($ide_dossier) : array {
$out = array();
if (!empty($ide_dossier)) {
$found = $this->selectViewWhere('V_PERSONNEL', "IDE_DOSSIER='".$ide_dossier."'");
// echo(__METHOD__.' found: '.var_export($found, true)); exit();
if (count($found) > 0) {
$out = $found;
}
}
return $out;
}
protected function getPersonnelFromEnv($session) : array {
$out = array('');
$auth_login = '';
if (!empty($session)) {
$auth_login = $session->get('user_email');
}
// NOTE: login args used by search
$arg_mail = !empty($_GET['email']) ? $_GET['email']: $auth_login; // $this->getAuthCAS(); // $_GET['login'];
$login = !empty($_GET['login']) ? $_GET['login']: '';
if (!empty($login)) {
$out = $this->getPersonnelFromLogin($login);
} else if (!empty($arg_mail)) {
/*
$found = $this->selectViewWhere('V_PERSONNEL', "LOWER(EMAIL_PRO)='".strtolower($arg_mail)."'");
// echo(__METHOD__.' found: '.var_export($found, true)); exit();
if (count($found) > 0) {
$out = $found;
}
//*/
//
$out = $this->getPersonnelFromEmail($arg_mail);
}
return $out;
}
// TODO: remove deprecated
protected function DEP_getPersonnelFromEnv($session) : array {
$out = array('');
$personnel_datas = array();
$auth_login = '';
if (!empty($session)) {
$auth_login = $session->get('user_email');
// echo(__METHOD__.' auth_login: '.var_export($auth_login, true)); exit();
$personnel_datas = $session->get('personnel_datas');
if (isset($personnel_datas['IDE_DOSSIER'])) {
$out = $personnel_datas;
}
}
// TODO: REMOVE this TESTONLY
// $login = !empty($_GET['email']) ? $_GET['email']: $auth_login; // $this->getAuthCAS(); // $_GET['login'];
if (!empty($login)
&& !isset($personnel_datas['IDE_DOSSIER'])
) {
/*
$found = $this->selectViewWhere('V_PERSONNEL', "LOWER(EMAIL_PRO)='".strtolower($login)."'");
// echo(__METHOD__.' found: '.var_export($found, true)); exit();
if (count($found) > 0) {
$out = $found;
}
//*/
//
$out = $this->getPersonnelFromEmail($login);
$session->set('personnel_datas', $out);
// echo(__METHOD__.' out: '.var_export($out, true)); exit();
} else if (empty($login)){
echo(__METHOD__.' personnel_datas: '.var_export(isset($personnel_datas['IDE_DOSSIER']), true));
echo(__METHOD__.' login: '.var_export($login, true)); exit();
}
return $out;
}
protected function selectLastVCardByIdeDossier($ide_dossier, $statut = 'validé', $DBG = false) : array {
$out = array();
/*
if (!empty($ide_dossier)) {
$RAW_QUERY = "select * from VCARD where IDE_DOSSIER='".$ide_dossier."' and STATUT = '".$statut."' order by D_MODIFICATION desc";
$found = $this->selectRaw($RAW_QUERY, $DBG);
if (count($found) > 0) {
$out = $found[0];
}
}
// */
$out = $this->selectVCardByIdeDossier($ide_dossier, " and ( STATUT = '".$statut."' ) ");
if ($DBG != false) {
echo(__METHOD__.': out: '.var_export($out, true));
}
return $out;
}
protected function selectVCardByIdeDossier($ide_dossier, $opt_where = '', $order_by = " D_MODIFICATION desc " , $DBG = false):array {
$out = array();
if (!empty($ide_dossier)) {
$RAW_QUERY = "select * from VCARD where IDE_DOSSIER='".$ide_dossier."'"
. $opt_where
. (!empty($order_by) ? ' order by '.$order_by : '')
;
// echo(__METHOD__.' RAW_QUERY: '.$RAW_QUERY);
$found = $this->selectRaw($RAW_QUERY, $DBG);
if (count($found) > 0) {
$out = $found[0];
}
}
if ($DBG != false) {
echo(__METHOD__.': out: '.var_export($out, true));
}
return $out;
}
protected function getRecentVCardByIdeDossier($ide_dossier) {
$out = $this->selectVCardByIdeDossier($ide_dossier);
return $out;
}
public function selectViewBy_ide_dossier($v_name, $ide_dossier, $DBG = false) : array {
return $this->selectViewWhere($v_name, 'IDE_DOSSIER='.$ide_dossier, $DBG);
}
public function selectMailLike($search, $DBG = false) {
$out = array();
if (!empty($search)) {
$RAW_QUERY = "SELECT EMAIL_PRO FROM V_DATA_VCARD where LOWER(EMAIL_PRO) like '%".$search."%' order by VERSION desc FETCH FIRST 1 ROWS ONLY"; // "SELECT EMAIL FROM VCARD where STATUT='validé' and LOWER(EMAIL) like '%".$search."%' order by VERSION desc FETCH FIRST 1 ROWS ONLY"; // "SELECT EMAIL FROM VCARD where LOWER(EMAIL) like '%". $search."%'"; // ' where IDE_DOSSIER='.$ide_dossier;
$found = $this->selectRaw($RAW_QUERY, $DBG);
if (count($found) > 0) {
$out = $found;
}
}
return $out;
}
public function selectViewWhere($v_name, $where, $get_all = false, $DBG = false) : array {
$out = array();
if (!empty($v_name) && !empty($where)) {
$RAW_QUERY = 'SELECT * FROM '.$v_name. ' where '. $where; // ' where IDE_DOSSIER='.$ide_dossier;
$found = $this->selectRaw($RAW_QUERY, $DBG);
if (count($found) > 0) {
if (!$get_all) {
$out = $found[0];
} else {
$out = $found;
}
}
}
return $out;
}
protected function isSelfValidator($datas) {
$out =
// $datas['IDE_DOSSIER'] = 5474 ||
true && !empty($datas)
&& isset($datas['AUTO_VALIDATION'])
&& $datas['AUTO_VALIDATION'] == 1
;
return $out;
}
protected function getPendingMailContent($datas) {
$out = null;
if (isset($datas['ID_VCARD'])
&& isset($datas['STATUT'])
) {
// $out = $this::PENDING_MAIL[]
}
return $out;
}
protected function assignTplValues($content, $values) {
$out = $content;
if (isset($out)
&& isset($values)
) {
$k_val = array_keys($values);
foreach ($k_val as $k => $item) {
$out = str_replace('{'.$item.'}', $values[$item], $out);
}
}
return $out;
}
protected function sendPendingRequest($mailer, $datas, $DBG = false) {
if (isset($mailer)
&& isset($datas['EMAIL'])
&& isset($datas['IDE_DOSSIER'])
&& isset($datas['IDE_MANAGER'])
&& isset($datas['STATUT'])
) {
// $ide_manager = $datas['IDE_MANAGER'];
$ide_dossier = $datas['IDE_DOSSIER'];
$manager_datas = $this->getPersonnelFromIdeDossier($ide_manager);
$owner_datas = $this->getPersonnelFromIdeDossier($ide_dossier);
$ide_manager = $owner_datas['IDE_MANAGER'];
//*
//
//
$owner_datas['URI'] = "https://{$_SERVER['HTTP_HOST']}";
$owner_datas['ID_VCARD'] = $datas['ID_VCARD'];
if (isset($this->pendingMailDatas[$datas['STATUT']])) {
$content = $this->assignTplValues($this->pendingMailDatas[$datas['STATUT']]['content'], $owner_datas);
$subject = $this->pendingMailDatas[$datas['STATUT']]['subject'];
if (!array_key_exists('EMAIL_PRO', $manager_datas)) {
echo('-- FAIL:' .var_export($manager_datas, true));
echo(' datas: '. var_export($datas, true));
echo('<br/>'."\n");
return;
}
// echo($manager_datas['EMAIL_PRO']).' ';
// echo($owner_datas['EMAIL_PRO']).'<br/> ';
$dst_mail = ($datas['STATUT'] == 'à valider' ? $manager_datas['EMAIL_PRO'] : (array_key_exists('EMAIL_PRO', $owner_datas) && isset($owner_datas['EMAIL_PRO']) ? $owner_datas['EMAIL_PRO'] : 'NO_EMAIL_PRO' ));
$dbg_dst_mail = $dst_mail;
// $dst_mail = 'herimamy.ratefiarivony@ensam.eu';
if ($DBG !== false) {
echo(__METHOD__.':'. var_export($manager_datas, true));
echo(__METHOD__.':'. var_export($owner_datas, true));
echo(__METHOD__.'<br/>'.var_export($datas, true));
echo('<br/>'
. "To: $dbg_dst_mail<br/>"
. "Subject: $subject<br/>"
. "Content:<br/>"
. $content
);
}
// date_default_timezone_set('Europe/Berlin');
echo((gmdate('Y-m-d H:i:s \G\M\T', strtotime('+2 hours'))).': '. $datas['STATUT'].' '. $dbg_dst_mail.((($datas['STATUT'] == 'à valider' && isset($owner_datas['EMAIL_PRO'])) ? ' '.$owner_datas['EMAIL_PRO']:'')).'<br/>'."\n");
if ($dst_mail != 'NO_EMAIL_PRO') {
$this->sendemail($mailer, $dst_mail, $subject, $content);
// */
//
} else {
echo('FAILED: ');
echo($dst_mail) . '<br/>'
.var_export($datas, true)
;
}
}
}
}
protected function notifyForVCard($mailer, $vCard, $subject, array $content_datas, LoggerInterface $logger = null) {
if (isset($vCard)
&& !empty($subject)
&& isset($content_datas['user'])
&& isset($content_datas['manager'])
) {
$id_vcard = $vCard->getId();
$ide_dossier = $vCard->getide_dossier();
$ide_manager = $vCard->getide_manager();
$manager_datas = $this->getPersonnelFromIdeDossier($ide_manager);
$owner_datas = $this->getPersonnelFromIdeDossier($ide_dossier);
/*
$uri = "http://{$_SERVER['HTTP_HOST']}"; // {$_SERVER['REQUEST_URI']}";
$user_content = '<b>Utilisateur</b><br/>'
. 'Votre carte vient d\'être validée...<br/>'
. 'Vous pouvez la consulter à cette adresse:<br/>'
. '<a href="'.$uri.'/v/card/">'
. 'Voir...'
. '</a>'
;
*/
if (isset($owner_datas['EMAIL_PRO'])
&& !empty($content_datas['user'])
) {
$this->sendemail($mailer, $owner_datas['EMAIL_PRO'], $subject, $content_datas['user'], $logger);
}
/*
$manager_content = '<hr/><b>Manager</b><br/>'
.'Merci un mail a été envoyé au propriétaire de la carte à cette adresse: ' . $owner_datas['EMAIL_PRO']
// . '<a href="'.$uri.'/v/card/'.$id_vcard.'?manager=1">'
// . 'Voir...'
// . '</a>'
;
*/
if (isset($manager_datas['EMAIL_PRO'])
&& !empty($content_datas['manager'])
) {
/* TODO: REMOVE this TESTONLY
$manager_datas['EMAIL_PRO'] = 'herimamy.ratefiarivony@ensam.eu';
// */
$this->sendemail($mailer, $manager_datas['EMAIL_PRO'], $subject, $content_datas['manager'], $logger);
}
}
}
/**
* @Route("/{id_vcard}/accepted", name="app_v_card_accepted", methods={"GET", "POST"})
*/
public function accepted(Request $request, VCard $vCard, VCardRepository $vCardRepository, MailerInterface $mailer, LoggerInterface $logger): Response
{
// echo(__METHOD__.': mailer: '.var_export($mailer, true)); exit();
$id_vcard = $vCard->getId();
$content = 'ACCESS_DENIED';
$session = $request->getSession();
$is_auth = $session->get('is_auth');
$user_email = $session->get('user_email');
$personnel_datas = $this->getPersonnelFromEnv($session);
if (!$is_auth) {
$session->set('previous', 'app_v_card_accepted');
$session->set('prev_id', $vCard->getId());
return new Response(null, 302, array(
'Location' => '/v/card/auth',
));
} else {
$ide_dossier = $vCard->getide_dossier();
$owner_datas = $this->getPersonnelFromIdeDossier($ide_dossier);
$owner_mail = isset($owner_datas['EMAIL_PRO']) ? $owner_datas['EMAIL_PRO'] : '';
// echo(__METHOD__.''.var_export($owner_mail, true)); exit();
if ($vCard->getstatut() == 'validé') {
$uri = "https://{$_SERVER['HTTP_HOST']}"; // {$_SERVER['REQUEST_URI']}";
$content_datas = array(
'user' => 'Bonjour '.$owner_datas['PRENOM'].',<br/>'
.'Votre carte de visite vient d\'être acceptée.<br/>'
.'Vous pouvez la consulter à cette adresse:<br/>'
. '<a href="'.$uri.'/v/card/last?email='.$owner_mail.'">'
. 'Voir...'
. '</a><br/>'
. '<i>Ce message a été créé automatiquement par le gestionnaire de carte de visites des Arts et Métiers, merci de ne pas y répondre.</i>'
,
'manager' => '' // 'Merci un mail a été envoyé au propriétaire de la carte...'
// . '<a href="'.$uri.'/v/card/'.$id_vcard.'?manager=1">'
// . 'Voir...'
//. '</a>'
,
);
$subject = 'Carte de visite acceptée';
// $content = $content_datas['user'].'<hr/>'.$content_datas['manager'];
// if (!isset($_GET['stay'])) {
// $content = '<script type="text/JavaScript">window.close();</script>';
$content = '<script type="text/JavaScript">window.location.href = "/v/card/manager";</script>';
// }
/*
if (file_exists($this->uploadsDIR.('tmp_photo_'.$ide_dossier.'.jpg'))) {
rename($this->uploadsDIR.('tmp_photo_'.$ide_dossier.'.jpg'), $this->uploadsDIR.('photo_'.$ide_dossier.'.jpg'));
}
//*/
$this->notifyForVCard($mailer, $vCard, $subject, $content_datas, $logger);
// TODO generateQrCodeFile in folder
//*
$url = "https://{$_SERVER['HTTP_HOST']}/v/card/last?";
$this->generateQrCodeFile($url, $owner_mail);
//*/
}
} // END is_auth
return new Response($content, 200, array(
'Content-type' => 'text/html',
)
);
}
/**
* @Route("/{id_vcard}/rejected", name="app_v_card_rejected", methods={"GET", "POST"})
*/
public function rejected(Request $request, VCard $vCard, VCardRepository $vCardRepository, MailerInterface $mailer): Response
{
$id_vcard = $vCard->getId();
$content = 'ACCESS_DENIED';
$session = $request->getSession();
$is_auth = $session->get('is_auth');
$user_email = $session->get('user_email');
$personnel_datas = $this->getPersonnelFromEnv($session);
if (!$is_auth) {
$session->set('previous', 'app_v_card_rejected');
$session->set('prev_id', $vCard->getId());
return new Response(null, 302, array(
'Location' => '/v/card/auth',
));
} else {
if ($vCard->getstatut() == 'rejetée') {
$ide_dossier = $vCard->getide_dossier();
$owner_datas = $this->getPersonnelFromIdeDossier($ide_dossier);
$uri = "https://{$_SERVER['HTTP_HOST']}"; // {$_SERVER['REQUEST_URI']}";
$content_datas = array(
'user' => 'Bonjour '.$owner_datas['PRENOM'].',<br/>'
.'Votre carte de visite vient d\'être rejetée.<br/>'
.'Vous pouvez la modifier à cette adresse:<br/>'
. '<a href="'.$uri.'/v/card/'.$id_vcard.'">'
. 'Voir...'
. '</a><br/>'
. '<i>Ce message a été créé automatiquement par le gestionnaire de carte de visites des Arts et Métiers, merci de ne pas y répondre.</i>'
,
'manager' => '' // 'Merci un mail a été envoyé au propriétaire de la carte...'
// . '<a href="'.$uri.'/v/card/'.$id_vcard.'?manager=1">'
// . 'Voir...'
//. '</a>'
,
);
$subject = 'Carte de visite rejetée';
$content = $content_datas['user'].'<hr/>'.$content_datas['manager'];
if (!isset($_GET['stay'])) {
// $content = '<script type="text/JavaScript">window.close();</script>';
$content = '<script type="text/JavaScript">window.location.href = "/v/card/manager";</script>';
}
$this->notifyForVCard($mailer, $vCard, $subject, $content_datas);
}
}
return new Response($content, 200, array(
'Content-type' => 'text/html',
)
);
}
protected function getManagedCards($ide_manager, $DBG = false) : array {
$out = array();
if (!empty($ide_manager)) {
$out = $this->selectFromWhere('VCARD', 'IDE_MANAGER = '. $ide_manager." AND STATUT='à valider'", null, $DBG);
}
return $out;
}
/**
* @Route("/{id_vcard}/submited", name="app_v_card_submited", methods={"GET", "POST"})
*/
public function submited(Request $request, VCard $vCard, VCardRepository $vCardRepository, MailerInterface $mailer, LoggerInterface $logger): Response
{
$session = $request->getSession();
$is_auth = $session->get('is_auth');
$user_email = $session->get('user_email');
$personnel_datas = $this->getPersonnelFromEnv($session);
if (!$is_auth) {
$session->set('previous', 'app_v_card_submited');
$session->set('prev_id', $vCard->getId());
return new Response(null, 302, array(
'Location' => '/v/card/auth',
));
} else {
$id_vcard = $vCard->getId();
$uri = "https://{$_SERVER['HTTP_HOST']}"; // {$_SERVER['REQUEST_URI']}";
$content = 'ACCESS_DENIED';
if ($vCard->getstatut() == 'à valider') { // NOTE: statut set in card_edit
$ide_dossier = $vCard->getide_dossier();
$this->disableOldPendingCards($vCard);
$owner_datas = $this->getPersonnelFromIdeDossier($ide_dossier);
$content_datas = array(
'user' => 'Bonjour '.$owner_datas['PRENOM'].',<br/>'
.'Votre nouvelle carte vient d\'être soumise à validation...<br/>'
.'Vous pouvez suivre son statut à cette adresse:<br/>'
. '<a href="'.$uri.'/v/card/'.$id_vcard.'">'
. 'Voir...'
. '</a><br/>'
. '<i>Ce message a été créé automatiquement par le gestionnaire de carte de visites des Arts et Métiers, merci de ne pas y répondre.</i>'
,
'manager' => 'La carte de '.$owner_datas['PRENOM'].' '. $owner_datas['NOM'].' attend votre validation, cliquer sur le lien pour accéder à la demande de validation.<br/>'
. '<a href="'.$uri.'/v/card/manager">'
. 'Voir...'
. '</a>',
//. 'Une nouvelle carte ('.$owner_datas['EMAIL_PRO'].') attend votre validation à cette adresse:<br/>'
);
/*
$content = '<b>Utilisateur</b><br/>'
. 'Votre nouvelle carte vient d\'être soumise à validation...<br/>'
.'Vous pouvez suivre sont statut à cette adresse:<br/>'
. '<a href="'.$uri.'/v/card/'.$id_vcard.'">'
. 'Voir...'
. '</a>'
.'<hr/><b>Manager</b><br/>'
.'Une nouvelle carte attend votre validation à cette adresse:<br/>'
. '<a href="'.$uri.'/v/card/'.$id_vcard.'?manager=1">'
. 'Voir...'
. '</a>'
;
//*/
$subject = '[Arts et Métiers] - carte de visite à valider - '.$owner_datas['PRENOM'].' '.$owner_datas['NOM']; // 'Carte de visite soumise';
// $content = $content_datas['user'].'<hr/>'.$content_datas['manager'];
//* / TODO: enable this
$this->notifyForVCard($mailer, $vCard, $subject, $content_datas, $logger);
//*/
}
/*
return new Response($content, 200, array(
'Content-type' => 'text/html',
)
);
*/
return new Response(null, 302, array(
'Location' => '/v/card',
));
} // END is_auth
}
protected function duplicateCard(VCard $vCard, array $personnel_datas, EntityManagerInterface $em) { // VCardRepository $vCardRepository) {
$out = false;
if (isset($vCard) && isset($personnel_datas['IDE_MANAGER']) && isset($em)) {
// echo(__METHOD__.': '.var_export($vCard, true)); echo('<br/>');
$new_card = new VCard();
$new_id = $this->getNewVCardId();
$new_card->setid_vcard($new_id);
$new_card->settitre($vCard->gettitre());
$new_card->settel($vCard->gettel());
$new_card->setide_dossier($vCard->getide_dossier());
$new_card->setemail($vCard->getemail());
$new_card->setavec_photo($vCard->getavec_photo());
$new_card->setstatut('enregistrée');
$new_card->setVERSION(($vCard->getversion() * 1) + 1);
$new_card->setide_manager($personnel_datas['IDE_MANAGER']);
if ($this->isSelfValidator($personnel_datas)) {
$new_card->setstatut('validé');
}
$new_card->setDMODIFICATION((new DateTime('now', new DateTimeZone('Europe/Budapest'))));
// echo(__METHOD__.': '.var_export($new_card, true)); exit();
// $vCardRepository->add($new_card, true);
$em->detach($vCard);
$em->persist($new_card);
$em->flush();
$out = true;
}
return($out);
}
/**
* @Route("/{id_vcard}/duplicate", name="app_v_card_duplicate", methods={"GET", "POST"})
*/
public function duplicate(Request $request, VCard $vCard, VCardRepository $vCardRepository): Response
{
$session = $request->getSession();
$is_auth = $session->get('is_auth');
$user_email = $session->get('user_email');
$personnel_datas = $this->getPersonnelFromEnv($session);
if (!$is_auth) {
$session->set('previous', 'app_v_card_duplicate');
$session->set('prev_id', $vCard->getId());
return new Response(null, 302, array(
'Location' => '/v/card/auth',
));
} else {
// echo(__METHOD__.': '.var_export($vCard, true)); exit();
$new_card = new VCard();
$new_id = $this->getNewVCardId();
$new_card->setid_vcard($new_id);
$new_card->settitre($vCard->gettitre());
$new_card->settel($vCard->gettel());
$new_card->setide_dossier($vCard->getide_dossier());
$new_card->setemail($vCard->getemail());
$new_card->setavec_photo($vCard->getavec_photo());
$new_card->setstatut('enregistrée');
$new_card->setVERSION(($vCard->getversion() * 1) + 1);
$new_card->setide_manager($personnel_datas['IDE_MANAGER']);
// echo(__METHOD__.': '.var_export($new_card, true)); exit();
$vCardRepository->add($new_card, true);
return $this->redirectToRoute('app_v_card_edit', ['id_vcard' => $new_id], Response::HTTP_SEE_OTHER);
}
}
/**
* @Route("/{id_vcard}/infos", name="app_v_card_info", methods={"GET", "POST"})
*/
public function infos(Request $request, VCard $vCard, VCardRepository $vCardRepository): Response {
$session = $request->getSession();
$is_auth = $session->get('is_auth');
$user_email = $session->get('user_email');
$personnel_datas = $this->getPersonnelFromEnv($session);
// $user_email = $session->get('is_auth');
// echo(__METHOD__.': session:'.var_export($_SESSION, true)); exit();
$ide_dossier = $vCard->getide_dossier();
$is_owner = $ide_dossier == $personnel_datas['IDE_DOSSIER'];
$last_card = $this->getLastCardId($vCard);
$owner_id = $vCard->getide_dossier();
$query = 'select max(id_vcard) as F_ID from vcard where ide_dossier='.$owner_id." AND statut='enregistrée' or statut='validé'";
echo(__METHOD__.' query: ' . $query);
if (!$is_auth) {
$session->set('previous', 'app_v_card_info');
return new Response(null, 302, array(
'Location' => '/v/card/auth',
));
} else {
$ide_manager = $personnel_datas['IDE_MANAGER'];
// $ide_dossier = $datas['IDE_DOSSIER'];
$manager_datas = $this->getPersonnelFromIdeDossier($ide_manager);
$owner_datas = $this->getPersonnelFromIdeDossier($ide_dossier);
echo(__METHOD__.': last card datas: '.var_export($last_card, true));
echo('<br/>');
echo(__METHOD__.': owner_datas: '.var_export($owner_datas, true));
echo('<br/>');
echo(__METHOD__.': manager_datas: '.var_export($manager_datas, true));
echo('<br/>');
echo(__METHOD__.': personnel_datas: '.var_export($personnel_datas, true));
echo('<br/>');
echo(__METHOD__.': personnel_datas: '.var_export($personnel_datas, true));
echo(__METHOD__.': '.var_export($vCard, true));
echo(__METHOD__.': photo:' . $vCard->getavec_photo()); exit();
}
}
public function getLastCardId(VCard $vcard) {
$out = null;
if (!empty($vcard)) {
$owner_id = $vcard->getide_dossier();
$query = 'select max(id_vcard) as F_ID from vcard where ide_dossier='.$owner_id." AND (statut='enregistrée' or statut='validé')";
$result = $this->selectRaw($query);
if (isset($result[0]['F_ID'])) {
$out = $result[0]['F_ID'];
}
}
return $out;
}
/**
* @Route("/{id_vcard}/liveedit", name="app_v_card_liveedit", methods={"GET", "POST"})
*/
public function liveedit(Request $request, VCard $vCard, EntityManagerInterface $em): Response
{
$session = $request->getSession();
$is_auth = $session->get('is_auth');
$user_email = $session->get('user_email');
$personnel_datas = $this->getPersonnelFromEnv($session);
// $user_email = $session->get('is_auth');
// echo(__METHOD__.': session:'.var_export($_SESSION, true)); exit();
// echo(__METHOD__.': personnel_datas: '.var_export($personnel_datas, true)); exit();
$ide_dossier = $vCard->getide_dossier();
$cur_card_id = $vCard->getId();
if (isset($personnel_datas['IDE_DOSSIER'])) {
$is_owner = $ide_dossier == $personnel_datas['IDE_DOSSIER'];
}
if (!$is_auth) {
$session->set('previous', 'app_v_card_edit');
$session->set('prev_id', $vCard->getId());
return new Response(null, 302, array(
'Location' => '/v/card/auth',
));
} else if (!$is_owner) {
return new Response(null, 302, array(
'Location' => 'notfound',
));
exit();
/*
return new Response(null, 404, array(
// 'Location' => 'auth',
));
*/
} // else
$last_card_id = $this->getLastCardId($vCard);
if (FALSE &&
!empty($last_card_id) && $cur_card_id != $last_card_id
) {
return $this->redirectToRoute('app_v_card_edit', ['id_vcard' => $last_card_id], Response::HTTP_SEE_OTHER);
} else {
$infos_carte = $this->getV_INFOS_CARTE($vCard->getide_dossier());
$form = $this->createForm(VCardType::class, $vCard);
$form->handleRequest($request);
$custom_photo_key = '';
$delete_custom_key = '';
$file_path = $this->uploadsDIR.('photo_'.$ide_dossier.'.jpg');
$is_custom_photo = (file_exists($file_path)); // NOTE: user needs to delete to disable custom
if ($is_custom_photo) {
$custom_photo_key = $this->storeInSession($session, $file_path);
$delete_custom_key = $this->storeInSession($session, $file_path);
}
if ($form->isSubmitted() && $form->isValid()) {
// echo(__METHOD__.': vCard:'.var_export($vCard, true)); exit();
if (!$this->duplicateCard($vCard, $personnel_datas, $em)) { // $vCardRepository)) {
// Redirect to error
echo(__METHOD__.': vCard: duplicate FAILED: '); // .var_export($vCard, true)); exit();
exit();
}
return $this->redirectToRoute('app_v_card_index', [], Response::HTTP_SEE_OTHER); exit();
}
// echo('<!-- '.__METHOD__.' '.$this->getLastCardId($vCard).' // -->');
return $this->renderForm('v_card/edit.html.twig', [
'v_card' => $vCard,
'user_email' => $user_email,
'personnel' => $personnel_datas,
'is_new' => false,
'is_live' => true,
'disp_form' => true,
'is_manager' => $session->get('is_manager'),
'custom_photo_key' => $custom_photo_key,
'delete_custom_key' => $delete_custom_key,
'form' => $form,
]);
} // END if edit
}
/**
* @Route("/{id_vcard}/edit", name="app_v_card_edit", methods={"GET", "POST"})
*/
public function edit(Request $request, VCard $vCard, VCardRepository $vCardRepository): Response
{
// $this->testConnection($vCardRepository->getDBConnection());
// echo(__METHOD__.': vCard: '.var_export($vCard->getide_dossier(), true)); // exit();
$session = $request->getSession();
$is_auth = $session->get('is_auth');
$user_email = $session->get('user_email');
$personnel_datas = $this->getPersonnelFromEnv($session);
// $user_email = $session->get('is_auth');
// echo(__METHOD__.': session:'.var_export($_SESSION, true)); exit();
// echo(__METHOD__.': personnel_datas: '.var_export($personnel_datas, true)); exit();
$ide_dossier = $vCard->getide_dossier();
$cur_card_id = $vCard->getId();
if (isset($personnel_datas['IDE_DOSSIER'])) {
$is_owner = $ide_dossier == $personnel_datas['IDE_DOSSIER'];
}
if (!$is_auth) {
$session->set('previous', 'app_v_card_edit');
$session->set('prev_id', $vCard->getId());
return new Response(null, 302, array(
'Location' => '/v/card/auth',
));
} else if (!$is_owner) {
/*
$owner_datas = $this->getPersonnelFromIdeDossier($ide_dossier);
echo(__METHOD__.' owner: '.var_export($owner_datas, true).' personnel_datas: ' . var_export($personnel_datas, true));
echo(__METHOD__. ': not owner'); exit();
// */
return new Response(null, 302, array(
'Location' => 'notfound',
));
/*
return new Response(null, 404, array(
// 'Location' => 'auth',
));
*/
} // else
$last_card_id = $this->getLastCardId($vCard);
if (!empty($last_card_id) && $cur_card_id != $last_card_id
) {
return $this->redirectToRoute('app_v_card_edit', ['id_vcard' => $last_card_id], Response::HTTP_SEE_OTHER);
} else {
$infos_carte = $this->getV_INFOS_CARTE($vCard->getide_dossier());
$form = $this->createForm(VCardType::class, $vCard);
$form->handleRequest($request);
$custom_photo_key = '';
$delete_custom_key = '';
$file_path = $this->uploadsDIR.('photo_'.$ide_dossier.'.jpg');
$is_custom_photo = (file_exists($file_path)); // NOTE: user needs to delete to disable custom
if ($is_custom_photo) {
$custom_photo_key = $this->storeInSession($session, $file_path);
$delete_custom_key = $this->storeInSession($session, $file_path);
}
if ($form->isSubmitted() && $form->isValid()) {
// echo(__METHOD__.': vCard:'.var_export($vCard, true)); exit();
if ($this->isSelfValidator($personnel_datas)) {
$vCard->setstatut('validé');
}
$vCard->setDMODIFICATION((new DateTime('now', new DateTimeZone('Europe/Budapest'))));
$vCardRepository->add($vCard, true);
return $this->redirectToRoute('app_v_card_index', [], Response::HTTP_SEE_OTHER);
}
// echo('<!-- '.__METHOD__.' '.$this->getLastCardId($vCard).' // -->');
return $this->renderForm('v_card/edit.html.twig', [
'v_card' => $vCard,
'user_email' => $user_email,
'personnel' => $personnel_datas,
'is_new' => false,
'disp_form' => true,
'is_manager' => $session->get('is_manager'),
'custom_photo_key' => $custom_photo_key,
'delete_custom_key' => $delete_custom_key,
'form' => $form,
]);
} // END if edit
}
/**
* @Route("/{id_vcard}", name="app_v_card_delete", methods={"POST"})
*/
public function delete(Request $request, VCard $vCard, VCardRepository $vCardRepository): Response
{
$session = $request->getSession();
$is_auth = $session->get('is_auth');
$user_email = $session->get('user_email');
// $user_email = $session->get('is_auth');
// echo(__METHOD__.': session:'.var_export($_SESSION, true)); exit();
if (!$is_auth) {
$session->set('previous', 'app_v_card_delete');
return new Response(null, 302, array(
'Location' => '/v/card/auth',
));
} else {
if ($this->isCsrfTokenValid('delete'.$vCard->getID_VCARD(), $request->request->get('_token'))) {
echo(__METHOD__.': id: '.$vCard->getID_VCARD()); exit();
// $vCardRepository->remove($vCard, true);
}
return $this->redirectToRoute('app_v_card_index', [], Response::HTTP_SEE_OTHER);
}
}
}