<?php
namespace App\Controller;
// begin token-guard ---------------------------------------------------------------------------------
use Symfony\Component\Security\Csrf\CsrfTokenManagerInterface;
use Symfony\Component\Security\Csrf\CsrfToken;
use Symfony\Component\Security\Core\Exception\InvalidCsrfTokenException;
use Symfony\Component\Security\Guard\Authenticator\AbstractFormLoginAuthenticator;
// end token-guard ---------------------------------------------------------------------------------
// begin mochel meyer products --------------------------------------------------------------
use App\Service\MeylerService;
use App\Service\USRService;
use App\Service\LOGDEFService;
use App\Service\DIVService;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
use Symfony\Component\DependencyInjection\ParameterBag\ParameterBagInterface;
use Symfony\Component\Validator\Validator\ValidatorInterface; // contrôleur de contraintes
use Doctrine\Persistence\ManagerRegistry;
use Doctrine\ORM\Tools\Pagination\Paginator;
use Symfony\Component\PasswordHasher\Hasher\UserPasswordHasherInterface; // l'encodeur ofcourse
use App\Entity\usr;
use App\Entity\cat;
use App\Entity\prf;
// use App\Entity\ppi;
use App\Entity\CFEMP;
use App\Entity\CFPPI;
class USRController extends AbstractController
{
// some services, begin token-guard ---------------------------------------------------------------------------------
private $csrfTokenManager;
private $parambag;
private $meylerservice;
private $usrservice;
private $divservice;
public function __construct(
CsrfTokenManagerInterface $csrfTokenManager,
ParameterBagInterface $parambag,
MeylerService $meylerservice,
USRService $usrservice,
DIVService $divservice
)
{
$this->csrfTokenManager = $csrfTokenManager;
$this->parambag = $parambag;
$this->meylerservice = $meylerservice;
$this->usrservice = $usrservice;
$this->divservice = $divservice;
}
// end some services, token-guard ---------------------------------------------------------------------------------
// recherche usr réservé aux admins + gestionnaires
#[Route(path: '/admin/usr/rec/{CFPPIID}', name: 'admin_usr_rec')]
public function rec
(
$CFPPIID,
Request $request,
ManagerRegistry $doctrine,
UserPasswordHasherInterface $passwordHasher
): Response
{
$em = $doctrine->getManager();
$user = $this->getUser();
// accès limité aux gestionnaire + admin
$lstadmin = array_merge($this->divservice->getIdGestionnaire(), $this->divservice->getIdAdmin());
if(($user != null)&&(in_array($user->getUsrid(), $lstadmin))){
// formulaire recherche
$listCAT = $em->getRepository(cat::class)->findAllOrderedByLib(array(),'array');
$form_rec = $this->createForm('App\Form\USR_rec', null, array(
'listCAT'=>$listCAT,
));
$form_rec->add(
'Rechercher', 'Symfony\Component\Form\Extension\Core\Type\SubmitType', array(
'label'=>"Rechercher",
'attr'=>array('class'=>'btn btn-primary'),
)
);
$form_rec->add('Reset','Symfony\Component\Form\Extension\Core\Type\ResetType',
array(
'label'=>'Réinitialiser',
'attr'=>array('class'=>'btn btn-default'),
)
);
$form_rec->handleRequest($request);
// Récupération des données POST et construction de la requete de recherche
$postData = $request->request->get('usr_rec');
// Requete de recherche
$rec_limit = 500;
$query = $em->getRepository(usr::class)->createQueryBuilder('usr');
$query
->select('usr.usrid, usr.usrorg, usr.usrnom, usr.usrpre, usr.usrstatut, usr.usremail, usr.usrdatlog, usr.usrdatcre, usr.usrdatenvchgpwd, usr.usrcodpos, cat.catlib')
->join('usr.catid','cat')
->where('usr.usrid NOT IN (:usradm)') // pas les admin (inf/dpf)
->setParameter('usradm' , array(11,32))
;
if(($form_rec->isSubmitted())&&($form_rec->isValid())){
// recherche par Nom ou Prénom
if($postData['usrnom']!=''){
$query
->andwhere('usr.usrnom LIKE :usrnom OR usr.usrpre LIKE :usrnom')
->setParameter('usrnom' , '%'.$postData['usrnom'].'%')
;
}
if($postData['usremail']!=''){
$query
->andwhere('usr.usremail LIKE :usremail')
->setParameter('usremail' , '%'.$postData['usremail'].'%')
;
}
if($postData['usrcodpos']!=''){
$query
->andwhere('usr.usrcodpos LIKE :usrcodpos')
->setParameter('usrcodpos' , '%'.$postData['usrcodpos'].'%')
;
}
if($postData['usrorg']!=''){
$query
->andwhere('usr.usrorg LIKE :usrorg')
->setParameter('usrorg' , '%'.$postData['usrorg'].'%')
;
}
// recherche par Catégorie
if($postData['catid']!=''){
$query
->andwhere('usr.catid = :catid')
->setParameter('catid' , $postData['catid'])
;
}
// recherche par Statut
if($postData['usrstatut']!='5'){
$query
->andwhere('usr.usrstatut = :usrstatut')
->setParameter('usrstatut' , $postData['usrstatut'])
;
}
// recherche par date création
$creation_fSPeriod = $postData['creation_fSPeriod'];
if(($postData['creation_period']!='')&&($creation_fSPeriod=='checked')){ // si switch on
list($creatfrom,$creatto) = explode(' - ',$postData['creation_period']);
$query
->andwhere('usr.usrdatcre BETWEEN :creatfrom AND :creatto')
->setParameter('creatfrom', $this->divservice->DateFR2EN($creatfrom))
->setParameter('creatto', $this->divservice->DateFR2EN($creatto))
;
}
}else{
$creation_fSPeriod = ""; // exclusion période création par défo (voir form)
$query
->andwhere('usr.usrstatut = :usrstatut')
->setParameter('usrstatut' , '0') // par défaut les en attente seuls
;
}
$query
->orderBy('usr.usrnom','ASC');
$utilisateurs = $query->getQuery()->getArrayResult();
$nb_usr = count($utilisateurs);
if($nb_usr > $rec_limit){
$utilisateurs = $query->getQuery()->setMaxResults($rec_limit)->getArrayResult();
}
// vérif pour chaque utilisateur si ID présent dans une table liée (possibilité de noms de champ différents)
$grp_tables = array(
'tbl_usrid' => array('CFPPI') // lien modif/création/annulation (usrid)
// 'tbl_USRIDDERMOD' => array('BAD','DIS','INS','INTZ','MEC','MOB','MOV','NOTZ','ORG','PER','PLA','QUA','SES'), // lien modf (USRIDDERMOD)
// 'tbl_USRIDCRE' => array('BAD_FIC','BAD_ZON','DIS','INTZ','INT_MOB','MCT','MEC','MEC_FIC','MOB','MOB_FIC','MOB_URL','MOV','MOV_FIC','MOV_URL','MPR','NOT_FIC','ORG','OWM','OWQ','QMO','QUA','QUA_FIC','SES_FIC','SES_URL','USR_BUL','USR_DEP','DIS_USR') // lien création (USRIDCRE)
);
foreach($utilisateurs as $key=>$utilisateur){
$utilisateurs[$key]['nboccur'] = 0;
foreach($grp_tables as $key2=>$ungrp){
$nomchamp = substr($key2, 4);
foreach($ungrp as $table){
$query = $em->getRepository('App\Entity\\'.$table)->createQueryBuilder($table);
$query
->select('count('.$table.'.'.$nomchamp.')')
->where($table.'.'.$nomchamp.' = :usrid')
->setParameter('usrid', $utilisateur['usrid'])
;
$sql = $query->getQuery();
$nboccur = $sql->getSingleScalarResult();
if($nboccur>0){
$utilisateurs[$key]['nboccur'] = $nboccur;
break;
}
}
}
}
// vérif CFPPI OK (existe et correspond à USR), si non saisie paramètres oblig
// $ppi_param = $this->divservice->verif_cfppi_param($user);
// $cfppiid = $this->divservice->crypt_cfppiid($ppi_param[1]);
// Affichage formulaire de recherche et de la liste des utilisateurs
return $this->render(
'usr\rec.html.twig',
array(
'help_dir' => $this->parambag->get('dochelp_web_path'), //forcreatmenu
'lstadmin' => implode(',',$lstadmin),
'form_rec' => $form_rec->createView(),
'usrs' => $utilisateurs,
'nb_usr' => $nb_usr,
'rec_limit' => $rec_limit,
'creation_fSPeriod' => $creation_fSPeriod,
'cfppi_ok' => '1', // nécessaire à base.html.twig, paramètres forcément renseignés ici...
'cfppiid' => $CFPPIID,
)
);
}else{ // erreur réservé admin
$this->get('session')->getFlashBag()->add(
'Erreur',
'La page demandée n\'existe pas ! (adm)'
);
// Affichage page inexistante
return $this->render('default\noway.html.twig',
array(
'linkaccueil'=> 0,
'width'=> 400,
'height'=> 100
)
);
}
}
// Suppression d'un compte USR (limité aux admin)
#[Route(path: '/admin/usr/sup/{usrid}', name: 'admin_usr_sup')]
public function sup
(
$usrid,
Request $request,
ManagerRegistry $doctrine
): Response
{
$em = $doctrine->getManager();
$user = $this->getUser();
$sup = false;
$lstadmin = $this->divservice->getIdAdmin();
if(($user != null)&&(in_array($user->getUsrid(), $lstadmin))){ // seuls les admin peuvent éliminer
$usrid = ($usrid-17) / 2048; // transfo simple id dans rec.html.twig
$usr = $em->getRepository(usr::class)->findOneBy(array('usrid'=>$usrid));
if($usr!=null){
$em->remove($usr);
$em->flush();
$supp = true;
}
if($supp){
$this->get('session')->getFlashBag()->add(
'Succès',
"Compte supprimé avec succès"
);
}else{
$this->get('session')->getFlashBag()->add(
'Erreur',
"Le compte n'a pas pu être supprimé"
);
}
// Redirection vers la liste des usr
return $this->redirect($this->generateUrl('admin_usr_rec', array('CFPPIID'=>$cfppi->getCFPPIID())));
}else{ // erreur réservé admin
$this->get('session')->getFlashBag()->add(
'Erreur',
'La page demandée n\'existe pas ! (adm)'
);
// Affichage page inexistante
return $this->render('default\noway.html.twig',
array(
'linkaccueil'=> 1,
'width'=> 400,
'height'=> 100
)
);
}
}
// modification d'un compte USR par admin
#[Route(path: '/admin/usr/maj/{usrid}', name: 'admin_usr_maj')]
public function maj
(
$usrid,
Request $request,
ManagerRegistry $doctrine,
UserPasswordHasherInterface $passwordHasher,
ValidatorInterface $validator
): Response
{
$em = $doctrine->getManager();
$user = $this->getUser();
$maj = false;
$lstadmin = array_merge($this->divservice->getIdGestionnaire(), $this->divservice->getIdAdmin());
if(($user != null)&&(in_array($user->getUsrid(), $lstadmin))){ // gestionnaire et admin peuvent modifier
$usrid = ($usrid-103) / 4096; // transfo simple id dans rec.html.twig
$usr = $em->getRepository(usr::class)->findOneBy(array('usrid'=>$usrid));
if($usr!=null){
$statut_avant = $usr->getusrstatut(); // récup statut avant modif
$listCAT = $em->getRepository(CAT::class)->findAllOrderedByLib(array(),'array');
// formulaire màj admin
$form_majadm= $this->createForm('App\Form\USR_majadm', $usr, array(
'listCAT' => $listCAT,
));
// récup CFPPIID du user pou bouton annuler -> retour au CFPPIID du user
$cfppi = $em->getRepository(CFPPI::class)->findOneBy(array('usrid'=>$user->getUsrid())); // il nepeuyenavoir kun
$cfppiid = $this->divservice->crypt_cfppiid($cfppi->getCFPPIID());
$form_majadm->add('Annuler', 'Symfony\Component\Form\Extension\Core\Type\ButtonType', array(
'label'=>"Annuler",
'attr'=>array('class'=>'btn btn-primary', 'data-url'=>$this->generateUrl('admin_usr_rec', array('CFPPIID'=>$cfppiid)))
));
$form_majadm->add('Enregistrer','Symfony\Component\Form\Extension\Core\Type\SubmitType',array(
'label'=>"Enregistrer",
'attr'=>array('class'=>'btn btn-primary', 'data-url'=>$this->generateUrl('admin_usr_rec', array('CFPPIID'=>$cfppiid)))
));
// récup CFPPIID du user modifié par ADMIN et cryptag sdi existe
$ppi_param = $this->divservice->verif_cfppi_param($usr);
if($ppi_param[1]!=0){
$cfppiid_user = $this->divservice->crypt_cfppiid($ppi_param[1]);
}else{
$cfppiid_user = 0;
}
if($cfppiid_user!=0){ // accès au PPI du USER is existe uniquement ben
$form_majadm->add('PPI', 'Symfony\Component\Form\Extension\Core\Type\ButtonType', array(
'label'=>"Consulter le PPI",
'attr'=>array('class'=>'btn btn-primary', 'data-url'=>$this->generateUrl('ppi_admin', array('CFPPIID'=>$cfppiid_user)))
));
}
$form_majadm->handleRequest($request);
// vérif saisie form_majadm via validator annotations niveau Entity (après validation formulaire)
if($request->request->get('usr_majadm')){
// dd($request->request->get('usr_maj'));
$errors = $validator->validate($usr);
if(count($errors) > 0) {
// dd($errors);
foreach($errors as $error){
$this->get('session')->getFlashBag()->add(
'Erreur',
$error->getmessage()
);
}
}
}else{
$errors = array();
}
if($request->request->get('usr_majadm')){ // maj utilisateur
if(($form_majadm->isSubmitted())&&($form_majadm->isValid())){
$postData = $request->request->get('usr_majadm');
// begin token-guard --------------------------------------------------------------------------------------------------------------
$csrfToken = $postData['_token'];
if(false === $this->csrfTokenManager->isTokenValid(new CsrfToken('usrmajadgarg88', $csrfToken))){
$this->get('session')->getFlashBag()->add(
'Erreur',
"Impossible d'accéder à la fonction demandée. (toua)" // bad token user admin
);
return $this->redirect($this->generateUrl('pageaccueil')); // renvoi caval
// end token-guard --------------------------------------------------------------------------------------------------------------
}else{
if($postData['usrpwdmaj'] != ''){ // redéfinition du mot de passe
// vérif pwd ok
$pwdok = $this->usrservice->verif_pwd_usr($postData['usrpwdmaj']);
if($pwdok==false){
$this->get('session')->getFlashBag()->add(
'Erreur',
'Oup\'s, le mot de passe ne répond pas aux conditions de sécurité requises'
);
// re-affichage formulaire
return $this->render('usr\majadm.html.twig',
array(
'help_dir' => $this->parambag->get('dochelp_web_path'), //forcreatmenu
'form_majadm' => $form_majadm->createView(),
'usr' => $usr,
'errors' => $errors,
'cfppi_ok' => '1',
'cfppiid' => $cfppiid,
'cfppiid_user' => $cfppiid_user,
)
);
}else{
$hashedPassword = $passwordHasher->hashPassword(
$usr,
$postData['usrpwdmaj']
);
$usr->setPassword($hashedPassword);
}
}
// Enregistrement en bdd
$em = $doctrine->getManager();
$em->persist($usr);
$em->flush();
$activation = false; // ===========================================
if(($statut_avant==0)&&($postData['usrstatut']==1)){ // si (ré)activation du compte
$activation = true;
$mailaenv = array();
$mailaenv['sujet'] = "Activation de votre compte Collectiv'Finance";
$mailaenv['titre'] = "[Rural Consult] Activation de votre compte d'accès à Collectiv'Finance";
$mailaenv['expediteur_nom'] = "Assistance technique Rural Consult";
$mailaenv['expediteur_email'] = "assistance.technique@solidaires.com";
$mailaenv['destinataire_nom'] = $usr->getUsrpre().' '.$usr->getUsrnom();
$mailaenv['destinataire_email'] = $usr->getUsremail();
$mailaenv['fichiers'] = array(); // les fichiers joints
//$mailaenv['fichiers'][0] = array(); // 1° fichier à joindre => pas de documents joints
//$mailaenv['fichiers'][0]['chemin_fichier'] = "";
//$mailaenv['fichiers'][0]['nom_fichier'] = "";
//$mailaenv['fichiers'][0]['nom_orig'] = "";
$mailaenv['cc'] = ''; // pas de copie ici
$mailaenv['bcc'] = ''; // pas de copi cach
$urllogo = $this->parambag->get('img_path')."entete_emailing.png";
// texte du mail
$bodymail = "<div style='width:680px;margin:0 auto;'>";
$bodymail.= "<img style='width:680px;height:58px;border:none' src='".$urllogo."'>";
$bodymail.= "<div style='width:677px;text-align:left;font-size:12px Arial, Helvetica, sans-serif;color:#414141;border:1px solid #ff0000;overflow:hidden;'>";
$bodymail.= "<p style='padding:30px 10px;'>Bonjour <b>".$usr->getUsrpre().' '.$usr->getUsrnom()."</b><br /> <br />";
$bodymail.= "Votre demande d'accès aux outils d'analyse financière Collectiv'Finance vient d'être validée.<br /> <br />";
$bodymail.= "Vous pouvez dès maintenant <a href=".$this->parambag->get('web_path')."><b>vous connecter</b></a> et ";
$bodymail.= "utiliser ces outils d'analyse financière mis à la disposition des intercommunalités et des communes.<br /> <br />";
$bodymail.= "En cas de difficulté technique, vous pourrez contacter l'assistance technique de Rural Consult :<br />";
$bodymail.= "- par courriel : <a href='mailto:assistance.technique@solidaires.com' title='Assistance technique Rural Consult'>assistance.technique@solidaires.com</a><br />";
$bodymail.= "- par téléphone : <b>01 58 50 75 75</b>.<br/> <br />";
$bodymail.= "Pour toute question concernant les outils eux-mêmes, contacter par courriel : <a href='mailto:territoiresconseils@caissedesdepots.fr' title='Rural Consult'>territoiresconseils@caissedesdepots.fr</a><br /> <br />";
$bodymail.= "<span style='font-weight: 600;'>Rural Consult</strong><br />";
$bodymail.= "<span style='font-weight: 600;color:#ff0000;'>Banque des Territoires - Caisse des Dépôts</span><br /> <br />";
$bodymail.= "</p></div>";
$bodymail.= "<div style='width:679px;height:20px;text-align:center;background:#ff0000;font-size:12px Arial, Helvetica, sans-serif;color:#fff;'>";
$bodymail.= "Rural Consult © Tous droits réservés</div>";
$bodymail.= "</div>";
$mailaenv['body'] = $bodymail;
// 1° mail vers utilisateur demandeur
$unmess = $this->meylerservice->envoidunmail('demande ouverture compte',$mailaenv); // envoi
// 2° mail vers assistance.technique@solidaires.com
$mailaenv['destinataire_nom'] = "Administrateur Rural Consult";
$mailaenv['destinataire_email'] = "assistance.technique@solidaires.com"; // TODO à modifier
$unmess = $this->meylerservice->envoidunmail('demande ouverture compte',$mailaenv); // envoi
}
$message = 'Compte modifié avec succès.';
if($activation){
$message.= ' Ce compte est activé, un courriel a été expédié pour l\'informer '.$usr->getUsrpre().' '.$usr->getUsrnom().' de cette activation.';
}
// Message d'information
$this->get('session')->getFlashBag()->add(
'Succès',
$message
);
// Redirection vers la liste des Utilisateurs
return $this->redirect($this->generateUrl('admin_usr_rec', array('CFPPIID'=>$cfppiid)));
}
}
}
// (ré)Affichage formulaire
return $this->render('usr\majadm.html.twig',
array(
'help_dir' => $this->parambag->get('dochelp_web_path'), //forcreatmenu
'form_majadm' => $form_majadm->createView(),
'usr' => $usr,
'cfppi_ok' => '1', // nécessaire à base.html.twig, paramètres forcément renseignés ici...
'cfppiid' => $cfppiid,
'cfppiid_user' => $cfppiid_user,
'errors' => $errors
)
);
}else{
$this->get('session')->getFlashBag()->add(
'Erreur',
'La page demandée n\'existe pas ! (nouadm)'
);
// Affichage page inexistante
return $this->render('default\noway.html.twig',
array(
'linkaccueil'=> 1,
'width'=> 400,
'height'=> 100
)
);
}
}else{ // erreur réservé admin
$this->get('session')->getFlashBag()->add(
'Erreur',
'La page demandée n\'existe pas ! (notadm)'
);
// Affichage page inexistante
return $this->render('default\noway.html.twig',
array(
'linkaccueil'=> 1,
'width'=> 400,
'height'=> 100
)
);
}
}
// Màj compte USR par l'utilisateur lui-même
#[Route(path: '/musr/{usrid}', name: 'modifcpte')]
public function majcpte
(
$usrid,
Request $request,
ManagerRegistry $doctrine,
UserPasswordHasherInterface $passwordHasher,
ValidatorInterface $validator
): Response
{
$em = $doctrine->getManager();
$user = $this->getUser();
$usr = $em->getRepository(usr::class)->findOneBy(array('usrid'=>$usrid));
$lstadmin = array_merge($this->divservice->getIdGestionnaire(), $this->divservice->getIdAdmin());
if(($user->getusrid()==$usr->getusrid())||(in_array($user->getUsrid(), $lstadmin))){ // vérif si adéquat usr/user ou gestionnaire ou admin
// formulaire màj
$listCAT = $em->getRepository(cat::class)->findAllOrderedByLib(array(),'array');
// formulaire màj
$form_maj= $this->createForm('App\Form\USR_maj',$usr,array(
'listCAT' => $listCAT,
));
$form_maj->add('Annuler', 'Symfony\Component\Form\Extension\Core\Type\ButtonType', array(
'label'=>"Retour",
'attr'=>array('class'=>'btn btn-primary', 'data-url'=>$this->generateUrl('pageaccueil'))
));
$form_maj->add('Enregistrer','Symfony\Component\Form\Extension\Core\Type\SubmitType',array(
'label'=>"Valider",
'attr'=>array('class'=>'btn btn-primary')
));
$form_maj->handleRequest($request);
// vérif saisie form_maj via validator annotations niveau Entity (après validation formulaire)
if($request->request->get('usr_maj')){
// dd($request->request->get('usr_maj'));
$errors = $validator->validate($usr);
if(count($errors) > 0) {
// dd($errors);
foreach($errors as $error){
$this->get('session')->getFlashBag()->add(
'Erreur',
$error->getmessage()
);
}
}
}else{
$errors = array();
}
// vérif CFPPI OK (existe et correspond à USR), si non saisie paramètres oblig
$ppi_param = $this->divservice->verif_cfppi_param($user);
$cfppiid = $this->divservice->crypt_cfppiid($ppi_param[1]);
if($request->request->get('usr_maj')){ // maj utilisateur
if(($form_maj->isSubmitted())&&($form_maj->isValid())){
$postData = $request->request->get('usr_maj');
// begin token-guard --------------------------------------------------------------------------------------------------------------
$csrfToken = $postData['_token'];
if (false === $this->csrfTokenManager->isTokenValid(new CsrfToken('usrmajgarg188', $csrfToken))) {
$this->get('session')->getFlashBag()->add(
'Erreur',
"Impossible d'accéder à la fonction demandée. (tou)" // bad token user
);
return $this->redirect($this->generateUrl('pageaccueil')); // renvoi caval
// end token-guard --------------------------------------------------------------------------------------------------------------
}else{
if($postData['usrpwdmaj'] != ''){ // redéfinition du mot de passe
// vérif pwd ok
$pwdok = $this->usrservice->verif_pwd_usr($postData['usrpwdmaj']);
if($pwdok==false){
$this->get('session')->getFlashBag()->add(
'Erreur',
'Votre mot de passe ne répond pas aux conditions de sécurité requises ! Veuillez y remédier.'
);
// re-affichage formulaire
return $this->render('usr\maj.html.twig',
array(
'help_dir' => $this->parambag->get('dochelp_web_path'), //forcreatmenu
'form_maj' => $form_maj->createView(),
'usr' => $usr,
'errors' => $errors,
'cfppi_ok' => '1',
'cfppiid' => $CFPPIID,
)
);
}else{
$hashedPassword = $passwordHasher->hashPassword(
$usr,
$postData['usrpwdmaj']
);
$usr->setPassword($hashedPassword);
}
}
// Enregistrement en bdd
$em = $doctrine->getManager();
$em->persist($usr);
$em->flush();
// Message d'information
$this->get('session')->getFlashBag()->add(
'Succès',
'Compte modifié avec succès'
);
return $this->redirect($this->generateUrl('pageaccueil')); // redir accueil lambda
}
}
}
// Affichage formulaire
return $this->render('usr\maj.html.twig',
array(
'help_dir' => $this->parambag->get('dochelp_web_path'), //forcreatmenu
'form_maj' => $form_maj->createView(),
'usr' => $usr,
'cfppi_ok' => '1',
'cfppiid' => $cfppiid,
'errors' => $errors,
)
);
}else{ // erreur de ID usr
$this->get('session')->getFlashBag()->add(
'Erreur',
'La page demandée n\'existe pas ! (id)'
);
// Affichage page inexistante
return $this->render('default\noway.html.twig',
array(
'linkaccueil'=> 1,
'width'=> 400,
'height'=> 100
)
);
}
}
// Ouverture d'un nouveau compte, vérification préalable de l'e-mail
// Envoi d'un mail avec un lien de validation de l'e-mail
#[Route(path: '/nusr', name: 'nouvcpte')]
public function ajoutcpte
(
Request $request,
ManagerRegistry $doctrine,
UserPasswordHasherInterface $passwordHasher,
ValidatorInterface $validator
): Response
{
$em = $doctrine->getManager();
// formulaire ajout
$params = array();
$listCAT = $em->getRepository(cat::class)->findAllOrderedByLib($params,'array');
$usr = new usr();
$form_ajo = $this->createForm('App\Form\USR_ajo',$usr, array(
'listCAT'=>$listCAT,
));
$form_ajo->add('Enregistrer','Symfony\Component\Form\Extension\Core\Type\SubmitType',
array(
'label'=>"Valider",
'attr'=>array('class'=>'btn btn-primary')
)
);
$form_ajo->handleRequest($request);
// vérif saisie form_ajo via validator annotations niveau Entity (après validation formulaire)
if($request->request->get('usr_ajo')){
// dd($request->request->get('usr_ajo'));
$errors = $validator->validate($usr);
if(count($errors) > 0) {
// dd($errors);
foreach($errors as $error){
$this->get('session')->getFlashBag()->add(
'Erreur',
$error->getmessage()
);
}
}
}else{
$errors = array();
}
if($request->request->get('usr_ajo')){ // ajout utilisateur
if(($form_ajo->isSubmitted())&&($form_ajo->isValid())){ // si tout OK selon validator
$postData = $request->request->get('usr_ajo');
// begin token-guard --------------------------------------------------------------------------------------------------------------
$csrfToken = $postData['_token'];
if (false === $this->csrfTokenManager->isTokenValid(new CsrfToken('usrajogarg;d44d', $csrfToken))) {
$this->get('session')->getFlashBag()->add(
'Erreur',
"Impossible d'accéder à la fonction demandée. (tok-u)"
);
return $this->redirect($this->generateUrl('pageaccueil')); // renvoi caval
// end token-guard --------------------------------------------------------------------------------------------------------------
}else{
if($postData['usrpwdajo'] != ''){ // saisie du mot de passe, vérif pwd ok
$pwdok = $this->usrservice->verif_pwd_usr($postData['usrpwdajo']);
if($pwdok==false){
$this->get('session')->getFlashBag()->add(
'Erreur',
'Votre mot de passe ne répond pas aux conditions de sécurité requises'
);
// re-affichage formulaire
return $this->render('usr\ajo.html.twig', array(
'form_ajo' => $form_ajo->createView(),
'errors' => $errors
));
}else{ // vérif si pas existe déjà username et usremail
// traitement des chaînes retournées transmises
$enlever = array("<", ">", "script"); // contre pirates
$mettre = array("", "", "");
$usremail = str_replace($enlever, $mettre, $postData['usremail']);
$username = str_replace($enlever, $mettre, $postData['username']);
$usr_exist = $em->getRepository(usr::class)->findOneBy(array('usremail'=>$postData['usremail']));
if($usr_exist==null){
$usr_exist = $em->getRepository(usr::class)->findOneBy(array('username'=>$postData['username']));
if($usr_exist!=null){
$this->get('session')->getFlashBag()->add(
'Erreur',
'Cet identifiant (login) ne peut pas être accepté (dbl)'
);
}
}else{
$this->get('session')->getFlashBag()->add(
'Erreur',
'Cet E-mail ne peut pas être accepté (red)'
);
}
if($usr_exist!=null){
// re-affichage formulaire
return $this->render('usr\ajo.html.twig', array(
'form_ajo' => $form_ajo->createView(),
'errors' => $errors
));
}else{ // création du compte ok
$prf = $em->getRepository(prf::class)->findOneBy(array('prfid'=>3)); // Collectiv' Finance
$cat = $em->getRepository(cat::class)->findOneBy(array('catid'=>$postData['catid']));
$usrdatcre = new \DateTime();
$usrdatcre->createFromFormat("Y-m-d H:i:s", time());
$usr->setUsername($postData['username']);
$hashedPassword = $passwordHasher->hashPassword(
$usr,
$postData['usrpwdajo']
);
$usr->setPassword($hashedPassword);
// précaution excessive contre py rat, activée pour le moment
$usr->setUsrorg(str_replace($enlever, $mettre, $postData['usrorg']));
$usr->setUsrnom(str_replace($enlever, $mettre, $postData['usrnom']));
$usr->setUsrpre(str_replace($enlever, $mettre, $postData['usrpre']));
$usr->setUsrdatcre($usrdatcre);
$usr->setUsrdatchgpwd($usrdatcre);
// limiter à 24h la durée du lien de vérification de la validité d'un e-mail suite ouverture compte
$letemps = time();
$demain = time()+(3600*24);
$usr->setUsrmaictltok(uniqid('cftok_',true));
$usr->setUsrmaictllim($demain);
$usr->setUsrstatut(0); // 0 = Attente de validation - 1 = Validé - 2 = suspendu
$usr->setcatid($cat);
$usr->setprfid($prf);
$em->persist($usr);
$em->flush();
// ===================== envoi d'un mail pour vérif e-mail saisi,
// ===================== contenu de l'e-mail : lien de confirm
$mailaenv = array();
$mailaenv['sujet'] = "Demande d'ouverture de compte : Collectiv'Finances";
$mailaenv['titre'] = "[Rural Consult] Accès aux outils d'analyse financière'";
$mailaenv['expediteur_nom'] = "Collectiv'Finances";
$mailaenv['expediteur_email'] = "assistance.technique@solidaires.com"; // TODO à modifier
$mailaenv['fichiers'] = array(); // les fichiers joints
$mailaenv['cc'] = ''; // pas de copie ici
// pour préveni admin de l'intention d'ouverture de compte
$destinataire_nom_bcc = "Assistance technique Rural Consult";
$destinataire_email_bcc = "assistance.technique@solidaires.com";
$mailaenv['bcc'] = array($destinataire_email_bcc => $destinataire_nom_bcc);
$urllogo = $this->parambag->get('img_path')."entete_emailing.png";
// texte du mail
$bodymail = "<div style='width:680px;margin:0 auto;'>";
$bodymail.= "<img style='width:680px;height:58px;border:none' src='".$urllogo."'>";
$bodymail.= "<div style='width:677px;text-align:left;font-size:12px Arial, Helvetica, sans-serif;color:#414141;border:1px solid #ff0000;overflow:hidden;'>";
$bodymail.= "<p style='padding:30px 10px;'>Bonjour ".$usr->getUsrpre()." ".$usr->getUsrnom().",<br /> <br />";
$bodymail.= "Nous avons reçu une demande d'ouverture de compte pour un accès aux outils d'analyse financière mis à disposition par Rural Consult [".date('d-m-Y H:i:s')."]<br /> <br />";
$bodymail.= "Si vous êtes à l'origine de cette demande, veuillez suivre les instructions ci-dessous :<br />";
$bodymail.= " - Cliquez sur le lien afin de confirmer votre demande : <a href='";
$bodymail.= $this->parambag->get('web_path')."vemail?ie=UTF8&tok=".$usr->getUsrmaictltok()."'>Lien de confirmation</a><br /> <br />";
$bodymail.= "Si vous rencontrez des difficultés pour valider votre demande d'ouverture de compte, veuillez nous envoyer un courriel en cliquant sur : <a href='mailto:assistance.technique@solidaires.com' title='Collectiv'Finances'>Assistance Collectiv'Finance.</a><br / >";
$bodymail.= "Si vous n'avez pas demandé d'ouverture de compte, ignorez ce courriel, nous effacerons cette demande.<br /> <br />";
$bodymail.= "<i><span style='font-weight: 600;color:#0ea210;'>Important</span> : Rural Consult ne vous enverra jamais un courriel vous demandant d'indiquer votre mot de passe.</i><br /> <br />";
$bodymail.= "<span style='font-weight: 600;'>Rural Consult</strong><br />";
$bodymail.= "<span style='font-weight: 600;color:#ff0000;'>Banque des Territoires - Caisse des Dépôts</span><br /> <br />";
$bodymail.= "</p></div>";
$bodymail.= "<div style='width:679px;height:20px;text-align:center;background:#ff0000;font-size:12px Arial, Helvetica, sans-serif;color:#fff;'>";
$bodymail.= "Rural Consult © Tous droits réservés</div>";
$bodymail.= "</div>";
$mailaenv['body'] = $bodymail;
// 1° mail vers assistance.technique@solidaires.com
$mailaenv['destinataire_nom'] = "Administrateur Rural Consult";
$mailaenv['destinataire_email'] = "assistance.technique@solidaires.com"; // TODO à modifier
$unmess = $this->meylerservice->envoidunmail('demande ouverture compte',$mailaenv); // envoi
// 2° mail vers utilisateur demandeur
$mailaenv['destinataire_nom'] = $usr->getUsrpre().' '.$usr->getUsrnom();
$mailaenv['destinataire_email'] = $usr->getUsremail();
$unmess = $this->meylerservice->envoidunmail('demande ouverture compte',$mailaenv); // envoi
$this->get('session')->getFlashBag()->add(
'Succès',
'Votre compte a été créé. Un mail de vérification de votre demande vous a été envoyé. Il contient des instructions pour la transmission de votre demande à Rural Consult'
);
return $this->redirect($this->generateUrl('pageaccueil'));
}
}
}else{
$this->get('session')->getFlashBag()->add(
'Erreur',
'Votre mot de passe doit être obligatoirement indiqué'
);
// re-affichage formulaire
return $this->render('usr\ajo.html.twig', array(
'form_ajo' => $form_ajo->createView(),
'errors' => $errors
));
}
}
}
}
// Affichage form nouv usr
return $this->render('usr\ajo.html.twig', array(
'form_ajo' => $form_ajo->createView(),
'errors' => $errors
));
}
// Provenance : lien contenu dans e-mail "Demande d'ouverture de compte : Collectiv'Finances"
// - vérif du lien cliqué contenu dans l'e-mail envoyé
// - vérif du délai max autorisé (24h)
#[Route(path: '/vemail', name: 'verifemail')]
public function emailverif
(
Request $request,
ManagerRegistry $doctrine
): Response
{
if(!isset($_GET['tok'])){ // no token
$this->get('session')->getFlashBag()->add(
'Erreur',
'La page demandée n\'existe pas ! (nto)'
);
// Affichage page inexistante
return $this->render('default\noway.html.twig',
array(
'linkaccueil'=> 1,
'width'=> 400,
'height'=> 100
)
);
}else{ // ya1token
$em = $doctrine->getManager();
$usr = $em->getRepository(usr::class)->findOneBy(array('usrmaictltok'=>$_GET['tok']));
if($usr==null){ // bad token
$this->get('session')->getFlashBag()->add(
'Erreur',
'La page demandée n\'existe pas ! (bdt)'
);
// Affichage page inexistante
return $this->render('default\noway.html.twig',
array(
'linkaccueil'=> 1,
'width'=> 400,
'height'=> 100
)
);
}else{ // tok ok, vérif délai
$usrmaictllim = $usr->getUsrmaictllim(); // date limite de vérif validité e-mail suite ouverture de compte
$maintenant = time();
if($usrmaictllim < $maintenant){ // trop tard : chgt avant 24h max
$this->get('session')->getFlashBag()->add(
'Erreur',
'Le délai de vérification de l\'e-mail (24h) est dépassé (date limite : '.date('d/m/Y H:i',$usrmaictllim).'. Veuillez refaire une demande de création de compte (tim)'
);
// inactivation compte : modif e-mail pour permettre nouv dde avec même e-mail
$usremail = $usr->getUsremail().'.outlim'.rand(1, 999);
$usr->setUsremail($usremail);
$usr->setUsrmaictltok(null); // token lien vérif validité d'un e-mail suite ouverture compte
$usr->setUsrmaictllim(null); // ràz durée du lien de vérification de la validité d'un e-mail suite ouverture compte
$em->persist($usr);
$em->flush();
// Affichage page inexistante
return $this->render('default\noway.html.twig',
array(
'linkaccueil'=> 1,
'width'=> 400,
'height'=> 100
)
);
}else{ // délai OK, validation ouverture de compte, expédition mail aux admin's
// affichage confirmation d'ouverture du compte, envoi avis aux administrateurs de la demande
// ============================= envoi d'un mail aux ADMIN
$mailaenv = array();
$mailaenv['sujet'] = "Demande d'ouverture de compte : Collectiv'Finance";
$mailaenv['titre'] = "[Rural Consult] Création de compte d'accès aux outils d'analyse financière'";
$mailaenv['expediteur_nom'] = "Assistance technique Rural Consult";
$mailaenv['expediteur_email'] = "assistance.technique@solidaires.com"; // TODO à modifier
$mailaenv['fichiers'] = array(); // les fichiers joints
$mailaenv['cc'] = ''; // pas de copie ici
$mailaenv['bcc'] = ''; // pas de copi cach
$urllogo = $this->parambag->get('img_path')."entete_emailing.png";
// texte du mail
$bodymail = "<div style='width:680px;margin:0 auto;'>";
$bodymail.= "<img style='width:680px;height:58px;border:none' src='".$urllogo."'>";
$bodymail.= "<div style='width:677px;text-align:left;font-size:12px Arial, Helvetica, sans-serif;color:#414141;border:1px solid #ff0000;overflow:hidden;'>";
$bodymail.= "<p style='padding:30px 10px;'>Bonjour,<br /> <br />";
$bodymail.= "En tant qu'administrateur des outils d'analyse financière de Rural Consult, vous recevez ce courriel pour vous informer d'une demande d'ouverture de compte.<br /> <br />";
$bodymail.= "La demande est faite par : <b>".$usr->getUsrnom()." ".$usr->getUsrpre()." - ".$usr->getusrorg()."</b><br /> <br />";
$bodymail.= "Vous pouvez consulter et valider cette demande en vous connectant sur le site Collectiv'Finance : <a href=";
$bodymail.= $this->parambag->get('web_path')."><b>Vous connecter</b></a><br /> <br />";
$bodymail.= "Si vous validez cette demande, le demandeur recevra un courriel pour l'informer de l'activation de son compte lui permettant d'accéder aux outils d'analyse financière.<br /> <br />";
$bodymail.= "<span style='font-weight: 600;'>Rural Consult</strong><br />";
$bodymail.= "<span style='font-weight: 600;color:#ff0000;'>Banque des Territoires - Caisse des Dépôts</span><br /> <br />";
$bodymail.= "</p></div>";
$bodymail.= "<div style='width:679px;height:20px;text-align:center;background:#ff0000;font-size:12px Arial, Helvetica, sans-serif;color:#fff;'>";
$bodymail.= "Rural Consult © Tous droits réservés</div>";
$bodymail.= "</div>";
$mailaenv['body'] = $bodymail;
// 1° mail vers assistance.technique@solidaires.com
$mailaenv['destinataire_nom'] = "Administrateur Rural Consult";
$mailaenv['destinataire_email'] = "assistance.technique@solidaires.com"; // TODO à modifier
$unmess = $this->meylerservice->envoidunmail('Demande ouverture compte',$mailaenv); // envoi
// 2° mail vers damien.christiany@caissedesdepots.fr (06/23...))
// $mailaenv['destinataire_nom'] = "Administrateur Rural Consult";
// $mailaenv['destinataire_email'] = "damien.christiany@caissedesdepots.fr";
// $unmess = $this->meylerservice->envoidunmail('Demande ouverture compte',$mailaenv); // envoi
$usr->setUsrmaictltok(null); // token lien vérif validité d'un e-mail suite ouverture compte
$usr->setUsrmaictllim(null); // ràz durée du lien de vérification de la validité d'un e-mail suite ouverture compte
$em->persist($usr);
$em->flush();
$this->get('session')->getFlashBag()->add(
'Succès',
"Votre demande d'ouverture de compte a été confirmée. Rural Consult en a été informé et donnera rapidement suite à votre demande."
);
return $this->redirect($this->generateUrl('pageaccueil'));
}
}
}
}
// Identifiant oublié : envoi d'un mail de renvoi du login
#[Route(path: '/flogin', name: 'identifoubli')]
public function loginoubli
(
Request $request,
ManagerRegistry $doctrine,
LOGDEFService $logdefservice,
): Response
{
$msgcplt=''; $loginchgoblig = 0; $floginemail = '';
if(isset($_POST['floginemail'])){
// begin token-guard --------------------------------------------------------------------------------------------------------------
$csrfToken = $_POST['_csrf_token'];
if (false === $this->csrfTokenManager->isTokenValid(new CsrfToken('identifoubliadm48', $csrfToken))) {
$txtmsg = "Une erreur a eu lieu ! Veuillez reprendre votre saisie (fat)"; // false token
$this->get('session')->getFlashBag()->add(
'Erreur',
$txtmsg
);
return $this->render('usr\loginoubli.html.twig', array(
'msgcplt' => $msgcplt,
'loginchgoblig' => $loginchgoblig,
'floginemail' => $floginemail,
));
//throw new InvalidCsrfTokenException('Invalid CSRF token.'); //non utilisé ici -> ajax
// end token-guard --------------------------------------------------------------------------------------------------------------
}else{ // vérif e-mail saisi, rech compte etc..
$floginemail = $_POST['floginemail'];
$em = $doctrine->getManager();
$usr = $em->getRepository(usr::class)->findOneBy(array('usremail'=>$floginemail));
if($usr==null){
$txtmsg = "Une erreur a eu lieu ! Veuillez reprendre votre saisie. (not)"; // non trouvé
$msgcplt = "Si vous ne vous souvenez pas de l'e-mail ou de l'identifiant associé à votre compte, contactez notre support technique";
$this->get('session')->getFlashBag()->add(
'Erreur',
$txtmsg
//'L\'E-mail saisi n\'est associé à aucun compte !' trop explicite :-(
);
// ré-Affichage loginoubli (affiché soit à la dde, soit chgt login oblig)
if(isset($_POST['loginchgoblig'])){
$loginchgoblig = $_POST['loginchgoblig'];
}
return $this->render('usr\loginoubli.html.twig', array(
'msgcplt' => $msgcplt,
'loginchgoblig' => $loginchgoblig,
'floginemail' => $floginemail,
));
}else{ // vérif statut du compte, si pas ok renvoi vers login
// dans tous les cas suivants, renvoi vers login
// a) les infobulles fusion de la page
// $lesdefs = array('ppi','mod','pro','pli');
// $deflog = array();
// foreach($lesdefs as $ladef){
// $deflog[$ladef] = $logdefservice->get_unedef($ladef);
// }
if($usr->getUsrstatut()!=1){
if($usr->getUsrstatut()==0){
$txtmsg = "Votre compte n'est pas actif. Veuillez refaire une demande de renvoi d'identifiant lorsque votre compte sera activé. (noa)"; // non activé
}else{
$txtmsg = "Votre compte est bloqué. Veuillez contacter notre assistance technique en nous envoyant un courriel à l'adresse assistance.technique@solidaires.com (cbl)"; // compte bloqué
}
$this->get('session')->getFlashBag()->add(
'Erreur',
$txtmsg
);
return $this->render('security/login.html.twig',
array(
'last_username' => '',
'error' => '',
// 'deflog' => $deflog
)
);
}else{ // compte OK, vérif dat der envoi login et nb ddes (si >5 en moins d'un jour => blocage)
$datenvlog = new \DateTime();
$hier = date('Y-m-d H:i:s', time()-(3600*24));
if($usr->getUsrdatenvlog()==null){ // cas de la 1° dde envoi log
$datenvlog->createFromFormat("Y m d ", time());
$usr->setUsrdatenvlog($datenvlog);
$usr->setUsrnbenvlog(0); // idem envoi log / pwd
$em->persist($usr);
$em->flush();
}else{ // si antérieur à hier, raz
$usrdatenvlog = $usr->getUsrdatenvlog()->format('Y-m-d H:i:s');
if($usrdatenvlog < $hier){ // dernière dde antérieure à hier, raz
$usr->setUsrdatenvlog($datenvlog); // attrib date du jour
$usr->setUsrnbenvlog(0); // 1° envoi log en 24h
$em->persist($usr);
$em->flush();
}
}
$usrdatenvlog = $usr->getUsrdatenvlog()->format('Y-m-d H:i:s');
if(($usrdatenvlog >= $hier)&&($usr->getUsrnbenvlog()>=5)){ // si plus de 5 ddes depuis hier
$txtmsg = 'Une erreur a eu lieu ! Veuillez reprendre votre saisie (ab)'; // abus
$this->get('session')->getFlashBag()->add(
'Erreur',
$txtmsg
);
return $this->render('security/login.html.twig',
array(
'last_username' => '',
'error' => '',
'deflog' => $deflog
)
);
}else{ // tout ok envoi du mail de renvoi de l'identifiant
$usr_login = $usr->getUsername();
$nbenvlog = $usr->getUsrnbenvlog() + 1;
$usr->setUsrnbenvlog($nbenvlog); // nième envoi log
$em->persist($usr);
$em->flush();
$mailaenv = array();
$mailaenv['titre'] = '[rural Consult] Renvoi de votre identifiant';
$mailaenv['expediteur_nom'] = "Assistance technique Rural Consult";
$mailaenv['expediteur_email'] = "assistance.technique@solidaires.com";
$mailaenv['destinataire_nom'] = $usr->getUsrpre().' '.$usr->getUsrnom();
$mailaenv['destinataire_email'] = $_POST['floginemail'];
$mailaenv['cc'] = ''; // pas de copie ici
$destinataire_nom_bcc = "Assistance technique Rural Consult";
$destinataire_email_bcc = "assistance.technique@solidaires.com";
$mailaenv['bcc'] = array($destinataire_email_bcc => $destinataire_nom_bcc);
$mailaenv['fichiers'] = array(); // pas de fichier joint ici
$mailaenv['sujet'] = "Renvoi de votre identifiant Collectiv'Finance";
$urllogo = $this->parambag->get('img_path')."entete_emailing.png";
// texte du mail
$bodymail = "<div style='width:680px;margin:0 auto;'>";
$bodymail.= "<img style='width:680px;height:58px;border:none' src='".$urllogo."'>";
$bodymail.= "<div style='width:677px;text-align:left;font-size:12px Arial, Helvetica, sans-serif;color:#414141;border:1px solid #ff0000;overflow:hidden;'>";
$bodymail.= "<p style='padding:30px 10px;'>Bonjour ".$mailaenv['destinataire_nom'].",<br /> <br />";
$bodymail.= "Nous avons reçu une demande de renvoi de votre identifiant le ".$datenvlog->format("d-m-Y H:i").".<br />";
$bodymail.= "Votre identifiant : <b style='color:#ff0000';>".$usr_login."</b><br /> <br />";
$bodymail.= "Si vous n'êtes pas à l'origine de cette demande, ignorez ce courriel.<br /> <br />";
$bodymail.= "<i><span style='font-weight: 600;color:#0ea210;'>Important</span> : Rural Consult ne vous enverra jamais un courriel vous demandant d'indiquer votre mot de passe.</i><br /> <br />";
$bodymail.= "<span style='font-weight: 600;'>Rural Consult</strong><br />";
$bodymail.= "<span style='font-weight: 600;color:#ff0000;'>Banque des Territoires - Caisse des Dépôts</span><br /> <br />";
$bodymail.= "</p></div>";
$bodymail.= "<div style='width:679px;height:20px;text-align:center;background:#ff0000;font-size:12px Arial, Helvetica, sans-serif;color:#fff;'>";
$bodymail.= "Rural Consult © Tous droits réservés</div>";
$bodymail.= "</div>";
$mailaenv['body'] = $bodymail;
$unmess = $this->meylerservice->envoidunmail('loginoubli',$mailaenv); // envoi
$this->get('session')->getFlashBag()->add(
'Succès',
"Un e-mail vous a été envoyé. Il contient votre identifiant de connexion."
);
return $this->render('security/login.html.twig',
array(
'last_username' => '',
'error' => '',
'deflog' => $deflog
)
);
}
}
}
}
}else{
// Affichage loginoubli
return $this->render('usr\loginoubli.html.twig', array(
'msgcplt' => $msgcplt,
'loginchgoblig' => $loginchgoblig,
'floginemail' => $floginemail,
));
}
}
// PWD oublié : envoi d'un mail pour réinitialiser le pwd
#[Route(path: '/fpwd', name: 'motdpasseoubli')]
public function pwdoubli
(
Request $request,
ManagerRegistry $doctrine,
LOGDEFService $logdefservice,
): Response
{
//var_dump($request);
$msgcplt='';
$pwdchgoblig = 0;
if(isset($_POST['fpwdemail'])){
$em = $doctrine->getManager();
$usr = $em->getRepository(usr::class)->findOneBy(array('usremail'=>$_POST['fpwdemail']));
if($usr == null){
// Message d'information
$this->get('session')->getFlashBag()->add(
'Erreur',
'Une erreur de saisie ne nous permet pas d\'identifier votre compte'
);
$msgcplt = "Si vous ne vous souvenez pas de l'e-mail associé à votre compte, veuillez nous écrire à l'adresse ci-dessous.";
// ré-Affichage pwdoubli (affiché soit à la dde, soit chgt pwd oblig)
if(isset($_POST['pwdchgoblig'])){
$pwdchgoblig = $_POST['pwdchgoblig'];
}
return $this->render('usr/pwdoubli.html.twig', array(
'msgcplt' => $msgcplt,
'pwdchgoblig' => $pwdchgoblig,
'fpwdemail' => $_POST['fpwdemail']
));
}else{ // ok, envoi du mail
$token = $_POST['_csrf_token'];
$datddechgpdw = new \DateTime();
$datddechgpdw->createFromFormat("Y m d ", time());
$usr->setUsrchgpwdtok($token); // CSRF token dde chgt PWD
$usr->setUsrdatddechgpwd(time()); // Timestamp dde chgt PWD
$cpteurdde = $usr->getUsrnbenvpwd() + 1;
$usr->setUsrnbenvpwd($cpteurdde); // à titre indicatif, nb dde changement de pwd
$em->persist($usr);
$em->flush();
// préparation du mèl
$mailaenv = array();
$mailaenv['sujet'] = "Demande de changement de mot de passe : Collectiv'Finance";
$mailaenv['titre'] = "[Rural Consult] Demande de changement de mot de passe";
$mailaenv['expediteur_nom'] = "Assistance technique Rural Consult";
$mailaenv['expediteur_email'] = "assistance.technique@solidaires.com"; // TODO à modifier
$mailaenv['destinataire_nom'] = $usr->getUsrpre().' '.$usr->getUsrnom();
$mailaenv['destinataire_email'] = $_POST['fpwdemail'];
$mailaenv['fichiers'] = array(); // les fichiers joints
//$mailaenv['fichiers'][0] = array(); // 1° fichier à joindre => pas de documents joints
//$mailaenv['fichiers'][0]['chemin_fichier'] = "";
//$mailaenv['fichiers'][0]['nom_fichier'] = "";
//$mailaenv['fichiers'][0]['nom_orig'] = "";
$mailaenv['cc'] = ''; // pas de copie ici
$destinataire_nom_bcc = "Assistance technique Rural Consult";
$destinataire_email_bcc = "assistance.technique@solidaires.com";
$mailaenv['bcc'] = array($destinataire_email_bcc => $destinataire_nom_bcc);
$urllogo = $this->parambag->get('img_path')."entete_emailing.png";
// texte du mail
$bodymail = "<div style='width:680px;margin:0 auto;'>";
$bodymail.= "<img style='width:680px;height:58px;border:none' src='".$urllogo."'>";
$bodymail.= "<div style='width:677px;text-align:left;font-size:12px Arial, Helvetica, sans-serif;color:#414141;border:1px solid #ff0000;overflow:hidden;'>";
$bodymail.= "<p style='padding:30px 10px;'>Bonjour,<br /> <br />";
$bodymail.= "Nous avons reçu une demande de changement du mot de passe associé à votre E-mail à cette date : ".$datddechgpdw->format("d-m-Y H:i").". ";
$bodymail.= "Si vous êtes à l'origine de cette demande, suivez les instructions ci-dessous.<br /> <br />";
$bodymail.= "Cliquez sur le lien ci-après pour réinitialiser votre mot de passe : <a href=";
$bodymail.= $this->parambag->get('web_path')."mpwd?ie=UTF8&tok=".$token.">Lien pour la réinitialisation de votre mot de passe</a><br /> <br />";
$bodymail.= "Si vous n'avez pas demandé de changement de votre mot de passe, ignorez ce courriel.<br />";
$bodymail.= "Si vous rencontrez des difficultés pour changer de mot de passe, veuillez nous envoyer un courriel à l'adresse suivante : <a href='mailto:assistance.technique@solidaires.com' title='Aide Rural Consult'>assistance.technique@solidaires.com.</a><br / > <br />";
$bodymail.= "<i><span style='font-weight: 600;color:#0ea210;'>Important</span> : Rural Consult ne vous enverra jamais un courriel vous demandant d'indiquer votre mot de passe.</i><br /> <br />";
$bodymail.= "<span style='font-weight: 600;'>Rural Consult</strong><br />";
$bodymail.= "<span style='font-weight: 600;color:#ff0000;'>Banque des Territoires - Caisse des Dépôts</span><br /> <br />";
$bodymail.= "</p></div>";
$bodymail.= "<div style='width:679px;height:20px;text-align:center;background:#ff0000;font-size:12px Arial, Helvetica, sans-serif;color:#fff;'>";
$bodymail.= "Rural Consult © Tous droits réservés</div>";
$bodymail.= "</div>";
$mailaenv['body'] = $bodymail;
$unmess = $this->meylerservice->envoidunmail('reinitialisation mot de passe',$mailaenv); // envoi
$this->get('session')->getFlashBag()->add(
'Succès',
'Un courriel vous a été envoyé. Vous y trouverez un lien pour réinitialiser votre mot de passe'
);
// a) les infobulles fusion de la page
// $lesdefs = array('ppi','mod','pro','eau','pfi','lis','mev');
$lesdefs = array('ppi','mod','pro','pli');
$deflog = array();
foreach($lesdefs as $ladef){
$deflog[$ladef] = $logdefservice->get_unedef($ladef);
}
return $this->render('security/login.html.twig',
array(
'last_username' => '',
'error' => '',
'deflog' => $deflog
)
);
}
}else{
// Affichage pwdoubli
return $this->render('usr\pwdoubli.html.twig', array(
'msgcplt' => $msgcplt,
'pwdchgoblig' => $pwdchgoblig,
'fpwdemail' => ''
));
}
}
// Provenance :lien contenu dans un mail de réponse à une demande de changement de mot de passe
#[Route(path: '/mpwd', name: 'motdpassemodif')]
public function pwdmodif
(
Request $request,
ManagerRegistry $doctrine,
UserPasswordHasherInterface $passwordHasher,
): Response
{
// pwd à modifier
//var_dump($request);
if(!isset($_GET['tok'])){ // no token
$this->get('session')->getFlashBag()->add(
'Erreur',
'La page demandée n\'existe pas ! (nt)'
);
return $this->render('default\noway.html.twig',
array(
'linkaccueil'=> 1,
'width'=> 400,
'height'=> 100
)
);
}else{ // ya1token
$em = $doctrine->getManager();
$usr = $em->getRepository(usr::class)->findOneBy(array('usrchgpwdtok'=>$_GET['tok']));
if($usr == null){ // bad token
$this->get('session')->getFlashBag()->add(
'Erreur',
'La page demandée n\'existe pas ! (bdt)'
);
return $this->render('default\noway.html.twig',
array(
'linkaccueil'=> 1,
'width'=> 400,
'height'=> 100
)
);
}else{ // tok ok, vérif délai
$usrid = $usr->getUsrid();
$usrdatddechg = $usr->getUsrdatddechgpwd(); // int contenant la date/heure de demande
$letemps = time();
$hier = time()-(3600*24);
if($usrdatddechg < $hier){ // after time : chgt avant 24h max
$this->get('session')->getFlashBag()->add(
'Erreur',
'Le délai de validité de votre demande de changement de mot de passe (24h) est dépassé depuis le '.date('d/m/Y H:i',$usrdatddechg).'. Veuillez refaire une demande de changement de mot de passe. (tim)'
);
return $this->render('default\noway.html.twig',
array(
'linkaccueil'=> 1,
'width'=> 400,
'height'=> 100
)
);
}else{ // tout ok, affichage page saisie / modif pwd
return $this->render('usr\pwdmodif.html.twig',
array(
'tok' => $_GET['tok'],
'missens' => ($usrid * 117), // brouiller
'msgcplt' => '',
)
);
}
}
}
}
// confirmation changement mot de passe, vérifications diverses
#[Route(path: '/cpwd', name: 'motdpasseconf')]
public function pwdconf
(
Request $request,
ManagerRegistry $doctrine,
LOGDEFService $logdefservice,
UserPasswordHasherInterface $passwordHasher
): Response
{
// modif pwd confirmée
$flagok = true;
//var_dump($request);
// vérifs diverses : token ok, missens ok, pwd a et b ok
if( (!isset($_POST['_csrf_token'])) || (!isset($_POST['_missens'])) || (!is_numeric($_POST['_missens'])) || ($_POST['_mpwdb']!=$_POST['_mpwda']) ){
$flagok = false;
}
if($flagok == false){ // problème
$this->get('session')->getFlashBag()->add(
'Erreur',
'La page demandée n\'existe pas ! (pb)'
);
return $this->render('default\noway.html.twig',
array(
'linkaccueil'=> 1,
'width'=> 400,
'height'=> 100
)
);
}else{ // ok à priori
// var_dump($_POST);
$em = $doctrine->getManager();
$usrid = ($_POST['_missens'] / 117); // voir unptipeupluo
$usr = $em->getRepository(usr::class)->findOneBy(array('usrchgpwdtok'=>$_POST['_csrf_token'], 'usrid'=>$usrid));
if($usr == null){ // bad couple token/usrid
$this->get('session')->getFlashBag()->add(
'Erreur',
'La page demandée n\'existe pas ! (bdt)'
);
return $this->render('default\noway.html.twig',
array(
'linkaccueil'=> 1,
'width'=> 400,
'height'=> 100
)
);
}else{ // tok + usrid ok, vérif longueur des pwd et contenus retour login après màj ou non
$pwdok = $this->usrservice->verif_pwd_usr($_POST['_mpwda']);
if(($_POST['_mpwda'] != $_POST['_mpwdb']) || ($pwdok==false)){
$this->get('session')->getFlashBag()->add(
'Erreur',
'Votre mot de passe ne répond pas aux conditions de sécurité requises (ab)'
);
return $this->render('security/login.html.twig',
array(
'last_username' => '',
'error' => ''
)
);
}else{ // tout ok, validation nouv pwd
$usrdatchgpwd = new \DateTime();
$usrdatchgpwd->createFromFormat("Y-m-d H:i:s", time());
$hashedPassword = $passwordHasher->hashPassword(
$usr,
$_POST['_mpwda']
);
$usr->setPassword($hashedPassword);
$usr->setUsrchgpwdtok(null);
$usr->setUsrdatddechgpwd(null);
$usr->setUsrdatchgpwd($usrdatchgpwd);
$em->persist($usr);
$em->flush();
$this->get('session')->getFlashBag()->add(
'Succès',
'Votre mot de passe a été modifié avec succès'
);
// a) les infobulles fusion de la page
// $lesdefs = array('ppi','mod','pro','eau','pfi','lis','mev');
$lesdefs = array('ppi','mod','pro','pli');
$deflog = array();
foreach($lesdefs as $ladef){
$deflog[$ladef] = $logdefservice->get_unedef($ladef);
}
return $this->render('security/login.html.twig',
array(
'last_username' => '',
'error' => '',
'deflog' => $deflog
)
);
}
}
}
}
// EMAILING'S ============================================
// TODO : Vérifier fonctionnement (31/07/24)
// Expédition d'un mailing pour changement de pwd obligatoire
// envoi à tous les usr dont usrdatchgpwd < date jour -1 an ou vide
#[Route(path: '/mailchgpwd', name: 'envmailddechgpwd')]
public function pwdchgoblig
(
Request $request,
ManagerRegistry $doctrine
): Response
{
$em = $doctrine->getManager();
$user = $this->getUser();
$lstadmin = array_merge($this->divservice->getIdGestionnaire(), $this->divservice->getIdAdmin());
if(($user != null)&&(in_array($user->getUsrid(), $lstadmin))){ // gestionnaire + admin
$search_now = time();
$datchglimit = date('Y-m-d', mktime(0,0,0,date('m', $search_now),date('d', $search_now),date('Y', $search_now)-1));
$nbmailenvoyes = 0;
// préparation du mèl
$mailaenv = array();
$mailaenv['sujet'] = "[Rural Consult] Renouvellement de votre mot de passe Collectiv'Finances";
$mailaenv['titre'] = "[Rural Consult] Renouvellement de votre mot de passe";
$mailaenv['expediteur_nom'] = "Assistance technique Rural Consult";
$mailaenv['expediteur_email'] = "assistance.technique@solidaires.com"; // TODO à modifier
$mailaenv['destinataire_nom'] = "";
$mailaenv['destinataire_email'] = "";
$mailaenv['fichiers'] = array(); // les fichiers joints
//$mailaenv['fichiers'][0] = array(); // 1° fichier à joindre => pas de documents joints
//$mailaenv['fichiers'][0]['chemin_fichier'] = "";
//$mailaenv['fichiers'][0]['nom_fichier'] = "";
//$mailaenv['fichiers'][0]['nom_orig'] = "";
$mailaenv['cc'] = ''; // pas de copie ici
$destinataire_nom_bcc = "Assistance technique Rural Consult";
$destinataire_email_bcc = "assistance.technique@solidaires.com";
$mailaenv['bcc'] = array($destinataire_email_bcc => $destinataire_nom_bcc);
$urllogo = $this->parambag->get('img_path')."entete_emailing.png";
$web_path = $this->parambag->get('web_path');
// à effectuer en N fois
// requête préalable : UPDATE `cdc`.`usr` SET `usrdatenvchgpwd` = NULL, `usrchgpwdtok` = NULL
$query = $em->getRepository(usr::class)->createQueryBuilder('usr');
$query
->select('usr')
->where($query->expr()->orX(
$query->expr()->lte('usr.usrchgpwdtok', ':datchglimit'), // pwd pas changé depuis limit
$query->expr()->isNull('usr.usrchgpwdtok'),
$query->expr()->eq('usr.usrchgpwdtok', ':valzero')
))
->setParameter('datchglimit' , $datchglimit)
->setParameter('valzero' , null)
// ->andwhere('usr.usrid >= :usrid_mini')
// ->andwhere('usr.usrid <= :usrid_maxi')
// ->setParameter('usrid_mini' , 3051) // 3246 limite max, éviter 3150 lhostis
// ->setParameter('usrid_maxi' , 3149) // 3149 16/10 - 3050 08/10 - 2950 30/08 23:04 - 2800 30/08 11:45 - 2600 27/08 13:22
// ->andwhere('usr.usrdatlog IS NULL') // A SUPPRIMER une fois les mails envoyés
//->andwhere('usr.usrdatenvchgpwd IS NULL') // A REACTIVER une fois les mails envoyés
//->andwhere('usr.USRCHGPWDTOK IS NULL') // A REACTIVER une fois les mails envoyés
->orderBy('usr.usrdatcre', 'ASC')
;
$utilisateurs = $query->getQuery()->getResult();
$nb_usr = count($utilisateurs);
if(count($utilisateurs)>0){
foreach($utilisateurs as $usr){
$nombr_alea = rand().'cdc'.rand().'fc';
$mailaenv['destinataire_nom'] = "";
$mailaenv['destinataire_email'] = $usr->getUsremail();
// texte du mail
$bodymail = "<div style='width:680px;margin:0 auto;'>";
$bodymail.= "<img style='width:680px;height:58px;border:none' src='".$urllogo."'>";
$bodymail.= "<div style='width:677px;text-align:left;font-size:12px Arial, Helvetica, sans-serif;color:#414141;border:1px solid #ff0000;overflow:hidden;'>";
$bodymail.= "<p style='padding:20px 10px;'>Bonjour <b>".$usr->getUsrpre()." ".$usr->getUsrnom()."</b>,<br /> <br />";
$bodymail.= "Vous avez ouvert un compte « Solidaires » le ".$usr->getUsrdatcre()->format("d/m/Y").".<br />";
$bodymail.= "Nous réinstallons désormais cette application dans un nouvel environnement, intégrant le nouveau règlement européen sur la protection des données (RGPD) en vigueur.<br />";
$bodymail.= "Ces nouvelles règles modifient directement la gestion des mots de passe : ainsi, lors de votre prochaine connexion, l’application vous guidera à travers une procédure automatique de changement de votre mot de passe.<br />";
$bodymail.= "En l'absence de renouvellement de votre mot de passe dans les 30 jours, nous procéderons à la suppression de votre compte utilisateur et de vos données saisies d'une antériorité supérieure à 3 ans.<br />";
$bodymail.= "Cliquez sur le lien ci-après pour modifier votre mot de passe dès maintenant : <a href=";
$bodymail.= $web_path."mpwd?ie=UTF8&tok=".$nombr_alea.">Lien pour la réinitialisation de votre mot de passe valable 24 heures</a><br /> <br />";
$bodymail.= "Si vous rencontrez des difficultés pour changer de mot de passe, veuillez nous envoyer un courriel à l'adresse suivante : <a href='mailto:assistance.technique@solidaires.com' title='Assistance technique Rural Consult'>assistance.technique@solidaires.com.</a><br / > <br />";
$bodymail.= "<br /> <br />";
$bodymail.= "Collectiv'Finances vous propose des outils d'analyse financière dédiés aux communes et collectivités locales.<br />";
$bodymail.= "Nous vous informons que Collectiv'Finances s’est enrichi d’un nouvel outil : la modélisation financière de projet.<br />";
$bodymail.= "Espérant que ce nouvel outil vous sera utile, nous restons à votre disposition pour toute information supplémentaire.<br /> <br />";
$bodymail.= "<i><span style='font-weight: 600;color:#0ea210;'>Important</span> : Rural Consult ne vous enverra jamais un courriel vous demandant d'indiquer votre mot de passe.</i><br /> <br />";
$bodymail.= "<span style='font-weight: 600;'>Rural Consult</strong><br />";
$bodymail.= "<span style='font-weight: 600;color:#ff0000;'>Banque des Territoires - Caisse des Dépôts</span><br /> <br />";
$bodymail.= "</p></div>";
$bodymail.= "<div style='width:679px;height:20px;text-align:center;background:#ff0000;font-size:12px Arial, Helvetica, sans-serif;color:#fff;'>";
$bodymail.= "Rural Consult © Tous droits réservés</div>";
$bodymail.= "</div>";
$mailaenv['body'] = $bodymail;
$unmess = $this->meylerservice->envoidunmail('reinitialisation mot de passe',$mailaenv); // envoi
$nbmailenvoyes++;
$usrdatenvchgpwd = new \DateTime();
$usrdatenvchgpwd->createFromFormat("Y-m-d H:i:s", time());
// Enregistrement en bdd
$usr->setUsrchgpwdtok($nombr_alea);
$usr->setUsrdatddechgpwd(time());
$usr->setUsrdatenvchgpwd($usrdatenvchgpwd);
$em->persist($usr); // TODO à activer en PROD
$em->flush(); // TODO à activer en PROD
}
$this->get('session')->getFlashBag()->add(
'Succès',
$nbmailenvoyes.' mails envoyés. Nb utilisateurs sélect : '.$nb_usr
);
}else{
$this->get('session')->getFlashBag()->add(
'Succès',
'Aucun utilisateur sélectionné, aucun courriel à envoyer.'
);
}
return $this->redirect($this->generateUrl('pageaccueil'));
}else{ // erreur réservé admin
$this->get('session')->getFlashBag()->add(
'Erreur',
'La page demandée n\'existe pas ! (adm)'
);
// Affichage page inexistante
return $this->render('default\noway.html.twig',
array(
'linkaccueil'=> 1,
'width'=> 400,
'height'=> 100
)
);
}
}
// Envoi mailing à tous les usr => info EXCEL dans PROSPER et MODELICO
#[Route(path: '/mailgraph', name: 'envmailgraph')]
public function mailgraph(Request $request, ManagerRegistry $doctrine): Response
{
// $em = $doctrine->getManager();
// $user = $this->getUser();
// $lstadmin = $this->divservice->getIdAdmin();
// if(($user != null)&&(in_array($user->getUsrid(), $lstadmin))){ // seuls les admin
// $nbmailenvoyes = 0;
// $mailaenv = array();
// $mailaenv['sujet'] = "[Rural Consult] Collectiv'Finance : Les outils financiers";
// $mailaenv['titre'] = "[Rural Consult] Collectiv'Finance : Les outils financiers";
// $mailaenv['expediteur_nom'] = "Collectiv'Finance Infos";
// $mailaenv['expediteur_email'] = "solidaires@solidaires.com"; // TODO à modifier
// $mailaenv['destinataire_nom'] = "";
// $mailaenv['destinataire_email'] = "";
// $mailaenv['fichiers'] = array(); // les fichiers joints
// $mailaenv['fichiers'][0] = array(); // 1 fichier à joindre
// $mailaenv['fichiers'][0]['chemin_fichier'] = $this->get('kernel')->getRootDir(). "/../web/doc/help/";
// $mailaenv['fichiers'][0]['nom_fichier'] = "guide-tableau-financier.pdf";
// $mailaenv['fichiers'][0]['nom_orig'] = "guide-tableau-financier.pdf";
// $mailaenv['cc'] = ''; // pas de copie ici
// $destinataire_nom_bcc = "Assistance technique Rural Consult";
// $destinataire_email_bcc = "assistance.technique@solidaires.com";
// $mailaenv['bcc'] = array($destinataire_email_bcc => $destinataire_nom_bcc);
// $graph_b = $this->parambag->get('img_path')."graph_b.jpg";
// $graph_c = $this->parambag->get('img_path')."graph_c.jpg";
// $urllogo = $this->parambag->get('img_path')."entete_emailing.png";
// $web_path = $this->parambag->get('web_path');
// $search_now = time();
// $datcremax = date('Y-m-d', mktime(0,0,0,date('m', $search_now),date('d', $search_now)-8,date('Y', $search_now)));
// à effectuer en N fois
// $query = $em->getRepository(usr::class)->createQueryBuilder('usr');
// $query
// ->select('usr')
// ->where('usr.usrdatenvchgpwd IS NULL')
// ->andwhere('usr.usrdatcre < :datcremax')
// ->setParameter('datcremax' ,$datcremax)
// ->andwhere('usr.usrid IN (11)') // pour se limiter un peu...
// ->orderBy('usr.usrid', 'DESC')
// ;
// $utilisateurs = $query->getQuery()->getResult();
// $nb_usr = count($utilisateurs);
// if($nb_usr>0){
// $k=0;
// foreach($utilisateurs as $usr){
// $k++;
// if($k<=30){ // par paquet
// $mailaenv['destinataire_nom'] = "";
// $mailaenv['destinataire_email'] = $usr->getUsremail();
// texte du mail
// $bodymail = "<div style='width:750px;margin:0 auto;'>";
// $bodymail.= "<img style='width:750;height:64px;border:none' src='".$urllogo."'>";
// $bodymail.= "<div style='width:747px;text-align:left;font-size:12px Arial, Helvetica, sans-serif;color:#414141;border:1px solid #4f8eaf;overflow:hidden;'>";
// $bodymail.= "<p style='padding:20px 10px;'>Bonjour <b>".$usr->getUsrpre()." ".$usr->getUsrnom()."</b>,<br /> <br />";
// $bodymail.= "notre site « <a href=".$this->parambag->get('web_path')."><b>Solidaires</b></a> » met à la disposition des communes et intercommunalités des outils simplifiés d'analyse financière permettant de simuler le calcul des indicateurs retenus pour la contractualisation (loi de programmation des finances publiques du 22/01/2018).";
// $bodymail.= "<br /> <br />";
// $bodymail.= "Il vous est proposé : <br />";
// $bodymail.= " - un tableau d'analyse rétro/prospective <b>« PROSPER »</b> qui reprend de façon détaillée (fonctionnement et investissement) l'ensemble des agrégats financiers utiles à l'analyse,<br />";
// $bodymail.= " - un tableau plus synthétique <b>« MODELICO »</b> mesurant l'impact prospectif d'un nouvel emprunt sur les indicateurs de solvabilité de la collectivité (épargne de gestion, épargne brute, épargne nette, autofinancement, capacité de désendettement - CAPDES…).";
// $bodymail.= "<br /> <br />";
// $bodymail.= "A partir de vos données, « <a href=".$this->parambag->get('web_path')."><b>Solidaires</b></a> » vous permet désormais d'obtenir instantanément la représentation graphique des indicateurs principaux .";
// $bodymail.= "<br /> <br />";
// $bodymail.= "<img style='width:550px;height:240px;' src='".$graph_b."'>";
// $bodymail.= "<br /> <br />";
// $bodymail.= "<img style='width:550px;height:240px;' src='".$graph_c."'>";
// $bodymail.= "<br /> <br />";
// $bodymail.= "« <a href=".$this->parambag->get('web_path')."><b>Solidaires</b></a> » vous proposera progressivement d'autres graphiques. <b>Faites-nous part de vos suggestions.</b>";
// $bodymail.= "<br /> <br />";
// $bodymail.= "Vous pouvez dès maintenant les utiliser en vous connectant à « <a href=".$this->parambag->get('web_path')."><b>Solidaires</b></a> ».<br / > <br />";
// $bodymail.= "Votre identifiant est : <span style='color:#ff0000;font-weight: 600;'>".$usr->getUsername()."</span><br /> Avec votre identifiant, vous retrouverez vos simulations saisies précédemment.<br / > <br />";
// $bodymail.= "Si vous rencontrez des difficultés pour vous connecter, veuillez nous envoyer un courriel à l'adresse suivante : <a href='mailto:assistance.technique@solidaires.com' title='Assistance technique Rural Consult'>assistance.technique@solidaires.com</a>.<br />";
// $bodymail.= "Nous restons à votre disposition pour toute information complémentaire.";
// $bodymail.= "<br /> <br />";
// $bodymail.= "<strong>Caisse des Dépôts<br />";
// $bodymail.= "Service Rural Consult</strong><br />";
// $bodymail.= "<div style='font-size:11px;'>";
// $bodymail.= " Vous avez ouvert un compte « Solidaires » le ".$usr->getUsrdatcre()->format("d/m/Y").".<br />";
// $bodymail.= "</div>";
// $bodymail.= "</p></div>";
// $bodymail.= "<div style='width:750px;height:20px;text-align:center;background:#4f8eaf;font-size:12px Arial, Helvetica, sans-serif;color:#fff;'>";
// $bodymail.= "Rural Consult © Tous droits réservés</div>";
// $bodymail.= "</div>";
// $bodymail.= "<br /> <br />";
// $mailaenv['body'] = $bodymail;
/* inactiv19
$unmess = $this->meylerservice->envoidunmail('solidaires infos',$mailaenv); // envoi
$nbmailenvoyes++;
$usrdatenvchgpwd = new \DateTime();
$usrdatenvchgpwd->createFromFormat("Y-m-d H:i:s", time());
// Enregistrement en bdd
$usr->setUsrchgpwdtok(null);
$usr->setUsrdatddechgpwd(null);
$usr->setUsrdatenvchgpwd($usrdatenvchgpwd);
$em->persist($usr); // TODO à activer en PROD
$em->flush(); // TODO à activer en PROD
*/
// }
// }
// $this->get('session')->getFlashBag()->add(
// 'Succès',
// $nbmailenvoyes.' mails envoyés. Nb utilisateurs sélect : '.$nb_usr
// );
// }else{
// $this->get('session')->getFlashBag()->add(
// 'Succès',
// 'Aucun utilisateur sélectionné, aucun courriel à envoyer.'
// );
// }
// return $this->redirect($this->generateUrl('pageaccueil'));
// }else{ // erreur réservé admin
// $this->get('session')->getFlashBag()->add(
// 'Erreur',
// 'La page demandée n\'existe pas ! (adm)'
// );
// Affichage page inexistante
// return $this->render('default\noway.html.twig',
// array(
// 'linkaccueil'=> 1,
// 'width'=> 400,
// 'height'=> 100
// )
// );
// }
}
// Annonce PPI, envoi à tous les usr (mailing 07/2022)
#[Route(path: '/mailppi', name: 'envmailppi')]
public function mailppi
(
Request $request,
ManagerRegistry $doctrine
): Response
{
// $em = $doctrine->getManager();
// $user = $this->getUser();
// $lstadmin = $this->divservice->getIdAdmin();
// if(($user != null)&&(in_array($user->getUsrid(), $lstadmin))){ // seuls les admin
// $nbmailaexpedier = 10;
// $nbmailenvoyes = 0;
// $mailaenv = array();
// $mailaenv['sujet'] = "[Rural Consult] Solidaires : les nouveaux outils d'analyse financière";
// $mailaenv['titre'] = "[Rural Consult] Solidaires : les nouveaux outils d'analyse financière";
// $mailaenv['expediteur_nom'] = "Solidaires Infos";
// $mailaenv['expediteur_email'] = "solidaires@solidaires.com";
// $mailaenv['destinataire_nom'] = "";
// $mailaenv['destinataire_email'] = "";
// $mailaenv['fichiers'] = array(); // les fichiers joints
// $mailaenv['cc'] = ''; // pas de copie ici
// $destinataire_nom_bcc = "Assistance technique Rural Consult";
// $destinataire_email_bcc = "assistance.technique@solidaires.com";
// $mailaenv['bcc'] = array($destinataire_email_bcc => $destinataire_nom_bcc);
// $mailaenv['bcc'] = ''; // test, alors inutile
// $urllogo = $this->parambag->get('img_path')."entete_emailing.png";
// $logotc = $this->parambag->get('img_path')."logo_tc.jpg";
// $iconppi = $this->parambag->get('img_path')."ppi.png";
// $iconmod = $this->parambag->get('img_path')."mod.png";
// $iconpro = $this->parambag->get('img_path')."pro.png";
// $iconisb = $this->parambag->get('img_path')."isb.png";
// $iconpfi = $this->parambag->get('img_path')."pfi.png";
// $iconlis = $this->parambag->get('img_path')."lis.png";
// $iconmev = $this->parambag->get('img_path')."mev.png";
// $web_path = $this->parambag->get('web_path');
// $search_now = time();
// $datcremax = date('Y-m-d', mktime(0,0,0,date('m', $search_now),date('d', $search_now)-4,date('Y', $search_now)));
// à effectuer en N fois
// $query = $em->getRepository(usr::class)->createQueryBuilder('usr');
// $query
// ->select('usr')
// ->where('usr.usrdatppi IS NULL')
// ->orderBy('usr.usrnom', 'ASC')
// ;
// $utilisateurs = $query->getQuery()->getResult();
// $nb_usr = count($utilisateurs);
// if($nb_usr>0){
// $k=0;
// foreach($utilisateurs as $usr){
// $k++;
// if($k <= $nbmailaexpedier){ // par paquet
// $mailaenv['destinataire_nom'] = "";
// $mailaenv['destinataire_email'] = $usr->getUsremail(); // TODO à activer en PROD
// $mailaenv['destinataire_email'] = "didier.pfennig@free.fr"; // TODO à désactiver en PROD
// texte du mail
// $bodymail = '<div style="width:750px;margin:0 auto;">';
// $bodymail.= '<img style="width:750;height:64px;border:none" src="'.$urllogo.'">';
// $bodymail.= '<div style="width:747px;text-align:left;font-size:12px Arial, Helvetica, sans-serif;color:#414141;border:1px solid #4f8eaf;overflow:hidden;">';
// $bodymail.= '<p style="padding-left:10px; padding-right:10px;"><b>Madame, Monsieur,</b></p>';
// $bodymail.= '<p style="padding-left:10px; padding-right:10px;text-align: justify;">';
// $bodymail.= 'vous recevez ce courriel car vous avez déjà utilisé les outils d’analyse financière du site « <a href='.$this->parambag->get("web_path").'><b>Solidaires</b></a> » développés par Rural Consult, un service de la Banque des Territoires de la Caisse des Dépôts.';
// $bodymail.= '</p>';
// $bodymail.= '<p style="padding-left:10px; padding-right:10px;text-align: justify;">';
// $bodymail.= 'Aujourd\'hui, nous vous annonçons la mise en ligne de 3 nouveaux outils à visée pédagogique qui répondront, nous l\'espérons, à vos attentes.<br /> <br />';
// $bodymail.= '<table width="100%">';
// $bodymail.= '<tr>';
// $bodymail.= '<td width="5%">';
// $bodymail.= '<img src="'.$iconppi.'" style="vertical-align:middle;border:0;" height="50" width="50">';
// $bodymail.= '</td>';
// $bodymail.= '<td width="95%" style="font-size:14px;">';
// $bodymail.= '<b>Plan Pluriannuel d\'Investissement</b> : construire un tableau de PPI, consolider les coûts d\'un ensemble de projets et mesurer le poids des emprunts nécessaires à l\'équilibre.';
// $bodymail.= '</td>';
// $bodymail.= '</tr>';
// $bodymail.= '<tr>';
// $bodymail.= '<td width="5%">';
// $bodymail.= '<img src="'.$iconpfi.'" style="vertical-align:middle;border:0;" height="50" width="50">';
// $bodymail.= '</td>';
// $bodymail.= '<td width="95%" style="font-size:14px;">';
// $bodymail.= '<b>Potentiel Fiscal</b> : Comprendre le calcul du potentiel fiscal 2021 d\'une commune et simuler son évolution à partir des nombreuses variables qui le composent.';
// $bodymail.= '</td>';
// $bodymail.= '</tr>';
// $bodymail.= '<tr>';
// $bodymail.= '<td width="5%">';
// $bodymail.= '<img src="'.$iconlis.'" style="vertical-align:middle;border:0;" height="50" width="50">';
// $bodymail.= '</td>';
// $bodymail.= '<td width="95%" style="font-size:14px;">';
// $bodymail.= '<b>Lissage de taux</b> : Réaliser l\'harmonisation progressive de taux multiples sur une période variable (maximum 20 ans) vers un taux unique choisi.';
// $bodymail.= '</td>';
// $bodymail.= '</tr>';
// $bodymail.= '</table>';
// $bodymail.= '</p>';
// $bodymail.= '<p style="padding-left:10px; padding-right:10px;text-align: justify;">';
// $bodymail.= 'Nous avons aussi mis à jour les outils suivants :<br />';
// $bodymail.= '<table width="100%">';
// $bodymail.= '<tr>';
// $bodymail.= '<td width="5%">';
// $bodymail.= '<img src="'.$iconmod.'" style="vertical-align:middle;border:0;" height="50" width="50">';
// $bodymail.= '</td>';
// $bodymail.= '<td width="95%" style="font-size:14px;">';
// $bodymail.= '<b>MODELICO</b> : pour mesurer l\'impact simplifié d\'un nouvel emprunt sur les principaux indicateurs financiers (soldes de gestion) d\'une collectivité locale.';
// $bodymail.= '</td>';
// $bodymail.= '</tr>';
// $bodymail.= '<tr>';
// $bodymail.= '<td width="5%">';
// $bodymail.= '<img src="'.$iconpro.'" style="vertical-align:middle;border:0;" height="50" width="50">';
// $bodymail.= '</td>';
// $bodymail.= '<td width="95%" style="font-size:14px;">';
// $bodymail.= '<b>PROSPER</b> : pour calculer les principaux indicateurs financiers d\'une collectivité locale : autofinancement brut et net, besoin de financement, capacité de désendettement.';
// $bodymail.= '</td>';
// $bodymail.= '</tr>';
// $bodymail.= '<tr>';
// $bodymail.= '<td width="5%">';
// $bodymail.= '<img src="'.$iconisb.'" style="vertical-align:middle;border:0;" height="50" width="50">';
// $bodymail.= '</td>';
// $bodymail.= '<td width="95%" style="font-size:14px;">';
// $bodymail.= '<b>ISBA</b> : pour une aide à la décision en matière de financement des infrastructures d\'eau et d\'assainissement. Calcul de l\'impact simplifié d\'un nouvel investissement sur les tarifs et les redevances.';
// $bodymail.= '</td>';
// $bodymail.= '</tr>';
// $bodymail.= '<tr>';
// $bodymail.= '<td width="5%">';
// $bodymail.= '<img src="'.$iconmev.'" style="vertical-align:middle;border:0;" height="50" width="50">';
// $bodymail.= '</td>';
// $bodymail.= '<td width="95%" style="font-size:14px;">';
// $bodymail.= '<b>MEVEN</b> : vous pourrez télécharger le tableur MEVEN pour calculer les coûts générés par l\'organisation d\'un évènement local.';
// $bodymail.= '</td>';
// $bodymail.= '</tr>';
// $bodymail.= '</table>';
// $bodymail.= '</p>';
// $bodymail.= '<p style="padding-left:10px; padding-right:10px;text-align: justify;">';
// $bodymail.= 'L\'ensemble de ces outils est à votre disposition sur le site web « <a href='.$this->parambag->get("web_path").'><b>Solidaires</b></a> ».<br / >';
// $bodymail.= 'Avec votre identifiant, vous retrouverez toutes vos simulations saisies précédemment.<br />';
// $bodymail.= 'Votre identifiant est : <span style="color:#ff0000;font-weight: 600;">'.$usr->getUsername().'</span><br />';
// $bodymail.= 'Si vous ne vous souvenez pas de votre mot de passe, vous pourrez le modifier.';
// $bodymail.= '<br /> <br />';
// $bodymail.= 'Si vous rencontrez des difficultés pour vous connecter, veuillez nous envoyer un courriel à l\'adresse suivante : <a href="mailto:assistance.technique@solidaires.com" title="Assistance technique Rural Consult">assistance.technique@solidaires.com</a>.';
// $bodymail.= '<br /> <br />';
// $bodymail.= 'Nous restons à votre disposition pour toute autre information.';
// $bodymail.= '<br /> <br />';
// $bodymail.= '<span style="color:#6c6c6c;font-weight: 600;">Direction du Réseau et des Territoires</span><br />';
// $bodymail.= 'Rural Consult<br />';
// $bodymail.= '72 av. Pierre Mendès France Paris 75914 cedex 13<br />';
// $bodymail.= '<br /> <br />';
// $bodymail.= '</p>';
// $bodymail.= '<div style="font-size:11px;">';
// $bodymail.= ' Vous avez ouvert un compte « Solidaires » le '.$usr->getUsrdatcre()->format('d/m/Y').'.<br />';
// $bodymail.= '</div>';
// $bodymail.= '</div>';
// $bodymail.= '<div style="width:750px;height:20px;text-align:center;background:#4f8eaf;font-size:12px Arial, Helvetica, sans-serif;color:#fff;">';
// $bodymail.= 'Rural Consult © Tous droits réservés';
// $bodymail.= '</div>';
// $bodymail.= '<br /> <br />';
// $bodymail.= '</div>';
// $mailaenv['body'] = $bodymail;
// $unmess = $this->meylerservice->envoidunmail('solidaires infos 2022',$mailaenv); // envoi
// $nbmailenvoyes++;
// $usrdatppi = new \DateTime();
// $usrdatppi->createFromFormat("Y-m-d H:i:s", time());
// Enregistrement en bdd
// $usr->setUSRDATPPI($usrdatppi);
// $em->persist($usr); // TODO à activer en PROD
// $em->flush(); // TODO à activer en PROD
// }
// }
// $this->get('session')->getFlashBag()->add(
// 'Succès',
// $nbmailenvoyes.' mails envoyés. Nb utilisateurs sélect : '.$nb_usr
// );
// }else{
// $this->get('session')->getFlashBag()->add(
// 'Succès',
// 'Aucun utilisateur sélectionné, aucun courriel à envoyer.'
// );
// }
// return $this->redirect($this->generateUrl('pageaccueil'));
// }else{ // erreur réservé admin
// $this->get('session')->getFlashBag()->add(
// 'Erreur',
// 'La page demandée n\'existe pas ! (adm)'
// );
// Affichage page inexistante
// return $this->render('default\noway.html.twig',
// array(
// 'linkaccueil'=> 1,
// 'width'=> 400,
// 'height'=> 100
// )
// );
// }
}
}