<?php
namespace App\Service;
use Doctrine\ORM\EntityManager;
use Symfony\Bundle\FrameworkBundle\Routing\Router;
use App\Entity\Parametre;
use Symfony\Component\HttpFoundation\RedirectResponse;
use Symfony\Component\Security\Core\Authorization\AuthorizationCheckerInterface;
use Symfony\Contracts\Translation\TranslatorInterface;
use App\Repository\TypeConnexionRepository;
use App\Repository\QualiteRepository;
use App\Repository\ParametreRepository;
use App\Repository\SpecialiteRepository;
use App\Repository\ServiceRepository;
use App\Repository\UtilisateurRepository;
use App\Entity\SessionConnexion;
use App\Entity\TypeConnexion;
use Psr\Container\ContainerInterface;
class InformationsComtpeService
{
/**
* @var Container
*/
private $container;
/**
* @var AuthorizationCheckerInterface
*/
private $authorizationChecker;
private $qualiteRepo;
private $specialiteRepo;
private $serviceRepo;
private $utilisateurRepo;
private $parametreRepo;
private $typeconnexion;
private $translator;
/**
* Constructor
*
* @param Container $container
*/
public function __construct(ContainerInterface $container,
AuthorizationCheckerInterface $authorizationChecker,
QualiteRepository $qualiteRepo,
SpecialiteRepository $specialiteRepo,
ServiceRepository $serviceRepo,
UtilisateurRepository $utilisateurRepo,
ParametreRepository $parametreRepo,
TypeConnexionRepository $typeconnexion,
TranslatorInterface $translator
){
$this->translator = $translator;
$this->container = $container;
$this->authorizationChecker = $authorizationChecker;
$this->qualiteRepo = $qualiteRepo;
$this->specialiteRepo = $specialiteRepo;
$this->serviceRepo = $serviceRepo;
$this->utilisateurRepo = $utilisateurRepo;
$this->typeconnexion = $typeconnexion;
$this->parametreRepo = $parametreRepo;
}
public function InitLang()
{
$session = $this->container->get('request_stack')->getSession();
//Si pas de locale en session, on set la default_locale dans config/packages/translation.yml
if( $session->get('_locale') == null )
{
$session->set('_locale', $this->container->get('request_stack')->getCurrentRequest()->getLocale());
}
// Sinon, si elle est defini en session, on set la locale du porjet avec
else {
$this->translator->setLocale($session->get('_locale'));
$request = $this->container->get('request_stack')->getCurrentRequest();
$request->setLocale($session->get('_locale'));
}
}
public function checkConnexion()
{
$session = $this->container->get('request_stack')->getSession();
$client_id_adada = $session->get('client_id_adada');
$em = $this->container->get('doctrine')->getManager();
$version_antibiogarde = $this->container->getParameter('version_antibiogarde');
$connexionOK = true;
switch ($version_antibiogarde)
{
case 'web_edition':
// récupération du type de connexion "PC"
// $typeConnexions = $em->getRepository('SchemaBundle:TypeConnexion');
$typeconnexion = $this->typeconnexion->findOneBySlug('pc');
$connexion = $em->createQueryBuilder()
->select("s")
->from(SessionConnexion::class, 's')
->leftJoin(TypeConnexion::class, 't', 'WITH', 't.idTypeConnexion = s.TypeConnexion')
->andWhere('t.slug = :typeConnexion')->setParameter('typeConnexion', $typeconnexion->getSlug())
->andWhere('s.idUtilisateurBoutique = :utilisateurBoutique')->setParameter('utilisateurBoutique', $session->get('webedition_id_utilisateur_boutique'))
->andWhere('s.session = :session')->setParameter('session',$session->getId())
->getQuery()->getResult();
if (count($connexion) == 0)
{
$connexionOK = false;
}
break;
case 'web_hopital':
$adada_connection = $this->container->get('doctrine')->getConnection('adada');
$sql = "SELECT *
FROM ADADA_CLIENT
WHERE client_date_fin_installation >= :date_now
AND client_id = :client_id
AND client_produit like '%hopital_web%'";
$stmt = $adada_connection->prepare($sql);
$stmt->bindValue('client_id', $session->get("client_id_adada"));
$stmt->bindValue('date_now', date('Y-m-d'));
$user = $stmt->execute()->fetchAll();
if (count($user) == 0)
{
$connexionOK = false;
}
break;
case 'intranet':
$recupOK = $this->container->get('authentication_service')->informationsKey($client_identifiant,$client_date_fin,$client_idadada,$client_ip,$errors);
if ($recupOK)
{
$server_addr = '';
if (isset($_SERVER['SERVER_ADDR']) && $_SERVER['SERVER_ADDR'] <> '')
{
$server_addr = $_SERVER['SERVER_ADDR'];
} else {
$server_addr = gethostbyname($_SERVER['SERVER_NAME']);
}
$clefOK = (md5($client_identifiant) == md5($this->container->getParameter('client_clef_intranet')));
$dateOK = (date("Y-m-d") < $client_date_fin);
$ipOK = ($server_addr == $client_ip);
$idOK = ($this->container->getParameter('client_id_adada_intranet') == $client_idadada);
if(!$clefOK || !$dateOK || !$ipOK || !$idOK )
{
$connexionOK = false;
}
}
else
{
$connexionOK = false;
}
break;
default:
# code...
break;
}
if (!$connexionOK)
{
$this->container->get('security.token_storage')->setToken(null);
$this->container->get('request_stack')->getSession()->invalidate();
}
}
public function getDonneesFormulaire()
{
$session = $this->container->get('request_stack')->getSession();
$client_id_adada = $session->get('client_id_adada');
$qualites = $this->qualiteRepo->findAll();
$specialites = $this->specialiteRepo->findAll();
$services = $this->serviceRepo->findby(array('clientIdAdada' => $client_id_adada));
$returned = array();
$returned['qualites'] = $qualites;
$returned['specialites'] = $specialites;
$returned['services'] = $services;
return $returned;
}
public function getInfoCompte()
{
$datas = array();
if ($this->container->getParameter('version_antibiogarde') != 'web_edition')
{
$session = $this->container->get('request_stack')->getSession();
$client_id_adada = $session->get('client_id_adada');
$username = $session->get('username');
$utilisateur = $this->utilisateurRepo->findOneby(array(
'clientIdAdada' => $client_id_adada,
'idUtilisateur' => $session->get('id_utilisateur')));
$datas['utilisateur'] = $utilisateur;
if ($this->authorizationChecker->isGranted('ROLE_REFERENT'))
{
/*********************** COORDONNEES DU COMPTE ***********************/
$coord = array();
if ($this->container->getParameter('version_antibiogarde') == 'web_hopital')
{
$boutique_adada = $this->container->get('doctrine')->getConnection('adada');
$stmt = $boutique_adada->prepare("SELECT client_nom as nom_etablissement, client_cle_url as clef_etablissement, client_vidal as connexion_vidal, client_vidal_token as clef_vidal, client_cbip as connexion_cbip
FROM ADADA_CLIENT
WHERE client_id = :client_id");
$stmt->bindValue('client_id', $client_id_adada);
$stmt = $stmt->execute();
$result = $stmt->fetchAll();
if (count($result) == 1)
{
$coord = $stmt->fetch();
$stmt = $boutique_adada->prepare("SELECT client_ip_ip as ip
FROM ADADA_CLIENT_IP
WHERE client_ip_id_client = :client_id");
$stmt->bindValue('client_id', $client_id_adada);
$stmt = $stmt->execute();
$ips = array();
while($ip = $stmt->fetch())
{
$ips[] = $ip['ip'];
}
$coord['ips'] = $ips;
$coord['clef_etablissement'] = $session->get('cle_url');
$coord['finess'] = $session->get('finess');
foreach ($result[0] as $key => $value) {
$coord[$key] = $value;
}
}
}
elseif ($this->container->getParameter('version_antibiogarde') == 'intranet')
{
$coord['nom_etablissement'] = $this->container->getParameter('nom_hopital_intranet');
$coord['connexion_vidal'] = $this->container->getParameter('activation_interfacage_vidal');
$coord['clef_vidal'] = $this->container->getParameter('token_interfacage_vidal');
$coord['lien_activation'] = $this->container->getParameter('lien_activation_intranet');
}
$personnalisations = $this->parametreRepo->findParametreAffichagePersonnalisations($client_id_adada);
$coord['affichage_personnalisation'] = $personnalisations->getValeur();
$datas['coordonnees'] = $coord;
/*********************** INFORMATIONS DU COMPTE ***********************/
//ADMINS
$infos = array();
$administrateurs = $this->utilisateurRepo->findAdministrateurForIdAdada($client_id_adada);
$infos['administrateurs'] = $administrateurs;
//ABONNEMENT
if ($this->container->getParameter('version_antibiogarde') == 'web_hopital')
{
$stmt = $boutique_adada->prepare("SELECT DATE_FORMAT(client_date_fin_installation,'%d/%m/%Y') as date_fin_abonnement
FROM ADADA_CLIENT
WHERE client_id = :client_id");
$stmt->bindValue('client_id', $client_id_adada);
$stmt = $stmt->execute();
if ($stmt->rowCount() == 1)
{
$date = $stmt->fetch();
$infos['date_fin_abonnement'] = $date['date_fin_abonnement'];
}
}
elseif ($this->container->getParameter('version_antibiogarde') == 'intranet')
{
$recupOK = $this->container->get('authentication_service')->informationsKey($client_clef_fichier,$date_validite,$client_idadada,$client_ip,$errors);
if ($recupOK)
{
$infos['date_fin_abonnement'] = date("d/m/Y",strtotime($date_validite));
$infos['pass_key'] = $client_clef_fichier;
}
}
$factures = array();
//FACTURES
if (($this->container->getParameter('version_antibiogarde') == 'web_hopital'))
{
$stmt = $boutique_adada->prepare("SELECT DATE_FORMAT(af.facture_date,'%d/%m/%Y') as facture_date, af.facture_numero, af.fichier_facture, af.facture_libelle
FROM ADADA_FACTURE af
WHERE af.client_id = :client_id
ORDER BY af.facture_date desc");
$stmt->bindValue('client_id', $client_id_adada);
$stmt = $stmt->execute();
while($facture = $stmt->fetch())
{
$factures[] = $facture;
}
}
$infos['factures'] = $factures;
$datas['informations'] = $infos;
/******************** UTILISATEURS INSCRITS *********************/
$utilisateurs = $this->utilisateurRepo->findBasicUtilisateursForIdAdada($client_id_adada);
$datas['util_inscrits'] = $utilisateurs;
}
}
return $datas;
}
}