<?php
namespace App\EventSubscriber;
use App\Entity\Commune;
use App\Entity\Contact;
use App\Entity\Document;
use App\Entity\EventType;
use App\Entity\Glossaire;
use App\Entity\Pages;
use App\Entity\PagesLegales;
use App\Entity\PolitiqueDepartementale;
use App\Entity\Post;
use App\Entity\RssArticle;
use App\Entity\RssEvent;
use App\Entity\Service;
use App\Entity\ServiceGrandProfil;
use App\Entity\ServiceSousProfil;
use App\Entity\ServiceTheme;
use App\Service\ElasticsearchService;
use App\Service\UrlFormatService;
use DateInterval;
use Doctrine\ORM\EntityManagerInterface;
use EasyCorp\Bundle\EasyAdminBundle\Event\BeforeEntityDeletedEvent;
use EasyCorp\Bundle\EasyAdminBundle\Event\BeforeEntityPersistedEvent;
use EasyCorp\Bundle\EasyAdminBundle\Event\BeforeEntityUpdatedEvent;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
class EasyAdminSubscriber implements EventSubscriberInterface
{
public function __construct(
private EntityManagerInterface $entityManager,
private UrlFormatService $url_service,
private ElasticsearchService $es_service,
) {
}
public static function getSubscribedEvents(): array
{
return [
BeforeEntityPersistedEvent::class => ['add'],
BeforeEntityUpdatedEvent::class => ['update'],
BeforeEntityDeletedEvent::class => ['remove']
];
}
public function add(BeforeEntityPersistedEvent $event): void
{
$entity = $event->getEntityInstance();
if ($entity instanceof ServiceGrandProfil) {
$this->updateGrandProfil($entity);
} else if ($entity instanceof ServiceTheme) {
$this->updateTheme($entity);
} else if ($entity instanceof RssArticle) {
$this->updateWidget($entity);
} else if ($entity instanceof RssEvent) {
$this->updateWidget($entity);
} else if ($entity instanceof Contact) {
$this->updateContact($entity);
} else if ($entity instanceof Post) {
$entity->setDefautFil(false);
$this->setPostDateDebut($entity);
}
$this->udpateEsDocument($entity, "add");
}
public function update(BeforeEntityUpdatedEvent $event): void
{
$entity = $event->getEntityInstance();
if ($entity instanceof ServiceGrandProfil) {
$this->updateGrandProfil($entity);
} else if ($entity instanceof ServiceSousProfil) {
$this->updateSousProfil($entity);
} else if ($entity instanceof ServiceTheme) {
$this->updateTheme($entity);
} else if ($entity instanceof RssArticle) {
$this->updateWidget($entity);
} else if ($entity instanceof RssEvent) {
$this->updateWidget($entity);
} else if ($entity instanceof Contact) {
$this->updateContact($entity);
} else if ($entity instanceof Post) {
$entity->setDefautFil(false);
$this->setPostDateDebut($entity);
}
$this->udpateEsDocument($entity, "update");
}
public function remove(BeforeEntityDeletedEvent $event): void
{
$entity = $event->getEntityInstance();
$this->removeEsDocument($entity);
}
public function updateWidget(mixed $entity): void
{
$widget = '<div data-src-rss="https://info.lenord.fr/rss/' . $entity->getAlias() . '"></div><script src="https://info.lenord.fr/rss-grid-widget/rss-grid-widget.js"></script>';
$entity->setWidget($widget);
}
//Elastic
public function removeEsDocument(mixed $entity): void
{
if ($entity instanceof Document) {
$this->es_service->deleteDocument('lenord', 'lenord_document_' . $entity->getId());
} else if ($entity instanceof PolitiqueDepartementale) {
$this->es_service->deleteDocument('lenord', 'lenord_politique_' . $entity->getId());
} else if ($entity instanceof Pages) {
$this->es_service->deleteDocument('lenord', 'lenord_pages_' . $entity->getId());
} else if ($entity instanceof Service) {
$this->es_service->deleteDocument('lenord', 'services_service_' . $entity->getId());
} else if ($entity instanceof Post) {
$this->es_service->deleteDocument('lenord', 'nordinfo_post_' . $entity->getId());
} else if ($entity instanceof Glossaire) {
$this->es_service->deleteDocument('lenord', 'lenord_glossaire_' . $entity->getId());
} else if ($entity instanceof ServiceSousProfil) {
//chercher tous les services ayant ce sous profil
foreach ($entity->getServices() as $service) {
$service->removeSousprofil($entity);
$this->entityManager->persist($service);
$this->entityManager->flush();
$this->updateService($service);
}
} else if ($entity instanceof Contact) {
$this->es_service->deleteDocument('lenord', 'lenord_elu_' . $entity->getId());
}
}
public function udpateEsDocument(mixed $entity, string $type = "add"): void
{
$this->entityManager->persist($entity);
$this->entityManager->flush();
if ($entity instanceof Document) {
$entity->setAliasUrl($this->url_service->formatAlias($entity->getTitre()));
$this->setFileSize($entity);
if ($entity->getStatut() !== null && $entity->getStatut()->getId() == 5) {
$types = [];
foreach ($entity->getTypes() as $type) {
array_push($types, $type->getTitre());
}
$datas = ['website' => "lenord_document", 'entity_id' => $entity->getId(), 'entity_type' => "document", 'content' => $entity->getContent(), 'title' => $entity->getTitre(), 'subtitle' => $entity->getDescription(), 'slug' => $entity->getAliasUrl(), 'types' => $types, 'date_publication' => ($entity->getDatePublication() != null) ? $entity->getDatePublication()->format('d/m/Y') : null, 'format' => $entity->getFormatFile(), 'size' => $entity->getPoids()];
$this->es_service->addDocument('lenord', 'lenord_document_' . $entity->getId(), $datas);
} else {
$this->es_service->deleteDocument('lenord', 'lenord_document_' . $entity->getId());
}
} else if ($entity instanceof PolitiqueDepartementale) {
$entity->setAliasUrl($this->url_service->formatAlias($entity->getTitre()));
if ($entity->getStatut() != null && $entity->getStatut()->getId() == 5) {
$datas = ['website' => "lenord", 'entity_id' => $entity->getId(), 'entity_type' => "politique", 'content' => $entity->getContent(), 'title' => $entity->getTitre(), 'pictogramme' => $entity->getPictogramme(), 'slug' => $entity->getAliasUrl()];
$this->es_service->addDocument('lenord', 'lenord_politique_' . $entity->getId(), $datas);
} else {
$this->es_service->deleteDocument('lenord', 'lenord_politique_' . $entity->getId());
}
} else if ($entity instanceof Pages) {
//$entity->setAliasUrl($this->url_service->formatAlias($entity->getTitre()));
if ($entity->getActif() == 1) {
$datas = ['website' => "lenord", 'entity_id' => $entity->getId(), 'entity_type' => "pages", 'title' => $entity->getTitre(), 'content' => $entity->getContent(), 'slug' => $entity->getAliasUrl(), 'pictogramme' => $entity->getUrlIcone()];
$this->es_service->addDocument('lenord', 'lenord_pages_' . $entity->getId(), $datas);
} else {
$this->es_service->deleteDocument('lenord', 'lenord_pages_' . $entity->getId());
}
} else if ($entity instanceof PagesLegales) {
if ($entity->getActif() == 1) {
$datas = ['website' => "lenord", 'entity_id' => $entity->getId(), 'entity_type' => "pagelegale", 'title' => $entity->getTitre(), 'content' => $entity->getContent(), 'slug' => $entity->getSlug()];
$this->es_service->addDocument('lenord', 'lenord_pagelegale_' . $entity->getId(), $datas);
} else {
$this->es_service->deleteDocument('lenord', 'lenord_pagelegale_' . $entity->getId());
}
} else if ($entity instanceof Service) {
$this->updateService($entity);
} else if ($entity instanceof Post) {
$entity->setDateUpdate(new \DateTime);
$this->entityManager->persist($entity);
//Gestion des dates
//$entity->getJson();
if (
$entity->getStatus() != null && $entity->getStatus()->getId() == 5 &&
($entity->getType()->getType() == 'article'
|| $entity->getType()->getType() == 'video' || ($entity->getType()->getType() == 'event') || $entity->getArchive() == false)
) {
$datas = $this->setPostDatas($entity);
$this->es_service->addDocument('lenord', 'nordinfo_post_' . $entity->getId(), $datas);
} else {
//Supprimer si changement de statut
if (($entity->getStatus()->getId() !== 5
&& ($entity->getType()->getType() == 'article'
|| $entity->getType()->getType() == 'video' || $entity->getType()->getType() == 'event')) || $entity->getArchive() == true) {
$this->es_service->deleteDocument('lenord', 'nordinfo_post_' . $entity->getId());
}
}
//NORDINFO SEARCH ONLY
if (
$entity->getStatus() != null && $entity->getStatus()->getId() == 5 && $entity->getArchive() == false
&& ($entity->getType()->getType() == 'article'
|| $entity->getType()->getType() == 'video'
|| $entity->getType()->getType() == 'event'
|| $entity->getType()->getType() == 'folder'
|| $entity->getType()->getType() == 'sondage'
|| $entity->getType()->getType() == 'intranet'
|| $entity->getType()->getType() == 'quiz'
)
) {
$datas = $this->setPostDatas($entity);
$this->es_service->addDocument('nordinfo', 'nordinfo_only_' . $entity->getId(), $datas);
} else {
if (($entity->getStatus()->getId() !== 5 || $entity->getArchive() == true
&& ($entity->getType()->getType() == 'article'
|| $entity->getType()->getType() == 'video'
|| $entity->getType()->getType() == 'event'
|| $entity->getType()->getType() == 'folder'
|| $entity->getType()->getType() == 'sondage'
|| $entity->getType()->getType() == 'intranet'
|| $entity->getType()->getType() == 'quiz'
))) {
$this->es_service->deleteDocument('nordinfo', 'nordinfo_only_' . $entity->getId());
}
}
} else if ($entity instanceof Glossaire) {
//if($type == "add"){
$datas = ['website' => "lenord", 'entity_id' => $entity->getId(), 'entity_type' => "glossaire", 'content' => $entity->getDefinition(), 'title' => $entity->getTerme(), 'slug' => $entity->getTerme()];
$this->es_service->addDocument('lenord', 'lenord_glossaire_' . $entity->getId(), $datas);
//}else{
//}
} else if ($entity instanceof Contact) {
if ($entity->getActive() == 1 && $entity->getType() == 'admin') {
//$subtitle = $entity->getTypeContact();
$subtitle = null;
if ($entity->getShortDescription() != null) {
$subtitle .= ' - ' . $entity->getShortDescription();
}
$content = null;
if ($entity->getCanton() != null) {
$subtitle .= ' - ' . $entity->getCanton()->getCanton();
$communes_par_canton = $this->entityManager->getRepository(Commune::class)->findBy(array('canton' => $entity->getCanton()->getCanton()));
foreach ($communes_par_canton as $commune) {
$content .= " " . $commune->getCommune();
}
}
$datas = ['website' => "lenord", 'content' => $content, 'entity_id' => $entity->getId(), 'entity_type' => "elu", 'title' => $entity->getLastName(), 'subtitle' => $subtitle, 'title_view' => $entity->getFirstName() . ' ' . $entity->getLastName(), 'subtitle_view' => $subtitle, 'civilite' => $entity->getCivilite(), 'image' => $entity->getPicture(), 'slug' => $entity->getSlug()];
$this->es_service->addDocument('lenord', 'lenord_elu_' . $entity->getId(), $datas);
} else {
$this->es_service->deleteDocument('lenord', 'lenord_elu_' . $entity->getId());
}
}
//Ajouter glossaire
}
private function setPostDatas(mixed $entity): mixed
{
$topics = [];
$territories = [];
$publics = [];
foreach ($entity->getTopics() as $topic) {
array_push($topics, $topic->getDisplayName());
}
foreach ($entity->getTerritories() as $territory) {
array_push($territories, $territory->getDisplayName());
}
foreach ($entity->getTargetpublics() as $public) {
array_push($publics, ['name' => $public->getName()]);
}
if (empty($publics)) {
array_push($publics, ['name' => "nopublic"]);
}
$contact1 = [];
if ($entity->getContact1() != null) {
$contact1 = ["slug" => $entity->getContact1()->getSlug(), "picture" => $entity->getContact1()->getPicture(), "firstName" => $entity->getContact1()->getFirstName(), "lastName" => $entity->getContact1()->getLastName(), "shortDescription" => $entity->getContact1()->getShortDescription()];
}
$contact2 = [];
if ($entity->getContact2() != null) {
$contact2 = ["slug" => $entity->getContact2()->getSlug(), "picture" => $entity->getContact2()->getPicture(), "firstName" => $entity->getContact2()->getFirstName(), "lastName" => $entity->getContact2()->getLastName(), "shortDescription" => $entity->getContact2()->getShortDescription()];
}
$contact3 = [];
if ($entity->getContact3() != null) {
$contact3 = ["slug" => $entity->getContact3()->getSlug(), "picture" => $entity->getContact3()->getPicture(), "firstName" => $entity->getContact3()->getFirstName(), "lastName" => $entity->getContact3()->getLastName(), "shortDescription" => $entity->getContact3()->getShortDescription()];
}
$organisation1 = [];
if ($entity->getOrganisation1() != null) {
$organisation1 = ['id' => $entity->getOrganisation1()->getId(), 'affichageTypeMap' => $entity->getAffichageTypeMap(), 'longitude' => $entity->getOrganisation1()->getLongitude(), 'latitude' => $entity->getOrganisation1()->getLatitude(), 'rue' => $entity->getOrganisation1()->getRue(), 'codePostal' => $entity->getOrganisation1()->getCodePostal(), 'ville' => $entity->getOrganisation1()->getVille(), 'title' => $entity->getOrganisation1()->getTitle(), 'subtitle' => $entity->getOrganisation1()->getSubtitle()];
}
$organisation2 = [];
if ($entity->getOrganisation2() != null) {
$organisation2 = ['id' => $entity->getOrganisation2()->getId(), 'affichageTypeMap' => $entity->getAffichageTypeMap2(), 'longitude' => $entity->getOrganisation2()->getLongitude(), 'latitude' => $entity->getOrganisation2()->getLatitude(), 'rue' => $entity->getOrganisation2()->getRue(), 'codePostal' => $entity->getOrganisation2()->getCodePostal(), 'ville' => $entity->getOrganisation2()->getVille(), 'title' => $entity->getOrganisation2()->getTitle(), 'subtitle' => $entity->getOrganisation2()->getSubtitle()];
}
$organisation3 = [];
if ($entity->getOrganisation3() != null) {
$organisation3 = ['id' => $entity->getOrganisation3()->getId(), 'affichageTypeMap' => $entity->getAffichageTypeMap3(), 'longitude' => $entity->getOrganisation3()->getLongitude(), 'latitude' => $entity->getOrganisation3()->getLatitude(), 'rue' => $entity->getOrganisation3()->getRue(), 'codePostal' => $entity->getOrganisation3()->getCodePostal(), 'ville' => $entity->getOrganisation3()->getVille(), 'title' => $entity->getOrganisation3()->getTitle(), 'subtitle' => $entity->getOrganisation3()->getSubtitle()];
}
$related_posts = $this->getRelatedPosts($entity);
if ($entity->getSlug() == null) {
$slug = $this->url_service->formatAlias($entity->getTitle());
$entity->setSlug($slug);
}
$lieu = null;
$ville = null;
$event_lieu = null;
$event_ville = null;
if($entity->getLieuNew() !== null){
$lieu = $entity->getLieuNew()->getAdresse();
$event_lieu = $entity->getLieuNew()->getAdresse();
$ville = $entity->getLieuNew()->getVille();
$event_ville = $entity->getLieuNew()->getVille();
}
$event_date = null;
if ($entity->getType()->getType() == 'event') {
$event_date = $this->formatDateAgendaJson($entity->getJson());
}
$bool_actu = $entity->getBoolActu();
$widthImageFocusPub = 0;
$heightImageFocusPub = 0;
$padding = 0;
$responses = [];
foreach ($entity->getReponses() as $reponse) {
array_push($responses, [
'id' => $reponse->getId(),
'texte' => $reponse->getTexte(),
'valide' => $reponse->getValide()
]);
}
$defaut_fil = false;
$image_fil = $entity->getIllustrationfilName();
if ($entity->getIllustrationfilName() == null && $entity->getType()->getId() == 3) {
$event_type = iterator_to_array($this->entityManager->getRepository(EventType::class)->getPostEventType($entity->getId()));
if (!empty($event_type)) {
switch ($event_type[0]['id']) {
case 1:
$defaut_fil = true;
$image_fil = "/img/images_defauts/spectacle_defaut.jpg";
break;
case 3:
$defaut_fil = true;
$image_fil = "/img/images_defauts/conference.jpg";
break;
case 4:
$defaut_fil = true;
$image_fil = "/img/images_defauts/salon.jpg";
break;
case 5:
$defaut_fil = true;
$image_fil = "/img/images_defauts/sport.jpg";
break;
case 6:
case 12:
$defaut_fil = true;
$image_fil = "/img/images_defauts/emploi.jpg";
break;
case 7:
$defaut_fil = true;
$image_fil = "/img/images_defauts/braderie.jpg";
break;
case 8:
$defaut_fil = true;
$image_fil = "/img/images_defauts/nature.jpg";
break;
case 9:
case 11:
$defaut_fil = true;
$image_fil = "/img/images_defauts/exposition.jpg";
break;
case 2:
case 10:
$defaut_fil = true;
$image_fil = "/img/images_defauts/fete.jpg";
break;
}
}
}
$datas = [
'website' => "nordinfo",
'entity_id' => $entity->getId(),
'entity_type' => "post",
'content' => $entity->getContent(),
'title' => $entity->getTitle(),
'chapo' => $entity->getChapo(),
'subtitle' => $entity->getSubtitle(),
'type' => $entity->getType()->getType(),
'short_description' => $entity->getShortDescription(),
'statut' => $entity->getStatus()->getName(),
'image_fil' => $image_fil,
'image_detail' => $entity->getIllustrationdetail(),
'position_image' => ($entity->getPositionImage() != null) ? $entity->getPositionImage()->getId() : null,
'date_debut' => $entity->getDateDebut(),
'date_fin' => $entity->getDateFin(),
'event_date' => $event_date,
'territoires' => $territories,
'thematiques' => $topics,
'credits' => $entity->getCredits(),
'lieu' => $lieu,
'ville' => $ville,
'slug' => $entity->getSlug(),
'contact1' => $contact1,
'contact2' => $contact2,
'contact3' => $contact3,
'organisation1' => $organisation1,
'organisation2' => $organisation2,
'organisation3' => $organisation3,
'organisation4' => $entity->getOrganisation4(),
'documentName1' => $entity->getDocumentName1(),
'documentName2' => $entity->getDocumentName2(),
'documentName3' => $entity->getDocumentName3(),
'link1' => $entity->getLink1(),
'url1' => $entity->getUrl1(),
'link2' => $entity->getLink2(),
'url2' => $entity->getUrl2(),
'link3' => $entity->getLink3(),
'url3' => $entity->getUrl3(),
'related_posts' => $related_posts,
'publics' => $publics,
'bool_actu' => $bool_actu,
'defaut_fil' => $defaut_fil,
'duree' => $entity->getDuree(),
'musee_name' => $entity->getMuseeName(),
'thumb_url' => $entity->getThumbUrl(),
'event_lieu' => $event_lieu,
'event_ville' => $event_ville,
'palette_couleur' => ($entity->getPaletteCouleur() !== null) ? $entity->getPaletteCouleur()->getCodeHexa() : null,
'widthImageFocusPub' => $widthImageFocusPub,
'heightImageFocusPub' => $heightImageFocusPub,
'padding' => $padding,
'responses' => $responses,
'grand_format' => $entity->getGrandFormat()
];
return $datas;
}
//Divers
public function updateService(mixed $entity): bool
{
if ($entity->getAliasUrl() !== null) {
if ($entity->getStatut() != null && $entity->getStatut()->getId() == 5) {
$themes = [];
$search_themes = [];
foreach ($entity->getThemes() as $theme) {
array_push($search_themes, $theme->getAliasUrl());
array_push(
$themes,
['titre' => $theme->getTitre(), 'alias' => $theme->getAliasUrl(), 'pictogramme_bleu' => $theme->getPictogrammeBleu(), 'pictogramme_vert' => $theme->getPictogrammeVert()]
);
}
$grandprofils = [];
foreach ($entity->getGrandprofils() as $gp) {
array_push($grandprofils, ['titre' => $gp->getTitre(), 'alias' => $gp->getAliasUrl()]);
}
$sousprofils = [];
foreach ($entity->getSousprofils() as $sp) {
array_push($sousprofils, ['titre' => $sp->getTitre(), 'alias' => $sp->getAliasUrl()]);
}
$datas = ['website' => "services", 'entity_id' => $entity->getId(), 'entity_type' => "service", 'content' => $entity->getContent(), 'title' => $entity->getTitre(), 'subtitle' => $entity->getChapo(), 'slug' => $entity->getAliasUrl(), 'themes' => $themes, 'search_themes' => $search_themes, 'grandprofils' => $grandprofils, 'sousprofils' => $sousprofils];
$this->es_service->addDocument('lenord', 'services_service_' . $entity->getId(), $datas);
} else if ($entity->getId() != null) {
$this->es_service->deleteDocument('lenord', 'services_service_' . $entity->getId());
}
}
return true;
}
public function updateContact(mixed $entity): void
{
$entity->setSlug($entity->getFirstName() . '-' . $entity->getLastName());
}
public function updateTheme(mixed $entity): void
{
$entity->setAliasUrl($this->url_service->formatAlias($entity->getTitre()));
}
public function updateSousProfil(mixed $entity): void
{
$entity->setAliasUrl($this->url_service->formatAlias($entity->getTitre()));
}
public function updateGrandProfil(mixed $entity): void
{
//$entity->setAliasUrl($this->url_service->formatAlias($entity->getTitre()));
}
public function setFileSize(mixed $entity): void
{
if ($entity->getFichier() != null) {
$bytes = filesize($entity->getFichier()->getPathname());
//if ($bytes >= 1048576){
$bytes = number_format($bytes / 1_048_576, 2) . ' Mo';
//}/*elseif ($bytes >= 1024){
//$bytes = number_format($bytes / 1024, 2) . ' Ko';
/*}elseif ($bytes > 1){
$bytes = $bytes . ' o';
}elseif ($bytes == 1){
$bytes = $bytes . ' o';
}*/
$entity->setPoids($bytes)
->setFormatFile($entity->getFichier()->guessExtension());
}
if ($entity->getFichier2() != null) {
$bytes = filesize($entity->getFichier2()->getPathname());
//if ($bytes >= 1048576){
$bytes = number_format($bytes / 1_048_576, 2) . ' Mo';
//}/*elseif ($bytes >= 1024){
//$bytes = number_format($bytes / 1024, 2) . ' Ko';
/*}elseif ($bytes > 1){
$bytes = $bytes . ' o';
}elseif ($bytes == 1){
$bytes = $bytes . ' o';
}*/
$entity->setPoids2($bytes)
->setFormatFile2($entity->getFichier2()->guessExtension());
}
if ($entity->getFichier3() != null) {
$bytes = filesize($entity->getFichier3()->getPathname());
//if ($bytes >= 1048576){
$bytes = number_format($bytes / 1_048_576, 2) . ' Mo';
//}/*elseif ($bytes >= 1024){
//$bytes = number_format($bytes / 1024, 2) . ' Ko';
/*}elseif ($bytes > 1){
$bytes = $bytes . ' o';
}elseif ($bytes == 1){
$bytes = $bytes . ' o';
}*/
$entity->setPoids3($bytes)
->setFormatFile3($entity->getFichier3()->guessExtension());
}
if ($entity->getFichier4() != null) {
$bytes = filesize($entity->getFichier4()->getPathname());
//if ($bytes >= 1048576){
$bytes = number_format($bytes / 1_048_576, 2) . ' Mo';
//}/*elseif ($bytes >= 1024){
//$bytes = number_format($bytes / 1024, 2) . ' Ko';
/*}elseif ($bytes > 1){
$bytes = $bytes . ' o';
}elseif ($bytes == 1){
$bytes = $bytes . ' o';
}*/
$entity->setPoids4($bytes)
->setFormatFile4($entity->getFichier4()->guessExtension());
}
if ($entity->getFichier5() != null) {
$bytes = filesize($entity->getFichier5()->getPathname());
//if ($bytes >= 1048576){
$bytes = number_format($bytes / 1_048_576, 2) . ' Mo';
//}/*elseif ($bytes >= 1024){
//$bytes = number_format($bytes / 1024, 2) . ' Ko';
/*}elseif ($bytes > 1){
$bytes = $bytes . ' o';
}elseif ($bytes == 1){
$bytes = $bytes . ' o';
}*/
$entity->setPoids5($bytes)
->setFormatFile5($entity->getFichier5()->guessExtension());
}
if ($entity->getFichier6() != null) {
$bytes = filesize($entity->getFichier6()->getPathname());
//if ($bytes >= 1048576){
$bytes = number_format($bytes / 1_048_576, 2) . ' Mo';
//}/*elseif ($bytes >= 1024){
//$bytes = number_format($bytes / 1024, 2) . ' Ko';
/*}elseif ($bytes > 1){
$bytes = $bytes . ' o';
}elseif ($bytes == 1){
$bytes = $bytes . ' o';
}*/
$entity->setPoids6($bytes)
->setFormatFile6($entity->getFichier6()->guessExtension());
}
//Alias url
$entity->setAliasUrl($this->url_service->formatAlias($entity->getTitre()));
}
protected function getRelatedPosts(mixed $post): array
{
$number = 0;
$relateds = [];
if ($post->getRelatedPost1() === null) {
$number = 1;
} else {
$relateds[] = ['title' => $post->getRelatedPost1()->getTitle(), 'slug' => $post->getRelatedPost1()->getSlug()];
}
if ($post->getRelatedPost2() === null) {
$number = 2;
} else {
$relateds[] = ['title' => $post->getRelatedPost2()->getTitle(), 'slug' => $post->getRelatedPost2()->getSlug()];
}
if ($post->getRelatedPost3() === null) {
$number = 3;
} else {
$relateds[] = ['title' => $post->getRelatedPost3()->getTitle(), 'slug' => $post->getRelatedPost3()->getSlug()];
}
$type_id = $post->getType()->getId();
$topics_id = [];
foreach ($post->getTopics() as $topic) {
$topics_id[] = $topic->getId();
}
$territories_id = [];
foreach ($post->getTerritories() as $territory) {
$territories_id[] = $territory->getId();
}
$posts = $this->entityManager->getRepository(Post::class)->getRelatedPost($number, $type_id, $topics_id, $territories_id, $post->getId());
foreach ($posts as $p) {
if (count($relateds) === 4) {
break;
}
if ($p->getSlug() !== null) {
$relateds[] = ['title' => $p->getTitle(), 'slug' => $p->getSlug()];
}
}
return $relateds;
}
private function setPostDateDebut(mixed $post):void{
$current_date = new \DateTime();
$current_date->setTime(0, 0, 0);
$json_horaires = json_decode($post->getJson(), true);
if ($json_horaires !== null) {
switch ($json_horaires['modeDates']) {
case "range":
//de date debut a date fin
$post->setDateDebut($json_horaires['datesRange']['dateStart'])
->setDateFin($json_horaires['datesRange']['dateFinish'])
;
break;
case 'multiple':
$dates_multiples = [];
$dates = $json_horaires['datesMultiple']['dates'];
foreach ($dates as $d) {
array_push($dates_multiples, $d);
}
$post->setDateDebut($dates_multiples[0])
->setDateFin($dates_multiples[count($dates_multiples)-1]);
break;
case 'single':
$post->setDateDebut($json_horaires['dateSingle']['dates'][0])
->setDateFin($json_horaires['dateSingle']['dates'][0]);
break;
}
}
$this->entityManager->persist($post);
$this->entityManager->flush();
}
private function formatDateAgendaJson(mixed $json): mixed
{
$str_date = null;
$current_date = new \DateTime();
$current_date->setTime(0, 0, 0);
$json_horaires = json_decode($json, true);
if ($json_horaires !== null) {
switch ($json_horaires['modeDates']) {
case "range":
//de date debut a date fin
$date_debut = date_create_from_format('d/m/Y', $json_horaires['datesRange']['dateStart']);
$date_fin = date_create_from_format('d/m/Y', $json_horaires['datesRange']['dateFinish']);
$ics_date_debut = $json_horaires['datesRange']['dateStart'];
$ics_date_fin = $json_horaires['datesRange']['dateStart'];
$evDateDebut = $this->formatStringDate($date_debut);
$evDateFin = $this->formatStringDate($date_fin);
$same_day = false;
if ($evDateDebut['day'] == $evDateFin['day']) {
if ($evDateDebut['month'] == $evDateFin['month']) {
$same_day = true;
}
}
if ($evDateDebut['day'] == 1 || $evDateDebut['day'] == '01' || $evDateDebut['day'] == '1') {
$day_debut = $this->array_date_trad["fr"][1];
} else {
$day_debut = $evDateDebut['day'];
}
if ($evDateDebut['month'] == $evDateFin['month'] && $evDateDebut['year'] == $evDateFin['year']) {
if ($same_day) {
//$this->translator->trans('du') . ' ' .
$str_date = $evDateFin['day'] . ' ' . $evDateFin['month'];
} else {
$str_date = 'Du ' . $day_debut . ' au ' . $evDateFin['day'] . ' ' . $evDateFin['month'];
}
} else {
//check year de la date debut et fin
if ($evDateDebut['year'] !== $evDateFin['year']) {
$str_date = 'Du ' . $day_debut . ' ' . $evDateDebut['month'] . ' ' . $evDateDebut['year'] . ' au ' . $evDateFin['day'] . ' ' . $evDateFin['month'] . ' ' . $evDateFin['year'];
} else {
$str_date = 'Du ' . $day_debut . ' ' . $evDateDebut['month'] . ' au ' . $evDateFin['day'] . ' ' . $evDateFin['month'] . ' ' . $evDateFin['year'];
}
}
break;
case 'multiple':
$nombre_date = 0;
$dates_multiples = [];
$dates = $json_horaires['datesMultiple']['dates'];
foreach ($dates as $d) {
array_push($dates_multiples, $d);
}
$date = null;
$array_dates = $dates_multiples;
$i = 0;
foreach ($array_dates as $d) {
if ($i > 0) {
$str_date .= ", ";
}
$date = date_create_from_format('d/m/Y', $dates_multiples[$i]);
$str_date .= $date->format('d') . ' ' . $this->months["fr"][$date->format('n')] . ' ' . $date->format('Y');
$i++;
}
break;
case 'single':
$start_date = date_create_from_format('d/m/Y', $json_horaires['dateSingle']['dates'][0]);
$day = 'Le ' . $start_date->format('d');
$str_date .= $day;
$str_month = $this->months["fr"][$start_date->format('n')];
$str_date .= ' ' . $str_month;
$str_date .= ' ' . $start_date->format('Y');
break;
}
}
return $str_date;
}
private function formatStringDate(mixed $date): mixed
{
if ($date instanceof \DateTime) {
return array(
'day' => $date->format('j'),
'month' => $this->months["fr"][$date->format('n')],
'year' => $date->format('Y')
);
}
return array(
'day' => null,
'month' => null,
'year' => null
);
}
private mixed $array_date_trad = array(
'fr' => array(
1 => '1er'
),
'en' => array(
1 => '1st'
),
'nl' => array(
1 => '1st'
)
);
private mixed $months = array(
'fr' => array(
1 => 'janvier',
2 => 'février',
3 => 'mars',
4 => 'avril',
5 => 'mai',
6 => 'juin',
7 => 'juillet',
8 => 'août',
9 => 'septembre',
10 => 'octobre',
11 => 'novembre',
12 => 'décembre'
),
'en' => array(
1 => 'January',
2 => 'February',
3 => 'March',
4 => 'April',
5 => 'May',
6 => 'June',
7 => 'July',
8 => 'August',
9 => 'September',
10 => 'October',
11 => 'November',
12 => 'December',
),
'nl' => array(
1 => 'januari',
2 => 'februari',
3 => 'maart',
4 => 'april',
5 => 'mei',
6 => 'juni',
7 => 'juli',
8 => 'augustus',
9 => 'september',
10 => 'oktober',
11 => 'november',
12 => 'december'
)
);
}