<?php
namespace App\Controller;
use Symfony\Component\String\Slugger\SluggerInterface;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Bundle\FrameworkBundle\Console\Application;
use Symfony\Component\Console\Input\ArrayInput;
use Symfony\Component\Console\Output\NullOutput;
use Symfony\Component\Form\FormError;
use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\RedirectResponse;
use Symfony\Component\HttpFoundation\Session\Session;
use Symfony\Component\Routing\Annotation\Route;
use App\Entity\Article;
use App\Entity\ListeDiffusion;
use App\Entity\ListeDiffusionSup;
use App\Entity\Media;
use App\Entity\RefAffectation;
use App\Entity\RefRole;
use App\Entity\RefFederation;
use App\Entity\Categorie;
use App\Entity\UtilisateurInformation;
use App\Entity\RFederation;
use App\Entity\RefSousActionRefAction;
use App\Entity\RefPoste;
use App\Entity\RefGabarit;
use Doctrine\Persistence\ManagerRegistry;
use Symfony\Contracts\Translation\TranslatorInterface;
use Symfony\Component\HttpKernel\KernelInterface;
use App\Services\ActualiteUpd;
use Symfony\Component\Mailer\MailerInterface;
use Symfony\Component\Mime\Email;
use Twig\Environment;
/**
* Article controller.
*
*/
class ArticleController extends AbstractController
{
private $doctrine;
private $translator;
private $kernel;
private $actualiteUpd;
private $mailer;
private $twig;
private $slugger;
public function __construct(SluggerInterface $slugger, ManagerRegistry $doctrine, TranslatorInterface $translator, KernelInterface $kernel, ActualiteUpd $actualiteUpd, MailerInterface $mailer, Environment $twig)
{
$this->doctrine = $doctrine;
$this->translator = $translator;
$this->kernel = $kernel;
$this->actualiteUpd = $actualiteUpd;
$this->mailer = $mailer;
$this->twig = $twig;
$this->slugger = $slugger;
}
/**
* Lists all Article entities by user.
*/
#[Route(path: '/api/article', name: 'ctsweb_article', methods: ['GET'])]
public function index()
{
$acces = $this->addAccesAdmin($this->getUser()->getUtilisateur()->getIdRole());
if (!$acces) {
return new RedirectResponse($this->generateUrl('actualite'));
}
$em = $this->doctrine->getManager();
$articles = $em->getRepository(Article::class)->findBy(['utilisateur' => $this->getUser()->getUtilisateur()]);
return $this->render('article/index.html.twig', ['articles' => $articles]);
}
/**
* Lists all Article entities.
*/
#[Route(path: '/api/actualite', name: 'actualite', methods: ['GET'])]
public function listeActualite()
{
$em = $this->doctrine->getManager();
$articleUser = [];
try {
$articles = $em->getRepository(ListeDiffusion::class)->findListeDiffusionValide($this->getUser()->getIdUtilisateur());
foreach ($articles as $article) {
$auteur = null;
$utilisateur = $article->getArticle()->getUtilisateur();
$roleUser = !is_null($utilisateur) ? $article->getArticle()->getUtilisateur()->getRole()->getIdRole() : null;
if ($roleUser == RefRole::ROLE_DS_ADMIN || $roleUser == RefRole::ROLE_DS_SIGNATAIRE) {
$auteur = "Ministère des sports";
} elseif ($roleUser == RefRole::ROLE_DR || $roleUser == RefRole::ROLE_DR_SIGNATAIRE) {
$articleWriter = $em->getRepository(UtilisateurInformation::class)->findOneBy(["idUtilisateur" => $article->getArticle()->getUtilisateur()->getIdUtilisateur()]);
$auteur = $articleWriter ? $articleWriter->getIdAffectation()->getLibelleLong() : null;
} elseif ($roleUser == RefRole::ROLE_FEDE || $roleUser == RefRole::ROLE_FEDE_INVITE) {
$auteur = $em->getRepository(RFederation::class)->findOneBy(["rAdmDiside" => $em->getRepository(UtilisateurInformation::class)->findOneBy(["idUtilisateur" => $article->getArticle()->getUtilisateur()->getIdUtilisateur()])->getIdFederation()->getRAdmDiside()])->getRSerLibl();
}
$categ = $em->getRepository(Categorie::class)->findOneBy(['id' => $article->getIdCategorie()]);
$datePublication = $article->getArticle()->getDatePublication()->format("d-m-Y");
$articleUser[] = ['id' => $article->getArticle()->getId(), 'titre' => $article->getArticle()->getTitre(), 'resume' => $article->getArticle()->getResume(), 'datePublication' => $datePublication, 'auteur' => $auteur, 'slug' => $article->getArticle()->getSlug(), 'idCategorie' => ($categ != null) ? $categ->getId() : null, 'nomCategorie' => ($categ != null) ? $categ->getNomCategorie() : null, 'imageCategorie' => $this->explodeArticleMedias($article->getMediasCategorie()), 'lu' => $article->getLu() ? true : false];
}
$data = ['success' => true, 'data' => isset($articleUser[0]) ? $articleUser : []];
} catch (\Exception $e) {
$data = ['success' => false, 'data' => $e->getMessage()];
}
return new JsonResponse($data);
}
#[Route(path: '/api/modalApercu/{id}', name: 'article_apercu')]
public function detailArticleAdministration($id)
{
$articleApercu = [];
$em = $this->doctrine->getManager();
$article = $em->getRepository(Article::class)->findOneBy(['id' => $id]);
$postes = $affectations = $federations = $actions = $sousAction = [];
$posteId = $affectationId = $federationId = [];
try {
$federationAll = $this->getFederationArticle();
$federationDecode = json_decode((string) $federationAll->getContent(), null, 512, JSON_THROW_ON_ERROR);
foreach ($article->getRFederations() as $federation) {
$federationId[] = $federation->getRAdmDisciplineId();
}
foreach ($federationDecode->data as $federationDec) {
$federations[] = ["id" => $federationDec->idRFede, "libelle" => $federationDec->libelle, "checked" => (in_array($federationDec->idRFede, $federationId) ? true : false)];
}
$affectationAll = $this->getAffectationArticle();
$affectationDecode = json_decode((string) $affectationAll->getContent(), null, 512, JSON_THROW_ON_ERROR);
foreach ($article->getAffectations() as $affectation) {
$affectationId[] = $affectation->getIdAffectation();
}
foreach ($affectationDecode->data as $affectationDec) {
$affectations[] = ["id" => $affectationDec->id, "libelle" => $affectationDec->libelle, "checked" => (in_array($affectationDec->id, $affectationId) ? true : false)];
}
$posteAll = $this->getPosteArticle();
$posteDecode = json_decode((string) $posteAll->getContent(), null, 512, JSON_THROW_ON_ERROR);
foreach ($article->getPostes() as $poste) {
$posteId[] = $poste->getIdPoste();
}
foreach ($posteDecode->data as $posteDec) {
$postes[] = ["id" => $posteDec->id, "libelle" => $posteDec->libelle, "libelleModif" => $posteDec->libelle . 'Modif', "checked" => (in_array($posteDec->id, $posteId) ? true : false)];
}
foreach ($article->getSousActions() as $sousActions) {
$sousAction = $sousActions->getIdSousAction();
}
$em = $this->doctrine->getManager();
$categ = $em->getRepository(Categorie::class)->findOneBy(['id' => $article->getIdCategorie()]);
$count = is_countable($this->explodeArticleMedias($article->getMedias())) ? count($this->explodeArticleMedias($article->getMedias())) : 0;
if ($count > 0) {
$dataM = [$this->explodeArticleMedias($article->getMedias())[$count - 1]];
} else {
$dataM = $this->explodeArticleMedias($article->getMedias());
}
$articleApercu[] = ['id' => $article->getId(), 'dateDebut' => $article->getDatePublication()->format("d/m/Y"), 'dateFin' => $article->getDateFinPublication()->format("d/m/Y"), 'titre' => $article->getTitre(), 'resume' => $article->getResume(), 'contenu' => $article->getContenu(), 'slug' => $article->getSlug(), 'listeDiffusion' => $article->getListeDiffusions(), 'affectations' => $affectations, 'federations' => $federations, 'postes' => $postes, 'action' => (!is_null($article->getAction()) ? $article->getAction()->getIdAction() : ''), 'sousAction' => $sousAction, 'statut' => $article->getStatut(), 'idCategorie' => ($categ != null) ? $categ->getId() : null, 'nomCategorie' => ($categ != null) ? $categ->getNomCategorie() : null, 'imageCategorie' => $this->explodeArticleMedias($article->getMediasCategorie()), 'dataMedias' => $dataM];
$data = ['success' => true, 'data' => $articleApercu];
} catch (\Exception $e) {
$data = ['success' => false, 'data' => $e->getMessage()];
}
return new JsonResponse($data);
}
private function explodeArticleMedias($medias)
{
$dir = $this->getParameter('dir_file_media');
$dataMedias = [];
if (!empty($medias)) {
foreach ($medias as $media) {
$validMedia = $this->isValidateMedia($media);
if ($validMedia) {
$dataMedias[] = ['urlFile' => $dir . $media->getPath(), 'idUpload' => $media->getId(), 'filename' => $media->getName()];
}
}
}
return $dataMedias;
}
private function isValidateMedia($media)
{
$validExtension = ['pdf', 'doc', 'docx', 'xls', 'xlsx', 'jpg', 'jpeg', 'png'];
$pathinfo = $media ? pathinfo((string) $media->getPath()) : null;
$extension = !is_null($pathinfo) ? $pathinfo['extension'] : '';
$validMedia = in_array($extension, $validExtension);
return $validMedia;
}
/**
* Lists all Article entities.
*/
#[Route(path: '/api/actualite_admin', name: 'actualite_admin', methods: ['GET'])]
public function listeActualiteAdministration()
{
$poste = null;
$option = null;
$em = $this->doctrine->getManager();
try {
$listeArticles = [];
$utilisateur = $this->getUser()->getUtilisateur();
$role = !is_null($utilisateur) ? $this->getUser()->getUtilisateur()->getRole()->getIdRole() : null;
if ($role == 1 || $role == 3 || $role == 10) {
$poste = 'DS';
$option = '';
} elseif ($role == 4 || $role == 11) {
$poste = 'DR';
$option = $this->getUser()->getIdAffectation();
} elseif ($role == 5 || $role == 8) {
$poste = 'Fede';
$option = $this->getUser()->getIdFederation();
}
$articles = $em->getRepository(Article::class)->findArticleAdministration($option , $poste);
foreach ($articles as $article) {
$federation = '';
$affectation = '';
$uiRep = $em->getRepository(UtilisateurInformation::class);
$user = $article->getUtilisateur();
$articleUser = !is_null($user) ? $uiRep->findOneBy(["idUtilisateur" => $user->getIdUtilisateur()]) : null;
$auteur = "";
if (!is_null($articleUser)) {
$affectation = (null !== $articleUser->getIdAffectation()) ? $articleUser->getIdAffectation()->getIdAffectation() : 1;
$roleUser = $user->getRole()->getIdRole();
if ($roleUser == 1 || $roleUser == 3 || $roleUser == 10) {
$auteur = "Ministère des sports";
} elseif ($roleUser == 4 || $roleUser == 11) {
$auteur = $articleUser->getIdAffectation()->getLibelleLong();
} elseif ($roleUser == 5 || $roleUser == 8) {
$federationRecord = $articleUser->getIdFederation();
$auteur = "Fédération";
if ($federationRecord) {
$federation = $federationRecord->getIdFederation();
$auteur = $em->getRepository(RFederation::class)->findOneBy(["rAdmDiside" => $federationRecord->getRAdmDiside()])->getRSerLibl();
}
}
}
$posteArticle = "";
if ((is_countable($article->getPostes()) ? count($article->getPostes()) : 0) != 0) {
foreach ($article->getPostes() as $poste) {
$posteArticle .= $poste->getLibellePoste() . " + ";
}
$posteArticle = substr($posteArticle, 0, -3);
} else {
$posteArticle = "EN + CTR + CTS + DTN";
}
$listeArticles[] = ["id" => $article->getId(), "titre" => $article->getTitre(), "statut" => ($article->getStatut()) ? "Publié" : "Non publié", "poste" => $posteArticle, "auteur" => $auteur, "resume" => $article->getResume(), "contenu" => $article->getContenu(), "slug" => $article->getSlug(), "date" => $article->getDatePublication()->format('d/m/Y'), "federation" => $federation, "affectation" => $affectation];
}
$data = ['success' => true, 'data' => $listeArticles];
} catch (\Exception $e) {
$data = ['success' => false, 'data' => $e->getMessage()];
}
return new JsonResponse($data);
}
/**
* Lists all Article entities.
*/
#[Route(path: '/api/sousaction', name: 'select_sousaction', methods: ['GET'])]
public function labelForAct(Request $request)
{
$listOfAction = null;
if ($request->isXmlHttpRequest()) {
try {
$action_id = $request->request->get('action_id');
$em = $this->doctrine->getManager();
$listOfAction = $em->getRepository(RefSousActionRefAction::class)->getSousActionsByAction($action_id);
return new JsonResponse($listOfAction);
} catch (\Exception $ex) {
$listOfAction = ['error' => ['code' => 500, 'message' => $ex->getMessage()]];
}
}
return new JsonResponse($listOfAction);
}
/**
* Creates a new Article entity.
*/
#[Route(path: '/api/new_article', name: 'article_new', methods: ['GET', 'POST'])]
public function new(Request $request)
{
$acces = $this->addAccesAdmin($this->getUser()->getUtilisateur()->getIdRole());
$data = json_decode($request->getContent(), true, 512, JSON_THROW_ON_ERROR);
// var_dump($data );
// die();
$datePub = explode('/', (string) $data['article']['datePublication']);
$datePublication = new \DateTime();
$datePublication->setDate($datePub[2], $datePub[1], $datePub[0]);
$data['article']['datePublication'] = $datePublication->format('Y-m-d');
$dateFinPub = explode('/', (string) $data['article']['dateFinPublication']);
$dateFinPublication = new \DateTime();
$dateFinPublication->setDate($dateFinPub[2], $dateFinPub[1], $dateFinPub[0]);
$data['article']['dateFinPublication'] = $dateFinPublication->format('Y-m-d');
$request->request->replace(is_array($data) ? $data : []);
if (!$acces) {
return new RedirectResponse($this->generateUrl('actualite'));
}
try {
$article = new Article();
$em = $this->doctrine->getManager();
$idRole = $this->getUser()->getUtilisateur()->getIdRole();
$form = $this->createForm(
\App\Form\ArticleType::class,
$article,
['role' => $this->getUser()->getUtilisateur()->getIdRole()]
);
// Supprimer le champ "SousActions" du formulaire avant d'appeler handleRequest()
$form->remove('SousActions');
$form->handleRequest($request);
if ($form->isSubmitted()) {
if ($form->getData()->getDateFinPublication() < $form->getData()->getDatePublication())
$form->addError(new FormError($this->translator->trans('date.required')));
if (!$form->getData()->getContenu())
$form->addError(new FormError($this->translator->trans('contenu.required')));
if (!$form->getData()->getResume())
$form->addError(new FormError($this->translator->trans('resume.required')));
// $errors = $form->getErrors(true);
// foreach ($errors as $error) {
// $cause = $error->getCause();
// if ($cause instanceof \Symfony\Component\Validator\ConstraintViolationInterface) {
// $propertyPath[] = $cause->getPropertyPath();
// // Faites quelque chose avec $propertyPath pour identifier le champ en question
// }
// }
// var_dump($propertyPath);
// die();
if ($form->isValid()) {
$params = $request->request->all();
if (in_array($idRole, $this->getParameter('groupe1'))) {
$article->addAffectation($this->getUser()->getIdAffectation());
} elseif (in_array($idRole, $this->getParameter('groupe2'))) {
$rfedration = $em->getRepository(RFederation::class)->findOneByRAdmDiside($this->getUser()->getIdFederation()->getRAdmDiside());
$article->addRfederation($rfedration);
}
$statutArticle = $params['article']['statut'];
$myDiffusion = new ListeDiffusion();
$mySubDiffusion = new ListeDiffusionSup();
$mySubDiffusion->setArticle($article);
$mySubDiffusion->setUtilisateur($this->getUser()->getUtilisateur());
$mySubDiffusion->setLu(true);
$article->setUtilisateur($this->getUser()->getUtilisateur());
$article->setIdCategorie($data['article']['categorie']);
// $slug = $this->slugger->slug($article->getTitre());
$originalSlug = $this->slugger->slug($article->getTitre());
$slug = $originalSlug;
$counter = 1;
while ($this->slugExists($slug)) {
$slug = $originalSlug . '-' . $counter;
$counter++;
}
$article->setSlug($slug);
$article->setCreated(new \DateTime());
$em->persist($article);
$myDiffusion->setArticle($article);
$myDiffusion->setUtilisateur($this->getUser()->getUtilisateur());
$myDiffusion->setLu(true);
$em->persist($mySubDiffusion);
$em->persist($myDiffusion);
$em->flush();
if (isset($params['article']['media']) && $params['article']['media'] != '') {
$this->saveMedias($article, $params['article']['media']);
}
if (isset($params['article']['imageCategorie']) && $params['article']['imageCategorie'] != '') {
$this->saveMediasCategorie($article, $params['article']['imageCategorie']);
}
if ($statutArticle) {
$params = [$article->getId()];
$params_string = implode(' ', $params);
$command = 'article:update';
exec("php ../bin/console $command $params_string --env=prod > /dev/null 2>&1 &");
$messageRetour = "Article publié";
} else {
$messageRetour = "Article créé";
}
$data = ['success' => true, 'data' => $messageRetour];
} else {
$data = ['success' => false, 'data' => 'Erreur lors de la validation du formulaire :' . (string) $form->getErrors(false, true)];
}
}
} catch (\Exception $e) {
$data = ['success' => false, 'data' => $e->getMessage()];
}
return new JsonResponse($data);
}
private function slugExists($slug)
{
// Vérifier si le slug existe déjà dans la table "article"
$existingArticle = $this->doctrine->getRepository(Article::class)->findOneBy(['slug' => $slug]);
return $existingArticle !== null;
}
function base64ToImage($base64_string, $output_file)
{
$ifp = fopen($output_file, "wb");
fwrite($ifp, base64_decode((string) $base64_string));
fclose($ifp);
return $output_file;
}
public function runCommand($command, $arguments = [])
{
$app = new Application($this->kernel);
$args = array_merge(['command' => $command], $arguments);
$input = new ArrayInput($args);
$output = new NullOutput();
return $app->doRun($input, $output);
}
/**
* Finds and displays a Article entity.
*/
#[Route(path: '/api/article/{id}', name: 'article_show', methods: ['GET'])]
public function show(Article $article): \Symfony\Component\HttpFoundation\Response
{
$deleteForm = $this->createDeleteForm($article);
return $this->render(
'article/show.html.twig',
['article' => $article, 'delete_form' => $deleteForm->createView()]
);
}
/**
* Displays a form to edit an existing Article entity.
*/
#[Route(path: '/api/article/{id}/edit', name: 'article_edit', methods: ['GET', 'POST'])]
public function edit(Request $request, Article $article)
{
$idRole = $this->getUser()->getUtilisateur()->getIdRole();
$acces = $this->addAccesAdmin($idRole);
$data = json_decode($request->getContent(), true, 512, JSON_THROW_ON_ERROR);
$datePub = explode('/', (string) $data['article']['datePublication']);
$datePublication = new \DateTime();
$datePublication->setDate($datePub[2], $datePub[1], intval($datePub[0]));
$data['article']['datePublication'] = $datePublication->format('Y-m-d');
$dateFinPub = explode('/', (string) $data['article']['dateFinPublication']);
$dateFinPublication = new \DateTime();
$dateFinPublication->setDate($dateFinPub[2], $dateFinPub[1], $dateFinPub[0]);
$data['article']['dateFinPublication'] = $dateFinPublication->format('Y-m-d');
$request->request->replace(is_array($data) ? $data : []);
$params = $request->request->all();
if (!$acces) {
return new RedirectResponse($this->generateUrl('actualite'));
}
if ($article->getAction()) $idAction = $article->getAction()->getIdAction();
else $idAction = NULL;
try {
$session = new Session();
$deleteForm = $this->createDeleteForm($article);
$em = $this->doctrine->getManager();
$editForm = $this->createForm(\App\Form\ArticleType::class, $article, ['role' => $idRole]);
// $editForm->handleRequest($request);
$editForm->remove('SousActions');
$editForm->handleRequest($request);
if ($editForm->isSubmitted()) {
if ($editForm->getData()->getDateFinPublication() <= $editForm->getData()->getDatePublication()) {
$editForm->addError(new FormError($this->translator->trans('date.required')));
}
if (!$editForm->getData()->getContenu()) {
$editForm->addError(new FormError($this->translator->trans('contenu.required')));
}
if (!$editForm->getData()->getResume()) {
$editForm->addError(new FormError($this->translator->trans('resume.required')));
}
if ($editForm->isValid()) {
$params = $request->request->all();
if (in_array($idRole, $this->getParameter('groupe1'))) {
$affectations = $article->getAffectations();
$idAffectation = $this->getUser()->getIdAffectation();
if (!is_null($affectations) and !$affectations->contains($idAffectation)) {
$article->addAffectation($this->getUser()->getIdAffectation());
}
} elseif (in_array($idRole, $this->getParameter('groupe2'))) {
$r_federations = $article->getRfederations();
$rfedration = $em->getRepository(RFederation::class)->findOneByRAdmDiside($this->getUser()->getIdFederation()->getRAdmDiside());
if (!is_null($r_federations) && !$r_federations->contains($rfedration)) {
$article->addRfederation($rfedration);
}
}
$article->setUpdated(new \DateTime());
$article->setIdCategorie($data['article']['categorie']);
$em->persist($article);
$listeDiffusions = $article->getListeDiffusions();
if ($listeDiffusions) {
foreach ($listeDiffusions as $listeDiffusion) {
$idUtililisateur = $listeDiffusion->getUtilisateur()->getIdUtilisateur();
if ($idUtililisateur <> $this->getUser()->getUtilisateur()->getIdUtilisateur()) {
$em->remove($listeDiffusion);
}
}
}
$listeDiffusionsSup = $article->getListeDiffusionsSup();
if ($listeDiffusionsSup) {
foreach ($listeDiffusionsSup as $listeDiffusion) {
$idUtililisateur = $listeDiffusion->getUtilisateur()->getIdUtilisateur();
if ($idUtililisateur <> $this->getUser()->getUtilisateur()->getIdUtilisateur()) {
$em->remove($listeDiffusion);
}
}
}
if (isset($params['article']['media']) && $params['article']['media'] != '') {
$this->saveMedias($article, $params['article']['media']);
}
if (isset($params['article']['imageCategorie']) && $params['article']['imageCategorie'] != '') {
$this->saveMediasCategorie($article, $params['article']['imageCategorie']);
}
$em->flush();
if ($article->getStatut() == true) {
$command = 'article:update';
exec("php ../bin/console $command " . $article->getId() . ' --env=prod > /dev/null 2>&1 &');
}
$data = ['success' => true, 'data' => 'Article modifié'];
} else {
$data = ['success' => false, 'data' => 'Erreur lors de la validation du formulaire :' . (string) $editForm->getErrors(
true,
false
)];
}
} else {
$data = ['success' => false, 'data' => 'Erreur lors de la soumission du formulaire :' . (string) $editForm->getErrors(true, false)];
}
} catch (\Exception $e) {
$data = ['success' => false, 'data' => $e->getMessage()];
}
return new JsonResponse($data);
}
/**
* Deletes a Article entity.
*/
#[Route(path: '/api/delete/{id}', name: 'article_delete', requirements: ['id' => '\d+'])]
public function delete($id)
{
$em = $this->doctrine->getManager();
$article = $em->getRepository(Article::class)->findOneBy(['id' => $id]);
try {
foreach ($article->getListeDiffusions() as $listeDiffusion) {
$em->remove($listeDiffusion);
}
foreach ($article->getListeDiffusionsSup() as $listeDiffusionSup) {
$em->remove($listeDiffusionSup);
}
$em->remove($article);
$em->flush();
$data = ['success' => true, 'data' => 'Article supprimé'];
} catch (\Exception $e) {
$data = ['success' => false, 'data' => $e->getMessage()];
}
return new JsonResponse($data);
}
private function saveMedias($article, $mediaIds)
{
$em = $this->doctrine->getManager();
$medias = json_decode((string) $mediaIds, null, 512, JSON_THROW_ON_ERROR);
if (!empty($medias)) {
foreach ($medias as $idMedia) {
$media = $em->getRepository(Media::class)->findOneById($idMedia);
if ($media instanceof Media) {
$media->setArticle($article);
$em->flush();
}
}
}
}
private function saveMediasCategorie($article, $mediaIds)
{
$em = $this->doctrine->getManager();
$medias = json_decode((string) $mediaIds, null, 512, JSON_THROW_ON_ERROR);
if (!empty($medias)) {
foreach ($medias as $idMedia) {
$media = $em->getRepository(Media::class)->findOneById($idMedia);
if ($media instanceof Media) {
$media->setArticleCategorie($article);
$em->flush();
}
}
}
}
#[Route(path: '/api/updatenews', name: 'newsupd')]
public function updateNews()
{
try {
$insertOrDeleteNews = $this->actualiteUpd->updateActu();
$status = ['Success' => '1', 'nbNewArticle' => $insertOrDeleteNews];
} catch (\Exception $ex) {
$status = ['error' => ['code' => 500, 'message' => $ex->getMessage()]];
}
return new JsonResponse($status);
}
#[Route(path: '/api/news/{slug}', name: 'detailarticle')]
public function detailArticle($slug)
{
$em = $this->doctrine->getManager();
$articleUser = [];
try {
$articles = $em->getRepository(ListeDiffusion::class)->findListeDiffusionValide($this->getUser()->getIdUtilisateur());
foreach ($articles as $article) {
$auteur = '';
$utilisateur = $article->getArticle()->getUtilisateur();
$roleUser = !is_null($utilisateur) ? $utilisateur->getRole()->getIdRole() : null;
if ($roleUser == 1 || $roleUser == 10 || $roleUser == 3) {
$auteur = "Ministère des sports";
} elseif ($roleUser == 4 || $roleUser == 11) {
$auteur = $this->getUser()->getIdAffectation()->getLibelleLong();
} elseif ($roleUser == 5 || $roleUser == 8) {
$auteur = $em->getRepository(RFederation::class)->findOneBy(["rAdmDiside" => $em->getRepository(UtilisateurInformation::class)->findOneBy(["idUtilisateur" => $article->getUtilisateur()->getIdUtilisateur()])->getIdFederation()->getRAdmDiside()])->getRSerLibl();
}
$datePublication = $article->getArticle()->getDatePublication()->format("d-m-Y");
$articleUser[] = ['id' => $article->getArticle()->getId(), 'titre' => $article->getArticle()->getTitre(), 'resume' => $article->getArticle()->getResume(), 'contenu' => $article->getArticle()->getContenu(), 'datePublication' => $datePublication, 'auteur' => $auteur, 'image' => '', 'dataMedias' => $this->explodeArticleMedias($article->getArticle()->getMedias()), 'slug' => $article->getArticle()->getSlug(), 'lu' => $article->getLu() ? true : false];
}
foreach ($articleUser as $keyArticle => $article) {
if ($slug == $article['slug']) {
$articleRetour['article'] = $article;
$articleRetour['prev'] = $articleUser[$keyArticle - 1] ?? false;
$articleRetour['next'] = $articleUser[$keyArticle + 1] ?? false;
}
}
$data = ['success' => true, 'data' => $articleRetour];
} catch (\Exception $e) {
$data = ['success' => false, 'data' => $e->getMessage()];
}
return new JsonResponse($data);
}
#[Route(path: '/api/read', name: 'numbreread')]
public function numbreNotRead()
{
try {
$em = $this->doctrine->getManager();
$listeDiffusion = $em->getRepository(ListeDiffusion::class)->findnumberOfArticleNotRead($this->getUser()->getIdUtilisateur());
$nombre = is_countable($listeDiffusion) ? count($listeDiffusion) : 0;
$status = ['Success' => '1', 'NbNotRead' => $nombre];
} catch (\Exception $ex) {
$status = ['error' => ['code' => 500, 'message' => $ex->getMessage()]];
}
return new JsonResponse($status);
}
/**
* Creates a form to delete a Article entity.
*
* @param Article $article The Article entity
*
* @return \Symfony\Component\Form\Form The form
*/
private function createDeleteForm(Article $article)
{
return $this->createFormBuilder()
->setAction($this->generateUrl('article_delete', ['id' => $article->getId()]))
->setMethod(\Symfony\Component\HttpFoundation\Request::METHOD_DELETE)
->getForm();
}
private function addAccesAdmin($idRole)
{
if (in_array($idRole, $this->getParameter('groupe1')) || in_array(
$idRole,
$this->getParameter('groupe2')
) || in_array(
$idRole,
$this->getParameter('groupe3')
)) {
$acces = true;
} else {
$acces = false;
}
return $acces;
}
#[Route(path: '/api/liste_affectation_article', name: 'liste_affectation_article')]
public function getAffectationArticle()
{
$em = $this->doctrine->getManager();
$refAffectRep = $em->getRepository(RefAffectation::class);
$listeAffectations = [];
$role = $this->getUser()->getUtilisateur()->getIdRole();
$affectationUser = $this->getUser()->getIdAffectation();
$idAffectation = $affectationUser && ($role == RefRole::ROLE_DR || $role == RefRole::ROLE_DR_SIGNATAIRE) ? $affectationUser->getIdAffectation() : null;
$affectations = $refAffectRep->getAffectationEnabled($idAffectation);
foreach ($affectations as $affectation) {
$listeAffectations[] = ["id" => $affectation['idAffectation'], "libelle" => $affectation['libelleLong'], "numero" => $affectation['codeRegion']];
}
$data = ['success' => true, 'data' => $listeAffectations];
return new JsonResponse($data);
}
#[Route(path: '/api/liste_affectation', name: 'liste_affectation')]
public function getAffectation()
{
$em = $this->doctrine->getManager();
$refAffectRep = $em->getRepository(RefAffectation::class);
$listeAffectations = [];
$affectations = $refAffectRep->getAffectationEnabled();
foreach ($affectations as $affectation) {
$listeAffectations[] = ["id" => $affectation['idAffectation'], "libelle" => $affectation['libelleLong'], "numero" => $affectation['codeRegion']];
}
$data = ['success' => true, 'data' => $listeAffectations];
return new JsonResponse($data);
}
#[Route(path: '/api/liste_federation_article', name: 'liste_federation_article')]
public function getFederationArticle()
{
$em = $this->doctrine->getManager();
$listeFederations = [];
$federations = $em->getRepository(RFederation::class)->findAll();
$role = $this->getUser()->getUtilisateur()->getIdRole();
$federationUser = ($this->getUser()->getIdFederation() != null) ? $this->getUser()->getIdFederation()->getRAdmDiside() : "";
$listAllFede = [];
foreach ($federations as $federation) {
if ($federation->getRAdmDisciplineId()) {
if ($role == 5 || $role == 8) {
$fede = $federation->getRAdmDiside();
if ($federationUser == $fede) {
$refFederation = $em->getRepository(RefFederation::class)->findOneBy(["rAdmDiside" => $fede]);
if ($refFederation->getFederationActive()) {
$listeFederations[] = ["id" => $refFederation->getIdFederation(), "idRFede" => $federation->getRAdmDisciplineId(), "rAdmDiside" => $fede, "libelle" => $federation->getRSerLibl()];
}
}
} else {
$refFederation = $em->getRepository(RefFederation::class)->findOneBy(["rAdmDiside" => $federation->getRAdmDiside()]);
$idFederation = $refFederation->getIdFederation();
if ($refFederation->getFederationActive()) {
if (!in_array($idFederation, $listAllFede)) {
$listeFederations[] = ["id" => $refFederation->getIdFederation(), "idRFede" => $federation->getRAdmDisciplineId(), "rAdmDiside" => $federation->getRAdmDiside(), "libelle" => $federation->getRSerLibl()];
}
$listAllFede[] = $idFederation;
}
}
}
}
$data = ['success' => true, 'data' => $listeFederations];
return new JsonResponse($data);
}
#[Route(path: '/api/liste_poste_article', name: 'liste_poste_article')]
public function getPosteArticle()
{
$em = $this->doctrine->getManager();
$role = $this->getUser()->getUtilisateur()->getIdRole();
$listePoste = [];
$postes = $em->getRepository(RefPoste::class)->getPosteAutorise($role);
foreach ($postes as $poste) {
$listePoste[] = ["id" => $poste->getIdPoste(), "libelle" => $poste->getLibellePoste()];
}
$data = ['success' => true, 'data' => $listePoste];
return new JsonResponse($data);
}
#[Route(path: '/api/media', name: 'cts_web_media')]
public function uploadFile(Request $request)
{
try {
$media = new Media();
$form = $this->createForm(\App\Form\MediaType::class, $media);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$dir = $this->getParameter('dir_file_media');
$media->setRootDir($dir);
$em = $this->doctrine->getManager();
$em->persist($media);
$em->flush();
$env = ["idUpload" => $media->getId(), "msgUploadOK" => 'Le téléchargement de la pièce jointe a été effectué avec succès', "msgUploadERROR" => "", "urlFile" => $media->getAssetPath(), "filename" => $media->getName()];
} else {
$env = ["idUpload" => '', "msgUploadOK" => '', "msgUploadERROR" => (string) $form->getErrors(true, false), "urlFile" => '', 'filename' => ''];
}
return new JsonResponse($env);
} catch (\Exception $e) {
$env = ["idUpload" => '', "msgUploadOK" => '', "msgUploadERROR" => $e->getMessage(), "urlFile" => '', 'filename' => ''];
return new JsonResponse($env);
}
}
#[Route(path: '/api/delete_upload_media', name: 'media_delete')]
public function deleteUpload(Request $request)
{
try {
$data = json_decode($request->getContent(), true, 512, JSON_THROW_ON_ERROR);
$request->request->replace(is_array($data) ? $data : []);
$params = $request->request->all();
$idFileUpload = $params['delete_fileUpload']['idFileUpload'];
$em = $this->doctrine->getManager();
$media = $em->getRepository(Media::class)->find($idFileUpload);
if ($media) {
$name = $media->getPath();
unlink($this->getParameter('dir_file_media') . $name);
$em->remove($media);
$em->flush();
}
$data = ['success' => true, 'data' => 'Suppression effectuée avec succès'];
return new JsonResponse($data);
} catch (\Exception $e) {
$data = ['success' => false, 'data' => $e->getMessage()];
return new JsonResponse($data);
}
}
#[Route(path: '/api/send_article_mail/{id}', name: 'send_article_mail')]
public function sendArticle($id)
{
$em = $this->doctrine->getManager();
try {
$article = $em->getRepository(Article::class)->find($id);
$roleUser = $article->getUtilisateur()->getRole()->getIdRole();
$auteur = '';
if ($roleUser == 1) {
$auteur = "Ministère des sports";
} elseif ($roleUser == 4 || $roleUser == 11) {
$auteur = $this->getUser()->getIdAffectation()->getLibelleLong();
} elseif ($roleUser == 5 || $roleUser == 8) {
$auteur = $em->getRepository(RFederation::class)->findOneBy(["rAdmDiside" => $em->getRepository(UtilisateurInformation::class)->findOneBy(["idUtilisateur" => $article->getUtilisateur()->getIdUtilisateur()])->getIdFederation()->getRAdmDiside()])->getRSerLibl();
}
$titre = $article->getTitre();
$resume = $article->getResume();
$contenu = $article->getContenu();
$date = $article->getDatePublication()->format("d/m/Y");
$subject = "[$auteur] $date - $titre";
$message = (new Email());
$message->subject($subject)
->from('cts-web.assistance@sports.gouv.fr')
->to($this->getUser()->getUtilisateur()->getCourriel())
->html(
$this->twig->render(
'Article/email_article.html.twig',
['titre' => $titre, 'resume' => $resume, 'contenu' => $contenu]
),
'text/html'
);
$medias = $article->getMedias();
if (!empty($medias)) {
foreach ($medias as $media) {
$validMedia = $this->isValidateMedia($media);
if ($validMedia) {
$mediaPath = $this->getParameter('dir_file_media') . $media->getPath();
//$message->attach(\Swift_Attachment::fromPath($mediaPath));
$message->attachFromPath($mediaPath);
}
}
}
if ($this->mailer->send($message)) {
$data = "Mail envoyé";
} else {
$data = "Erreur lors de l'envoi du mail";
}
$data = ['success' => true, 'data' => $data];
} catch (\Exception $e) {
$data = ['success' => false, 'data' => $e->getMessage()];
}
return new JsonResponse($data);
}
#[Route(path: '/api/actualite_cts', name: 'actualite_cts')]
public function listeActualiteCts()
{
$em = $this->doctrine->getManager();
$articleUser = [];
$user = $this->getUser();
$uid = $user->getUtilisateur();
$uiRep = $em->getRepository(UtilisateurInformation::class);
$ui = $this->getUser();
$posteId = [];
try {
$listes = $em->getRepository(ListeDiffusionSup::class)->getListeArticles($user->getUtilisateur(), $ui);
$posteAll = $this->getPosteArticle();
$posteDecode = json_decode((string) $posteAll->getContent(), null, 512, JSON_THROW_ON_ERROR);
foreach ($listes as $listeDiffusion) {
$auteur = null;
if (!isset($listeDiffusion['id'])) {
$article = $em->getRepository(ListeDiffusionSup::class)->getArtcile();
} else {
$article = $em->getRepository(Article::class)->findOneBy(['id' => $listeDiffusion['id']]);
}
$acticleUtillisateur = $article->getUtilisateur();
$roleUser = $acticleUtillisateur ? $acticleUtillisateur->getIdRole() : null;
foreach ($article->getPostes() as $poste) {
$posteId[] = $poste->getIdPoste();
}
foreach ($posteDecode->data as $posteDec) {
$postes[] = ["id" => $posteDec->id, "libelle" => $posteDec->libelle, "libelleModif" => $posteDec->libelle . 'Modif', "checked" => (in_array($posteDec->id, $posteId) ? true : false)];
}
$userArticle = $acticleUtillisateur ? $em->getRepository(UtilisateurInformation::class)->findOneBy(["idUtilisateur" => $acticleUtillisateur->getIdUtilisateur()]) : null;
if ($roleUser == RefRole::ROLE_DS_ADMIN || $roleUser == RefRole::ROLE_DS_SIGNATAIRE || $roleUser == RefRole::ROLE_DS_INVITE) {
$auteur = "Ministère des sports";
} elseif ($roleUser == RefRole::ROLE_DR || $roleUser == RefRole::ROLE_DR_SIGNATAIRE) {
$auteur = $userArticle ? $userArticle->getIdAffectation()->getLibelleLong() : "";
} elseif ($roleUser == RefRole::ROLE_FEDE || $roleUser == RefRole::ROLE_FEDE_INVITE) {
$auteur = $em->getRepository(RFederation::class)->findOneBy(["rAdmDiside" => $userArticle->getIdFederation()->getRAdmDiside()])->getRSerLibl();
}
$datePublication = $article->getDatePublication()->format("d-m-Y");
$categ = $em->getRepository(Categorie::class)->findOneBy(['id' => $article->getIdCategorie()]);
$explodeArticleMedias = $this->explodeArticleMedias($categ->getMedias());
$articleUser[] = [
'id' => $article->getId(),
'titre' => $article->getTitre(),
'resume' => $article->getResume(),
'datePublication' => $datePublication,
'auteur' => $auteur,
'image' => '',
'postes' => $postes,
'dataMedias' => $this->explodeArticleMedias($article->getMedias()),
'idCategorie' => ($categ != null) ? $categ->getId() : null,
'nomCategorie' => ($categ != null) ? $categ->getNomCategorie() : null,
'imageCategorie' => $this->explodeArticleMedias($article->getMediasCategorie()),
'imageCategorieDefault' => ($categ != null) ? [end($explodeArticleMedias)] : [],
'slug' => $article->getSlug()
];
}
$data = ['success' => true, 'data' => isset($articleUser[0]) ? $articleUser : []];
} catch (\Exception $e) {
$data = ['success' => false, 'data' => $e->getMessage()];
}
return new JsonResponse($data);
}
#[Route(path: '/api/news_cts/{slug}', name: 'detail_cts_article')]
public function detailArticleCts($slug)
{
$em = $this->doctrine->getManager();
$articleUser = [];
$idarticleUnique = 0;
$user = $this->getUser();
try {
$listes = $em->getRepository(ListeDiffusionSup::class)->getListeArticles($user->getUtilisateur(), $user);
foreach ($listes as $listeDiffusion) {
$auteur = null;
// if (!isset($listeDiffusion->id)) {
// $article = $listeDiffusion->getArticle();
// } else {
// $article = $em->getRepository(Article::class)->findOneBy(['id' => $listeDiffusion->id]);
// }
$article = $em->getRepository(Article::class)->findOneBy(['id' => $listeDiffusion['id']]);
$auteur = null;
$utilisateur = $article->getUtilisateur();
if (null !== $utilisateur) {
$idUtilisateur = $utilisateur->getIdUtilisateur();
$utilisateurInformation = $em->getRepository(UtilisateurInformation::class)->findOneBy(['idUtilisateur' => $idUtilisateur]);
$refFederation = $utilisateurInformation->getIdFederation();
if (null !== $utilisateurInformation->getIdAffectation()) {
$RefAffectationController = $utilisateurInformation->getIdAffectation()->getIdAffectation();
} else {
$RefAffectationController = 1;
}
$utilisateurAffectation = $em->getRepository(RefAffectation::class)->findOneBy(['idAffectation' => $RefAffectationController]);
$utilisateurAffectationLibelle = $utilisateurAffectation->getLibelleAffectation();
$uiauteur = $em->getRepository(UtilisateurInformation::class)->findDataForPageProfil($idUtilisateur);
$utilisateurFederationLibelle = $uiauteur['rSerLibl'];
if (null !== $utilisateurFederationLibelle) {
$defaultAuteur = $utilisateurFederationLibelle;
} elseif (null !== $utilisateurAffectationLibelle) {
$defaultAuteur = "Secteur " . $utilisateurAffectationLibelle;
} else {
$defaultAuteur = "Ministère en charge des sports";
}
$roleUser = !is_null($utilisateur) ? $utilisateur->getRole()->getIdRole() : null;
if ($roleUser == 5 || $roleUser == 8) {
if (null != $em->getRepository(RefGabarit::class)->findBy(['idFederation' => $refFederation->getIdFederation()])) {
$enteteGabarit = (null != $em->getRepository(RefGabarit::class)->getDetailsGabaritDTN($refFederation->getIdFederation())) ? $em->getRepository(RefGabarit::class)->getDetailsGabaritDTN($refFederation->getIdFederation())->getEntete() : 'Ministère des Sports';
$auteur = ((null !== $enteteGabarit) && ('' !== $enteteGabarit)) ? $enteteGabarit : $defaultAuteur;
} else {
$auteur = $defaultAuteur;
}
} elseif ($roleUser == 1 || $roleUser == 3 || $roleUser == 10) {
$enteteGabarit = (null != $em->getRepository(RefGabarit::class)->getDetailsGabaritDS()) ? $em->getRepository(RefGabarit::class)->getDetailsGabaritDS()->getEntete() : 'Ministère des Sports';
$auteur = ((null !== $enteteGabarit) && ('' !== $enteteGabarit)) ? $enteteGabarit : $defaultAuteur;
} elseif ($roleUser == 4 || $roleUser == 11) {
$enteteGabarit = (null != $em->getRepository(RefGabarit::class)->getDetailsGabaritDR($RefAffectationController)) ? $em->getRepository(RefGabarit::class)->getDetailsGabaritDR($RefAffectationController)->getEntete() : 'Ministère des Sports';
$auteur = ((null !== $enteteGabarit) && ('' !== $enteteGabarit)) ? $enteteGabarit : $defaultAuteur;
} else {
$findBy = $em->getRepository(RefGabarit::class)->findBy(['idAffectation' => $RefAffectationController]);
$findBy2 = $em->getRepository(RefGabarit::class)->findBy(['idAffectation' => $RefAffectationController]);
$enteteGabarit = (null != end($findBy)) ? end($findBy2)->getEntete() : 'Ministère des Sports';
$auteur = ((null !== $enteteGabarit) && ('' !== $enteteGabarit)) ? $enteteGabarit : $defaultAuteur;
}
$categ = $em->getRepository(Categorie::class)->findOneBy(['id' => $article->getIdCategorie()]);
$datePublication = $article->getDatePublication()->format("d-m-Y");
$explodeArticleMedias = $this->explodeArticleMedias($categ->getMedias());
$articleUser[] = ['id' => $article->getId(), 'titre' => $article->getTitre(), 'resume' => $article->getResume(), 'contenu' => $article->getContenu(), 'datePublication' => $datePublication, 'auteur' => $auteur, 'image' => '', 'dataMedias' => $this->explodeArticleMedias($article->getMedias()), 'idCategorie' => ($categ != null) ? $categ->getId() : null, 'nomCategorie' => ($categ != null) ? $categ->getNomCategorie() : null, 'imageCategorie' => $this->explodeArticleMedias($article->getMediasCategorie()), 'imageCategorieDefault' => ($categ != null) ? [end($explodeArticleMedias)] : [], 'slug' => $article->getSlug()];
}
}
$dataUnique = [];
foreach ($articleUser as $article) {
if (!array_key_exists($article['id'], $dataUnique)) {
$dataUnique[$article['id']] = $article;
}
}
$articleUser = array_values($dataUnique);
$articleRetour = [];
foreach ($articleUser as $keyArticle => $article) {
if ($slug == $article['slug']) {
$articleRetour['article'] = $article;
$articleRetour['prev'] = $articleUser[$keyArticle - 1] ?? false;
$articleRetour['next'] = $articleUser[$keyArticle + 1] ?? false;
}
}
$data = ['success' => true, 'data' => $articleRetour];
} catch (\Exception $e) {
$data = ['success' => false, 'data' => $e->getMessage()];
}
return new JsonResponse($data);
}
}