<?php
namespace App\Controller\Amce;
use App\Service\StorageService;
use Clegginabox\PDFMerger\PDFMerger;
use Doctrine\ORM\EntityManagerInterface;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Form\Extension\Core\Type\TextType;
use Symfony\Component\Form\Extension\Core\Type\SubmitType;
use Symfony\Component\Form\Extension\Core\Type\ChoiceType;
use Symfony\Component\Form\Extension\Core\Type\TextareaType;
use Symfony\Component\Form\Extension\Core\Type\EmailType;
use Symfony\Component\Form\Extension\Core\Type\RepeatedType;
use Symfony\Component\Form\Extension\Core\Type\PasswordType;
use Symfony\Bridge\Doctrine\Form\Type\EntityType;
use Symfony\Component\HttpFoundation\Cookie;
use Abraham\TwitterOAuth\TwitterOAuth;
use Symfony\Component\Form\Extension\Core\Type\FileType;
use Symfony\Component\HttpFoundation\RedirectResponse;
use GuzzleHttp\Client;
use GuzzleHttp\Exception\RequestException;
use Symfony\Component\Mailer\MailerInterface;
use Symfony\Component\Mime\Email;
use Symfony\Component\Mime\Address;
use App\Entity\Home;
use App\Entity\Contenu;
use App\Entity\Member;
use App\Entity\BlocEcran;
use App\Entity\Publication;
use App\Entity\Category;
use App\Entity\Faq;
use App\Entity\Lexique;
use App\Entity\ErreurQuizz;
use Knp\Bundle\SnappyBundle\Snappy\Response\PdfResponse;
use Knp\Snappy\Pdf as KnpSnappyPdf;
class DefaultController extends AbstractController
{
private $client = null;
public function __construct(private readonly EntityManagerInterface $em, private readonly StorageService $storage)
{
$this->client = new Client();
}
public function getTwitter()
{
$connection = new TwitterOAuth($this->getParameter('twitter_consumer_key'), $this->getParameter('twitter_consumer_secret'), $this->getParameter('twitter_access_token'), $this->getParameter('twitter_access_token_secret'));
$connection->setTimeouts(30, 60);
$screen_name = "EmilieM25909392"; // compte twitter test
if ($this->getParameter('app_environment') != "dev") $screen_name = "mediationtelco";
$content = $connection->get("statuses/user_timeline", array("screen_name" => $screen_name, "count" => 1, "tweet_mode" => "extended"));
$hour = 14;
$text = "Le #Médiateur instruit les dossiers en toute #indépendance et c'est gratuit http://bit.ly/2kJB4Qe #médiation #télécoms #consommateurs";
if ($connection->getLastHttpCode() == 200) {
$hour = date("G", (time() - strtotime($content[0]->created_at)));
$text = $this->getTwitterLinks($content[0]);
}
$datas = array("hour" => $hour, "text" => $text);
return new Response(json_encode($datas));
}
/**
* Get clickabled links, hastags, etc. in tweet content
**/
private function getTwitterLinks($tweet)
{
$hashtags = $user_mentions = $urls = $medias = array();
if (isset($tweet->retweeted_status)) {
$text = $tweet->retweeted_status->full_text;
if (isset($tweet->retweeted_status->entities->hashtags))
$hashtags = $tweet->retweeted_status->entities->hashtags;
if (isset($tweet->retweeted_status->entities->user_mentions))
$user_mentions = $tweet->retweeted_status->entities->user_mentions;
if (isset($tweet->retweeted_status->entities->urls))
$urls = $tweet->retweeted_status->entities->urls;
if (isset($tweet->retweeted_status->entities->media))
$medias = $tweet->retweeted_status->entities->media;
} else {
$text = $tweet->full_text;
if (isset($tweet->entities->hashtags))
$hashtags = $tweet->entities->hashtags;
if (isset($tweet->entities->user_mentions))
$user_mentions = $tweet->entities->user_mentions;
if (isset($tweet->entities->urls))
$urls = $tweet->entities->urls;
if (isset($tweet->entities->media))
$medias = $tweet->entities->media;
}
// hastags
$linkified = array();
foreach ($hashtags as $hashtag) {
$hash = $hashtag->text;
if (in_array($hash, $linkified)) {
continue; // do not process same hash twice or more
}
$linkified[] = $hash;
// replace single words only, so looking for #Google we wont linkify >#Google<Reader
$text = preg_replace('/#\b' . $hash . '\b/', sprintf('<a href="https://twitter.com/search?q=%%23%2$s&src=hash" target="_blank">#%1$s</a>', $hash, urlencode($hash)), $text);
}
// user mentions
$linkified = array();
foreach ($user_mentions as $userMention) {
$name = $userMention->name;
$screenName = $userMention->screen_name;
if (in_array($screenName, $linkified)) {
continue; // do not process same user mention twice or more
}
$linkified[] = $screenName;
// replace single words only, so looking for @John we wont linkify >@John<Snow
$text = preg_replace('/@\b' . $screenName . '\b/', sprintf('<a href="https://www.twitter.com/%1$s" title="%2$s" target="_blank">@%1$s</a>', $screenName, $name), $text);
}
// urls
$linkified = array();
foreach ($urls as $url) {
$expandedUrl = $url->expanded_url;
$url = $url->url;
if (in_array($url, $linkified)) {
continue; // do not process same url twice or more
}
$linkified[] = $url;
$text = str_replace($url, sprintf('<a href="%1$s" title="%2$s" target="_blank">%1$s</a>', $url, $expandedUrl), $text);
}
// media
$linkified = array();
foreach ($medias as $media) {
$mediaUrl = $media->media_url;
$media = $media->url;
if (in_array($media, $linkified)) {
continue; // do not process same url twice or more
}
$linkified[] = $media;
$text = str_replace($media, sprintf('<a href="%1$s" title="%2$s" target="_blank">%1$s</a>', $media, $mediaUrl), $text);
}
return $text;
}
/**
* @Route("/", name="homepage")
*/
public function indexAction(Request $request)
{
// replace this example code with whatever you need
$home = $this->em->getRepository(Home::class)->findBy(array(), array('ordre' => 'ASC'));
$contenus = $this->em->getRepository(Contenu::class)->findBy(array("page" => "home"));
$blocs = array();
foreach ($contenus as $contenu) {
$blocs[$contenu->getCode()] = $contenu;
}
return $this->render('Front/Default/index.html.twig', array("home" => $home, "blocs" => $blocs));
}
/**
* @Route("/tweet", name="tweet")
*/
public function tweet(Request $request)
{
$tweet = json_decode($this->getTwitter()->getContent());
return $this->render('Front/Default/tweet.html.twig', array("tweet_hour" => $tweet->hour, "tweet_text" => $tweet->text));
}
/**
* @Route("/membres", name="membres")
*/
public function membresAction()
{
$membres = $this->em->getRepository(Member::class)->findBy(array(), array("ordre" => "ASC"));
//$client = new \Zend\XmlRpc\Client($this->container->getParameter('ws_url'));
//$xmlString = $client->call('saisine.brandList', array());
//$membres = new \SimpleXMLElement($xmlString);
$tweet = json_decode($this->getTwitter()->getContent());
return $this->render('Front/Default/membres.html.twig', array("membres" => $membres, "tweet_hour" => $tweet->hour, "tweet_text" => $tweet->text));
}
/**
* @Route("/detail_membre/{slug}", name="detail_membre")
*/
public function detailMembreAction($slug)
{
$membre = $this->em->getRepository(Member::class)->findOneBySlug($slug);
if(!$membre) return $this->redirectToRoute('membres');
$membres = $this->em->getRepository(Member::class)->findBy(array(), array("nom" => "ASC"));
$tels = $this->em->getRepository(Member::class)->getTels($membre->getId());
$blocsd = $this->em->getRepository(BlocEcran::class)->findBy(array("ecran" => "detail_membre"), array("ordre" => "ASC"));
return $this->render('Front/Default/detail_membre.html.twig', array("membre" => $membre, "blocsd" => $blocsd, "membres" => $membres, "tels" => $tels));
}
/**
* @Route("/publications/{cat}", name="publications")
*/
public function publicationsAction($cat = null)
{
$form = null;
switch($cat){
case "guides":
$name_category = "Guides";
$title_page = "Guides";
break;
case "etudes":
$name_category = "Etudes";
$title_page = "Etudes";
break;
case "chiffres-cles":
$name_category = "Chiffres Clés";
$title_page = "Chiffres Clés";
break;
case "rapports-annuels":
$name_category = "Rapports annuels";
$title_page = "Rapports annuels";
break;
default:
$name_category = null;
$title_page = "Publications";
$form = $this->createFormBuilder()
->add('categories', EntityType::class, array(
'class' => Category::class,
'expanded' => false,
'multiple' => false,
'choices' => $this->em->getRepository(Category::class)->findAllCategories(),
'placeholder' => 'Afficher toutes les publications',
'attr' => array("class" => "select-form")
))
->getForm();
}
$publications = $this->em->getRepository(Publication::class)->findPublications($name_category);
$blocsd = $this->em->getRepository(BlocEcran::class)->findBy(array("ecran" => "publication"), array("ordre" => "ASC"));
return $this->render('Front/Default/publications.html.twig', array("publications" => $publications, "url_page" => "publications", "form" => $form ? $form->createView() : null, "title_page" => $title_page, "blocsd" => $blocsd));
}
/**
* @Route("/actualites", name="actualites")
*/
public function actualitesAction()
{
$publications = $this->em->getRepository(Publication::class)->findPublications('Actualités');
$blocsd = $this->em->getRepository(BlocEcran::class)->findBy(array("ecran" => "publication"), array("ordre" => "ASC"));
return $this->render('Front/Default/publications.html.twig', array("publications" => $publications, "url_page" => "actualites", "title_page" => "Actualités", "blocsd" => $blocsd));
}
/**
* @Route("/fiches_pratiques", name="fiches_pratiques")
*/
public function fichesPratiquesAction()
{
$publications = $this->em->getRepository(Publication::class)->findPublications('Fiches pratiques');
$blocsd = $this->em->getRepository(BlocEcran::class)->findBy(array("ecran" => "publication"), array("ordre" => "ASC"));
return $this->render('Front/Default/publications.html.twig', array("publications" => $publications, "url_page" => "fiches_pratiques", "title_page" => "Fiches pratiques", "blocsd" => $blocsd));
}
/**
* @Route("/publication_by_categorie/{id}", name="publication_by_categorie")
*/
public function publicationByCategorieAction($id)
{
if ($id) {
$publications = $this->em->getRepository(Publication::class)->findBy(array("category" => $id), array("date" => "DESC"));
} else {
$publications = $this->em->getRepository(Publication::class)->findBy(array(), array("date" => "DESC"));
}
return $this->render('Front/Default/publication_by_categorie.html.twig', array("publications" => $publications));
}
/**
* @Route("/publications/{slug_cat}/{slug}", name="detail_publication")
*/
public function detailPublicationAction($slug_cat, $slug)
{
$publication = $this->em->getRepository(Publication::class)->findOneBy(array('slug' => $slug));
$extension = $file = $associes = null;
$folder = $this->getParameter('app.publications_fichiers_directory');
if ($publication) {
$id = $publication->getId();
$file = $folder . '/' . $publication->getFichier();
$size = 0;
$extension = ".";
if ($publication->getFichier() && $this->storage->isFileExists($file)) {
$extension = $this->storage->getFileExtension($file);
$size = $this->storage->getFileSize($file) / 1024; // size in ko
if ($size < 1024) {
$unit = "Ko";
} else {
$size /= 1024;
$unit = "Mo";
}
$size = round($size) . $unit;
}
for ($i = 2; $i <= 3; $i++) {
$fonction = "getFichier" . $i;
$file = $folder . '/' . $publication->$fonction();
$sizes[$i] = 0;
$extensions[$i] = ".";
if ($publication->$fonction() && $this->storage->isFileExists($file)) {
$extensions[$i] = $this->storage->getFileExtension($file);
$sizes[$i] = $this->storage->getFileSize($file) / 1024; // size in ko
if ($sizes[$i] < 1024) {
$unit = "Ko";
} else {
$sizes[$i] /= 1024;
$unit = "Mo";
}
$sizes[$i] = round($sizes[$i]) . $unit;
}
}
$associes = array();
foreach ($publication->getTags() as $tag) {
foreach ($tag->getPublications() as $p) {
if ($p->getId() != $id) {
$associes[$p->getId()] = $p;
}
}
}
}
$blocsd = $this->em->getRepository(BlocEcran::class)->findBy(array("ecran" => "detail_publication"), array("ordre" => "ASC"));
return $this->render('Front/Default/detail_publication.html.twig', array("publication" => $publication, "associes" => $associes, "blocsd" => $blocsd, "extension" => $extension, "size" => $size, "sizes" => $sizes, "extensions" => $extensions));
}
/**
* @Route("/modification-informations", name="change_password")
*/
public function changePasswordAction(Request $request)
{
$session = $request->getSession();
if (!$session->has("user_token")) {
return $this->redirectToRoute('espace');
}
$form = $this->createFormBuilder(null, array(
'action' => $this->generateUrl('change_password'),
'method' => 'POST',
'attr' => ['class' => '']
))
->add('plainPassword', RepeatedType::class, array(
'type' => PasswordType::class,
'invalid_message' => 'Les mots de passe doivent être identifiques',
'first_options' => array('label_attr'=> array('class'=>'label'), 'label' => 'Votre nouveau mot de passe*' , 'attr' => array( 'pattern' => '^(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[!@#$%^&*_=+-]).{8,}$' ) ),
'second_options' => array('label_attr'=> array('class'=>'label'), 'label' => 'Confirmer mot de passe*' , 'attr' => array( 'pattern' => '^(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[!@#$%^&*_=+-]).{8,}$' )),
))
->add('save', SubmitType::class, array('label' => 'Continuer', 'attr' => array('class'=> 'btn btn-blue' )))
->getForm();
$form->handleRequest($request);
$result = '';
$valide_response = '';
if ($form->isSubmitted() && $form->isValid()) {
$data = $form->getData();
$data['username'] = $request->getSession()->get("user_login");
$data['password'] = $data['plainPassword'];
try {
$url = $this->getParameter('api_url') . '/user/change-password';
$headers = array(
'Authorization' => 'Bearer ' . $session->get("user_token"),
'Content-Type' => 'application/json; charset=utf-8'
);
$response = $this->client->post($url, array('headers' => $headers, 'body' => json_encode($data)));
$reponse = json_decode($response->getBody()->getContents());
if($reponse == 1) $this->addFlash("success", "Le mot de passe a été modifié");
else $this->addFlash("error", "Une erreur est survenue. Veuillez réessayer.");
} catch (RequestException $e) {
// erreur
$this->addFlash("error", "Une erreur est survenue. Veuillez réessayer.");
}
}
return $this->render('Front/Default/user.change.password.html.twig', array(
'form' => $form->createView(),
));
}
/**
* @Route("/affaires", name="affaires")
*/
public function affairesAction(Request $request)
{
$session = $request->getSession();
if (!$session->has("user_token")) {
return $this->redirectToRoute('espace');
}
$request->getSession()->set("affair_id", null);
$membre = $session->get("membre");
$block_quiz = $session->get("block_quiz");
// if cookie "membre" and !cookie block_quiz is defined: quizz done and is ok, redirect to "saisine"
$is_quizz = false;
if ($membre && !$block_quiz) $is_quizz = true;
if ($is_quizz) return $this->redirectToRoute('saisine_intro');
$url = $this->getParameter('api_url') . "/affaires/list";
$header = array('Authorization' => 'Bearer ' . $session->get("user_token"));
$response = $this->client->get($url, array('headers' => $header));
$results = json_decode($response->getBody()->getContents());
$date_before = new \Datetime('2021-09-15'); // affairs created before this date can't be finished if in process
$date_before->setTime(0,0,0);
$now = new \Datetime();
$begin_date = new \Datetime('2022-12-25 23:59:00'); // affairs created after 25/12
if($now >= $begin_date) {
$date_before = new \Datetime('2023-01-02 00:00:00'); // date wanted by the client : affairs created before this date can't be finished if in process (if now >= to this date)
}
$affaires = array();
foreach ($results as $result) {
$affaires[$result->id] =
array(
"numero" => $result->numero,
"status" => $result->status,
"id" => $result->id,
"client" => $result->client,
"closed_at" => $result->closed_at,
"created_at" => $result->created_at,
"updated_at" => $result->updated_at,
"notification_at" => $result->notification_at,
"send_avis_at" => $result->send_avis_at,
"suite_davis_at" => $result->suite_davis_at,
"envoi_global_at" => $result->envoi_global_at,
"send_to_operateur" => $result->send_to_operateur,
"owner_phone_number" => $result->owner_phone_number,
"owner_contract_number" => $result->owner_contract_number,
"brand" => $result->brand,
"qualification_definitive_at" => $result->qualification_definitive_at,
"cloture_suite_davis_at" => $result->cloture_suite_davis_at,
"fin_saisine_at" => $result->fin_saisine_at,
"sent_compte_rendu_at" => $result->sent_compte_rendu_at,
"affect_amce_at" => $result->affect_amce_at,
"mise_en_oeuvre_at" => $result->mise_en_oeuvre_at,
"cloture_mise_en_oeuvre_at" => $result->cloture_mise_en_oeuvre_at,
"is_autorised_demande_docs" => $result->is_autorised_demande_docs,
"is_missing_docs" => $result->is_missing_docs,
"is_refuse_entree_mediation" => $result->is_refuse_entree_mediation,
);
}
return $this->render('Front/Default/affaires.html.twig', array("affaires" => $affaires, "date_before" => $date_before));
}
/**
* @Route("/modif_affaire", name="modif_affaire")
*/
public function modifAffaireAction(Request $request)
{
$id = $request->get("id");
$request->getSession()->set("affair_id_new", $id);
return $this->redirectToRoute('saisine');
}
/**
* @Route("/suppr_affaire", name="suppr_affaire")
*/
public function supprAffaireAction(Request $request)
{
$id = $request->get("id");
$session = $request->getSession();
$url = $this->getParameter('api_url') . "/affaires/suppression/" . $id;
$header = array('Authorization' => 'Bearer ' . $session->get("user_token"));
$response = $this->client->get($url, array('headers' => $header));
$affair = json_decode($response->getBody()->getContents());
return $this->redirectToRoute('affaires');
}
/**
* @Route("/saisine-intro", name="saisine_intro")
*/
public function saisineIntroAction(Request $request)
{
$session = $request->getSession();
if (!$session->has("user_token")) {
return $this->redirectToRoute('espace');
}
if (!$session->has("membre") || !$session->get("membre") ) {
return $this->redirectToRoute('espace');
}
$date_service_client = $session->get("date_service_client", null);
$date_service_conso = $session->get("date_service_conso", null);
$date_reponse_service_client = $session->get("date_reponse_service_client", null);
$date_reponse_service_conso = $session->get("date_reponse_service_conso", null);
$service_conso_contact = $session->get("service_conso_contact", null);
$reponse_service_client = $session->get("reponse_service_client", null);
$reponse_service_conso = $session->get("reponse_service_conso", null);
//~ echo "<br>date_service_client => $date_service_client";
//~ echo "<br>date_service_conso => $date_service_conso";
//~ echo "<br>date_reponse_service_client => $date_reponse_service_client";
//~ echo "<br>date_reponse_service_conso => $date_reponse_service_conso";
//~ echo "<br>service_conso_contact => $service_conso_contact";
//~ echo "<br>reponse_service_client => $reponse_service_client";
//~ echo "<br>reponse_service_conso => $reponse_service_conso";
//~ die;
if(!$date_service_client && !$date_service_conso && !$date_reponse_service_client
&& !$date_reponse_service_conso && !$service_conso_contact && !$reponse_service_client
&& !$reponse_service_conso
) { // aucune information renseignée => retour au quizz
return $this->redirectToRoute('quizz');
}
$membre_quiz = $session->get("membre");
//~ var_dump($membre_quiz);
$session->set("membre", null); // pour ne plus être redirigé vers la saisine à la connexion
// mode creation
$affair_id = $session->get("affair_id_new");
if (!$affair_id) {
$datas = array('membre' => $membre_quiz->getNom());
$url = $this->getParameter('api_url') . "/affaire/creation";
$header = array('Authorization' => 'Bearer ' . $session->get("user_token"), 'Content-Type' => 'application/json; charset=utf-8');
$response = $this->client->post($url, array('headers' => $header, 'body' => json_encode( $datas ) ));
$affair_id = json_decode($response->getBody()->getContents());
$session->set("affair_id_new", $affair_id);
// enregistrement des dates et réponses dans la saisine
$datas_dates = array(
'affair_id' => $affair_id,
'date_service_client' => $date_service_client,
'date_service_conso' => $date_service_conso,
'date_reponse_service_client' => $date_reponse_service_client,
'date_reponse_service_conso' => $date_reponse_service_conso,
'service_conso_contact' => $service_conso_contact,
'reponse_service_client' => $reponse_service_client,
'reponse_service_conso' => $reponse_service_conso
);
$url_save_dates = $this->getParameter('api_url') . "/saisine/saveDatasDates";
$header = array('Authorization' => 'Bearer ' . $session->get("user_token"), 'Content-Type' => 'application/json; charset=utf-8');
$response = $this->client->post($url_save_dates, array('headers' => $header, 'body' => json_encode($datas_dates)));
$reponse = json_decode($response->getBody()->getContents());
if ($reponse != 'OUI') {
return $this->redirectToRoute('quizz');
}
}
return $this->render('Front/Default/saisine.intro.html.twig',
array(
'affair_id' => $affair_id,
'membre_quiz' => $membre_quiz
)
);
}
/**
* @Route("/saisine", name="saisine")
*/
public function saisineAction(Request $request)
{
$session = $request->getSession();
if (!$session->has("user_token")) {
return $this->redirectToRoute('espace');
}
$affair_id = $session->get("affair_id_new");
if(!$affair_id) {
return $this->redirectToRoute('espace');
}
if($affair_id == -1){
return $this->redirectToRoute('quizz');
}
$ovh_is_operateur = $session->get("ovh_is_operateur", "-1");
$url = $this->getParameter('api_url') . "/affaires/details/" . (int)$affair_id;
$header = array('Authorization' => 'Bearer ' . $session->get("user_token"));
$response = $this->client->get($url, array('headers' => $header));
$infos_affaire = json_decode($response->getBody()->getContents());
if($infos_affaire && $infos_affaire->status == 4) // go to "Messagerie" page to upload files and finalize saisine
return $this->redirectToRoute('detail_affair_messages', array('id' => $affair_id));
$mail = $request->getSession()->get("user_login");
$membre_quiz = $session->get("membre");
//~ $session->set("membre", null); // pour ne plus être redirigé vers la saisine à la connexion
$form = $this->createFormBuilder()
->add('titre1', TextType::class)
->add('doc1', FileType::class)
->add('save', SubmitType::class, array('label' => 'Enregistrer'))
->getForm();
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$datas = $form->getData();
}
$url = $this->getParameter('api_url') . "/brands/list";
$header = array('Authorization' => 'Bearer ' . $session->get("user_token"));
$response = $this->client->get($url, array('headers' => $header));
$membres = json_decode($response->getBody()->getContents());
$url = $this->getParameter('api_url') . "/medias/list";
$header = array('Authorization' => 'Bearer ' . $session->get("user_token"));
$response = $this->client->get($url, array('headers' => $header));
$medias = json_decode($response->getBody()->getContents());
$url = $this->getParameter('api_url') . "/representants/list";
$header = array('Authorization' => 'Bearer ' . $session->get("user_token"));
$response = $this->client->get($url, array('headers' => $header));
$data = json_decode($response->getBody()->getContents());
$representants = $data->types;
$allRepresentants = (array)$data->all;
return $this->render('Front/Default/saisine.html.twig',
array(
'affair_id' => $affair_id,
'representants' => $representants,
'allRepresentants' => $allRepresentants,
'membres' => $membres,
'medias' => $medias,
'form' => $form->createView(),
'mail' => $mail,
'membre_quiz' => $membre_quiz,
'infos_affaire' => $infos_affaire,
'ovh_is_operateur' => $ovh_is_operateur
)
);
}
/**
* @Route("/phase1", name="phase1")
*/
public function phase1Action(Request $request)
{
$session = $request->getSession();
if (!$session->has("user_token")) {
return $this->redirectToRoute('espace');
}
$affaire_id = $session->get("affair_id_new");
if(!$affaire_id){
return $this->redirectToRoute('affaires');
}
$mail = $request->getSession()->get("user_login");
$datas = array(
"affair_id" => (int)$affaire_id,
"media_id" => $request->get("media"),
"membre" => $request->get("membre"),
"owner_phone_number" => $request->get("tel_litige"),
"owner_contract_number" => $request->get("contrat_litige"),
);
$url = $this->getParameter('api_url') . "/saisine/phase1";
$header = array('Authorization' => 'Bearer ' . $session->get("user_token"), 'Content-Type' => 'application/json; charset=utf-8');
$response = $this->client->post($url, array('headers' => $header, 'body' => json_encode($datas)));
$reponse = json_decode($response->getBody()->getContents());
if ($reponse != 'OUI') {
return new Response(json_encode($reponse));
}
return new Response("OUI");
}
/**
* @Route("/phase4", name="phase4")
*/
public function phase4Action(Request $request)
{
$session = $request->getSession();
if (!$session->has("user_token")) {
return $this->redirectToRoute('espace');
}
$affaire_id = $session->get("affair_id_new");
$mail = $request->getSession()->get("user_login");
$genre = $request->get("genre");
if($genre == 'mr') $val_genre = "Monsieur";
elseif($genre == 'mme') $val_genre = "Madame";
else $val_genre = "";
$datas = array(
"affair_id" => (int)$affaire_id,
"denomination" => $val_genre,
"last_name" => $request->get("nom"),
"first_name" => $request->get("prenom"),
"address1" => $request->get("adresse"),
"address2" => $request->get("adresse2"),
"address3" => $request->get(""),
"postal_code" => $request->get("cp"),
"city" => $request->get("ville"),
"country" => $request->get("pays"),
"phone" => $request->get("tel"),
"mail" => $request->get("mail"),
"owner_phone_number" => $request->get("tel_litige"),
"owner_contract_number" => $request->get("contrat_litige"),
"owner_last_name" => $request->get("nom_titulaire"),
"owner_first_name" => $request->get("prenom_titulaire"),
"user_email" => $mail
);
if ($request->get("representant") == "representant") {
$genre_representant = $request->get("genre_representant");
if($genre_representant == 'mr') $val_genre_representant = "Monsieur";
elseif($genre_representant == 'mme') $val_genre_representant = "Madame";
else $val_genre_representant = "";
$datas2 = array(
"is_representant" => "oui",
"authority_type_id" => $request->get("qualite"),
"represent" => $request->get("represent"),
"authority_name" => $request->get("institution"),
"denomination_representant" => $val_genre_representant,
"last_name_representant" => $request->get("nom_representant"),
"first_name_representant" => $request->get("prenom_representant"),
"email_representant" => $request->get("email_representant"),
"address1_representant" => $request->get("adresse_representant"),
"address2_representant" => $request->get("adresse2_representant"),
"postal_code_representant" => $request->get("cp_representant"),
"city_representant" => $request->get("ville_representant"),
"country_representant" => $request->get("pays_representant"),
"phone_representant" => $request->get("tel_representant")
);
$datas = array_merge($datas, $datas2);
}
$url = $this->getParameter('api_url') . "/saisine/phase4";
$header = array('Authorization' => 'Bearer ' . $session->get("user_token"), 'Content-Type' => 'application/json; charset=utf-8');
$response = $this->client->post($url, array('headers' => $header, 'body' => json_encode($datas)));
$reponse = json_decode($response->getBody()->getContents());
if ($reponse != 'OUI') {
return new Response(json_encode($reponse));
}
return new Response("OUI");
}
/**
* @Route("/phase2Old", name="phase2Old")
*/
public function phase2OldAction(Request $request)
{
$session = $request->getSession();
if (!$session->has("user_token")) {
return $this->redirectToRoute('espace');
}
$affaire_id = $session->get("affair_id_new");
/* $datas = array("user_id" => $session->get("user_id"));
$client->call('saisine.connexion', array('datas' => $datas));
$datas = array("user_id" => $session->get("user_id"), "brand_id" => $request->get("membre"), "affair_id" => (int)$affaire_id);
$reponse = $client->call('saisine.setBrand', array("datas" => $datas)); */
$session->set("media_id", $request->get("media"));
$datas = array(
"affair_id" => (int)$affaire_id,
"media_id" => $request->get("media"),
"membre" => $request->get("membre"),
"consumer_service_contacted" => $request->get("ecrit_con") == "pas_reponse" ? 1 : 0,
"consumer_service_date_contact" => $request->get("ecrit_con") == "pas_reponse" ? $request->get("depose_con_annee") . "-" . $request->get("depose_con_mois") . "-" . $request->get("depose_con_jour") : null,
"consumer_service_type_contact" => "courrier",
"consumer_service_response" => $request->get("ecrit_con") == "satisfait_pas" ? 1 : 0,
"consumer_service_date_response" => $request->get("ecrit_con") == "satisfait_pas" ? $request->get("recu_con_annee") . "-" . $request->get("recu_con_mois") . "-" . $request->get("recu_con_jour") : null,
"client_service_bad_answer" => ($request->get("non_satisfait") == "oui" || $request->get("non_satisfait_copie") == "oui") ? 1 : 0,
"client_service_cant_inform" => "",
"client_service_contacted" => $request->get("ecrit_client") == "oui" ? 1 : 0,
"client_service_date_contact" => $request->get("ecrit_client_jour") != 0 && $request->get("ecrit_client_inconnu") != "oui" ? $request->get("ecrit_client_annee") . "-" . $request->get("ecrit_client_mois") . "-" . $request->get("ecrit_client_jour") : null,
"client_service_type_contact" => $request->get("mode_contact"),
"client_service_response" => ($request->get("non_satisfait") == "oui" || $request->get("non_satisfait_copie") == "oui") ? 1 : 0,
"client_service_date_response" => null,
"law_suit_started" => 0,
);
$url = $this->getParameter('api_url') . "/saisine/phase1DossierForm";
$header = array('Authorization' => 'Bearer ' . $session->get("user_token"), 'Content-Type' => 'application/json; charset=utf-8');
$response = $this->client->post($url, array('headers' => $header, 'body' => json_encode($datas)));
$reponse = json_decode($response->getBody()->getContents());
if ($reponse != 'OUI') {
return new Response(json_encode($reponse));
}
return new Response("OUI");
}
/**
* @Route("/phase2", name="phase2")
*/
public function phase2Action(Request $request)
{
$session = $request->getSession();
if (!$session->has("user_token")) {
return $this->redirectToRoute('espace');
}
$affaire_id = $session->get("affair_id_new");
$datas = array(
"affair_id" => (int)$affaire_id,
"description" => $request->get("historique"),
"partial_solution" => $request->get("resolu") == "oui" ? 1 : 0,
"partial_solution_description" => $request->get("donnees"),
"expectation" => $request->get("attendu"),
);
$url = $this->getParameter('api_url') . "/saisine/phase2Litige";
$header = array('Authorization' => 'Bearer ' . $session->get("user_token"), 'Content-Type' => 'application/json; charset=utf-8');
$response = $this->client->post($url, array('headers' => $header, 'body' => json_encode($datas)));
$reponse = json_decode($response->getBody()->getContents());
if ($reponse != 'OUI') {
return new Response(json_encode($reponse));
}
return new Response("OUI");
}
/**
* @Route("/phase3", name="phase3")
*/
public function phase3Action(Request $request)
{
$session = $request->getSession();
if (!$session->has("user_token")) {
return $this->redirectToRoute('espace');
}
$affaire_id = $session->get("affair_id_new");
/* $datas = array("user_id" => $session->get("user_id"));
$client->call('saisine.connexion', array('datas' => $datas));
$datas = array("user_id" => $session->get("user_id"), "brand_id" => $request->get("membre"), "affair_id" => (int)$affaire_id);
$reponse = $client->call('saisine.setBrand', array("datas" => $datas)); */
$session->set("media_id", $request->get("media"));
$datas = array(
"affair_id" => (int)$affaire_id,
"client_service_type_contact" => $request->get("mode_contact"),
"reponse_service_client" => $request->get("reponse_service_client"), // null, "non_satisfait" ou "plus_2_mois"
"consumer_service_response" => $request->get("ecrit_con") == "satisfait_pas" ? 1 : 0,
//~ "consumer_service_contacted" => $request->get("ecrit_con") == "pas_reponse" ? 1 : 0,
//~ "consumer_service_date_contact" => $request->get("ecrit_con") == "pas_reponse" ? $request->get("depose_con_annee") . "-" . $request->get("depose_con_mois") . "-" . $request->get("depose_con_jour") : null,
//~ "consumer_service_type_contact" => "courrier",
//~ "consumer_service_response" => $request->get("ecrit_con") == "satisfait_pas" ? 1 : 0,
//~ "consumer_service_date_response" => $request->get("ecrit_con") == "satisfait_pas" ? $request->get("recu_con_annee") . "-" . $request->get("recu_con_mois") . "-" . $request->get("recu_con_jour") : null,
//~ "client_service_bad_answer" => ($request->get("non_satisfait") == "oui" || $request->get("non_satisfait_copie") == "oui") ? 1 : 0,
//~ "client_service_cant_inform" => "",
//~ "client_service_contacted" => $request->get("ecrit_client") == "oui" ? 1 : 0,
//~ "client_service_date_contact" => $request->get("ecrit_client_jour") != 0 && $request->get("ecrit_client_inconnu") != "oui" ? $request->get("ecrit_client_annee") . "-" . $request->get("ecrit_client_mois") . "-" . $request->get("ecrit_client_jour") : null,
//~ "client_service_response" => ($request->get("non_satisfait") == "oui" || $request->get("non_satisfait_copie") == "oui") ? 1 : 0,
//~ "client_service_date_response" => null,
);
$url = $this->getParameter('api_url') . "/saisine/phase3Echanges";
$header = array('Authorization' => 'Bearer ' . $session->get("user_token"), 'Content-Type' => 'application/json; charset=utf-8');
$response = $this->client->post($url, array('headers' => $header, 'body' => json_encode($datas)));
$reponse = json_decode($response->getBody()->getContents());
if ($reponse != 'OUI') {
return new Response(json_encode($reponse));
}
return new Response("OUI");
}
/**
* @Route("/phase4Old", name="phase4Old")
*/
public function phase4OldAction(Request $request, MailerInterface $mailer)
{
$session = $request->getSession();
//~ $affaire_id = $session->get("affair_id");
if (!$session->has("user_token")) {
return $this->redirectToRoute('espace');
}
$affaire_id = $request->get("affair_id_new");
$files = array();
$type_envoi = $request->get("envoi");
$datas = array(
"affair_id" => (int)$affaire_id,
"by_post" => $type_envoi == "poste" ? 1 : 0,
"by_mail" => $type_envoi == "electronique" ? 1 : 0,
);
$baseurl = $request->getScheme() . '://' . $request->getHttpHost() . $request->getBasePath();
$tmpFiles = [];
for ($i = 1; $i <= 10; $i++) {
if ($request->get("document_description_" . $i)) {
$file = $request->files->get("document_file_" . $i);
if ($file) {
$datas["document_description_" . $i] = $request->get("document_description_" . $i);
$ext = $file->getClientOriginalExtension();
if (null == $ext || $ext == '') {
$this->addFlash("error", "Extension du fichier invalide. Veuillez vérifier votre fichier.");
return $this->redirectToRoute('saisine', $request->query->all());
}
$name = $file->getClientOriginalName();
$filename = uniqid() . "." . $ext;
$this->storage->moveFileToStorage('app.affair_files_directory', $filename, $file);
$datas["document_file_" . $i] = $baseurl . $this->storage->getFileStorageUrl('app.affair_files_directory', $filename );
$datas["document_name_" . $i] = $name;
$tmpFiles[] = $filename;
}
}
}
$url = $this->getParameter('api_url') . "/saisine/phase2Pieces";
$header = array('Authorization' => 'Bearer ' . $session->get("user_token"), 'Content-Type' => 'application/json; charset=utf-8');
$response = $this->client->post($url, array('headers' => $header, 'body' => json_encode($datas)));
$reponse = json_decode($response->getBody()->getContents());
if ($reponse == 'OUI') {
foreach ($tmpFiles as $fileName) {
$this->storage->deleteFileFromStorage('app.affair_files_directory', $fileName);
}
}
// reset cookie "membre"
$session->set("membre", null);
$session->set("affair_id", null);
$session->set("aaffair_id_new", null);
// envoi mail de confirmation de prise en compte de la saisine que pour les saisines 100% web
if ($type_envoi != "poste") {
$mail = $request->getSession()->get("user_login");
$message = (new Email())
->from(new Address('noreply@mediation-telecom.org', 'Le Médiateur des Communications Electroniques'))
->to($mail)
->subject("Votre saisine du Médiateur des Communications Electroniques")
->html($this->renderView('Front/Mail/mail.fin.saisine.html.twig', ['type' => $type_envoi]));
$mailer->send($message);
}
return $this->render('Front/Default/fin_saisine.html.twig', array('type_envoi' => $type_envoi));
}
/**
* @Route("/faq", name="faq")
*/
public function FAQAction(Request $request)
{
$blocsd = $this->em->getRepository(BlocEcran::class)->findBy(array("ecran" => "faq"), array("ordre" => "ASC"));
$faq = $this->em->getRepository(Faq::class)->findBy(array(), array("ordre" => "asc"));
return $this->render('Front/Default/faq.html.twig', array("blocsd" => $blocsd, "faq" => $faq));
}
/**
* @Route("/lexique", name="lexique")
*/
public function lexiqueAction(Request $request)
{
$blocsd = $this->em->getRepository(BlocEcran::class)->findBy(array("ecran" => "lexique"), array("ordre" => "ASC"));
$termes = $this->em->getRepository(Lexique::class)->findBy(array(), array('terme' => 'asc'));
return $this->render('Front/Default/lexique.html.twig', array('termes' => $termes, "blocsd" => $blocsd));
}
/**
* @Route("/mediateur", name="mediateur")
*/
public function mediateurAction(Request $request)
{
$blocs = $this->em->getRepository(Contenu::class)->createQueryBuilder('c')
->where('c.code LIKE :code')
->andWhere('c.page = :page')
->orderBy('c.ordre', 'ASC')
->setParameter('code', 'BLOC')
->setParameter('page', 'mediateur')
->getQuery()
->getResult();
$blocsd = $this->em->getRepository(BlocEcran::class)->findBy(array("ecran" => "mediateur"), array("ordre" => "ASC"));
$intro = $this->em->getRepository(Contenu::class)->findOneBy(array("code" => "INTRO", "page" => "mediateur"));
return $this->render('Front/Default/mediateur.html.twig', array("intro" => $intro, "blocs" => $blocs, "blocsd" => $blocsd));
}
/**
* @Route("/qui-sommes-nous", name="qsn")
*/
public function quiSommesNousAction(Request $request)
{
$blocs = $this->em->getRepository(Contenu::class)->createQueryBuilder('c')
->where('c.code LIKE :code')
->andWhere('c.page = :page')
->orderBy('c.ordre', 'ASC')
->setParameter('code', 'BLOC')
->setParameter('page', 'qsn')
->getQuery()
->getResult();
$intro = $this->em->getRepository(Contenu::class)->findOneBy(array("code" => "INTRO", "page" => "qsn"));
$blocsd = $this->em->getRepository(BlocEcran::class)->findBy(array("ecran" => "qsn"), array("ordre" => "ASC"));
return $this->render('Front/Default/qsn.html.twig', array("intro" => $intro, "blocs" => $blocs, "blocsd" => $blocsd));
}
/**
* @Route("/redirect", name="redirect")
*/
public function redirectAction(Request $request)
{
$session = $request->getSession();
// reset affair_id pour le cas où l'utilisateur a commencé une 1ère saisine, l'a interrompue et revient faire le quiz
if ($session->get("affair_id") !== null) $session->set("affair_id", null);
$nom_membre = $request->get('membre');
$tab_membres = array('Bouygues Telecom', 'Orange', 'Sosh');
if (in_array($nom_membre, $tab_membres)) {
$membre = $this->em->getRepository(Member::class)->findOneBy(array('nom' => $nom_membre));
if (!$membre) { // redirect to main website
return $this->redirect($this->getParameter('url_main_site'));
}
$session->set("membre", $membre);
if ($membre->getRecourseLevel() == Member::DOUBLE_RECOURSE) {
return $this->redirectToRoute('quizz_operateurs');
} else {
return $this->redirectToRoute('quizz_non_operateurs');
}
} else { // redirect to main website
return $this->redirect($this->getParameter('url_main_site'));
}
}
/**
* @Route("/quizz", name="quizz")
*/
public function quizzAction(Request $request)
{
$session = $request->getSession();
if ($session->get("block_quiz")) return $this->redirectToRoute('saisir');
// reset affair_id pour le cas où l'utilisateur a commencé une 1ère saisine, l'a interrompue et revient faire le quiz
if($session->get("affair_id_new") !== null) $session->set("affair_id_new", null);
if($session->get("affair_id") !== null) $session->set("affair_id", null);
$form = $this->createFormBuilder()
->add('membre', EntityType::class, array(
'class' => Member::class,
'placeholder' => 'Choisissez votre opérateur',
'expanded' => false,
'multiple' => false,
'label' => false,
'required' => false,
'choice_value' => 'id',
'choice_label' => 'nom',
'choices' => $this->em->getRepository(Member::class)->findBy(array(), array("ordre_list" => "ASC", "nom" => "ASC"))
//~ 'choices' => $this->em->getRepository(Member::class)->findSpecific()
))
->getForm();
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$membre = $form->getData();
$session->set("membre", $membre["membre"]);
$nom_membre = $membre["membre"]->getNom();
if($membre["membre"]->getNom() == "OVH"){ // specific OVH
return $this->redirectToRoute('quizz_operateurs_et_non');
}
if ($membre["membre"]->getRecourseLevel() == Member::DOUBLE_RECOURSE) {
return $this->redirectToRoute('quizz_operateurs');
} else {
return $this->redirectToRoute('quizz_non_operateurs');
}
}
return $this->render('Front/Default/quizz.html.twig', array('form' => $form->createView()));
}
/**
* @Route("/quizz_operateurs_et_non", name="quizz_operateurs_et_non")
*/
public function quizzOperateursEtNonAction(Request $request)
{
$session = $request->getSession();
$membre = $session->get("membre");
$form = $this->createFormBuilder()
->add('type', ChoiceType::class, array(
'expanded' => true,
'multiple' => false,
'label' => false,
'choices' => array("operateur" => "Opérateur télécoms", "non_operateur" => "Professionnel non opérateur de communications électroniques")))
->getForm();
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$values = $form->getData();
if ($values["type"] == "non_operateur") {
$session->set("ovh_is_operateur", 0);
return $this->redirectToRoute('quizz_non_operateurs');
} else {
$session->set("ovh_is_operateur", 1);
return $this->redirectToRoute('quizz_operateurs');
}
}
return $this->render('Front/Default/quizz_operateurs_et_non.html.twig', array('form' => $form->createView(), "membre" => $membre));
}
/**
* @Route("/quizz_operateurs", name="quizz_operateurs")
*/
public function quizzOperateursAction(Request $request)
{
$session = $request->getSession();
$membre = $session->get("membre");
if ($session->get("block_quiz")) return $this->redirectToRoute('saisir');
$erreurs_etape = $this->em->getRepository(ErreurQuizz::class)->findBy(array("type" => "OPERATEUR"));
return $this->render('Front/Default/quizz_operateurs.html.twig', array("erreurs_etape" => $erreurs_etape, "membre" => $membre, "user_token" => $session->has("user_token")));
}
/**
* @Route("/quizz_non_operateurs", name="quizz_non_operateurs")
*/
public function quizzNonOperateursAction(Request $request)
{
$session = $request->getSession();
$membre = $session->get("membre");
if ($session->get("block_quiz")) return $this->redirectToRoute('saisir');
$erreurs_etape = $this->em->getRepository(ErreurQuizz::class)->findBy(array("type" => "NON_OPERATEUR"));
return $this->render('Front/Default/quizz_non_operateurs.html.twig', array("erreurs_etape" => $erreurs_etape, "membre" => $membre, "user_token" => $session->has("user_token")));
}
/**
* @Route("/charte", name="charte")
*/
public function charteAction(Request $request)
{
$blocs = $this->em->getRepository(Contenu::class)->createQueryBuilder('c')
->where('c.code LIKE :code')
->andWhere('c.page = :page')
->orderBy('c.ordre', 'ASC')
->setParameter('code', 'BLOC')
->setParameter('page', 'charte')
->getQuery()
->getResult();
$intro = $this->em->getRepository(Contenu::class)->findOneBy(array("code" => "INTRO", "page" => "charte"));
$blocsd = $this->em->getRepository(BlocEcran::class)->findBy(array("ecran" => "charte"), array("ordre" => "ASC"));
return $this->render('Front/Default/charte.html.twig', array("intro" => $intro, "blocs" => $blocs, "blocsd" => $blocsd));
}
/**
* @Route("/mediation", name="mediation")
*/
public function mediationAction(Request $request)
{
$blocs = $this->em->getRepository(Contenu::class)->createQueryBuilder('c')
->where('c.code LIKE :code')
->andWhere('c.page = :page')
->orderBy('c.ordre', 'ASC')
->setParameter('code', 'BLOC')
->setParameter('page', 'mediation')
->getQuery()
->getResult();
$intro = $this->em->getRepository(Contenu::class)->findOneBy(array("code" => "INTRO", "page" => "mediation"));
$blocsd = $this->em->getRepository(BlocEcran::class)->findBy(array("ecran" => "mediation"), array("ordre" => "ASC"));
return $this->render('Front/Default/mediation.html.twig', array("intro" => $intro, "blocs" => $blocs, "blocsd" => $blocsd));
}
/**
* @Route("/contacts", name="contacts")
*/
public function contactsAction(Request $request)
{
$blocs = $this->em->getRepository(Contenu::class)->createQueryBuilder('c')
->where('c.code LIKE :code')
->andWhere('c.page = :page')
->orderBy('c.ordre', 'ASC')
->setParameter('code', 'BLOC')
->setParameter('page', 'contacts')
->getQuery()
->getResult();
$intro = $this->em->getRepository(Contenu::class)->findOneBy(array("code" => "INTRO", "page" => "contacts"));
$blocsd = $this->em->getRepository(BlocEcran::class)->findBy(array("ecran" => "contacts"), array("ordre" => "ASC"));
return $this->render('Front/Default/contacts.html.twig', array("intro" => $intro, "blocs" => $blocs, "blocsd" => $blocsd));
}
/**
* @Route("/check_mail", name="check_mail")
*/
public function checkMailAction(Request $request)
{
$mail = $request->get("email");
$token_jwt = $this->prepare_access_token();
$url = $this->getParameter('api_url') . "/checkMail/" . $mail;
$header = array('Authorization' => 'Bearer ' . $token_jwt);
$response = $this->client->get($url, array('headers' => $header));
$reponse = json_decode($response->getBody()->getContents());
return new Response($reponse);
}
/**
* @Route("/envoi_mail", name="envoi_mail")
*/
public function envoiMailAction(Request $request)
{
$mail = $request->get("email");
$alphabet = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890';
$pass = array(); //remember to declare $pass as an array
$alphaLength = strlen($alphabet) - 1; //put the length -1 in cache
for ($i = 0; $i < 8; $i++) {
$n = rand(0, $alphaLength);
$pass[] = $alphabet[$n];
}
$pass = implode($pass); //turn the array into a string
$data['password'] = $pass;
$data['email'] = $mail;
$data['username'] = $mail;
$data['is_active'] = 1;
$token_jwt = $this->prepare_access_token();
$url = $this->getParameter('api_url') . '/user/create';
$headers = array('Authorization' => 'Bearer ' . $token_jwt, 'Content-Type' => 'application/json; charset=utf-8');
$response = $this->client->post($url, array('headers' => $headers, 'body' => json_encode($data)));
return new Response("OUI");
}
/**
* @Route("/check_login", name="check_login")
*/
public function checkLoginAction(Request $request)
{
$login = $request->get("login");
$pass = $request->get("pass");
$url = $this->getParameter('api_url') . "/login_check";
$data = ['username' => $login, 'password' => $pass];
$headers = array('Content-Type' => 'application/json; charset=utf-8');
try {
$response = $this->client->post($url, ['headers' => $headers, 'body' => json_encode($data)]);
$result = json_decode($response->getBody()->getContents());
if ($result->token) {
$request->getSession()->set("user_token", $result->token);
$request->getSession()->set("user_login", $login);
}
// get firstname and lastname of client to show it in header
$data_client = ['username' => $login];
$url_data = $this->getParameter('api_url') . "/data_client/".$login;
try {
$token_jwt = $this->prepare_access_token();
$header = array('Authorization' => 'Bearer ' . $token_jwt);
$response_data = $this->client->get($url_data, array('headers' => $header));
$result_data = json_decode($response_data->getBody()->getContents());
$request->getSession()->set("user_lastname", $result_data->lastname);
$request->getSession()->set("user_firstname", $result_data->firstname);
} catch (RequestException $r) {
// ne pas bloquer la connexion si souci de récupération du nom et prénom
//~ return new Response("NON");
}
return new Response("OUI");
} catch (RequestException $r) {
return new Response("NON");
}
return new Response("NON");
}
/**
* @Route("/logout_ws", name="logout_ws")
*/
public function logoutAction(Request $request)
{
$request->getSession()->remove("user_id");
$request->getSession()->remove("user_token");
return $this->redirectToRoute("espace");
}
/**
* @Route("/saisir-le-mediateur", name="saisir")
*/
public function saisirAction(Request $request)
{
$session = $request->getSession();
$block_quiz = $session->get("block_quiz");
$contenus = $this->em->getRepository(Contenu::class)->findBy(array("page" => "saisir"));
$blocs = array();
foreach ($contenus as $contenu) {
$blocs[$contenu->getCode()] = $contenu;
}
return $this->render('Front/Default/saisir.html.twig', array('block_quiz' => $block_quiz, "blocs" => $blocs));
}
/**
* @Route("/mon-espace", name="espace")
*/
public function espaceAction(Request $request)
{
$session = $request->getSession();
if ($session->has("user_token")) {
return $this->redirectToRoute('affaires');
}
$blocs = $this->em->getRepository(Contenu::class)->createQueryBuilder('c')
->where('c.code LIKE :code')
->andWhere('c.page = :page')
->orderBy('c.ordre', 'ASC')
->setParameter('code', 'BLOC')
->setParameter('page', 'espace')
->getQuery()
->getResult();
$blocsd = $this->em->getRepository(BlocEcran::class)->findBy(array("ecran" => "espace"), array("ordre" => "ASC"));
return $this->render('/Front/Default/espace.html.twig', array("blocs" => $blocs, "blocsd" => $blocsd));
}
/**
* @Route("/recherche", name="recherche")
*/
public function rechercheAction(Request $request)
{
$txt_recherche = htmlentities($request->get("txt_recherche"));
$txt_recherche2 = $request->get("txt_recherche");
$result1 = $this->em->getRepository(Contenu::class)->createQueryBuilder('c')
->where('c.titre LIKE :search')
->OrWhere('c.contenu LIKE :search')
->OrWhere('c.contenu LIKE :search2')
->setParameter('search', "%" . $txt_recherche . "%")
->setParameter('search2', "%" . $txt_recherche2 . "%")
->orderBy('c.page')
->getQuery()
->getResult();
// count distint page
$result1_count = $this->em->getRepository(Contenu::class)->createQueryBuilder('c')
->select('c.page')
->where('c.titre LIKE :search')
->OrWhere('c.contenu LIKE :search')
->OrWhere('c.contenu LIKE :search2')
->setParameter('search', "%" . $txt_recherche . "%")
->setParameter('search2', "%" . $txt_recherche2 . "%")
->distinct()
->getQuery()
->getResult();
$result2 = $this->em->getRepository(Faq::class)->createQueryBuilder('f')
->where('f.titre LIKE :search')
->OrWhere('f.contenu LIKE :search')
->setParameter('search', "%" . $txt_recherche . "%")
->getQuery()
->getResult();
$result3 = $this->em->getRepository(Member::class)->createQueryBuilder('m')
->where('m.nom LIKE :search')
->setParameter('search', "%" . $txt_recherche . "%")
->getQuery()
->getResult();
$result4 = $this->em->getRepository(Publication::class)->createQueryBuilder('p')
->where('p.titre LIKE :search')
->OrWhere('p.contenu LIKE :search')
->setParameter('search', "%" . $txt_recherche . "%")
->orderBy('p.date', 'DESC')
->getQuery()
->getResult();
$titres = array(
"_mediateur" => "Le Médiateur",
"_qsn" => "Qui sommes-nous ?",
"_charte" => "La charte de la médiation",
"_mediation" => "La médiation",
"_contacts" => "Contacts utiles",
"_mentions" => "Mentions légales",
"_espace" => "Mon Espace",
"_presse" => "Presse",
"_home" => "Accueil",
"_saisir" => "Saisir le Médiateur",
);
$sections = array(
"_mediateur" => "La médiation",
"_qsn" => "La médiation",
"_charte" => "La médiation",
"_mediation" => "S'informer",
"_contacts" => "S'informer",
"_mentions" => "La médiation",
"_espace" => "Mon Espace",
"_presse" => "La médiation",
"_home" => "Accueil",
"_saisir" => "La médiation",
);
$blocsd = $this->em->getRepository(BlocEcran::class)->findBy(array("ecran" => "publication"), array("ordre" => "ASC"));
return $this->render('Front/Default/recherche.html.twig', array("resultats1_count" => $result1_count, "recherche" => $txt_recherche, "recherche2" => $txt_recherche2, "resultats1" => $result1, "resultats2" => $result2, "resultats3" => $result3, "resultats4" => $result4, "titres" => $titres, "sections" => $sections, "blocsd" => $blocsd));
}
/**
* @Route("/contact", name="contact")
*/
public function contactAction(Request $request)
{
$contenu = $this->em->getRepository(Contenu::class)->findOneBy(array("page" => "contact"));
return $this->render('Front/Default/contact.html.twig', array("contenu" => $contenu));
}
/**
* @Route("/credits", name="credits")
*/
public function creditsAction(Request $request)
{
$blocs = $this->em->getRepository(Contenu::class)->createQueryBuilder('c')
->where('c.code LIKE :code')
->andWhere('c.page = :page')
->orderBy('c.ordre', 'ASC')
->setParameter('code', 'BLOC')
->setParameter('page', 'credits')
->getQuery()
->getResult();
$intro = $this->em->getRepository(Contenu::class)->findOneBy(array("code" => "INTRO", "page" => "credits"));
$blocsd = $this->em->getRepository(BlocEcran::class)->findBy(array("ecran" => "credits"), array("ordre" => "ASC"));
return $this->render('Front/Default/credits.html.twig', array("intro" => $intro, "blocs" => $blocs, "blocsd" => $blocsd));
}
/**
* @Route("/mentions", name="mentions")
*/
public function mentionsAction(Request $request)
{
$blocs = $this->em->getRepository(Contenu::class)->createQueryBuilder('c')
->where('c.code LIKE :code')
->andWhere('c.page = :page')
->orderBy('c.ordre', 'ASC')
->setParameter('code', 'BLOC')
->setParameter('page', 'mentions')
->getQuery()
->getResult();
$intro = $this->em->getRepository(Contenu::class)->findOneBy(array("code" => "INTRO", "page" => "mentions"));
$blocsd = $this->em->getRepository(BlocEcran::class)->findBy(array("ecran" => "mentions"), array("ordre" => "ASC"));
return $this->render('Front/Default/mentions.html.twig', array("intro" => $intro, "blocs" => $blocs, "blocsd" => $blocsd));
}
/**
* @Route("/formulaire_contact", name="formulaire_contact")
*/
public function formulaireContactAction(Request $request, MailerInterface $mailer)
{
$form = $this->createFormBuilder()
->add('nom', TextType::class)
->add('prenom', TextType::class)
->add('email', EmailType::class)
->add('nature', ChoiceType::class, array(
'choices' => array(
'Droit d’accès' => 'Droit d’accès',
'Droit de rectification et/ou de suppression' => 'Droit de rectification et/ou de suppression',
'Droit à la portabilité' => 'Droit à la portabilité'
)))
->add('id', FileType::class)
->add('message', TextAreaType::class, array("attr" => array("rows" => 10, "cols" => 50)))
->getForm();
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$env = $this->getParameter('app_environment');
$res_captcha = $this->captchaverify($request->request->get('g-recaptcha-response'), 'invisible');
if ($env != 'dev' && !$res_captcha) {
$this->addFlash('error', "Le reCAPTCHA n'a pas été entré correctement. Revenez en arrière et réessayez.");
} else {
$datas = $form->getData();
$ext = $datas["id"]->getClientOriginalExtension();
if (null == $ext || $ext == '') {
$this->addFlash("error", "Extension du fichier invalide. Veuillez vérifier votre fichier.");
return $this->redirectToRoute('formulaire_contact', $request->query->all());
}
$filename = uniqid() . "." . $ext;
$this->storage->moveFileToStorage('app.identites_directory', $filename, $datas["id"]);
//~ $message = \Swift_Message::newInstance()
//~ ->setSubject("Demande de " . $datas["nature"])
//~ ->setFrom(array($datas["email"] => $datas["nom"] . " " . $datas["prenom"]))
//~ ->setTo("Henri.Dolivier@mediation-telecom.org")
//~ ->setBody($datas["message"])
//~ ->attach(\Swift_Attachment::fromPath($this->getParameter('app.identites_directory') . "/" . $filename));
//~ $this->get('mailer')->send($message);
$message = (new Email())
->from(new Address($datas["email"], $datas["nom"] . " " . $datas["prenom"]))
->to('Henri.Dolivier@mediation-telecom.org')
->subject("Demande de " . $datas["nature"])
->html($datas["message"])
->attachFromPath($this->storage->getFileStorageUrl('app.affair_files_directory', $filename ));
$mailer->send($message);
$body = "Madame, Monsieur,<br /><br />
Nous accusons réception de votre demande. Cette dernière est en cours de traitement.<br />
Conformément au Règlement européen relatif à la protection des personnes physiques à l'égard du traitement des données à caractère personnel et à la libre circulation de ces données du 27 avril 2016 une réponse vous sera apportée dans un délai maximum d’un mois.<br /><br />
Toute autre demande à l’aide du formulaire de contact, prévu exclusivement pour formuler une demande d’accès, de modification, suppression ou de portabilité de données personnelles, ne fera l’objet d’aucun traitement ni de réponse.<br /><br />
Les Services de la médiation des Communications Electroniques<br /><br />
<i style='font-size: 10px'>Ce mail est un envoi automatique suite à votre démarche en ligne. Merci de ne pas y répondre</i>.
";
//~ $message = \Swift_Message::newInstance()
//~ ->setSubject("Accusé de réception")
//~ ->setFrom("noreply@mediation-telecom.org")
//~ ->setTo($datas["email"])
//~ ->setBody($body, 'text/html');
//~ $this->get('mailer')->send($message);
$message = (new Email())
->from(new Address("noreply@mediation-telecom.org", 'Le Médiateur des Communications Electroniques'))
->to($datas["email"])
->subject("Accusé de réception")
->html($body);
$mailer->send($message);
return $this->redirectToRoute("mentions");
}
}
return $this->render('Front/Default/formulaire_contact.html.twig', array('form' => $form->createView()));
}
/**
* @Route("/devenir-membre", name="devenir_membre")
*/
public function devenirMembreAction(Request $request, MailerInterface $mailer)
{
$form = $this->createFormBuilder()
->add('nom', TextType::class, array('required' => true) )
->add('prenom', TextType::class, array('required' => true) )
->add('email', EmailType::class, array('required' => true) )
->add('telephone', TextType::class, array('required' => true) )
->add('societe', TextType::class, array('required' => true) )
->add('siret', TextType::class, array('required' => false) )
->add('message', TextAreaType::class, array('required' => true, "attr" => array("rows" => 10, "cols" => 50)))
->getForm();
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$env = $this->getParameter('app_environment');
$res_captcha = $this->captchaverify($request->request->get('g-recaptcha-response'), 'invisible');
if ($env != 'dev' && !$res_captcha) {
$this->addFlash('error', "Le reCAPTCHA n'a pas été entré correctement. Revenez en arrière et réessayez.");
} else {
$datas = $form->getData();
// envoi à l'AMCE
//~ $message = \Swift_Message::newInstance()
//~ ->setSubject("Demande d'adhésion")
//~ ->setFrom(array($datas["email"] => $datas["nom"] . " " . $datas["prenom"]))
//~ ->setTo("Henri.Dolivier@mediation-telecom.org")
//~ ->setBody(
//~ $this->renderView(
//~ 'Front:Mail:mail.adhesion.html.twig',
//~ array('datas' => $datas)
//~ ),
//~ 'text/html'
//~ );
//~ $this->get('mailer')->send($message);
$message = (new Email())
->from(new Address($datas["email"], $datas["nom"] . " " . $datas["prenom"]))
->to("Henri.Dolivier@mediation-telecom.org")
->subject("Demande d'adhésion")
->html($this->renderView(
'Front/Mail/mail.adhesion.html.twig',
array('datas' => $datas)
)
);
$mailer->send($message);
// envoi accusé de réception
//~ $message = \Swift_Message::newInstance()
//~ ->setSubject("Accusé de réception")
//~ ->setFrom("noreply@mediation-telecom.org")
//~ ->setTo($datas["email"])
//~ ->setBody(
//~ $this->renderView('AmceBundle:Mail:accuse.reception.adhesion.html.twig'),
//~ 'text/html'
//~ );
//~ $this->get('mailer')->send($message);
$message = (new Email())
->from(new Address("noreply@mediation-telecom.org", 'Le Médiateur des Communications Electroniques'))
->to($datas["email"])
->subject("Accusé de réception")
->html($this->renderView('Front/Mail/accuse.reception.adhesion.html.twig'));
$mailer->send($message);
$this->addFlash("success", "Votre demande a bien été enregistrée.<br>Nous vous répondrons dans les plus brefs délais.");
return $this->redirectToRoute("devenir_membre");
}
}
$blocsd = $this->em->getRepository(BlocEcran::class)->findBy(array("ecran" => "publication"), array("ordre" => "ASC"));
return $this->render('Front/Default/devenir_membre.html.twig', array('blocsd' => $blocsd, 'form' => $form->createView()));
}
/**
* @Route("/plan", name="plan")
*/
public function planAction(Request $request)
{
return $this->render('Front/Default/plan.html.twig');
}
/**
* @Route("/la-mediation-des-communications-electroniques-fonctionnement", name="video1")
*/
public function video1Action(Request $request)
{
return $this->render('Front/Default/video1.html.twig');
}
/**
* @Route("/la-mediation-definition", name="video2")
*/
public function video2Action(Request $request)
{
return $this->render('Front/Default/video2.html.twig');
}
/**
* @Route("/presse", name="presse")
*/
public function presseAction(Request $request)
{
$blocs = $this->em->getRepository(Contenu::class)->createQueryBuilder('c')
->where('c.code LIKE :code')
->andWhere('c.page = :page')
->orderBy('c.ordre', 'ASC')
->setParameter('code', 'BLOC')
->setParameter('page', 'presse')
->getQuery()
->getResult();
$intro = $this->em->getRepository(Contenu::class)->findOneBy(array("code" => "INTRO", "page" => "presse"));
$blocsd = $this->em->getRepository(BlocEcran::class)->findBy(array("ecran" => "presse"), array("ordre" => "ASC"));
return $this->render('Front/Default/presse.html.twig', array("intro" => $intro, "blocs" => $blocs, "blocsd" => $blocsd));
}
/**
* @Route("/mdp_oublie", name="mdp_oublie")
*/
public function mdpOublieAction(Request $request)
{
return $this->render('Front/Default/mdp_oublie.html.twig');
}
/**
* @Route("/mdp_oublie_ws", name="mdp_oublie_ws")
*/
public function mdpOublieWsAction(Request $request)
{
$mail = $request->get("mail");
$token_jwt = $this->prepare_access_token();
$url = $this->getParameter('api_url') . "/forget_mdp/" . $mail;
$header = array('Authorization' => 'Bearer ' . $token_jwt);
$response = $this->client->get($url, array('headers' => $header));
$reponse = json_decode($response->getBody()->getContents());
return new Response($reponse);
}
/**
* @Route("/detail_affair", name="detail_affair")
*/
public function detailAffairAction(Request $request)
{
// page details
$session = $request->getSession();
if (!$session->has("user_token")) {
return $this->redirectToRoute('espace');
}
$id = (int)$request->get("id");
if(!$id) return $this->redirectToRoute('affaires');
$url = $this->getParameter('api_url') . "/affaires/details/" . $id;
$header = array('Authorization' => 'Bearer ' . $session->get("user_token"));
$response = $this->client->get($url, array('headers' => $header));
$affair = json_decode($response->getBody()->getContents());
$date_before = new \Datetime('2021-09-15'); // affairs created before this date can't have new detail page
$date_before->setTime(0,0,0);
$created_at = new \Datetime($affair->created_at);
if(!$affair->created_at || ($affair->created_at && $created_at->format('Y-m-d') < $date_before->format('Y-m-d')) ){ // affairs before this date can't have new process => show old template
$template = 'Front/Default/detail_affair.html.twig';
} else {
$template = 'Front/Default/detail_affair_new.html.twig';
}
return $this->render($template, array("affair" => $affair));
}
/**
* @Route("/detail_affaire_historique", name="detail_affair_history")
*/
public function detailAffairHistoryAction(Request $request)
{
// page historique
$session = $request->getSession();
if (!$session->has("user_token"))
return $this->redirectToRoute('espace');
$id = (int)$request->get("id");
if(!$id) return $this->redirectToRoute('affaires');
$url = $this->getParameter('api_url') . "/affaires/details/" . $id;
$header = array('Authorization' => 'Bearer ' . $session->get("user_token"));
$response = $this->client->get($url, array('headers' => $header));
$affair = json_decode($response->getBody()->getContents());
//~ print_r($affair); die;
$date_before = new \Datetime('2021-09-15'); // affairs created before this date can't have new detail page
$date_before->setTime(0,0,0);
$created_at = new \Datetime($affair->created_at);
if(!$affair->created_at || ($affair->created_at && $created_at->format('Y-m-d') < $date_before->format('Y-m-d')) ){ // affairs before this date can't have new process => show old template
return $this->render('Front/Default/detail_affair.html.twig', array("affair" => $affair));
}
// group datas by dates
$created_at = new \Datetime($affair->created_at);
$datas_dates = array();
$datas_dates[$created_at->format('Y-m-d')][] = array(
'field' => 'created_at',
'date' => $affair->created_at,
'document' => null,
'document_btn_label' => null,
'label' => 'Création dossier',
'message' => 'Votre dossier est créé'
);
$label_btn = "";
if($affair->status == 4){
$label_btn = "Télécharger";
}
$datas_dates[$created_at->format('Y-m-d')][] = array(
'field' => 'created_at',
'date' => $affair->created_at,
'document' => null,
'document_btn_label' => $label_btn,
'label' => 'Finalisez votre dossier',
'message' => 'Merci de télécharger les pièces manquantes afin de finaliser la création de votre dossier'
);
if($affair->fin_saisine_at && (!$affair->is_closed_prematurely || $affair->prematurely_closed_by != 'client')){
$fin_saisine_at = new \Datetime($affair->fin_saisine_at);
if($affair->is_mixte) {
$message = "Vous avez choisi d'envoyer vos pièces par courrier.
<br>Vous devez nous adresser dans le délai maximum de 7 jours vos pièces justificatives par la poste.";
} elseif($affair->waiting_representant_mandat) {
$message = "Vous devez nous transmettre le mandat et la copie recto/verso de la carte d'identité du consommateur représenté";
} else {
$message = "Vous avez finalisé votre saisine en ligne";
}
$datas_dates[$fin_saisine_at->format('Y-m-d')][] = array(
'field' => 'fin_saisine_at',
'date' => $affair->fin_saisine_at,
'document' => null,
'document_btn_label' => null,
'label' => 'Votre dossier a été créé',
'message' => $message
);
}
if($affair->notification_at && (!$affair->is_closed_prematurely || $affair->prematurely_closed_by != 'client')){
$notification_at = new \Datetime($affair->notification_at);
$datas_dates[$notification_at->format('Y-m-d')][] = array(
'field' => 'notification_at',
'date' => $affair->notification_at,
'document' => null,
'document_btn_label' => null,
'label' => 'Saisine réceptionnée',
'message' => "Vous dossier est réceptionné, complet et notifié"
);
$datas_dates[$notification_at->format('Y-m-d')][] = array(
'field' => 'notification_at',
'date' => $affair->notification_at,
//~ 'document' => 'notification',
//~ 'document_btn_label' => "Télécharger le courrier (PDF)",
'document' => null,
'document_btn_label' => null,
'label' => 'Recevabilité',
'message' => 'Votre dossier est en cours d\'analyse'
);
}
//~ if($affair->sent_compte_rendu_at){
//~ $notification_at = new \Datetime($affair->sent_compte_rendu_at);
//~ $datas_dates[$notification_at->format('Y-m-d')][] = array(
//~ 'field' => 'sent_compte_rendu_at',
//~ 'date' => $affair->sent_compte_rendu_at,
//~ 'document' => null,
//~ 'document_btn_label' => null,
//~ 'label' => '',
//~ 'message' => ""
//~ );
//~ }
//~ if($affair->qualification_definitive_at){
//~ $qualification_definitive_at = new \Datetime($affair->qualification_definitive_at);
//~ $datas_dates[$qualification_definitive_at->format('Y-m-d')][] = array(
//~ 'field' => 'qualification_definitive_at',
//~ 'date' => $affair->qualification_definitive_at,
//~ 'document' => null,
//~ 'document_btn_label' => null,
//~ 'label' => '',
//~ 'message' => ''
//~ );
//~ }
if($affair->envoi_global_at){
$recevabilite = $affair->recevabilite;
$is_recevable = 0;
switch($recevabilite){
case 1:
$is_recevable = 1;
$label = "Saisine recevable";
$message = "Votre dossier est déclaré recevable";
$type_doc = "recevabilite";
break;
case 2:
$label = "Saisine irrecevable";
$message = "Votre dossier est déclaré irrecevable";
$type_doc = "cloture";
break;
case 3:
$label = "Saisine annulée";
$message = "Votre dossier ne peut pas être pris en compte";
$type_doc = "cloture";
break;
default:
$label = "";
$message = "";
$type_doc = "";
}
$envoi_global_at = new \Datetime($affair->envoi_global_at);
$datas_dates[$envoi_global_at->format('Y-m-d')][] = array(
'field' => 'envoi_global_at',
'date' => $affair->envoi_global_at,
'document' => $type_doc,
'document_btn_label' => $is_recevable ? "Télécharger" : null,
'label' => $label,
'message' => $message
);
if($is_recevable){
$datas_dates[$envoi_global_at->format('Y-m-d')][] = array(
'field' => 'envoi_global_at',
'date' => $affair->envoi_global_at,
'document' => null,
'document_btn_label' => null,
'label' => "En attente retour du professionnel",
'message' => "Le Médiateur a soumis votre litige au professionnel et est en attente de sa réponse"
);
}
}
if($affair->affect_amce_at){
$affect_amce_at = new \Datetime($affair->affect_amce_at);
$datas_dates[$affect_amce_at->format('Y-m-d')][] = array(
'field' => 'affect_amce_at',
'date' => $affair->affect_amce_at,
'document' => null,
'document_btn_label' => null,
'label' => 'En cours d\'instruction',
'message' => 'Votre dossier est en cours de traitement par le Médiateur'
);
}
if($affair->send_avis_at){
$send_avis_at = new \Datetime($affair->send_avis_at);
$datas_dates[$send_avis_at->format('Y-m-d')][] = array(
'field' => 'send_avis_at',
'date' => $affair->send_avis_at,
'document' => 'avis',
'document_btn_label' => "Télécharger",
'label' => 'Avis transmis',
'message' => 'Le Médiateur a fait une proposition de solution'
);
$datas_dates[$send_avis_at->format('Y-m-d')][] = array(
'field' => 'position_consommateur',
'date' => $affair->send_avis_at,
'document' => null,
'document_btn_label' => null,
'label' => 'En attente de position du consommateur',
'message' => 'En attente de votre réponse sur la proposition de solution du Médiateur'
);
$datas_dates[$send_avis_at->format('Y-m-d')][] = array(
'field' => null,
'date' => $affair->send_avis_at,
'document' => null,
'document_btn_label' => null,
'label' => 'En attente de position du professionnel',
'message' => 'En attente de la réponse du professionnel sur la proposition de solution du Médiateur'
);
}
if($affair->position_operateur_at){
$position_operateur_at = new \Datetime($affair->position_operateur_at);
$position_label = "";
switch($affair->position_operateur){
case "Refusé": $position_label = "Proposition refusée par le professionnel"; break;
case "Accepté": $position_label = "Proposition acceptée par le professionnel"; break;
case "Sans position": $position_label = "Le professionnel ne s'est pas prononcé"; break;
}
$datas_dates[$position_operateur_at->format('Y-m-d')][] = array(
'field' => 'position_operateur_at',
'date' => $affair->position_operateur_at,
'document' => '',
'document_btn_label' => '',
'label' => 'Position professionnel',
'message' => $position_label
);
}
if($affair->position_client_at){
$position_client_at = new \Datetime($affair->position_client_at);
$position_label = "";
switch($affair->position_client){
case "Refusé": $position_label = "Vous avez refusé la proposition"; break;
case "Accepté": $position_label = "Vous avez accepté la proposition"; break;
case "Sans position": $position_label = "Vous ne vous êtes pas prononcé sur la proposition"; break;
case "Constesté": $position_label = "Vous avez contesté la proposition"; break;
}
$datas_dates[$position_client_at->format('Y-m-d')][] = array(
'field' => 'position_client_at',
'date' => $affair->position_client_at,
'document' => '',
'document_btn_label' => '',
'label' => 'Votre position',
'message' => $position_label
);
}
if($affair->closed_at){
$message = "";
$button = (!$affair->is_closed_prematurely ? "Télécharger" : null);
if($affair->recevabilite && ($affair->recevabilite == 2 || $affair->recevabilite == 3) ){
$label = "Saisine clôturée";
$message = "Saisine irrecevable clôturée";
} elseif($affair->is_closed_prematurely){
$label = "Dossier clôturé";
$message = $affair->motif_cloture ? "Dossier clos : ".$affair->motif_cloture : '';
}
else {
$label = "Saisine clôturée";
$message = $affair->is_refuse_entree_mediation ? "Votre professionnel refuse d’entrer en Médiation":"Votre dossier est clôturé";
if (($affair->is_mixte || $affair->is_web) && !$affair->is_refuse_entree_mediation) {
$button = null;
}
}
$closed_at = new \Datetime($affair->closed_at);
$datas_dates[$closed_at->format('Y-m-d')][] = array(
'field' => 'closed_at',
'date' => $affair->closed_at,
'document' => (!$affair->is_closed_prematurely ? 'cloture' : null),
'document_btn_label' => $button,
'label' => $label,
'message' => $message
);
}
if($affair->non_mise_en_oeuvre_at){
$non_mise_en_oeuvre_at = new \Datetime($affair->non_mise_en_oeuvre_at);
$datas_dates[$non_mise_en_oeuvre_at->format('Y-m-d')][] = array(
'field' => 'non_mise_en_oeuvre_at',
'date' => $affair->non_mise_en_oeuvre_at,
'document' => null,
'document_btn_label' => null,
'label' => 'Mise en oeuvre solution',
'message' => 'Vous avez déclaré une difficulté dans la mise en oeuvre de la solution proposée'
);
} else {
if($affair->send_avis_at){
$send_avis_at = new \Datetime($affair->send_avis_at); // date d'envoi de l'avis
// date 30 jours après l'envoi de l'avis
$send_avis_at_30_days = new \Datetime($affair->send_avis_at);
$send_avis_at_30_days->modify('+30 days');
// date 6 mois après l'envoi de l'avis
$send_avis_at_6_months = new \Datetime($affair->send_avis_at);
$send_avis_at_6_months->modify('+6 months');
$today = new \Datetime();
//~ echo "<br>send_avis_at : ".$send_avis_at->format('d-m-Y H:i:s');
//~ echo "<br>send_avis_at_30_days :".$send_avis_at_30_days->format('d-m-Y H:i:s');
//~ echo "<br>send_avis_at_6_months :".$send_avis_at_6_months->format('d-m-Y H:i:s');
if ($send_avis_at_30_days <= $today && $send_avis_at_6_months >= $today && !$affair->mise_en_oeuvre_at){
// afficher message pour possiblité de notifier mauvaise ou non mise en oeuvre à l'AMCE
$send_avis_at->modify('+30 days'); // date de l'événement : date d'envoi de l'avis + 30 jours
$datas_dates[$send_avis_at->format('Y-m-d')][] = array(
'field' => 'block_non_mise_en_oeuvre_at',
'date' => $send_avis_at->format('Y-m-d\TH:i:s'),
'document' => null,
'document_btn_label' => null,
'label' => 'Mise en oeuvre solution',
'message' => 'Vous souhaitez informer le Médiateur d’une difficulté de mise en œuvre ?'
);
}
}
}
// if($affair->cloture_suite_davis_at){
// $cloture_suite_davis_at = new \Datetime($affair->cloture_suite_davis_at);
//
// if($affair->suite_davis_type){
// switch($affair->suite_davis_type){
// case 'Contestation':
// case 'Demande d’explication':
// $label_btn = "Télécharger";
// $document = "cloture_suite_avis";
// break;
// default:
// $label_btn = "";
// $document = "";
// }
// }
//
// $datas_dates[$cloture_suite_davis_at->format('Y-m-d')][] = array(
// 'field' => 'cloture_suite_davis_at',
// 'date' => $affair->cloture_suite_davis_at,
// 'document' => $document,
// 'document_btn_label' => $label_btn,
// 'label' => 'Mise en oeuvre solution',
// 'message' => 'La mise en oeuvre de la solution proposée est effective'
// );
// }
if($affair->cloture_mise_en_oeuvre_at){
$cloture_mise_en_oeuvre_at = new \Datetime($affair->cloture_mise_en_oeuvre_at);
$datas_dates[$cloture_mise_en_oeuvre_at->format('Y-m-d')][] = array(
'field' => 'cloture_mise_en_oeuvre_at',
'date' => $affair->cloture_mise_en_oeuvre_at,
'document' => '',
'document_btn_label' => '',
'label' => 'Mise en oeuvre solution',
'message' => 'Difficulté dans la mise en oeuvre clôturée'
);
}
$nb_messages_amce = 0;
$nb_messages_conso = 0;
if($affair->messages){
foreach($affair->messages as $msg){
if($msg->from == "amce"){
if (null == $affair->closed_at) {
$nb_messages_amce ++;
}
$label= 'Demande d\'informations';
$label_message = 'Vous avez reçu un message du Médiateur';
$field = 'message';
} else {
if($msg->type != 7) { // n'est pas message TYPE_CLIENT_MISE_EN_OEUVRE => peut être affiché
$nb_messages_conso ++;
$label= 'Votre réponse';
$label_message = 'Vous avez répondu au Médiateur';
$field = 'message_conso';
}
}
if($msg->type != 7) { // n'est pas message TYPE_CLIENT_MISE_EN_OEUVRE => peut être affiché
$date_message = new \Datetime($msg->date);
$datas_dates[$date_message->format('Y-m-d')][] = array(
'field' => $field,
'date' => $msg->date,
'document' => null,
'document_btn_label' => null,
'label' => $label,
'message' => $label_message
);
}
}
}
if(null !== $affair->suite_davis_type_at && null !== $affair->suite_davis_type){
$suite_davis_type_at = new \Datetime($affair->suite_davis_type_at);
$suite_davis_history_lines = array(
"Remerciement ou acceptation" => "Vous avez accepté la proposition",
"Refus" => "Vous avez refusé la proposition",
"Contestation" => "Vous avez contesté la proposition",
"Demande d’explication" => "Vous avez demandé des explications sur la proposition"
);
$datas_dates[$suite_davis_type_at->format('Y-m-d')][] = array(
'field' => 'suite_davis_type_at',
'date' => $affair->suite_davis_type_at,
'document' => '',
'document_btn_label' => '',
'label' => 'Votre position',
'message' => $suite_davis_history_lines[$affair->suite_davis_type]
);
}
if(null !== $affair->mise_en_oeuvre_at){
$mise_en_oeuvre_at = new \Datetime($affair->mise_en_oeuvre_at);
$datas_dates[$mise_en_oeuvre_at->format('Y-m-d')][] = array(
'field' => 'mise_en_oeuvre_at',
'date' => $affair->mise_en_oeuvre_at,
'document' => '',
'document_btn_label' => '',
'label' => 'Mise en œuvre',
'message' => 'Vous avez déclaré une difficulté dans la mise en oeuvre de la solution proposée'
);
}
if($affair->autorised_demande_docs_at){
$autorised_demande_docs_at = new \Datetime($affair->autorised_demande_docs_at);
$datas_dates[$autorised_demande_docs_at->format('Y-m-d')][] = array(
'field' => 'autorised_demande_docs_at',
'date' => $affair->autorised_demande_docs_at,
'document' => '',
'document_btn_label' => '',
'label' => 'En attente pièces par opérateur',
'message' => 'Vous avez autorisé à demander les pièces à l\'opérateur'
);
}
if ($affair->docs_transmitted_by_operator_at) {
$message = "Pièces transmises par l’opérateur";
$docs_transmitted_by_operator_at = new \Datetime($affair->docs_transmitted_by_operator_at);
$datas_dates[$docs_transmitted_by_operator_at->format('Y-m-d')][] = array(
'field' => 'docs_transmitted_by_operator_at',
'date' => $affair->docs_transmitted_by_operator_at,
'document' => '',
'document_btn_label' => '',
'message' => $message,
'label' => 'Autorisation de chargement des pièces',
);
}
// reorder by dates ASC
ksort($datas_dates);
// Sort messages for each date
$new_datas_dates = array();
foreach ($datas_dates as $data_date) {
uksort($data_date, function($a, $b) use ($data_date) {
$date_a = new \DateTime($data_date[$a]['date']);
$date_b = new \DateTime($data_date[$b]['date']);
if ($date_a == $date_b) {
if ($data_date[$a]['label'] == 'En attente pièces par opérateur') {
return 1;
}
return $a > $b ? 1 : -1;
}
// 'En attente pièces par opérateur' is placed at the end of the list at the same time(H:i)!
if ($data_date[$a]['label'] == 'En attente pièces par opérateur' && $date_a->format('H:i') == $date_b->format('H:i')) {
return 1;
}
return $date_a > $date_b ? 1 : -1;
});
$new_datas_dates[] = $data_date;
}
return $this->render('Front/Default/detail_affair_history.html.twig', array(
"affair" => $affair,
"datas_dates" => $new_datas_dates,
"nb_messages_amce" => $nb_messages_amce,
"nb_messages_conso" => $nb_messages_conso
));
}
/**
* @Route("/detail_affaire_messagerie", name="detail_affair_messages")
*/
public function detailAffairMessagesAction(Request $request, MailerInterface $mailer)
{
// page messagerie / upload de docs
$session = $request->getSession();
if (!$session->has("user_token"))
return $this->redirectToRoute('espace');
$token = $session->get("user_token");
$id = (int)$request->get("id");
if(!$id) return $this->redirectToRoute('affaires');
$request->getSession()->set("affair_id", $id);
$header = array('Authorization' => 'Bearer ' . $token);
// set read customer field for messages of the affair
$url_msg = $this->getParameter('api_url') . "/affaires/set_read_messages/" . $id;
$response_msg = $this->client->get($url_msg, array('headers' => $header));
// get affair details
$url = $this->getParameter('api_url') . "/affaires/details/" . $id;
$response = $this->client->get($url, array('headers' => $header));
$affair = json_decode($response->getBody()->getContents());
$rep_type = $affair->rep_type; // type de représentant
$is_waiting_mandat = ($rep_type == "Membre de la famille" ? 1 : 0);
$date_before = new \Datetime('2021-09-15'); // affairs created before this date can't have new detail page
$date_before->setTime(0,0,0);
$created_at = new \Datetime($affair->created_at);
if(!$affair->created_at || ($affair->created_at && $created_at->format('Y-m-d') < $date_before->format('Y-m-d')) ){ // affairs before this date can't have new process => show old template
return $this->render('Front/Default/detail_affair.html.twig', array("affair" => $affair));
}
$has_mandat_sent = false;
$has_cni_sent = false;
$type_envoi = $request->get("envoi", null);
$is_close_prematurely = $request->get("close_prematurely", null);
$is_prevent_operator_vue = $request->get("prevent_operator", null);
if($type_envoi == "no_doc") $type_envoi = "electronique"; // if client choose "no doc to upload", type_envoi is by_mail
if($affair->status == 4 && $type_envoi){ // formulaire fin de saisine validé
$files = array();
$datas = array(
"affair_id" => (int)$id,
"by_post" => $type_envoi == "poste" ? 1 : 0,
"by_mail" => $type_envoi == "electronique" ? 1 : 0,
"close_prematurely" => $is_close_prematurely
);
$baseurl = $request->getScheme() . '://' . $request->getHttpHost() . $request->getBasePath();
$tmpFiles = [];
for ($i = 1; $i <= 10; $i++) {
if ($request->get("type_doc_" . $i)) {
$file = $request->files->get("document_file_" . $i);
if ($file) {
$datas["type_doc_" . $i] = $request->get("type_doc_" . $i);
if($datas["type_doc_" . $i] == 19) $has_mandat_sent = true;
if($datas["type_doc_" . $i] == 20) $has_cni_sent = true;
$ext = $file->getClientOriginalExtension();
if (null == $ext || $ext == '') {
$this->addFlash("error", "Extension du fichier invalide. Veuillez vérifier votre fichier.");
return $this->redirectToRoute('detail_affaire_messagerie', $request->query->all());
}
$name = $file->getClientOriginalName();
$filename = uniqid() . "." . $ext;
$this->storage->moveFileToStorage('app.affair_files_directory', $filename, $file);
$datas["document_file_" . $i] = $baseurl . $this->storage->getFileStorageUrl('app.affair_files_directory', $filename );
$datas["document_name_" . $i] = $name;
$tmpFiles[] = $filename;
}
}
}
$url = $this->getParameter('api_url') . "/saisine/phase2Pieces";
$header = array('Authorization' => 'Bearer ' . $token, 'Content-Type' => 'application/json; charset=utf-8');
$response = $this->client->post($url, array('headers' => $header, 'body' => json_encode($datas)));
$reponse = json_decode($response->getBody()->getContents());
if ($reponse == 'OUI') {
foreach ($tmpFiles as $fileName) {
$this->storage->deleteFileFromStorage('app.affair_files_directory', $fileName);
}
}
// envoi mail de confirmation de prise en compte de la saisine que pour les saisines 100% web
// envoi si pas besoin de mandat ou (si besoin de mandat et mandat et CNI fournis)
if ($type_envoi != "poste" && (!$is_waiting_mandat || ($is_waiting_mandat && $has_mandat_sent && $has_cni_sent) ) ) {
$mail = $request->getSession()->get("user_login");
//~ $message = \Swift_Message::newInstance()
//~ ->setSubject("Votre saisine du Médiateur des Communications Electroniques")
//~ ->setSender(array('contact@mediateur-telecom.fr' => 'Le Médiateur des Communications Electroniques'))
//~ ->setFrom(array('contact@mediateur-telecom.fr' => 'Le Médiateur des Communications Electroniques'))
//~ ->setTo($mail)
//~ ->setBody($this->renderView(
//~ 'AmceBundle:Mail:mail.fin.saisine.html.twig',
//~ array(
//~ 'type' => $type_envoi
//~ )
//~ ),
//~ 'text/html');
//~ $this->get('mailer')->send($message);
$message = (new Email())
->from(new Address('contact@mediateur-telecom.fr', 'Le Médiateur des Communications Electroniques'))
->to($mail)
->subject("Votre saisine du Médiateur des Communications Electroniques")
->html(
$this->renderView('Front/Mail/mail.fin.saisine.html.twig',['type' => $type_envoi])
);
$mailer->send($message);
}
// Recharger les infos de l'affaire
$url = $this->getParameter('api_url') . "/affaires/details/" . $id;
$header = array('Authorization' => 'Bearer ' . $token);
$response = $this->client->get($url, array('headers' => $header));
$affair = json_decode($response->getBody()->getContents());
if ($is_close_prematurely) {
$url = $this->getParameter('api_url') . "/close-prematurely";
$header = array('Authorization' => 'Bearer ' . $token, 'Content-Type' => 'application/json; charset=utf-8');
$this->client->post($url, array('headers' => $header, 'body' => \json_encode(array('affaire'=> $id))));
return $this->redirectToRoute('detail_affair_history', ['id'=>$id]);
}
} // fin étape fin saisine
$envoi_new = $request->get("envoi_new", null);
if($envoi_new == "new" && !$affair->affect_amce_at) { // formulaire d'ajout de nouveaux documents tant que l'affaire n'est pas affectée à l'AMCE
$datas = array("affair_id" => (int)$id);
$has_mandat_sent = false;
$has_cni_sent = false;
$is_waiting_mandat = $affair->waiting_representant_mandat;
$tmpFiles = [];
$baseurl = $request->getScheme() . '://' . $request->getHttpHost() . $request->getBasePath();
for ($i = 1; $i <= 10; $i++) {
if ($request->get("type_doc_" . $i)) {
$file = $request->files->get("document_file_" . $i);
if ($file) {
$datas["type_doc_" . $i] = $request->get("type_doc_" . $i);
if($datas["type_doc_" . $i] == 19) $has_mandat_sent = true;
if($datas["type_doc_" . $i] == 20) $has_cni_sent = true;
$ext = $file->getClientOriginalExtension();
if (null == $ext || $ext == '') {
$this->addFlash("error", "Extension du fichier invalide. Veuillez vérifier votre fichier.");
return $this->redirectToRoute('detail_affaire_messagerie', $request->query->all());
}
$name = $file->getClientOriginalName();
$filename = uniqid() . "." . $ext;
$this->storage->moveFileToStorage('app.affair_files_directory', $filename, $file);
$datas["document_file_" . $i] = $baseurl . $this->storage->getFileStorageUrl('app.affair_files_directory', $filename );
$datas["document_name_" . $i] = $name;
$tmpFiles[] = $filename;
}
}
}
$url = $this->getParameter('api_url') . "/saisine/addNewDocs";
$header = array('Authorization' => 'Bearer ' . $token, 'Content-Type' => 'application/json; charset=utf-8');
$response = $this->client->post($url, array('headers' => $header, 'body' => json_encode($datas)));
$reponse = json_decode($response->getBody()->getContents());
if ($reponse == 'OUI') {
foreach ($tmpFiles as $fileName) {
$this->storage->deleteFileFromStorage('app.affair_files_directory', $fileName);
}
}
if ($is_waiting_mandat && $has_mandat_sent && $has_cni_sent ) { // send notification email
$mail = $request->getSession()->get("user_login");
//~ $message = \Swift_Message::newInstance()
//~ ->setSubject("Votre saisine du Médiateur des Communications Electroniques")
//~ ->setSender(array('contact@mediateur-telecom.fr' => 'Le Médiateur des Communications Electroniques'))
//~ ->setFrom(array('contact@mediateur-telecom.fr' => 'Le Médiateur des Communications Electroniques'))
//~ ->setTo($mail)
//~ ->setBody($this->renderView(
//~ 'AmceBundle:Mail:mail.fin.saisine.html.twig',
//~ array(
//~ 'type' => "electronique"
//~ )
//~ ),
//~ 'text/html');
//~ $this->get('mailer')->send($message);
$message = (new Email())
->from(new Address('contact@mediateur-telecom.fr', 'Le Médiateur des Communications Electroniques'))
->to($mail)
->subject("Votre saisine du Médiateur des Communications Electroniques")
->html($this->renderView('Front/Mail/mail.fin.saisine.html.twig',['type' => "electronique"]));
$mailer->send($message);
}
// Recharger les infos de l'affaire
$url = $this->getParameter('api_url') . "/affaires/details/" . $id;
$header = array('Authorization' => 'Bearer ' . $token);
$response = $this->client->get($url, array('headers' => $header));
$affair = json_decode($response->getBody()->getContents());
}
// When affair is validated “irrecevable” (10)
if($affair->status == 10 && $is_prevent_operator_vue) {
$url = $this->getParameter('api_url') . "/prevent_view_pro";
$header = array('Authorization' => 'Bearer ' . $token, 'Content-Type' => 'application/json; charset=utf-8');
$response = $this->client->post($url, array('headers' => $header, 'body' => json_encode(['affair_id'=>$id])));
$reponse = json_decode($response->getBody()->getContents());
$affair->view_pro = 0;
}
$valid_answer = $request->get("valid_answer", null);
if($valid_answer){ // formulaire de réponse du client validé
// tester si formulaire re-soumis
$last_message = null;
if ($affair->messages){
$length = sizeof($affair->messages);
$cpt = 0;
$msg_type_no_need_answer = 10;
foreach($affair->messages as $msg){
$cpt++;
if($cpt == $length && $msg->from == 'amce' and $msg->type != $msg_type_no_need_answer){ // le dernier message provient de l'AMCE
$last_message = $msg;
}
}
}
if($last_message){ // message conso peut être envoyé
$datas = array(
"affair_id" => (int)$id,
"message" => $request->get("message", null),
"autorised_docs_for_pro" => $request->get("autorised_docs_for_pro", null)
);
$tmpFiles = [];
$baseurl = $request->getScheme() . '://' . $request->getHttpHost() . $request->getBasePath();
for ($i = 1; $i <= 10; $i++) {
if ($request->get("type_doc_" . $i)) {
$file = $request->files->get("document_file_" . $i);
if ($file) {
$datas["type_doc_" . $i] = $request->get("type_doc_" . $i);
$ext = $file->getClientOriginalExtension();
if (null == $ext || $ext == '') {
$this->addFlash("error", "Extension du fichier invalide. Veuillez vérifier votre fichier.");
return $this->redirectToRoute('detail_affaire_messagerie', $request->query->all());
}
$name = $file->getClientOriginalName();
$filename = uniqid() . "." . $ext;
$this->storage->moveFileToStorage('app.affair_files_directory', $filename, $file);
$datas["document_file_" . $i] = $baseurl . $this->storage->getFileStorageUrl('app.affair_files_directory', $filename );
$datas["document_name_" . $i] = $name;
$tmpFiles[] = $filename;
}
}
}
$url = $this->getParameter('api_url') . "/saisine/answerCustomer";
$header = array('Authorization' => 'Bearer ' . $token, 'Content-Type' => 'application/json; charset=utf-8');
$response = $this->client->post($url, array('headers' => $header, 'body' => json_encode($datas)));
$reponse = json_decode($response->getBody()->getContents());
if ($reponse == 'OUI') {
foreach ($tmpFiles as $fileName) {
$this->storage->deleteFileFromStorage('app.affair_files_directory', $fileName);
}
}
// Recharger les infos de l'affaire
$url = $this->getParameter('api_url') . "/affaires/details/" . $id;
$header = array('Authorization' => 'Bearer ' . $token);
$response = $this->client->get($url, array('headers' => $header));
$affair = json_decode($response->getBody()->getContents());
}
}
// infos sur l'affaire
// group datas by dates
$created_at = new \Datetime($affair->created_at);
$datas_dates = array();
//~ $datas_dates[$created_at->format('Y-m-d')][] = array(
//~ 'field' => 'created_at',
//~ 'date' => $affair->created_at,
//~ 'from' => "amce",
//~ 'docs' => null,
//~ 'message' => ''
//~ );
if($affair->fin_saisine_at){
$fin_saisine_at = new \Datetime($affair->fin_saisine_at);
if($affair->is_mixte) {
$message = "J'ai choisi d'envoyer mes documents par courrier pour finaliser ma saisine";
$datas_dates[$fin_saisine_at->format('Y-m-d')][] = array(
'field' => 'fin_saisine_at',
'date' => $affair->fin_saisine_at,
'from' => 'client',
'docs' => null,
'message' => $message
);
$message = "Vous avez choisi d'envoyer vos pièces par courrier.
<br>Vous devez nous adresser dans le délai maximum de 10 jours vos pièces justificatives par la poste.";
$datas_dates[$fin_saisine_at->format('Y-m-d')][] = array(
'field' => 'fin_saisine_at',
'date' => $affair->fin_saisine_at,
'from' => 'amce',
'docs' => null,
'message' => $message
);
} else {
if ($affair->documents_saisine){
$message = "Documents joints en ligne pour finaliser ma demande";
} else {
$message = "Je n'ai pas joint de documents pour finaliser ma saisine";
}
$datas_dates[$fin_saisine_at->format('Y-m-d')][] = array(
'field' => 'fin_saisine_at',
'date' => $affair->fin_saisine_at,
'from' => 'client',
'docs' => null,
'message' => $message
);
if ($affair->status != 10 && $affair->motif_cloture != 'Dossier incomplet') { // affair is closed for "Dossier incomplet" reason
$message = "";
if ($affair->documents_saisine) {
if ($affair->autorised_demande_docs_at) {
$message .= "Vous avez autorisé la médiation des communications électroniques à demander les pièces manquantes à l'opérateur.<br>";
} else {
$message .= "Vos documents sont en cours d'analyse par nos services.<br>";
}
}
$message .= "Vous serez prévenu par email de l'avancement de votre dossier.";
$datas_dates[$fin_saisine_at->format('Y-m-d')][] = array(
'field' => 'fin_saisine_at',
'date' => $affair->fin_saisine_at,
'from' => 'amce',
'docs' => null,
'message' => $message
);
}
}
if($affair->waiting_representant_mandat) {
$message = "Vous devez nous transmettre le mandat et la copie recto/verso de la carte d'identité du consommateur représenté";
$datas_dates[$fin_saisine_at->format('Y-m-d')][] = array(
'field' => 'fin_saisine_at_mandat',
'date' => $affair->fin_saisine_at,
'from' => 'amce',
'docs' => null,
'message' => $message
);
}
}
if($affair->rep_type == 'Membre de la famille' && !$affair->waiting_representant_mandat && $affair->envoi_mandat_at && ($affair->status != 10 && $affair->motif_cloture != 'Dossier incomplet')){
$message = "Votre mandat de représentation a bien été réceptionné et est en cours d’analyse par nos services.";
$envoi_mandat_at = new \Datetime($affair->envoi_mandat_at);
$datas_dates[$envoi_mandat_at->format('Y-m-d')][] = array(
'field' => 'envoi_mandat_at',
'date' => $affair->envoi_mandat_at,
'from' => 'amce',
'docs' => null,
'message' => $message
);
}
if($affair->notification_at && $affair->is_mixte){
if($affair->is_passage_auto_prequalif){ // si les pièces ne sont pas réceptionnées et le dossier est basculé en préqualification
$message = "Vos documents ne nous sont pas parvenus dans les délais. Votre demande est en cours d’analyse par nos services.<br>Vous serez prévenu par email de l'avancement de votre dossier.";
} else {
$message = "Vos documents sont réceptionnés et sont en cours d’analyse par nos services.<br>Vous serez prévenu par email de l'avancement de votre dossier.";
}
$notification_at = new \Datetime($affair->notification_at);
$datas_dates[$notification_at->format('Y-m-d')][] = array(
'field' => 'notification_at',
'date' => $affair->notification_at,
'from' => 'amce',
'docs' => null,
'message' => $message
);
}
if($affair->envoi_global_at){
$recevabilite = $affair->recevabilite;
$is_recevable = 0;
switch($recevabilite){
case 1:
$is_recevable = 1;
$message = "Votre demande a été validée par nos services.<br>Vous serez prévenu en cas de besoin de documents complémentaires.";
break;
//~ case 2:
//~ $message = "Votre dossier est déclaré irrecevable";
//~ break;
//~ case 3:
//~ $message = "Votre dossier ne peut pas être pris en compte";
//~ break;
default:
$message = "";
}
$envoi_global_at = new \Datetime($affair->envoi_global_at);
if($is_recevable){
$datas_dates[$envoi_global_at->format('Y-m-d')][] = array(
'field' => 'envoi_global_at',
'date' => $affair->envoi_global_at,
'from' => 'amce',
'docs' => null,
'message' => $message
);
}
}
if(!\is_null($affair->view_pro) && !$affair->view_pro) {
$prequalification_at = new \Datetime($affair->envoi_global_at);
$datas_dates[$prequalification_at->format('Y-m-d')][] = array(
'field' => 'prequalification_at',
'date' => $affair->envoi_global_at,
'from' => 'client',
'docs' => null,
'message' => 'Je m’oppose à la transmission de ma saisine à l’opérateur'
);
}
$nb_messages_amce = 0;
$nb_messages_conso = 0;
if($affair->messages){
foreach($affair->messages as $msg){
if($msg->from == "amce"){
$nb_messages_amce ++;
$field = 'message';
} else {
if($msg->content && $msg->type != 7) { // n'est pas message TYPE_CLIENT_MISE_EN_OEUVRE => peut être affiché
$nb_messages_conso ++;
$field = 'message_conso';
}
}
if($msg->content && $msg->type != 7) { // n'est pas message TYPE_CLIENT_MISE_EN_OEUVRE => peut être affiché
$date_message = new \Datetime($msg->date);
$datas_dates[$date_message->format('Y-m-d')][] = array(
'field' => $field,
'date' => $msg->date,
'from' => $msg->from,
'docs' => $msg->from == "amce" ? null : $msg->docs,
'message' => $msg->content
);
}
}
}
if($affair->missing_docs) {
$affair->missing_docs = json_decode($affair->missing_docs, true);
}
// reorder by dates ASC
ksort($datas_dates);
// Sort messages for each date
foreach ($datas_dates as $data_date) {
usort($data_date, function($a, $b) {
$date_a = new \DateTime($a['date']);
$date_b = new \DateTime($b['date']);
return $date_a >= $date_b ? 1 : -1;
});
}
/////////
$template = 'Front/Default/detail_affair_messages.html.twig';
return $this->render($template, array("affair" => $affair, "datas_dates" => $datas_dates));
}
/**
* @Route("/affair_load_infos_representant", name="affair_load_infos_representant")
*/
public function loadInfoRepresentantAction(Request $request)
{
$id = $request->get('id');
$session = $request->getSession();
if (!$session->has("user_token")) {
return new Response(-1);
}
if(!$id) return new Response(-1);
$url = $this->getParameter('api_url') . "/representant_info_find/". (int)$id;
$header = array('Authorization' => 'Bearer ' . $session->get("user_token"), 'Content-Type' => 'application/json; charset=utf-8');
$response = $this->client->get($url, array('headers' => $header));
return new Response($response->getBody()->getContents());
}
/**
* @Route("/detail_affaire_messagerie_reply/{id}", name="detail_affaire_messagerie_reply")
* @param int $id
*/
public function detailAffairMessagerieReplyAction(Request $request, $id)
{
$session = $request->getSession();
if (!$session->has("user_token")) {
return $this->redirectToRoute('espace');
}
$answerMediatrice = '';
if ($request->request->get('answer-mediatrice')) {
$answerMediatrice = $request->request->get('answer-mediatrice');
}
$datas = array(
"affair_id" => $id,
"message" => $request->request->get('message'),
"answer_mediatrice" => $answerMediatrice,
"message_type" => $request->request->get('message_type'),
);
$tmpFiles = [];
$baseurl = $request->getScheme() . '://' . $request->getHttpHost() . $request->getBasePath();
for ($i = 1; $i <= 10; $i++) {
if ($request->get("type_doc_" . $i)) {
$file = $request->files->get("document_file_" . $i);
if ($file) {
$datas["type_doc_" . $i] = $request->get("type_doc_" . $i);
$ext = $file->getClientOriginalExtension();
if (null == $ext || $ext == '') {
$this->addFlash("error", "Extension du fichier invalide. Veuillez vérifier votre fichier.");
return $this->redirectToRoute('saisine', $request->query->all());
}
$name = $file->getClientOriginalName();
$filename = uniqid() . "." . $ext;
$this->storage->moveFileToStorage('app.affair_files_directory', $filename, $file);
$datas["document_file_" . $i] = $baseurl . $this->storage->getFileStorageUrl('app.affair_files_directory', $filename );
$datas["document_name_" . $i] = $name;
$tmpFiles[] = $filename;
}
}
}
$url = $this->getParameter('api_url') . "/messagerie_reply";
$header = array('Authorization' => 'Bearer ' . $session->get("user_token"), 'Content-Type' => 'application/json; charset=utf-8');
$reponse = $this->client->post($url, array('headers' => $header, 'body' => json_encode($datas)));
if ($reponse == 'OUI') {
foreach ($tmpFiles as $fileName) {
$this->storage->deleteFileFromStorage('app.affair_files_directory', $fileName);
}
}
return $this->redirectToRoute('detail_affair_messages', array('id' => $id));
}
/**
* @Route("/detail_affair_representant_mandat/{id}", name="detail_affair_representant_mandat")
* @param int $id
*/
public function detailAffairRepresentantMandatAction(Request $request, $id)
{
$session = $request->getSession();
if (!$session->has("user_token")) {
return $this->redirectToRoute('espace');
}
if(!$id) return $this->redirectToRoute('affaires');
$url = $this->getParameter('api_url') . "/get_representant_mandat/" . $id;
$header = array('Authorization' => 'Bearer ' . $session->get("user_token"));
try {
$response = $this->client->get($url, array('headers' => $header));
} catch (RequestException $r) {
$this->addFlash("error",$r->getMessage());
return $this->redirectToRoute('affaires');
}
$mandat = json_decode($response->getBody()->getContents());
if ($mandat->code == '200' && $mandat->link) {
return $this->redirect($mandat->link);
} else {
if ($mandat->message) {
$this->addFlash("error",$mandat->message);
}
}
return $this->redirectToRoute('affaires');
}
/**
* @Route("/imprimer_form", name="imprimer_form")
*/
public function imprimerFormAction(Request $request, KnpSnappyPdf $knpSnappyPdf)
{
$session = $request->getSession();
$affaire_id = $request->getSession()->get("affair_id");
/* $client = new \Zend\XmlRpc\Client($this->container->getParameter('url_webservice'));
$datas = array("user_id" => $request->getSession()->get("user_id"));
$client->call('saisine.connexion', array('datas' => $datas)); */
// affaire
//$response_affair = $client->call('saisine.affairView', (int)$affaire_id);
//$result_affair = new \SimpleXMLElement($response_affair);
$url = $this->getParameter('api_url') . "/affaires/details/" . (int)$session->get("affair_id");
$header = array('Authorization' => 'Bearer ' . $session->get("user_token"));
$response = $this->client->get($url, array('headers' => $header));
$result_affair = json_decode($response->getBody()->getContents());
// representant
/* $result_representative = null;
if((int)$result_affair->representative_id > 0) {
$response_representative = $client->call('saisine.representativeView', (int)$result_affair->representative_id);
$result_representative = new \SimpleXMLElement($response_representative);
} */
$filename = "saisine-du-mediateur-des-communications-electroniques";
if ($result_affair->rep_type == 'Membre de la famille') {
$tmpDirectory = \sys_get_temp_dir();
$file_path = $tmpDirectory . '/' . $filename;
if(file_exists( $file_path )){
unlink( $file_path );
}
$file = $knpSnappyPdf->generateFromHtml(
$this->renderView('Front/Default/affaire.pdf.html.twig', array("affair" => $result_affair)),
$file_path
);
$url = $this->getParameter('api_url') . "/get_representant_mandat/" . (int)$session->get("affair_id");
$header = array('Authorization' => 'Bearer ' . $session->get("user_token"));
try {
$response = $this->client->get($url, array('headers' => $header));
} catch (RequestException $r) {
$this->addFlash("error",$r->getMessage());
return $this->redirectToRoute('affaires');
}
$mandat_path = $tmpDirectory . '/mandat.pdf';
if(file_exists( $mandat_path )){
unlink( $mandat_path );
}
$mandat = json_decode($response->getBody()->getContents());
if (copy($mandat->link, $mandat_path)) {
$pdf = new PDFMerger();
foreach (array($file_path, $mandat_path) as $f) {
try {
$pdf->addPDF($f, 'all');
} catch (\Exception $e) {
}
}
$pdf->merge('download', $filename . ".pdf");
}
} else {
return new Response(
$knpSnappyPdf->getOutputFromHtml(
$this->renderView('Front/Default/affaire.pdf.html.twig', array("affair" => $result_affair)),
array('encoding' => 'utf-8')
),
200,
array(
'Content-Type' => 'application/pdf',
'Content-Disposition' => 'attachment; filename="' . $filename . '.pdf"'
)
);
}
}
/**
* @Route("/print_empty_form", name="print_empty_form")
*/
public function imprimerEmptyFormAction(Request $request, KnpSnappyPdf $knpSnappyPdf)
{
$filename = "saisine-du-mediateur-des-communications-electroniques.pdf";
return new Response(
$knpSnappyPdf->getOutputFromHtml(
$this->renderView('Front/Default/pdf.vide.html.twig'),
array('encoding' => 'utf-8')
),
200,
array(
'Content-Type' => 'application/pdf',
'Content-Disposition' => 'attachment; filename="' . $filename . '"'
)
);
}
/**
* @Route("/block_quiz", name="block_quiz")
*/
public function blockQuizAction(Request $request)
{
$blocked = $request->get('blocked');
if ($blocked) {
$request->getSession()->set("block_quiz", "blocked");
} else {
if ($request->getSession()->get("block_quiz") && $request->getSession()->get("block_quiz") != "blocked")
$request->getSession()->remove("block_quiz");
}
return new Response('');
}
public function prepare_access_token()
{
$username = 'tonyGee';
$password = '123456';
$url = $this->getParameter('api_url') . "/login_check";
$data = ['username' => $username, 'password' => $password];
$headers = array('Content-Type' => 'application/json; charset=utf-8');
$response = $this->client->post($url, ['headers'=>$headers, 'body' => json_encode($data)]);
$result = json_decode($response->getBody()->getContents());
return $result->token;
}
public function checkValidityDate($date){
$date_ch = $date;
$tab_date = explode('/', $date_ch);
$day = $tab_date[0];
$month = $tab_date[1];
$year = $tab_date[2];
if(strlen($year) == 2) $year = "20".$year; // cas où la personne saisit l'année que sur 2 chiffres
if(!checkdate($month, $day, $year)){ // date inconnue
return 0;
}
return 1;
}
/**
* @Route("/check_dates_quiz", name="check_dates_quiz")
*/
public function checkDatesQuizAction(Request $request)
{
$is_valid = 0;
$is_blocage = 0;
$error = "";
$ovh_is_operateur = $request->get("ovh_is_operateur", -1);
$is_operateur = $request->get("is_operateur");
$date_service_client = $request->get("date_service_client");
$date_reponse_service_client = $request->get("date_reponse_service_client");
$date_service_conso = $request->get("date_service_conso");
$date_reponse_service_conso = $request->get("date_reponse_service_conso");
$reponse_service_client = $request->get("reponse_service_client");
$service_conso_contact = $request->get("service_conso_contact");
$reponse_service_conso = $request->get("reponse_service_conso");
$today = new \Datetime();
$date_1_year_ago = new \Datetime();
$date_1_year_ago->modify('-1 year');
$date_1_month_ago = new \Datetime();
$date_1_month_ago->modify('-1 month');
$date_2_months_ago = new \Datetime();
$date_2_months_ago->modify('-2 months');
// check validité date de contact service client
$format = 'd/m/Y';
if($this->checkValidityDate($date_service_client)){ // date valide
// cas où la personne a saisi l'année sur 2 chiffres au lieu de 4
$d_service_client = \DateTime::createFromFormat($format, $date_service_client);
if(substr($d_service_client->format('Y'), 0, 2) == "00") $d_service_client->setDate("20".substr($d_service_client->format('Y'), 2, 2), $d_service_client->format('m'), $d_service_client->format('d'));
if($d_service_client > $today){ // date supérieure à la date du jour : ne pas bloquer le quiz mais renvoyer une erreur
$error = "<br>Veuillez vérifier la date de contact du service client";
}
elseif( ($is_operateur == 0 || $ovh_is_operateur == 0) && $d_service_client < $date_1_year_ago){ // opérateur non télécom et date saisie supérieure à 1 an : bloquer quiz
$is_blocage = 1;
$error = "<p style=\"text-align:center\">Pour que votre dossier soit recevable, vous devez agir auprès du Médiateur dans le délai maximum d'un an après avoir saisi par écrit le professionnel.</p>";
}
elseif( ($is_operateur == 0 || $ovh_is_operateur == 0) && $reponse_service_client == "service_client_pas_repondu_depuis_1_mois"){ // opérateur
if($d_service_client > $date_1_month_ago){ // date saisie supérieure à 30 jours par rapport à la date du jour : bloquer quiz
$is_blocage = 1;
$error .= "<p>Pour pouvoir saisir le Médiateur des Communications Electroniques vous devez attendre le délai d’1 mois entre la prise de contact avec le service clients et sa réponse, ce qui n’est pas le cas compte tenu des informations que vous nous avez transmises.</p>
<p>Si vous ne recevez aucune réponse du service recours consommateurs dans un délai d’un mois ou si la solution proposée ne vous satisfait pas, vous pourrez saisir le Médiateur des Communications Electroniques.</p>
<p>Consultez notre <a href=\"".$this->generateUrl('faq')."\">FAQ</a>.</p>";
}
}
// service_conso_contact => valeurs "service_conso_contacte" ou "service_client_pas_repondu"
if(!$is_blocage && $service_conso_contact == "service_client_pas_repondu"){
if($d_service_client > $today){ // date supérieure à la date du jour : ne pas bloquer le quiz mais renvoyer une erreur
$error = "<br>Veuillez vérifier la date de contact du service client";
}
elseif($d_service_client < $date_1_year_ago){ // date saisie supérieure à 1 an : bloquer quiz
$is_blocage = 1;
$error = "<p style=\"text-align:center\">Vous ne pouvez pas saisir le Médiateur. Le délai d’1 an depuis que vous avez saisi le professionnel par écrit est dépassé.</p>";
} elseif( ($is_operateur == 1 || $ovh_is_operateur == 1) && $d_service_client > $date_2_months_ago){ // opérateur télécom et date saisie inférieure à 2 mois : bloquer quiz
$is_blocage = 1;
$error = "<p>Pour pouvoir saisir le Médiateur des Communications Electroniques, vous devez attendre le délai de 2 mois entre la prise de contact avec le service clients et sa réponse, ce qui n’est pas le cas compte tenu des informations que vous nous avez transmises.</p>
<p>Passé ce délai de 2 mois, vous pourrez saisir le Médiateur des Communications Electroniques.</p>
<p>Vous pouvez également contacter par courrier le service recours consommateurs.</p>
<p>Si vous ne recevez aucune réponse du service recours consommateurs dans un délai d’un mois ou si la solution proposée ne vous satisfait pas, vous pouvez alors saisir le Médiateur des Communications Electroniques</p>";
}
elseif( ($is_operateur == 0 || $ovh_is_operateur == 0) && $d_service_client > $date_1_month_ago){ // opérateur non télécom et et date de contact du service client inférieure à 1 mois : bloquer quizz
$is_blocage = 1;
$error = "<p>Pour pouvoir saisir le Médiateur des Communications Electroniques vous devez attendre le délai d’1 mois entre la prise de contact avec le service clients et sa réponse, ce qui n’est pas le cas compte tenu des informations que vous nous avez transmises.</p>
<p>Si vous ne recevez aucune réponse du service clients dans un délai d’un mois ou si la solution proposée ne vous satisfait pas, vous pouvez saisir le Médiateur des Communications Electroniques.</p>
<p>Consultez notre <a href=\"".$this->generateUrl('faq')."\">FAQ</a>.</p>";
}
}
if( ($is_operateur == 0 || $ovh_is_operateur == 0) && !$is_blocage){ // is_operateur = 0 => cas opérateur non télécom ou ovh_is_operateur == 0 => OVH non télécom
if($reponse_service_client == "service_client_repondu" && $this->checkValidityDate($date_reponse_service_client)){ // service client a répondu et date valide
$d_reponse_service_client = \DateTime::createFromFormat($format, $date_reponse_service_client);
// cas où la personne a saisi l'année sur 2 chiffres au lieu de 4
if(substr($d_reponse_service_client->format('Y'), 0, 2) == "00") $d_reponse_service_client->setDate("20".substr($d_reponse_service_client->format('Y'), 2, 2), $d_reponse_service_client->format('m'), $d_reponse_service_client->format('d'));
if($d_reponse_service_client > $today){ // date supérieure à la date du jour : ne pas bloquer le quiz mais renvoyer une erreur
$error .= "<br>Veuillez vérifier la date de réponse du service client";
}elseif($d_reponse_service_client < $d_service_client){ // date saisie inférieure à la date de contact du service client : ne pas bloquer le quiz mais renvoyer une erreur
$error .= "<br>Veuillez vérifier la date de réponse du service client";
}
//~ elseif($d_service_client > $date_2_months_ago){ // date saisie inférieure à 2 mois : bloquer quizz
//~ $is_blocage = 1;
//~ $error = "<p>Pour pouvoir saisir le Médiateur des Communications Electroniques, vous devez attendre le délai de 2 mois entre la prise de contact avec le service clients et sa réponse, ce qui n’est pas le cas compte tenu des informations que vous nous avez transmises.</p>
//~ <p>Passé ce délai de 2 mois, vous pourrez saisir le Médiateur des Communications Electroniques.</p>
//~ <p>Vous pouvez également contacter par courrier le service recours consommateurs.</p>
//~ <p>Si vous ne recevez aucune réponse du service recours consommateurs dans un délai d’un mois ou si la solution proposée ne vous satisfait pas, vous pouvez alors saisir le Médiateur des Communications Electroniques</p>";
//~ }
}elseif($reponse_service_client == "service_client_repondu" && !$this->checkValidityDate($date_reponse_service_client)) { // date invalide
$error = "<br>Veuillez vérifier la date de réponse du service client";
}
}
if( $is_operateur || $ovh_is_operateur ){ // cas opérateur télécom ou OVH télécom
// service_conso_contact => valeurs "service_conso_contacte" ou "service_client_pas_repondu"
if(!$is_blocage && $service_conso_contact == "service_conso_contacte"){ // check validité date contact service conso
if($this->checkValidityDate($date_service_conso)){ // date valide
$d_service_conso = \DateTime::createFromFormat($format, $date_service_conso);
// cas où la personne a saisi l'année sur 2 chiffres au lieu de 4
if(substr($d_service_conso->format('Y'), 0, 2) == "00") $d_service_conso->setDate("20".substr($d_service_conso->format('Y'), 2, 2), $d_service_conso->format('m'), $d_service_conso->format('d'));
if($d_service_conso > $today){ // ne pas bloquer le quiz mais renvoyer une erreur
$error .= "<br>Veuillez vérifier la date de contact du service recours consommateurs";
}
elseif($d_service_conso < $date_1_year_ago){ // bloquer quiz
$is_blocage = 1;
$error .= "<br>Vous ne pouvez pas saisir le Médiateur. Le délai d’1 an depuis que vous avez saisi le professionnel par écrit est dépassé.";
}
elseif($d_service_conso < $d_service_client){ // date saisie inférieure à la date de contact du service client : ne pas bloquer le quiz mais renvoyer une erreur
$error .= "<br>Veuillez vérifier la date de contact du service recours consommateurs";
}
// reponse_service_conso => valeurs "", "service_conso_repondu" ou "service_conso_pas_repondu"
if(!$is_blocage && $reponse_service_conso == "service_conso_repondu"){ // check validité réponse service conso
$d_reponse_service_conso = \DateTime::createFromFormat($format, $date_reponse_service_conso);
// cas où la personne a saisi l'année sur 2 chiffres au lieu de 4
if(substr($d_reponse_service_conso->format('Y'), 0, 2) == "00") $d_reponse_service_conso->setDate("20".substr($d_reponse_service_conso->format('Y'), 2, 2), $d_reponse_service_conso->format('m'), $d_reponse_service_conso->format('d'));
if(!$this->checkValidityDate($date_reponse_service_conso)) {
$error = "<br>Veuillez vérifier la date de réponse du service recours consommateurs";
} elseif($d_reponse_service_conso > $today){ // ne pas bloquer le quiz mais renvoyer une erreur
$error .= "<br>Veuillez vérifier la date de réponse du service recours consommateurs";
}elseif($d_reponse_service_conso < $d_service_conso){ // date réponse service conso inférieure à la date de contact du service conso : ne pas bloquer le quiz mais renvoyer une erreur
$error .= "<br>Veuillez vérifier la date de réponse du service recours consommateurs";
}
}
if(!$is_blocage && $reponse_service_conso == "service_conso_pas_repondu"){ // service conso pas répondu
if($d_service_conso > $date_1_month_ago){ // service conso pas répondu et date de contact service conso < 1 mois par rapport à la date du jour : bloquer quiz
$is_blocage = 1;
$error = "<p>Pour pouvoir saisir le Médiateur des Communications Electroniques vous devez attendre le délai d’1 mois entre la prise de contact avec le service recours consommateurs et sa réponse, ce qui n’est pas le cas compte tenu des informations que vous nous avez transmises.</p>
<p>Si vous ne recevez aucune réponse du service recours consommateurs dans un délai d’un mois ou si la solution proposée ne vous satisfait pas, vous pourrez saisir le Médiateur des Communications Electroniques.</p>
<p>Consultez notre <a href=\"".$this->generateUrl('faq')."\">FAQ</a>.</p>";
}
}
} else {
$error .= "<br>Veuillez vérifier la date de contact du service recours consommateurs";
}
}
}
} else {
$error = "<br>Veuillez vérifier la date de contact du service client";
}
// dates valides
if($error == "") { // enregistrement en session des valeurs pour utilisation dans la saisine
$request->getSession()->set("date_service_client", isset($d_service_client) ? $d_service_client->format('d/m/Y') : $date_service_client);
$request->getSession()->set("date_service_conso", isset($d_service_conso) ? $d_service_conso->format('d/m/Y') : $date_service_conso);
$request->getSession()->set("date_reponse_service_client", isset($d_reponse_service_client) ? $d_reponse_service_client->format('d/m/Y') : $date_reponse_service_client);
$request->getSession()->set("date_reponse_service_conso", isset($d_reponse_service_conso) ? $d_reponse_service_conso->format('d/m/Y') : $date_reponse_service_conso);
$request->getSession()->set("service_conso_contact", $service_conso_contact);
$request->getSession()->set("reponse_service_client", $reponse_service_client);
$request->getSession()->set("reponse_service_conso", $reponse_service_conso);
return new Response(json_encode(array("blocage" => 0, "error" => "")));
}
return new Response(json_encode(array("blocage" => $is_blocage, "error" => $error)));
}
/**
* @Route("/detail_affaire_get_courrier/{type}/{id}", name="detail_affair_get_courrier")
*/
public function getCourrierAffairAction(Request $request, $type, $id)
{
// page details
$session = $request->getSession();
if (!$session->has("user_token")) {
return $this->redirectToRoute('espace');
}
$id = (int)$request->get("id");
if(!$id) return $this->redirectToRoute('affaires');
$url = $this->getParameter('api_url') . "/affaire/get_courrier/".$type."/".$id;
$header = array('Authorization' => 'Bearer ' . $session->get("user_token"));
$response = $this->client->get($url, array('headers' => $header));
$document = json_decode($response->getBody()->getContents());
if($document != "Not found") {
$now = new \Datetime();
//~ $test = "http://solutio.dev.goons.mana.paris/uploads/courriers/2021/03/Qualification_affaire_10270403-0928.pdf";
$filename = "Courrier-$type-$id.".$now->format('dmYhis').".pdf";
header('Content-type: application/pdf');
header('Content-Disposition: attachment; filename="'.$filename.'"');
readfile($document);
return new Response('');
} else return new Response('Not found');
}
/**
* @Route("/autorisation-chargement-pieces/{id}", name="autorisation_chargement_pieces")
*/
public function autorisationChargementPieces(Request $request, $id)
{
// page details
$session = $request->getSession();
if (!$session->has("user_token")) {
return $this->redirectToRoute('espace');
}
$url = $this->getParameter('api_url') . "/autorisation-chargement-pieces";
$header = array('Authorization' => 'Bearer ' . $session->get("user_token"), 'Content-Type' => 'application/json; charset=utf-8');
$response = $this->client->post($url, array('headers' => $header, 'body' => \json_encode(array('affaire'=> $id))));
return new Response($response->getBody());
}
// /**
// * @Route("/close-prematurely/{id}", name="close_prematurely")
// */
// public function closePrematurely(Request $request, $id)
// {
// // page details
// $session = $request->getSession();
// if (!$session->has("user_token")) {
// return $this->redirectToRoute('espace');
// }
//
// $url = $this->getParameter('api_url') . "/close-prematurely";
// $header = array('Authorization' => 'Bearer ' . $session->get("user_token"), 'Content-Type' => 'application/json; charset=utf-8');
// $response = $this->client->post($url, array('headers' => $header, 'body' => \json_encode(array('affaire'=> $id))));
//
//
// return new Response($response->getBody());
// }
public function getUnreadMessages(Request $request)
{
$session = $request->getSession();
$id = 0;
if ($session->get("user_token")) {
$header = array('Authorization' => 'Bearer ' . $session->get("user_token"));
// get unread by consumer messages
$url = $this->getParameter('api_url') . "/affaires/get_unread_by_consumer_messages/";
$response = $this->client->get($url, array('headers' => $header));
$result = json_decode($response->getBody()->getContents());
if ($result->code == 200) {
$id = $result->next_affair_id;
}
}
return new Response($id);
}
# get success response from recaptcha and return it to controller
private function captchaverify($response, $type ="normal"){
$url = $this->getParameter('url_recaptcha');
$secret = $this->getParameter('secret_recaptcha');
$secret_invisible = $this->getParameter('secret_recaptcha_invisible');
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($ch, CURLOPT_POST, true);
if($type=="invisible") {
$data = array(
'secret' => $secret_invisible,
'response' => $response,
'remoteip' => $_SERVER['REMOTE_ADDR']
);
} else {
$data = array(
'secret' => $secret,
'response' => $response
);
}
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
$response = curl_exec($ch);
curl_close($ch);
$res = json_decode($response);
return $res->success;
}
}