<?php
declare(strict_types=1);
/**
* @author Mehrez Labidi
*/
namespace App\Controller;
use Symfony\Component\HttpFoundation\File\Exception\FileException;
use Symfony\Component\HttpFoundation\{
Request,
JsonResponse,
Response
};
use App\Services\ManagerEntity\{
CertificationsExpertManagers,
BlogsManagers,
EquipeManagers,
ReferencementsManagers
};
use App\Form\Type\FormChoices;
use App\Form\Type\ExpertEspaceAdmin\{
ReferencementType,
MessageBlogType,
EquipeType,
BlogType
};
use App\Helper\Utils;
use App\Entity\{
ServicesPrestataire,
AbonnementsPrestataireGestion,
Societes,
Pays,
EquipesPrestataire,
BuzzRoles,
BuzzOperations,
SocietesPrestataire,
BuzzActualites,
Utilisateur,
SecteursActivitePrestataireNew
};
use Symfony\Component\Security\Core\Exception\AccessDeniedException;
use App\Exception\{
InvalidParametersException,
NotFound,
MissingMandatoryParams
};
use Doctrine\ORM\EntityManagerInterface;
use App\Services\Mailer;
use Psr\Log\LoggerInterface;
use App\Services\MetaTag;
use App\Services\ManagerEntity\AbonnementService;
class AnnuairesExpertsEspaceAdministrationController extends EntityUsingController {
public const MAX_AGE = 43200; // 12heures
private $cem;
private $rm;
private $bm;
private $em;
private $eqm;
private $aboService;
/**
*
* @param CertificationsExpertManagers $cem
*/
public function __construct(EntityManagerInterface $em, CertificationsExpertManagers $cem, ReferencementsManagers $rm, BlogsManagers $bm, EquipeManagers $eqm, Mailer $mailer, LoggerInterface $logger, MetaTag $metaTag, AbonnementService $aboService) {
$this->cem = $cem;
$this->rm = $rm;
$this->bm = $bm;
$this->em = $em;
$this->eqm = $eqm;
$this->mailer = $mailer;
$this->logger = $logger;
$this->metaTag = $metaTag;
$this->aboService = $aboService;
}
public function index(Request $request, $codePays): Response {
$this->denyAccessUnlessGranted('ROLE_USER'); // page inaccessible sans authentification
$coordonneesFacturation = $this->aboService->isValidCoordonneesFacturation($this->getUser());
// $etatCB = $this->checkIfCBactiveOrNot();
if ($coordonneesFacturation && $this->aboService->getEtatAbonnement($this->getUser()) == "actif") { // si CoordonneesFacturation OK + CB OK => on créé societe_prestataire
$sp = $this->em->getRepository(Utilisateur::class)->getSocietePrestataireByLogin($this->getUser()->getLogin());
if (!$sp) {// si pas de SO en liaison avec cet utilisateur
$sp = new SocietesPrestataire();
$sp->_set("login_utilisateur", $this->getUser()->getLogin());
$sp->_set("adresse", $this->getUser()->_get("factur_adresse") ?? NULL);
$sp->_set("code_postal", $this->getUser()->_get("factur_code_postal") ?? NULL);
$sp->_set("ville", $this->getUser()->_get("factur_ville") ?? NULL);
$sp->_set("pays", $this->getUser()->_get("factur_pays") ?? NULL);
$sp->_set("raison_sociale", $this->getUser()->_get("factur_nom_societe") ?? NULL);
$sp->_set("mode_reglement_abonnement", "cb");
$sp->_set("nb_prestations_sans_cb", 0);
$sp->_set("nb_coordonnees_par_service", 1);
$sp->_set("etat_abonnement", "actif");
$this->em->persist($sp);
$this->em->flush();
}
$idSocietePrestataire = $sp->getId();
if ($idSocietePrestataire) {
$queryBuilder1 = $this->em->createQueryBuilder();
$query1 = $queryBuilder1->update(AbonnementsPrestataireGestion::class, 'e')
->set('e.id_societe_prestataire', ':ph')->setParameter('ph', $idSocietePrestataire)
->where('e.id_utilisateur = :id')->setParameter('id', (int) $this->getUser()->getId())
->getQuery();
$query1->execute();
$queryBuilder2 = $this->em->createQueryBuilder();
$query2 = $queryBuilder2->update(Utilisateur::class, 'u')
->set('u.id_societe_prestataire', ':pp')->setParameter('pp', $idSocietePrestataire)
->where('u.id_utilisateur = :id')->setParameter('id', (int) $this->getUser()->getId())
->getQuery();
$query2->execute();
}
}
$etat_abonnement = $this->aboService->getEtatAbonnement($this->getUser());
$metaTag = $this->metaTag
->setTitle("Admin Annuaire des experts")
->setDescription("Espace d'administration de l'annuaire des experts");
$response = $this->render(
'annuaires/experts/espace_administration/index.html.twig',
[
"etat_abonnement" => $etat_abonnement, 'metaTag' => $metaTag,
"coordonneesFacturation" => $coordonneesFacturation,
'controller_name' => 'AnnuairesExpertsEspaceAdministrationController',
]
);
$response->setPrivate();
$response->headers->addCacheControlDirective('must-revalidate', true);
return $response;
}
public function faq(Request $request, $codePays): Response {
$this->denyAccessUnlessGranted('ROLE_USER'); // page inaccessible sans authentification
if (!$this->aboService->isAbonnementActif($this->getUser())) {
return $this->redirectToRoute('annuaires_experts_espace_admin_index', ['codePays' => $codePays]);
}
$metaTag = $this->metaTag
->setTitle("FAQ Annuaire des experts")
->setDescription("Consultez les FAQ pour notre annuaire des experts");
$response = $this->render(
'annuaires/experts/espace_administration/faq/faq.html.twig',
[
'controller_name' => 'AnnuairesExpertsEspaceAdministrationController', 'metaTag' => $metaTag,
]
);
$response->setPrivate();
$response->headers->addCacheControlDirective('must-revalidate', true);
return $response;
}
public function certifications(Request $request, $codePays): Response {
$this->denyAccessUnlessGranted('ROLE_USER'); // page inaccessible sans authentification
if (!$this->aboService->isAbonnementActif($this->getUser())) {
return $this->redirectToRoute('annuaires_experts_espace_admin_index', ['codePays' => $codePays]);
}
$filters = $request->query->all();
$certifications = ($this->getUser()) ? $this->cem->getListByLoginUtilisateur($this->getUser()->getLogin(), $filters) : [];
$id_type_certification = $this->cem->getAllTypeCertificationExpert();
$metaTag = $this->metaTag
->setTitle("Vos certifications")
->setDescription("Vos certifications dans l'annuaire des experts");
$response = $this->render(
'annuaires/experts/espace_administration/certifications/certifications.html.twig',
[
"certifications" => $certifications, 'metaTag' => $metaTag,
"id_type_certification" => $id_type_certification,
'controller_name' => 'AnnuairesExpertsEspaceAdministrationController',
]
);
$response->setPrivate();
$response->headers->addCacheControlDirective('must-revalidate', true);
return $response;
}
/**
*
* @param Request $request
* @param type $action
* @param type $id
* @param type $codePays
* @return Response
*/
public function gestionCertification(Request $request, $action, $id, $codePays): Response {
$this->denyAccessUnlessGranted('ROLE_USER'); // page inaccessible sans authentification
if (!$this->aboService->isAbonnementActif($this->getUser())) {
return $this->redirectToRoute('annuaires_experts_espace_admin_index', ['codePays' => $codePays]);
}
if ($request->getMethod() == Request::METHOD_POST) { // AJOUT
$types_certifications = $request->request->get('types_certifications');
$valeur_certification = $request->request->get('valeur_certification');
$this->cem->ajoutCertification($types_certifications, $valeur_certification);
} else { //delete
$this->cem->supprimerCertificationById($id);
}
$uri = $request->server->get('HTTP_REFERER');
return $this->redirect($uri);
}
public function statistiques(Request $request, $codePays): Response {
$this->denyAccessUnlessGranted('ROLE_USER'); // page inaccessible sans authentification
if (!$this->aboService->isAbonnementActif($this->getUser())) {
return $this->redirectToRoute('annuaires_experts_espace_admin_index', ['codePays' => $codePays]);
}
$response = $this->render(
'annuaires/experts/espace_administration/statistiques.html.twig',
[
'controller_name' => 'AnnuairesExpertsEspaceAdministrationController',
]
);
$response->setPrivate();
$response->headers->addCacheControlDirective('must-revalidate', true);
return $response;
}
public function referencement(Request $request, $codePays): Response {
$this->denyAccessUnlessGranted('ROLE_USER'); // page inaccessible sans authentification
if (!$this->aboService->isAbonnementActif($this->getUser())) {
return $this->redirectToRoute('annuaires_experts_espace_admin_index', ['codePays' => $codePays]);
}
$filters = $request->query->all();
$listReferencements = $this->rm->getListByLoginUtilisateur($this->getUser()->getLogin(), $filters);
$metaTag = $this->metaTag
->setTitle("Vos prestations")
->setDescription("Liste de vos prestations référencées dans l'annuaire des experts");
$autorisation = $this->rm->autorisationNouveauReferencement();
$response = $this->render(
'annuaires/experts/espace_administration/referencement/referencement.html.twig',
[
'controller_name' => 'AnnuairesExpertsEspaceAdministrationController',
'metaTag' => $metaTag, 'autorisation' => $autorisation,
"listReferencements" => $listReferencements
]
);
$response->setPrivate();
$response->headers->addCacheControlDirective('must-revalidate', true);
return $response;
}
public function ajoutEquipe(Request $request, $codePays, $directory_storage_photos_equipes_prestataires): Response {
$this->denyAccessUnlessGranted('ROLE_USER'); // page inaccessible sans authentification
if (!$this->aboService->isAbonnementActif($this->getUser())) {
return $this->redirectToRoute('annuaires_experts_espace_admin_index', ['codePays' => $codePays]);
}
$form = $this->createForm(EquipeType::class, null, [
'action' => $this->generateUrl(
$request->attributes->get('_route'),
[
'codePays' => $codePays,
]
),
'method' => 'POST',
]);
$form->handleRequest($request);
if ($form->isSubmitted()) {
if ($form->isValid()) {
$idMembre = $this->eqm->gestionEquipe($form->getData());
$nomMembre = $form->get("nom")->getData();
$prenomMembre = $form->get("prenom")->getData();
$file = $form->get('image')->getData();
if ($file) {
$newFilename = Utils::slugify($nomMembre) . "-" . Utils::slugify($prenomMembre) . "-" . $idMembre . '.' . $file->guessExtension();
try {
$file->move($directory_storage_photos_equipes_prestataires, $newFilename);
$lienFicheMmebre = "https://www.fusacq.com/administration/annuaire_prestataire_admin/membre.php?id_membre=$idMembre&from=liste_membres.php&mode=demande_publication";
$contenu = "</br>" .
"<a href='$lienFicheMmebre' target='_blank' >Liens vers sa fiche dans l'admin</a>" .
"</br>" .
"<a href='https://www.fusacq.com/administration/annuaire_prestataire_admin/liste_membres.php?mode=demande_publication' target='_blank' > Lien vers la liste des membres en demande de publication <a>";
$varTemplate = ["contenu" => $contenu];
$objectMail = $nomMembre . " " . $prenomMembre . " (" . $idMembre . ") a envoyé son photo pour traitement";
$this->mailer->sendmail(
Mailer::$senderAdress['notification'],
Mailer::$receiverAdress['mail_alerte'],
null,
null,
$objectMail,
null,
null,
'mails/templates/alerte_interne.html.twig',
$varTemplate,
null
);
$this->eqm->updateImageMembre($newFilename, $idMembre);
} catch (FileException $e) {
$this->logger->error('Échec upload photo membre', [
'membre_id' => $idMembre,
'filename' => $newFilename,
'exception' => $e->getMessage()
]);
}
}
return $this->redirectToRoute('annuaires_experts_espace_admin_equipe', ['codePays' => $codePays]);
} else {
$this->addFlash('echec', "Certains champs sont vides ou invalides.");
}
}
$response = $this->render(
'annuaires/experts/espace_administration/equipe/ajout_equipe.html.twig',
[
'controller_name' => 'AnnuairesExpertsEspaceAdministrationController',
'form' => $form->createView(), "data" => $form->getData()
]
);
return $response;
}
public function modifierEquipe(Request $request, $id, $codePays, $directory_storage_photos_equipes_prestataires): Response {
$this->denyAccessUnlessGranted('ROLE_USER'); // page inaccessible sans authentification
if (!$this->aboService->isAbonnementActif($this->getUser())) {
return $this->redirectToRoute('annuaires_experts_espace_admin_index', ['codePays' => $codePays]);
}
$object = $this->em->getRepository(EquipesPrestataire::class)->getDetail((int) $id);
if (!empty($object) && \array_key_exists('genre', $object)) {
$normalized = FormChoices::normalizeGenreEquipe($object['genre']);
if (null !== $normalized) {
$object['genre'] = $normalized;
}
}
$id_services = $this->em->getRepository(EquipesPrestataire::class)->getListIdServicePrestataireByIdMembre((int) $id) ?? [];
$form = $this->createForm(EquipeType::class, array_merge($object, ["id_service_prestataire_checkbox" => $id_services]), [
'action' => $this->generateUrl(
$request->attributes->get('_route'),
[
"codePays" => $codePays,
"id" => $id
]
),
'method' => 'POST',
]);
$form->handleRequest($request);
if ($form->isSubmitted()) {
if ($form->isValid()) {
$idMembre = $this->eqm->gestionEquipe(array_merge($form->getData(), ["old_id_service_prestataire_checkbox" => $id_services]), $id);
$nomMembre = $form->get("nom")->getData();
$prenomMembre = $form->get("prenom")->getData();
$file = $form->get('image')->getData();
if ($file) {
$newFilename = Utils::slugify($nomMembre) . "-" . Utils::slugify($prenomMembre) . "-" . $idMembre . '.' . $file->guessExtension();
try {
$file->move($directory_storage_photos_equipes_prestataires, $newFilename);
$lienFicheMmebre = "https://www.fusacq.com/administration/annuaire_prestataire_admin/membre.php?id_membre=$idMembre&from=liste_membres.php&mode=demande_publication";
$contenu = "</br>" .
"<a href='$lienFicheMmebre' target='_blank' >Liens vers sa fiche dans l'admin</a>" .
"</br>" .
"<a href='https://www.fusacq.com/administration/annuaire_prestataire_admin/liste_membres.php?mode=demande_publication' target='_blank' > Lien vers la liste des membres en demande de publication <a>";
$varTemplate = ["contenu" => $contenu];
$objectMail = $nomMembre . " " . $prenomMembre . " (" . $idMembre . ") a envoyé son photo pour traitement";
$this->mailer->sendmail(
Mailer::$senderAdress['notification'],
Mailer::$receiverAdress['mail_alerte'],
null,
null,
$objectMail,
null,
null,
'mails/templates/alerte_interne.html.twig',
$varTemplate,
null
);
$this->eqm->updateImageMembre($newFilename, $idMembre);
} catch (FileException $e) {
$this->logger->error('Échec upload photo membre', [
'membre_id' => $idMembre,
'filename' => $newFilename,
'exception' => $e->getMessage()
]);
}
}
return $this->redirectToRoute('annuaires_experts_espace_admin_equipe', ['codePays' => $codePays]);
} else {
$this->addFlash('echec', "Certains champs sont vides ou invalides.");
}
}
$response = $this->render(
'annuaires/experts/espace_administration/equipe/modifier_equipe.html.twig',
[
'controller_name' => 'AnnuairesExpertsEspaceAdministrationController',
'form' => $form->createView(),
'data' => $form->getData(),
'detail_membre' => $object,
]
);
return $response;
}
/**
*
* @param Request $request
* @param type $codePays
* @return Response
*/
public function ajoutReferencement(Request $request, $codePays): Response {
$this->denyAccessUnlessGranted('ROLE_USER'); // page inaccessible sans authentification
if ($this->rm->autorisationNouveauReferencement() == false) {
throw new AccessDeniedException();
}
if (!$this->aboService->isAbonnementActif($this->getUser())) {
return $this->redirectToRoute('annuaires_experts_espace_admin_index', ['codePays' => $codePays]);
}
$form = $this->createForm(ReferencementType::class, null, [
'action' => $this->generateUrl(
$request->attributes->get('_route'),
[
'codePays' => $codePays,
]
),
'method' => 'POST', 'statut' => NULL
]);
if ($request->isMethod('POST')) {
$form->submit($request->request->get($form->getName()));
if ($form->isSubmitted() && $form->getClickedButton() && $form->getClickedButton()->getName() === ReferencementType::btn[0]) { // enregistrer temporairement
$form->clearErrors(true);
$data = $form->getData();
$this->addFlash('success', 'Votre prestation a bien été enregistrée. Vous pouvez la compléter ultérieurement');
$idSp = $this->rm->gestionReferencement(array_merge($data, ["statut" => ServicesPrestataire::LIST_STATUT[0]]));
if ($idSp === NULL) {
return $this->redirectToRoute('compte_facturation_coordonnees_facturation', ['codePays' => $codePays]);
}
return $this->redirectToRoute('annuaires_experts_espace_admin_modif_referencement',
[
'codePays' => $codePays,
"id" => $idSp
]);
}
if ($form->isSubmitted() && $form->getClickedButton() && $form->getClickedButton()->getName() === ReferencementType::btn[1]) { // mettre en ligne
if ($form->isValid()) {
$data = $form->getData();
$idSp = $this->rm->gestionReferencement(array_merge($data, ["statut" => ServicesPrestataire::LIST_STATUT[1]]));
if ($idSp === NULL) {
return $this->redirectToRoute('compte_facturation_coordonnees_facturation', ['codePays' => $codePays]);
}
return $this->redirectToRoute('annuaires_experts_espace_admin_referencement', ['codePays' => $codePays]);
} else {
$this->addFlash('echec', "Votre prestation ne peut pas être publiée. Certains champs sont vides ou invalides.");
}
}
}
$nbCoordonneesAgence = max(1, $this->em->getRepository(Utilisateur::class)->getNbCoordonneesParServiceSocietePrestataireByLogin($this->getUser()->getLogin()));
$metaTag = $this->metaTag
->setTitle("Ajouter une prestation")
->setDescription("Ajouter une prestation dans l'annuaire des experts");
$response = $this->render(
'annuaires/experts/espace_administration/referencement/ajout_referencement.html.twig',
[
'controller_name' => 'AnnuairesExpertsEspaceAdministrationController',
'metaTag' => $metaTag,
'form' => $form->createView(), "data" => $form->getData(),
"nbCoordonneesAgence" => $nbCoordonneesAgence
]
);
$response->setPrivate();
$response->headers->addCacheControlDirective('must-revalidate', true);
return $response;
}
/**
*
* @param Request $request
* @param type $id
* @param type $codePays
* @return Response
* @throws MissingMandatoryParams
* @throws type
*/
public function modifReferencement(Request $request, $id, $codePays): Response {
$this->denyAccessUnlessGranted('ROLE_USER'); // page inaccessible sans authentification
if (!$this->aboService->isAbonnementActif($this->getUser())) {
return $this->redirectToRoute('annuaires_experts_espace_admin_index', ['codePays' => $codePays]);
}
if (!$id) {
throw new MissingMandatoryParams("missing mandatory param id services prestataire");
}
$object = $this->getDoctrine()->getRepository(ServicesPrestataire::class)->getServicesPrestataireWithCoordonnesById((int) $id);
if (!$object) {
throw $this->createNotFoundException(' ServicesPrestataire introuvable avec id ' . $id);
}
$idsNomSecteursParents = (isset($object[0]["id_secteur_new"])) ? $this->getDoctrine()->getRepository(SecteursActivitePrestataireNew::class)->getIdsNomsSecteurParentsByPointeur($object[0]["id_secteur_new"]) : NULL;
if (!empty($idsNomSecteursParents)) {
$dataObject = array_merge($object, Utils::firstValInArray($idsNomSecteursParents)); // on prend le premier si on a plusieurs
} else {
$dataObject = array_merge(
$object,
["id_secteur_activite1" => NULL,
"id_secteur_activite2" => NULL,
"id_secteur_activite3" => NULL
]
);
}
$form = $this->createForm(ReferencementType::class, $dataObject, [
'action' => $this->generateUrl(
$request->attributes->get('_route'),
[
"id" => $id,
'codePays' => $codePays,
]
),
'method' => 'POST', 'statut' => $dataObject[0]['statut'] ?? NULL,
]);
if ($request->isMethod('POST')) {
$form->submit($request->request->get($form->getName()));
if ($form->isSubmitted() && $form->getClickedButton() && $form->getClickedButton()->getName() === ReferencementType::btn[0]) { // enregistrer temporairement
$form->clearErrors(true);
$data = $form->getData();
$idSp = $this->rm->gestionReferencement(array_merge($data, ["statut" => ServicesPrestataire::LIST_STATUT[0]]), $id);
if ($idSp === NULL) {
return $this->redirectToRoute('compte_facturation_coordonnees_facturation', ['codePays' => $codePays]);
}
$this->addFlash('success', 'Votre prestation a bien été enregistrée. Vous pouvez la compléter ultérieurement');
}
if ($form->isSubmitted() && $form->getClickedButton() && $form->getClickedButton()->getName() === ReferencementType::btn[1]) { // mettre en ligne
if ($form->isValid()) {
$data = $form->getData();
$idSp = $this->rm->gestionReferencement(array_merge($data, ["statut" => ServicesPrestataire::LIST_STATUT[1]]), $id);
if ($idSp === NULL) {
return $this->redirectToRoute('compte_facturation_coordonnees_facturation', ['codePays' => $codePays]);
}
return $this->redirectToRoute('annuaires_experts_espace_admin_referencement', ['codePays' => $codePays]);
} else {
$this->addFlash('echec', "Votre prestation ne peut pas être publiée. Certains champs sont vides ou invalides.");
}
}
}
$nbCoordonneesAgence = max(1, $this->em->getRepository(Utilisateur::class)->getNbCoordonneesParServiceSocietePrestataireByLogin($this->getUser()->getLogin()));
$metaTag = $this->metaTag
->setTitle("Modifier une prestation")
->setDescription("Modifier une prestation dans l'annuaire des experts");
$response = $this->render(
'annuaires/experts/espace_administration/referencement/modif_referencement.html.twig',
[
"controller_name" => 'AnnuairesExpertsEspaceAdministrationController',
"form" => $form->createView(), 'metaTag' => $metaTag,
"prestation" => $dataObject, "data" => $form->getData(),
"nbCoordonneesAgence" => $nbCoordonneesAgence,
"idsNomSecteursParents" => $idsNomSecteursParents
]
);
$response->setPrivate();
$response->headers->addCacheControlDirective('must-revalidate', true);
return $response;
}
public function changeStatutReferencement(Request $request, $id, $statut, $codePays): Response {
$this->denyAccessUnlessGranted('ROLE_USER'); // page inaccessible sans authentification
if (!$this->aboService->isAbonnementActif($this->getUser())) {
return $this->redirectToRoute('annuaires_experts_espace_admin_index', ['codePays' => $codePays]);
}
$this->rm->modifierStatut($id, $statut);
$filters = $request->query->all();
$listReferencements = $this->rm->getListByLoginUtilisateur($this->getUser()->getLogin(), $filters);
$response = $this->render(
'annuaires/experts/espace_administration/referencement/referencement.html.twig',
[
'controller_name' => 'AnnuairesExpertsEspaceAdministrationController',
"listReferencements" => $listReferencements
]
);
$response->setPrivate();
$response->headers->addCacheControlDirective('must-revalidate', true);
return $response;
}
public function equipe(Request $request, $codePays): Response {
$this->denyAccessUnlessGranted('ROLE_USER'); // page inaccessible sans authentification
if (!$this->aboService->isAbonnementActif($this->getUser())) {
return $this->redirectToRoute('annuaires_experts_espace_admin_index', ['codePays' => $codePays]);
}
$filters = $request->query->all();
$equipe = $this->eqm->getListByLoginUtilisateur($this->getUser()->getLogin(), $filters);
if ($equipe === NULL) { // PAS DE S.P.
return $this->redirectToRoute('compte_facturation_coordonnees_facturation', ['codePays' => $codePays]);
}
$mode = ($filters["mode"]) ?? "alphabetique";
$nbReferencements = $this->rm->nbReferencementByLogin($this->getUser()->getLogin());
$metaTag = $this->metaTag
->setTitle("Votre équipe")
->setDescription("Liste des membres de votre équipe dans l'annuaire des experts");
$response = $this->render(
'annuaires/experts/espace_administration/equipe/equipe.html.twig',
[
"controller_name" => 'AnnuairesExpertsEspaceAdministrationController',
"equipe" => $equipe, "nbReferencements" => $nbReferencements,
'metaTag' => $metaTag,
"mode" => $mode
]
);
$response->setPrivate();
$response->headers->addCacheControlDirective('must-revalidate', true);
return $response;
}
public function changeStatutEquipe(Request $request, $id, $statut, $codePays): Response {
$this->denyAccessUnlessGranted('ROLE_USER'); // page inaccessible sans authentification
if (!$this->aboService->isAbonnementActif($this->getUser())) {
return $this->redirectToRoute('annuaires_experts_espace_admin_index', ['codePays' => $codePays]);
}
$filters = $request->query->all();
$this->eqm->modifierStatut($id, $statut);
$equipe = $this->eqm->getListByLoginUtilisateur($this->getUser()->getLogin(), $filters);
if ($equipe === NULL) { // PAS DE S.P.
return $this->redirectToRoute('compte_facturation_coordonnees_facturation', ['codePays' => $codePays]);
}
$nbReferencements = $this->rm->nbReferencementByLogin($this->getUser()->getLogin());
$mode = ($filters["mode"]) ?? "alphabetique";
$response = $this->render(
'annuaires/experts/espace_administration/equipe/equipe.html.twig',
[
"controller_name" => 'AnnuairesExpertsEspaceAdministrationController',
"equipe" => $equipe, "nbReferencements" => $nbReferencements,
"mode" => $mode
]
);
$response->setPrivate();
$response->headers->addCacheControlDirective('must-revalidate', true);
return $response;
}
/**
*
* @param Request $request
* @param type $idService
* @param type $listMembreIds
* @param type $codePays
* @return JsonResponse
*/
public function changeOrdreMembreEquipe(Request $request, $idService, $listMembreIds, $codePays) {
$result = $this->eqm->changeOrdreMembreEquipe($idService, $listMembreIds);
return new JsonResponse([
'success' => $result
]);
}
public function blog(Request $request, $codePays): Response {
$this->denyAccessUnlessGranted('ROLE_USER'); // page inaccessible sans authentification
if (!$this->aboService->isAbonnementActif($this->getUser())) {
return $this->redirectToRoute('annuaires_experts_espace_admin_index', ['codePays' => $codePays]);
}
$filters = $request->query->all();
$ranges = $this->bm->rangeDatesByIdSocietePrestataireLogin($this->getUser()->getLogin());
if ($ranges === NULL) { // PAS DE S.P.
return $this->redirectToRoute('compte_facturation_coordonnees_facturation', ['codePays' => $codePays]);
}
$ranges = array_filter($ranges); // pour eviter le pb utilisateur sans blog et donc sa ns filtre
$listBlogs = $this->bm->getListByLoginUtilisateur($this->getUser()->getLogin(), $filters);
if ($listBlogs === NULL) { // PAS DE S.P.
return $this->redirectToRoute('compte_facturation_coordonnees_facturation', ['codePays' => $codePays]);
}
$nbReferencements = $this->rm->nbReferencementByLogin($this->getUser()->getLogin());
$metaTag = $this->metaTag
->setTitle("Vos blogs")
->setDescription("Liste de vos blogs dans l'annuaire des experts");
$response = $this->render(
'annuaires/experts/espace_administration/blog/blog.html.twig',
[
'controller_name' => 'AnnuairesExpertsEspaceAdministrationController', 'metaTag' => $metaTag,
"listBlogs" => $listBlogs, "ranges" => $ranges, "nbReferencements" => $nbReferencements
]
);
$response->setPrivate();
$response->headers->addCacheControlDirective('must-revalidate', true);
return $response;
}
public function ajoutBlog(Request $request, $codePays): Response {
$this->denyAccessUnlessGranted('ROLE_USER'); // page inaccessible sans authentification
if (!$this->aboService->isAbonnementActif($this->getUser())) {
return $this->redirectToRoute('annuaires_experts_espace_admin_index', ['codePays' => $codePays]);
}
$form = $this->createForm(BlogType::class, null, [
"id_actualite" => NULL,
'action' => $this->generateUrl(
$request->attributes->get('_route'),
[
'codePays' => $codePays,
]
),
'method' => 'POST',
]);
if ($request->isMethod('POST')) {
$form->submit($request->request->get($form->getName()));
if ($form->isSubmitted()) {
if ($form->isValid()) {
$idSp = $this->bm->gestionBlog($form->getData());
if($idSp === NULL ){ // PAS DE S.P.
return $this->redirectToRoute('compte_facturation_coordonnees_facturation', ['codePays' => $codePays]);
}
return $this->redirectToRoute('annuaires_experts_espace_admin_blog', ['codePays' => $codePays]);
} else {
$this->addFlash('echec', "Certains champs sont vides ou invalides.");
}
}
}
$metaTag = $this->metaTag
->setTitle("Nouveau blog")
->setDescription("Espace d'administration de l'annuaire des experts");
$response = $this->render(
'annuaires/experts/espace_administration/blog/ajout_blog.html.twig',
[
'controller_name' => 'AnnuairesExpertsEspaceAdministrationController',
'form' => $form->createView(), 'metaTag' => $metaTag, "data" => $form->getData()
]
);
return $response;
}
public function modifBlog(Request $request, $id_message, $codePays): Response {
$this->denyAccessUnlessGranted('ROLE_USER'); // page inaccessible sans authentification
if (!$this->aboService->isAbonnementActif($this->getUser())) {
return $this->redirectToRoute('annuaires_experts_espace_admin_index', ['codePays' => $codePays]);
}
$dataObject = $this->getDoctrine()->getRepository(BuzzActualites::class)->getBuzzActuWithOperationDetails((int) $id_message);
$idSocietePrestataireCurrentUser = $this->em->getRepository(Utilisateur::class)->getIdSocietePrestataireByLogin($this->getUser()->getLogin());
if (!$dataObject["id_societe_prestataire"] || $idSocietePrestataireCurrentUser != $dataObject["id_societe_prestataire"]) {
throw new AccessDeniedException("Ce message ne vous appartient pas!");
}
if (array_key_exists("id_operation", $dataObject) && array_key_exists("type_operation", $dataObject)) {
$dataObject["date"] = (!empty($dataObject["date_operation"])) ? $dataObject["date_operation"] : $dataObject["date"];
if ($dataObject["id_operation"] && in_array($dataObject["type_operation"], array_keys(BuzzOperations::TYPE_OPERATION_COMPLEXE))) {
$societeAcquereur = $this->getDoctrine()->getRepository(BuzzRoles::class)
->getSocieteAcquereurByIdOperation($dataObject["id_operation"], Societes::IMPORTANT_COLUMNS); //colonne: id_pays,raison_sociale,siren..
$societeAcquereur["id_pays"] = ($societeAcquereur["id_pays"]) ? $societeAcquereur["id_pays"] : $dataObject["id_pays_acq"];
$societeAchetee = $this->getDoctrine()->getRepository(BuzzRoles::class)
->getSocieteAcheteeByIdOperation($dataObject["id_operation"], Societes::IMPORTANT_COLUMNS); //colonne: id_pays,raison_sociale,siren..
$dataObject = array_merge(
$dataObject,
array_combine(array_map(fn($item) => $item . "_acq", array_keys($societeAcquereur)), array_values($societeAcquereur)),
array_combine(array_map(fn($item) => $item . "_societe_achetee", array_keys($societeAchetee)), array_values($societeAchetee)),
);
}
}
$form = $this->createForm(BlogType::class, $dataObject, [
"id_actualite" => $dataObject["id_actualite"] ?? NULL,
'action' => $this->generateUrl(
$request->attributes->get('_route'),
[
"id_message" => $id_message,
'codePays' => $codePays,
]
),
'method' => 'POST',
]);
if ($request->isMethod('POST')) {
$form->submit($request->request->get($form->getName()));
if ($form->isSubmitted()) {
if ($form->isValid()) {
$idSp = $this->bm->gestionBlog($form->getData(), $id_message);
if($idSp === NULL ){ // PAS DE S.P.
return $this->redirectToRoute('compte_facturation_coordonnees_facturation', ['codePays' => $codePays]);
}
return $this->redirectToRoute('annuaires_experts_espace_admin_blog', ['codePays' => $codePays]);
} else {
$this->addFlash('echec', "Certains champs sont vides ou invalides.");
}
}
}
$metaTag = $this->metaTag
->setTitle("Nouveau blog")
->setDescription("Espace d'administration de l'annuaire des experts");
$response = $this->render(
'annuaires/experts/espace_administration/blog/modif_blog.html.twig',
[
'controller_name' => 'AnnuairesExpertsEspaceAdministrationController',
'form' => $form->createView(),
'metaTag' => $metaTag,
"data" => $form->getData(),
"dataObject" => $dataObject// etat initial des données dans la base
]
);
$response->setPrivate();
return $response;
}
public function changeStatutBlog(Request $request, $id, $statut, $codePays): Response {
$this->denyAccessUnlessGranted('ROLE_USER'); // page inaccessible sans authentification
if (!$this->aboService->isAbonnementActif($this->getUser())) {
return $this->redirectToRoute('annuaires_experts_espace_admin_index', ['codePays' => $codePays]);
}
$this->bm->modifierStatut($id, $statut);
$filters = $request->query->all();
$listBlogs = $this->bm->getListByLoginUtilisateur($this->getUser()->getLogin(), $filters);
if ($listBlogs === NULL) { // PAS DE S.P.
return $this->redirectToRoute('compte_facturation_coordonnees_facturation', ['codePays' => $codePays]);
}
$response = $this->render(
'annuaires/experts/espace_administration/blog/blog.html.twig',
[
'controller_name' => 'AnnuairesExpertsEspaceAdministrationController',
"listBlogs" => $listBlogs
]
);
$response->setPrivate();
$response->headers->addCacheControlDirective('must-revalidate', true);
return $response;
}
public function ajoutMessageBlog(Request $request, $codePays): Response {
$this->denyAccessUnlessGranted('ROLE_USER'); // page inaccessible sans authentification
$sp = $this->getDoctrine()->getRepository(Utilisateur::class)->getSocietePrestataireByLogin($this->getUser()->getLogin());
if (!$sp) {
throw new AccessDeniedException("AccessDeniedException ,Utilisateur authentifié mais sans societe prestataire!");
}
if (!$this->aboService->isAbonnementActif($this->getUser())) {
return $this->redirectToRoute('annuaires_experts_espace_admin_index', ['codePays' => $codePays]);
}
$parametres_blog_site = $sp->getParametres();
parse_str("" . $parametres_blog_site, $style);
$values["largeur_tableau"] = ($style["width_table_blog"]) ?? "700";
$values["couleur_titre"] = ($style["couleur_titre_blog"]) ?? "#000000";
$values["taille_titre"] = ($style["size_titre_blog"]) ?? "14";
$values["couleur_texte"] = ($style["couleur_texte_blog"]) ?? "#000000";
$values["taille_texte"] = ($style["size_texte_blog"]) ?? "12";
$values["nb_items"] = ($style["nb_items"]) ?? "10";
$values["style"] = ($style["style"]) ?? "";
$form = $this->createForm(MessageBlogType::class, $values, [
'action' => $this->generateUrl(
$request->attributes->get('_route'),
[
'codePays' => $codePays,
]
),
'method' => 'POST',
]);
$this->bm->generationCodeAccesBlog($sp);
if ($request->isMethod('POST')) {
$form->submit($request->request->get($form->getName()));
if ($form->isSubmitted()) {
if ($form->isValid()) {
$this->bm->ajoutMessageBlog($form->getData(), $sp);
$this->addFlash('success', "Les parametres sont enregistrés");
} else {
$this->addFlash('echec', "Certains champs sont vides ou invalides.");
}
}
}
$scripts = sprintf('<script language="javascript" src="%s"></script>', $this->bm->getJavascriptLinkFileBySP($sp));
$scripts .= "\t\n<script>var code = donne_code_affichage_tableau(tableau_blog);document.write(code);</script>";
$metaTag = $this->metaTag
->setTitle("Vos blogs")
->setDescription("Liste de vos blogs dans l'annuaire des experts");
$response = $this->render(
'annuaires/experts/espace_administration/blog/ajout_message_blog.html.twig',
[
'controller_name' => 'AnnuairesExpertsEspaceAdministrationController',
'form' => $form->createView(), "scripts" => $scripts,
"data" => $form->getData(), 'metaTag' => $metaTag,
]
);
$response->setPrivate();
$response->headers->addCacheControlDirective('must-revalidate', true);
return $response;
}
}