<?php
namespace App\Services;
use App\Entity\Actuv2ElectronicInvoice;
use App\Entity\Actuv2ElectronicInvoiceAnswer;
use App\Entity\Actuv2ElectronicInvoiceVote;
use App\Entity\Actuv2Help;
use App\Entity\Actuv2Journal;
use App\Entity\Actuv2Quiz;
use App\Entity\Actuv2Podcast;
use App\Entity\Actuv2Sondage;
use App\Entity\Actuv2Bienetre;
use App\Entity\Actuv2Citation;
use App\Entity\Actuv2QuizVote;
use App\Entity\Actuv2Actualite;
use App\Entity\Actualitecabinet;
use App\Entity\Actuv2Calendrier;
use App\Entity\Actuv2Infographie;
use App\Entity\Actuv2Sondagevote;
use App\Entity\Actuv2Chiffredumois;
use App\Entity\Actuv2InfographieRse;
use App\Entity\Actuv2NewYear;
use App\Entity\Actuv2QuizAnswer;
use App\Entity\NewsletterProspect;
use App\Entity\PodcastPrivate;
use App\Services\HelpersFirmsService;
use Doctrine\ORM\EntityManagerInterface;
use App\Entity\Actuv2Transformationdigitale;
use App\Entity\Actuv2VoteUseful;
use GuzzleHttp\Client;
use Symfony\Component\HttpFoundation\RequestStack;
use Symfony\Component\String\Slugger\AsciiSlugger;
class QueriesV2Manager
{
protected $entityManager;
protected $em;
private $request;
private HelpersFirmsService $helperFirmsService;
private \App\Services\HelpersFirmsService $helpersFirmsService;
public function __construct(EntityManagerInterface $entityManager, RequestStack $requestStackt, HelpersFirmsService $helperFirmsService, HelpersFirmsService $helpersFirmsService)
{
$this->entityManager = $entityManager->getConnection();
$this->slugger = new AsciiSlugger();
$this->em = $entityManager;
$this->request = $requestStackt->getCurrentRequest();
$this->helperFirmsService = $helperFirmsService;
$this->helpersFirmsService = $helpersFirmsService;
}
/**
* Renvoie les bornes d'une période passée en paramètre
* Si pas de période en paramètre, on se basera la période en cours
*
* @param string $date "aaaa-mm-01", ex: "2021-03-01" pour la période mars 2021
* @return array "dateMin" et "dateMax", ex: 2021-03-01 et 2021-04-01
*/
public function getPeriodFromDate($date = '')
{
//$date = "2024-06-01";
// si pas de date fournie, on prend la date du jour
if ($date == '') {
$date = (new \DateTime())->format('Y-m-d');
}
// Calcul de la période
try {
$dateMin = (new \DateTime($date))->format('Y-m-01');
$dateMax = (new \DateTime($dateMin))->modify('last day of this month')->format('Y-m-d');
} catch (\Throwable $th) {
die;
}
return [
//'dateMin' => "2021-01-01",
'dateMin' => $dateMin,
'dateMax' => $dateMax
];
}
public function getPeriodFromDatePalec($date = '')
{
// si pas de date fournie, on prend la date du jour
if ($date == '') {
$date = (new \DateTime())->format('Y-m-d');
}
// Calcul de la période
try {
$dateInput = new \DateTime($date); // On initialise la date donnée
// Si le jour du mois est avant le 15, on passe au mois précédent
if ($dateInput->format('d') < 15) {
$dateInput->modify('-1 month')->format("Y-m-15"); // Reculer d'un mois
}
// On fixe les limites en fonction de la date ajustée
$dateMin = new \DateTime($dateInput->format('Y-m-15')); // Création de l'objet DateTime pour le 15 du mois ajusté
$dateMax = (clone $dateMin)->modify('+1 month')->modify('-1 day'); // Date max est le 14 du mois suivant
} catch (\Throwable $th) {
// Log l'erreur ici si nécessaire, puis gérer l'exception
die; // à éviter en production, préférer un retour d'erreur géré
}
return [
'dateMin' => $dateMin->format('Y-m-d'), // Formatage en chaîne
'dateMax' => $dateMax->format('Y-m-d') // Formatage en chaîne
];
}
/**
* Récupère les 6 articles de la table actuv2_actualite pour une période donnée
*
* @param string $date "aaaa-mm-01", ex: "2021-03-01" pour la période mars 2021
* @return array $tabData image1 => format paysage (image principale page de détail), image2 => format portrait (homepage), image3 => format panoramique (homepage + footer)
*/
public function getActualites(?string $date = null)
{
$date = $this->getPeriodFromDate($date);
$res = $this->em->getRepository(Actuv2Actualite::class)->findArrayResultBy($date);
// dd($res);
if (count($res) > 0) {
foreach ($res as $key => $value) {
$res[$key]['new_slug'] = $value['id'] . '-' . $this->slugger->slug($value['titre']);
$res[$key]['new_slug'] = strtolower($res[$key]['new_slug']);
}
}
return $res;
}
public function getHistoActualites()
{
$date = $this->getPeriodFromDate();
$date['dateMin'] = (new \DateTime())->setDate(2000, 01, 01)->format('Y-m-d');
$res = $this->em->getRepository(Actuv2Actualite::class)->findArrayResultBy($date, 20);
//dd($res);
if (count($res) > 0) {
foreach ($res as $key => $value) {
$res[$key]['new_slug'] = $value['id'] . '-' . $this->slugger->slug($value['titre']);
$res[$key]['new_slug'] = strtolower($res[$key]['new_slug']);
}
}
return $res;
}
public function getHistoTransfo()
{
$date = $this->getPeriodFromDate();
$date['dateMin'] = (new \DateTime())->setDate(2000, 01, 01)->format('Y-m-d');
$res = $this->em->getRepository(Actuv2Transformationdigitale::class)->findArrayResultBy($date, 1000);
//dd($res);
if (count($res) > 0) {
foreach ($res as $key => $value) {
$res[$key]['new_slug'] = $value['id'] . '-' . $this->slugger->slug($value['titre']);
$res[$key]['new_slug'] = strtolower($res[$key]['new_slug']);
}
}
return $res;
}
public function getHistoBienEtre()
{
$date = $this->getPeriodFromDate();
$date['dateMin'] = (new \DateTime())->setDate(2000, 01, 01)->format('Y-m-d');
$res = $this->em->getRepository(Actuv2Bienetre::class)->findArrayResultBy($date, 1000);
//dd($res);
if (count($res) > 0) {
foreach ($res as $key => $value) {
$res[$key]['new_slug'] = $value['id'] . '-' . $this->slugger->slug($value['titre']);
$res[$key]['new_slug'] = strtolower($res[$key]['new_slug']);
}
}
return $res;
}
/**
* Récupère l'article de la table actuv2_bienEtre pour une période donnée
*
* @param string $date "aaaa-mm-01", ex: "2021-03-01" pour la période mars 2021
* @return array $tabData image1 => format carré, image2 => format panoramique
*/
public function getBienEtre(?string $date = null, $archive = false)
{
if ($archive) {
$reult = $this->em->getRepository(Actuv2Bienetre::class)->findArrayResultBy([], 6);
} else {
$date = $this->getPeriodFromDate($date);
$reult = $this->em->getRepository(Actuv2Bienetre::class)->findArrayResultBy($date);
}
if (count($reult) == 1) {
return $reult[0];
} else {
return null;
}
}
public function getActualiteCabinet(?string $date = null, $cabinet)
{
$date = $this->getPeriodFromDate($date);
$params = [
'dateMin' => $date['dateMin'],
'dateMax' => $date['dateMax'],
'cabinet' => $cabinet
];
$res = $this->em->getRepository(Actualitecabinet::class)->findArrayResultBy($params);
if (count($res) == 1) {
return $res[0];
} else {
return null;
}
}
public function getActualiteCabinetDetails(int $id)
{
if (is_null($id) || !is_numeric($id)) {
return false;
}
$res = $this->em->getRepository(Actualitecabinet::class)->findAllArrayResult($id);
return $res && $res[0] ? $res[0] : null;
}
public function getBienEtreList(?string $date = null)
{
$date = $this->getPeriodFromDate($date);
return $this->em->getRepository(Actuv2Bienetre::class)->findArrayResultBy($date, 6, 'actualite.php');
}
public function getTransformationDigitaleList(?string $date = null)
{
$date = $this->getPeriodFromDate($date);
return $this->em->getRepository(Actuv2Transformationdigitale::class)->findArrayResultBy($date, 6, 'actualite.php');
}
/**
* Récupère l'article de la table actuv2_chiffreDuMois pour une période donnée
*
* @param string $date "aaaa-mm-01", ex: "2021-03-01" pour la période mars 2021
* @return array $tabData
*/
public function getChiffreDuMois(?string $date = null)
{
$date = $this->getPeriodFromDate($date);
return $this->em->getRepository(Actuv2Chiffredumois::class)->findArrayResultBy($date);
}
/**
* Récupère l'article de la table actuv2_citation pour une période donnée
*
* @param string $date "aaaa-mm-01", ex: "2021-03-01" pour la période mars 2021
* @return array $tabData
*/
public function getCitation(?string $date = null)
{
$date = $this->getPeriodFromDate($date);
return $this->em->getRepository(Actuv2Citation::class)->findArrayResultBy($date);
}
public function getHelp(?string $date = null)
{
$date = $this->getPeriodFromDate($date);
$actuv2Help = $this->em->getRepository(Actuv2Help::class)->findArrayResultBy($date);
if ($actuv2Help) {
$help = $this->helpersFirmsService->getHelperById($actuv2Help->getIdHelp());
return [
'id' => $actuv2Help->getId(),
'help' => $help,
];
} else {
return null;
}
}
public function getHelpById(?string $id = null)
{
$actuv2Help = $this->em->getRepository(Actuv2Help::class)->find($id);
if ($actuv2Help) {
$help = $this->helpersFirmsService->getHelperById($actuv2Help->getIdHelp());
return [
'id' => $actuv2Help->getId(),
'help' => $help,
];
} else {
return null;
}
}
public function getHelpWithId(?string $date = null)
{
$date = $this->getPeriodFromDate($date);
$actuv2Help = $this->em->getRepository(Actuv2Help::class)->findArrayResultBy($date);
if ($actuv2Help) {
$help = $this->helpersFirmsService->getHelperById($actuv2Help->getIdHelp());
return [
'id' => $actuv2Help->getId(),
'help' => $help,
];
} else {
return null;
}
}
/**
* Récupère l'article de la table actuv2_infographie pour une période donnée
*
* @param string $date "aaaa-mm-01", ex: "2021-03-01" pour la période mars 2021
* @return array $tabData image1 => format panoramique (homepage + footer),
* image2 => format lightbox paysage
* image3 => format mobile portrait
* image4 => format mobile portrait
* image5 => format mobile portrait (facultatif)
* image6 => format mobile portrait (facultatif)
* image7 => format mobile portrait (facultatif)
* image8 => format mobile portrait (facultatif)
* image9 => format mobile portrait (facultatif)
* image10 => format mobile portrait (facultatif)
* @throws Exception
*/
public function getInfographie(?string $date = null)
{
$date = $this->getPeriodFromDate($date);
$infographie = $this->em->getRepository(Actuv2InfographieRse::class)->findArrayResultBy($date);
if ($infographie) {
usort($infographie[0]['actuv2InfographieRseCarouselMobileFiles'], function ($a, $b) {
return $a['orderDisplay'] - $b['orderDisplay'];
});
return $infographie[0];
}
return null;
}
/**
* Récupère l'article de la table actuv2_transformationDigitale pour une période donnée
*
* @param string $date "aaaa-mm-01", ex: "2021-03-01" pour la période mars 2021
* @return array $tabData
*/
public function getTransformationDigitale(?string $date = null, $archive = false)
{
if ($archive) {
$result = $this->em->getRepository(Actuv2Transformationdigitale::class)->findArrayResultBy([], 6);
} else {
$date = $this->getPeriodFromDate($date);
$result = $this->em->getRepository(Actuv2Transformationdigitale::class)->findArrayResultBy($date);
}
if (count($result) == 1) {
return $result[0];
} else {
return null;
}
}
/**
* Récupère l'article de la table actuv2_journal pour une période donnée
*
* @param string $date "aaaa-mm-01", ex: "2021-03-01" pour la période mars 2021
* @return array $tabData
*/
public function getJournal(?string $date = null, $archive = false)
{
if ($archive) {
$result = $this->em->getRepository(Actuv2Journal::class)->findArrayResultBy([], 6);
} else {
$date = $this->getPeriodFromDate($date);
$result = $this->em->getRepository(Actuv2Journal::class)->findArrayResultBy($date);
}
if (count($result) == 1) {
return $result[0];
} else {
return null;
}
}
/**
* Récupère le sondage du mois, table actuv2_sondage pour une période donnée
*
* @param string $date "aaaa-mm-01", ex: "2021-03-01" pour la période mars 2021
* @return array $tabData
*/
public function getSondage(?string $date = null)
{
$date = $this->getPeriodFromDate($date);
$date['ip'] = $this->request->getClientIp();
$result = $this->em->getRepository(Actuv2Sondage::class)->findSondageBy($date);
if (!$result) {
$result = $this->em->getRepository(Actuv2Sondage::class)->findSimpleSondageBy($date);
$result[0]['nbVote'] = 0;
}
$result[0]['date'] = ($result[0]['date'])->format('Y-m-d');
$result[0]['ip'] = $this->request->getClientIp();
if (!empty($result)) {
return $result[0];
} else {
return null;
}
}
/**
* Récupère le sondage du mois, table actuv2_sondage pour une période donnée
*
* @param string $date "aaaa-mm-01", ex: "2021-03-01" pour la période mars 2021
* @return array $tabData
*/
public function hasVoteUseful(?string $idActu, ?string $type)
{
$ip = $this->request->getClientIp();
$alreadyVote = $this->em->getRepository(Actuv2VoteUseful::class)->findOneBy(['actuId' => $idActu, 'ip' => $ip, 'typeActu' => $type]);
if (!empty($alreadyVote)) {
return true;
} else {
return false;
}
}
/**
* Récupère le podcast (format mp3), table actuv2_podcast pour une période donnée
*
* @param string $date "aaaa-mm-01", ex: "2021-03-01" pour la période mars 2021
* @return object $tabData
*/
public function getPodcast(?string $date = null)
{
$date = $this->getPeriodFromDate($date);
return $this->em->getRepository(PodcastPrivate::class)->findOneByDates($date);
}
public function getPodcastLatest()
{
return $this->em->getRepository(PodcastPrivate::class)->findLastEpisodes(1, ['dateMax' => (new \DateTime())->format('Y-m-d')]);
}
public function getNewsletterProspect(?string $date = null)
{
if ($date == '') {
$date = (new \DateTime())->format('Y-m-d');
}
// Calcul de la période
try {
$dateMin = (new \DateTime($date))->modify('first day of this month')->modify('+4 days')->format('Y-m-d');
$dateMax = (new \DateTime($dateMin))->modify('first day of next month')->modify('+3 days')->format('Y-m-d');
} catch (\Throwable $th) {
die;
}
$date = [
'dateMin' => $dateMin,
'dateMax' => $dateMax
];
return $this->em->getRepository(NewsletterProspect::class)->findOneByDates($date);
}
public function getSondageMailing(?string $date = null)
{
$date = $this->getPeriodFromDate($date);
$result = $this->em->getRepository(Actuv2Sondage::class)->findSimpleSondageBy($date);
if (!empty($result)) {
$result[0]['nbVote'] = 0;
$result[0]['date'] = ($result[0]['date'])->format('Y-m-d');
return $result[0];
} else {
return null;
}
}
/**
* Récupère les podcasts ausha, table actuv2_podcast
*
* @param string $date "aaaa-mm-01", ex: "2021-03-01" pour la période mars 2021
* @return array $tabData
*/
public function getPodcasts(?string $date = null)
{
$date = $this->getPeriodFromDate($date);
return $this->em->getRepository(Actuv2Podcast::class)->findByDatesArrayResult(['dateMin' => $date['dateMin'], 'dateMax' => (new \DateTime())->format('Y-m-d')]);
}
/**
* Récupère les podcasts ausha sous forme d'objet, table actuv2_podcast
*
* @param string $date "aaaa-mm-01", ex: "2021-03-01" pour la période mars 2021
*/
public function getPodcastsObjects(?string $date = null)
{
$date = $this->getPeriodFromDate($date);
// remove 1 month to dateMax to doesnt get last episode published
$dateMax = new \DateTime($date['dateMax']);
$date['dateMax'] = $dateMax->format('Y-m-d');
return $this->em->getRepository(PodcastPrivate::class)->findByDates(['dateMin' => $date['dateMin'], 'dateMax' => $date['dateMax']]);
}
/**
* @return array
*/
public function getDates()
{
$datas = $this->em->getRepository(Actuv2Calendrier::class)->findAllArrayResult();
$arr = array();
foreach ($datas as $item) {
$item['date'] = $item['date'] ? ($item['date'])->format('Y-m-d') : null;
$arr[$item['date']][] = $item;
}
return $arr;
}
/**
* Récupère le résultat d'un sondage
*
* @param int $idSondage
*
* @return array $tabData pourcentage de réponses (1=oui 2=non) ou FALSE si idSondage introuvable
*/
public function getSondageResult($idSondage)
{
if (!is_numeric($idSondage)) {
return false;
}
$tabResult = [
1 => 0,
2 => 0,
];
$res = $this->em->getRepository(Actuv2Sondage::class)->findSondageById($idSondage);
// le sondage n'existe pas
if (count($res) == 0) {
return false;
}
if (count($res) == 1) {
// personne n'a encore voté
if (is_null($res[0]['reponse'])) {
// rien à faire
} else {
// 1 seul type de réponse (que des oui ou que des non), donc forcément 100%
$tabResult[$res[0]['reponse']] = 100;
}
} else {
// on a 2 résultats et on calcule les %
$nbOui = ($res[0]['reponse'] == 1) ? $res[0]['nbVote'] : $res[1]['nbVote'];
$nbNon = ($res[0]['reponse'] == 2) ? $res[0]['nbVote'] : $res[1]['nbVote'];
$total = $nbOui + $nbNon;
$pourcentageOui = round($nbOui * 100 / $total);
$pourcentageNon = 100 - $pourcentageOui;
$tabResult[1] = $pourcentageOui;
$tabResult[2] = $pourcentageNon;
}
return $tabResult;
}
/**
* Récupère les données d'une actualité
*
* @param int $id
* @return array $tabData
*/
public function getActualitesDetails(int $id)
{
if (is_null($id) || !is_numeric($id)) {
return false;
}
$res = $this->em->getRepository(Actuv2Actualite::class)->findAllArrayResult($id);
if (!empty($res)) {
$res[0]['new_slug'] = $res[0]['id'] . '-' . $this->slugger->slug($res[0]['titre']);
$res[0]['new_slug'] = strtolower($res[0]['new_slug']);
$res[0]['date'] = $res[0]['date'] ? ($res[0]['date'])->format('Y-m-d') : null;
$objDate = $res[0]['date'] ? new DateTimeFrench($res[0]['date']) : null;
$res[0]['dateFormated'] = $objDate ? $objDate->format('F Y') : null;
}
return $res && $res[0] ? $res[0] : null;
}
/**
* Récupère les données d'un article de transformation digitale
*
* @param int $id
* @return Actuv2Transformationdigitale
*/
public function getTransformationDigitaleDetails(int $id)
{
if (is_null($id) || !is_numeric($id)) {
return false;
}
return $this->em->getRepository(Actuv2Transformationdigitale::class)->find($id);
}
/**
* Récupère les données d'un journal
*
* @param int $id
* @return Actuv2Journal
*/
public function getJournalDetails(int $id)
{
if (is_null($id) || !is_numeric($id)) {
return false;
}
return $this->em->getRepository(Actuv2Journal::class)->find($id);
}
/**
* Récupère les données d'un article de bien-être
*
* @param int $id
* @return Actuv2Bienetre
*/
public function getBienEtreDetails(int $id)
{
if (is_null($id) || !is_numeric($id)) {
return false;
}
return $this->em->getRepository(Actuv2Bienetre::class)->find($id);
}
/**
* Récupère les données d'un article du calendrier fiscal
*
* @param int $id
* @return Actuv2Calendrier
*/
public function getCalendrierDetails(int $id)
{
if (is_null($id) || !is_numeric($id)) {
return false;
}
return $this->em->getRepository(Actuv2Calendrier::class)->find($id);
}
/**
* Récupère la liste des articles du calendrier fiscal à une date donnée
*
* @param string $date "aaaa-mm-dd"
* @return array $tabData
*/
public function getCalendrierListe(?string $date = null)
{
if (is_null($date) || !is_string($date)) {
return false;
}
$objDate = new \DateTime($date);
$okDate = $objDate->format('Y-m-d');
return $this->em->getRepository(Actuv2Calendrier::class)->findResultBy($okDate, 'calendrier-fiscal.php');
}
/**
* Renvoie les données nécéssaires au footer
*/
public function getFooterData(?string $date = null)
{
$sondage = $this->getSondage($date);
$aushaToken = "eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsImp0aSI6IjczOTY4MjQ2MjU3NzJkYzA2M2ZkMTgyMzVlYzY4ZmFkZWE4MDNhMGI2NzI1NjQ1YzJkODEwM2E2YWYyMTMxZTJkZDZkYjU1NTMyMWQzM2NkIn0.eyJhdWQiOiIxIiwianRpIjoiNzM5NjgyNDYyNTc3MmRjMDYzZmQxODIzNWVjNjhmYWRlYTgwM2EwYjY3MjU2NDVjMmQ4MTAzYTZhZjIxMzFlMmRkNmRiNTU1MzIxZDMzY2QiLCJpYXQiOjE2NjMxNTQ4MTUsIm5iZiI6MTY2MzE1NDgxNSwiZXhwIjo3OTUyNDI4Nzk5LCJzdWIiOiIxMTMwNzEiLCJzY29wZXMiOlsic2hvd3MuaW5kZXhXaXRoR3JhbnRlZCIsInNob3dzLnNob3ciLCJzaG93cy5zaG93LmJ5X3B1YmxpY2lkIiwicGxheWxpc3RzLmluZGV4IiwicGxheWxpc3RzLnN0b3JlIiwicGxheWxpc3RzLnNob3ciLCJwbGF5bGlzdHMudXBkYXRlIiwicGxheWxpc3RzLmRlc3Ryb3kiLCJwbGF5bGlzdHMucG9kY2FzdC5zdG9yZSIsInBsYXlsaXN0cy5wb2RjYXN0LmRlc3Ryb3kiLCJwbGF5bGlzdHMucG9kY2FzdC5tb3ZlIiwicGxheWxpc3RzLmltYWdlLnN0b3JlIiwicGxheWxpc3RzLmltYWdlLmRlc3Ryb3kiLCJwb2RjYXN0cy52aWRlby5pbmRleCIsInBvZGNhc3RzLnZpZGVvLnNob3ciLCJzZWFzb25zLmluZGV4Iiwic2Vhc29ucy5zdG9yZSIsInNlYXNvbnMuc2hvdyIsInNlYXNvbnMuZGVzdHJveSIsInNob3dzLnBvZGNhc3RzLnNlYXNvbi51cGRhdGUiLCJjYW1wYWlnbnMuaW5kZXgiLCJjYW1wYWlnbnMuc2hvdyIsInBvZGNhc3RzLmluZGV4IiwicG9kY2FzdHMuc2hvdyIsInBvZGNhc3RzLnNob3cuYnlfcHVibGljaWQiLCJwb2RjYXN0cy5zdG9yZSIsInBvZGNhc3RzLnVwZGF0ZSIsInBvZGNhc3RzLmRlc3Ryb3kiLCJwb2RjYXN0cy5pbWFnZS5zdG9yZSIsInBvZGNhc3RzLmZpbGUuc3RvcmUiXX0.uWgOLN2_5LAKL9gB0Ij8V5PJjKrwRqAO_wVZ4l0vV73QPPF4MUDUzsYU-1hL4iFFPWanhg018EH_AGZvGdSdrZXqkzBPnqv6TxhL9aCVeayVwvgD-BQwPMJ3E7z27xREEhXH_r6f0d2t_J6SJexVh3AoT8fD2kUyFXh9B95ziWV-vULeHOqtWEZk01YctUyHLFWhIFzajgn8nSHb3hMYfbV4phapZqaegwCBSIxVPJz4yS3Ox0tbI5g-P6fAK5PlE1pKiPXabekYyUN4tPEmpMAQVURM3xcutBXUTMX0H6GCs0ih7KH3cI8SICVrldo3LkbAh8x4uuJJu2aNmv9qHpyxLi9wfmklyWMt0ROuf4dHPiDVLUfwmqnt9UEE4H5jP7hHcrMNCIRzerBgW0cCfKj0wJBtOuYpsqqBou2YTEyYja8uNEQbHpOQT4gT7CJxa575kqKsrTr9tS2k19BPdlxtBoIPQHcVpY9tQ1_TJro72kbE1ooJICZyFYTdHHPX77H4LClYcN4TxHxp8jTp6hXt_BjZbwU7Kl2PIxFV1diK62idKCtBjd_tvnUIuh7sKZeGn-YwCYVZVWRblYmZQ3tmPyje1ZJsgnY_nZIZ1TBwzZf3ucuPRxJJ4vPc3dXkxvLtWUs3bLWnACHCjhRA7LfMNDIlAZoRKHKQI6UNuiE";
$client = new Client(['base_uri' => 'https://developers.ausha.co/v1/podcasts/']);
$headers = [
'Authorization' => 'Bearer ' . $aushaToken,
'accept' => 'application/json',
'content-type' => 'application/json',
];
$podcast = $this->getPodcast($date);
$idAusha = null;
if ($podcast->getIdAushaEpisodeEc()) {
$idAusha = $podcast->getIdAushaEpisodeEc();
}
return [
'actus' => $this->getActualites($date),
'transformationDigitale' => $this->getTransformationDigitale($date),
'infographie' => $this->getInfographie($date),
'chiffreDuMois' => $this->getChiffreDuMois($date),
'citation' => $this->getCitation($date),
'bienEtre' => $this->getBienEtre($date),
'podcast' => $podcast,
'idAusha' => $idAusha,
'sondage' => [
'details' => $sondage,
'results' => is_null($sondage) ? null : $this->getSondageResult($sondage['id']),
],
'origin' => "actu_mois",
];
}
/**
* Renvoie les données nécéssaires au quiz RH
*/
public function getQuizRh(?string $date = null)
{
$date = $this->getPeriodFromDate($date);
$result = $this->em->getRepository(Actuv2Quiz::class)->findResultBy($date);
//dd($date, $result);
if (!empty($result)) {
return $result;
} else {
return null;
}
}
public function getQuizRhVote(?string $date = null)
{
$date = $this->getPeriodFromDate($date);
//$result = $this->em->getRepository(Actuv2QuizVote::class)->findResultBy($date);
// dd($date, $result);
$questions = $this->em->getRepository(Actuv2Quiz::class)->findResultBy($date);
$nbVotes = array();
foreach ($questions as $question) {
foreach ($question['answers'] as $answer) {
$nbVotes[$answer['id']] = $this->em->getRepository(Actuv2QuizVote::class)->countVoteById($answer['id']);
}
}
if (!empty($nbVotes)) {
return $nbVotes;
} else {
return null;
}
}
public function getQuizElectronicInvoice(?string $date = null)
{
$date = $this->getPeriodFromDate($date);
$result = $this->em->getRepository(Actuv2ElectronicInvoice::class)->findResultBy($date);
//dd($date, $result);
if (!empty($result)) {
return $result;
} else {
return null;
}
}
public function getQuizElectronicInvoiceVote(?string $date = null)
{
$date = $this->getPeriodFromDate($date);
//$result = $this->em->getRepository(Actuv2QuizVote::class)->findResultBy($date);
// dd($date, $result);
$question = $this->em->getRepository(Actuv2ElectronicInvoice::class)->findResultBy($date);
$nbVotes = array();
if (empty($question)) {
return null;
}
foreach ($question->getAnswers() as $answer) {
$nbVotes[$answer->getId()] = $this->em->getRepository(Actuv2ElectronicInvoiceVote::class)->countVoteById($answer->getId());
}
if (!empty($nbVotes)) {
return $nbVotes;
} else {
return null;
}
}
public function getNewYear(?string $date = null)
{
$date = $this->getPeriodFromDate($date);
$newYear = $this->em->getRepository(Actuv2NewYear::class)->findOneByDates($date);
if (empty($newYear)) {
return null;
}
return $newYear;
}
public function getNextEvent()
{
$res = $this->em->getRepository(Actuv2Calendrier::class)->findNextEvent(true);
if (empty($res)) {
$res = $this->em->getRepository(Actuv2Calendrier::class)->findNextEvent(false);
}
// Ajout du jour et du mois
if (count($res) > 0) {
$res = $res[0];
$res['jour'] = ($res['date'])->format('d');
$res['mois'] = ($res['date'])->format('m');
$res['annee'] = ($res['date'])->format('Y');
} else {
$res = [];
}
return $res;
}
public function getPreviousPeriods(): array
{
$tabPeriodes = [];
$res = $this->em->getRepository(Actuv2Actualite::class)->findPreviousPeriods();
foreach ($res as $ligne) {
//$objDate = new DateTimeFrench($ligne['date']);
$date = $ligne['date']->format('Y-m-01');
if (!array_key_exists($date, $tabPeriodes)) {
$tabPeriodes[$date] = [
"periode" => $date,
"periodeLibelle" => $ligne['date']->format('F Y')
];
}
}
return $tabPeriodes;
}
public function setSondageVote($idSondage, $reponse, $ip, $idCabinet = 0)
{
if (!is_numeric($idSondage) || ($reponse != '1' && $reponse != '2') || trim($ip) == "") {
return false;
}
$sExist = $this->em->getRepository(Actuv2Sondage::class)->find($idSondage);
$svExist = $this->em->getRepository(Actuv2Sondagevote::class)->findOneBy(['fkSondage' => $idSondage, 'ip' => $ip]);
$svNew = new Actuv2Sondagevote();
$svNew
->setFkSondage($idSondage)
->setFkCabinet($idCabinet)
->setReponse($reponse)
->setIp($ip);
// On check si le sondage existe
if (!$sExist instanceof Actuv2Sondage) {
return false;
}
// On check si l'internaute a déjà voté
if ($svExist instanceof Actuv2Sondagevote) {
return false;
}
// On ajoute le vote
$this->em->persist($svNew);
$this->em->flush();
return true;
}
public function setUsefulVote($idActu, $ip, $type, $value)
{
$idActu = (int)$idActu;
if (!is_numeric($idActu) || trim($ip) == "") {
return false;
}
$svExist = $this->em->getRepository(Actuv2VoteUseful::class)->findOneBy(['actuId' => $idActu, 'ip' => $ip, 'typeActu' => $type]);
// On check si l'internaute a déjà voté
if ($svExist instanceof Actuv2VoteUseful) {
return false;
}
$svNew = new Actuv2VoteUseful();
$svNew
->setActuId($idActu)
->setDate(new \DateTime())
->setIp($ip)
->setTypeActu($type)
->setCategory($value);
// On ajoute le vote
$this->em->persist($svNew);
$this->em->flush();
return true;
}
public function setQuizVote($idQuiz, $reponse, $ip)
{
// if (!is_numeric($idQuiz) || ($reponse != '1' && $reponse != '2') || trim($ip) == "") {
// return false;
// }
$date = (new \DateTime());
$sExist = $this->em->getRepository(Actuv2Quiz::class)->find($idQuiz);
$res = $this->em->getRepository(Actuv2QuizAnswer::class)->find($reponse);
$svExist = $this->em->getRepository(Actuv2QuizVote::class)->findOneBy(['quiz' => $idQuiz, 'ip' => $ip]);
$svNew = new Actuv2QuizVote();
$svNew
->setAnswer($res)
->setquiz($sExist)
->setDate($date)
->setIp($ip);
// On check si le sondage existe
if (!$sExist instanceof Actuv2Quiz) {
return false;
}
if (!$res instanceof Actuv2QuizAnswer) {
return false;
}
// On check si l'internaute a déjà voté
if ($svExist instanceof Actuv2QuizVote) {
return false;
}
// On ajoute le vote
$this->em->persist($svNew);
$this->em->flush();
return true;
}
public function setElectronicInvoiceVote($idElectronicInvoice, $reponse, $ip)
{
// if (!is_numeric($idElectronicInvoice) || ($reponse != '1' && $reponse != '2') || trim($ip) == "") {
// return false;
// }
$date = (new \DateTime());
$sExist = $this->em->getRepository(Actuv2ElectronicInvoice::class)->find($idElectronicInvoice);
$res = $this->em->getRepository(Actuv2ElectronicInvoiceAnswer::class)->find($reponse);
$svExist = $this->em->getRepository(Actuv2ElectronicInvoiceVote::class)->findOneBy(['electronicInvoice' => $idElectronicInvoice, 'ip' => $ip]);
$svNew = new Actuv2ElectronicInvoiceVote();
$svNew
->setAnswer($res)
->setElectronicInvoice($sExist)
->setDate($date)
->setIp($ip);
// On check si le sondage existe
if (!$sExist instanceof Actuv2ElectronicInvoice) {
return false;
}
if (!$res instanceof Actuv2ElectronicInvoiceAnswer) {
return false;
}
// On check si l'internaute a déjà voté
if ($svExist instanceof Actuv2ElectronicInvoiceVote) {
return false;
}
// On ajoute le vote
$this->em->persist($svNew);
$this->em->flush();
return true;
}
// ---------------------------------------------------
// RECHERCHE
// ---------------------------------------------------
public function search($query)
{
if (trim($query) == '') return false;
$tabWords = $this->sanitizeQuery2array($query);
if (count($tabWords) == 0) return false;
$result1 = $this->em->getRepository(Actuv2Actualite::class)->getQuerySearch($tabWords);
$result2 = $this->em->getRepository(Actuv2Bienetre::class)->getQuerySearch($tabWords);
$result3 = $this->em->getRepository(Actuv2Calendrier::class)->getQuerySearch($tabWords);
$result4 = $this->em->getRepository(Actuv2Transformationdigitale::class)->getQuerySearch($tabWords);
$resultAll = array_merge($result1, $result2, $result3, $result4);
$host = $this->request->get('host');
$prefix = null;
//$prefix = $host ? '/preview/' . $host : null;
$results = [];
foreach ($resultAll as $key => $value) {
if ($key == 50) {
break;
}
if ($value["categorie"] != "Calendrier fiscal") {
$slug = $this->slugger->slug($value['titre']);
$value['url'] = $prefix . $value['url'] . '-' . $slug;
}
$value['dateFormated'] = ($value['date'])->format('Y-m-d');
$results[] = $value;
}
return $results;
}
public function generateDiapo(array $tabActu): array
{
$tabActuCarousel = [];
foreach ($tabActu as $index => $tab) {
$tabActuCarousel[$this->getTabActuCarouselIndex($index)]['image' . $this->getElementIndex($index + 1)] = $tab['image1'];
$tabActuCarousel[$this->getTabActuCarouselIndex($index)]['titre' . $this->getElementIndex($index + 1)] = $tab['titre'];
$tabActuCarousel[$this->getTabActuCarouselIndex($index)]['url' . $this->getElementIndex($index + 1)] = $tab['url'];
}
return $tabActuCarousel;
}
private function getTabActuCarouselIndex(int $index): int
{
return $index <= 2 ? 0 : 1;
}
private function getElementIndex(int $index): int
{
if ($index <= 3) {
return $index;
}
return $index % 3 ?: $index / 2;
}
private function sanitizeQuery2array($query)
{
$tabWords = array();
//stop words
$query = str_replace(array("'", "’"), ' ', $query);
$tabWords = explode(' ', $query);
$tabWords = $this->StopWords($tabWords);
//suppression chaines vides
foreach ($tabWords as $key => $word) {
if ($word == '') unset($tabWords[$key]);
}
return $tabWords;
}
private function stopWords($tWord)
{
$stopword = array(
'à',
'allô',
'aucuns',
'auriez',
'auxdits',
'aviez',
'ayons',
'bof',
'çà ',
'certaines',
'chez',
'comment',
'da',
'desquels',
'deviez',
'devras',
'doit',
'dues',
'dût',
'es',
'êtes',
'eurêka',
'excepté',
'fouchtra',
'fûmes',
'ho',
'hurrah',
'laquelle',
'leur',
'mazette',
'mâtin',
'ne',
'nulle',
'or',
'outre',
'pas',
'plein',
'pourraient',
'pourvu',
'pouviez',
'puis',
'pussent',
'que',
'quoi',
'saperlipopette',
'serait',
'sien',
'sommes',
'ta',
'telles',
'touchant',
'une',
'veuillez',
'voilà',
'voudrez',
'voulante',
'voulue',
'vôtre',
'afin',
'alors',
'auquel',
'aurions',
'auxquelles',
'avions',
'aïe',
'boum',
'car',
'certains',
'chic',
'concernant',
'dans',
'devaient',
'devions',
'devrez',
'doive',
'duquel',
'eh',
'et',
'étiez',
'eus',
'eûmes',
'furent',
'fût',
'holà',
'hé',
'le',
'leurs',
'me',
'miséricorde',
'ni',
'nulles',
'ôté',
'palsambleu',
'patatras',
'plouf',
'pourrais',
'pouvaient',
'pouvions',
'puisque',
'put',
'quel',
'quoique',
'sapristi',
'seras',
'sienne',
'son',
'tandis',
'tels',
'tous',
'unième',
'veuillons',
'vos',
'voudriez',
'voulantes',
'voulues',
'vôtres',
'ah',
'apr.',
'aura',
'aurons',
'auxquels',
'avoir',
'bah',
'bravissimo',
'ce',
'ces',
'chiche',
'contre',
'de',
'devais',
'devoir',
'devriez',
'doivent',
'durant',
'elle',
'étaient',
'étions',
'eusse',
'eût',
'fus',
'fûtes',
'hop',
'il',
'ledit',
'lorsque',
'merci',
'moi',
'nonobstant',
'nuls',
'ou',
'pan',
'pechère',
'plus',
'pourrait',
'pouvais',
'pouvoir',
'puisse',
'pécaïre',
'quelle',
'rataplan',
'sauf',
'serez',
'siennes',
'sont',
'tant',
'tes',
'tout',
'unièmes',
'veulent',
'votre',
'voudrions',
'voulants',
'voulurent',
'zut',
'ai',
'as',
'aurai',
'auront',
'avaient',
'avons',
'basta',
'bravo',
'ceci',
'cet',
'chouette',
'corbleu',
'debout',
'devait',
'devons',
'devrions',
'doives',
'durent',
'elles',
'étais',
'être',
'eussent',
'eûtes',
'fusse',
'grâce',
'hormis',
'ils',
'lequel',
'lui',
'merde',
'moins',
'nos',
'ô',
'où',
'par',
'pendant',
'plusieurs',
'pourras',
'pouvait',
'pouvons',
'puissent',
'pût',
'quelles',
'revoici',
'se',
'seriez',
'siens',
'sous',
'taratata',
'tien',
'toute',
'v\'lan',
'veut',
'voudra',
'voudrons',
'voulez',
'voulus',
'aie',
'attendu',
'auraient',
'autant',
'avais',
'ayant',
'beaucoup',
'ç\'a',
'cela',
'cette',
'chut',
'coucou',
'depuis',
'devant',
'devra',
'devrons',
'donc',
'dus',
'en',
'était',
'eu',
'eusses',
'évohé',
'fussent',
'ha',
'hors',
'jarnicoton',
'les',
'là',
'mes',
'mon',
'notre',
'oh',
'ouais',
'parbleu',
'peu',
'pouah',
'pourrez',
'pouvant',
'psitt',
'puisses',
'qq.',
'quelqu\'un',
'revoilà',
'selon',
'serions',
'sinon',
'soyez',
'tayaut',
'tienne',
'toutes',
'va',
'veux',
'voudrai',
'voudront',
'vouliez',
'voulussent',
'aient',
'au',
'aurais',
'autre',
'avait',
'ayante',
'bernique',
'ç\'aura',
'celle',
'ceux',
'ciao',
'couic',
'des',
'devante',
'devrai',
'devront',
'dont',
'dussent',
'encontre',
'étant',
'eue',
'eussiez',
'évoé',
'fusses',
'hein',
'hou',
'je',
'lesdites',
'ma',
'mien',
'morbleu',
'nôtre',
'ohé',
'ouf',
'parce',
'peuchère',
'pour',
'pourriez',
'pouvante',
'pst',
'puissiez',
'qqch.',
'quelqu\'une',
'rien',
'sera',
'serons',
'soi',
'soyons',
'taïaut',
'tiennes',
'tu',
'vers',
'via',
'voudraient',
'voulaient',
'voulions',
'voulut',
'aies',
'aucun',
'aurait',
'autres',
'avant',
'ayantes',
'bien',
'ç\'aurait',
'celles',
'chacun',
'clic',
'crac',
'desdites',
'devantes',
'devraient',
'dia',
'du',
'dut',
'endéans',
'étante',
'eues',
'eussions',
'fi',
'fussiez',
'hem',
'hourra',
'jusque',
'lesdits',
'made',
'mienne',
'motus',
'nôtres',
'olé',
'ouille',
'pardi',
'peut',
'pourquoi',
'pourrions',
'pouvantes',
'pu',
'puissions',
'qqn',
'quels',
'sa',
'serai',
'seront',
'soient',
'stop',
'te',
'tiens',
'tudieu',
'veuille',
'vivement',
'voudrais',
'voulais',
'vouloir',
'voulût',
'ait',
'aucune',
'auras',
'aux',
'avec',
'ayants',
'bigre',
'ç\'avait',
'celui',
'chacune',
'clac',
'cric',
'desdits',
'devants',
'devrais',
'diantre',
'dudit',
'dès',
'entre',
'étantes',
'euh',
'eut',
'fichtre',
'fussions',
'hep',
'hue',
'la',
'lesquelles',
'mais',
'miennes',
'moyennant',
'nous',
'on',
'oust',
'pardieu',
'peuvent',
'pourra',
'pourrons',
'pouvants',
'pue',
'purent',
'quand',
'qui',
'sacristi',
'seraient',
'ses',
'sois',
'suis',
'tel',
'toi',
'turlututu',
'veuillent',
'vlan',
'voudrait',
'voulait',
'voulons',
'vous',
'al.',
'aucunes',
'aurez',
'auxdites',
'avez',
'ayez',
'bis',
'ça',
'cependant',
'chaque',
'comme',
'crénom',
'desquelles',
'devez',
'devrait',
'dois',
'due',
'dû',
'envers',
'étants',
'eurent',
'eux',
'fors',
'fut',
'heu',
'hum',
'ladite',
'lesquels',
'malgré',
'miens',
'na',
'nul',
'ont',
'ouste',
'parmi',
'peux',
'pourrai',
'pourront',
'pouvez',
'pues',
'pus',
'quant',
'quiconque',
'sans',
'serais',
'si',
'soit',
'sur',
'telle',
'ton',
'un',
'veuilles',
'voici',
'voudras',
'voulant',
'voulu',
'vu'
);
$result = array_diff($tWord, $stopword);
return $result;
}
}