<?php
namespace App\Controller;
use App\Entity\JPO;
use App\Entity\Page;
use App\Entity\Items;
use App\Entity\Ville;
use App\Entity\Actualite;
use App\Entity\VideoOnpc;
use App\Entity\OffreEmploi;
use App\Common\QuoiInterface;
use App\Elasticsearch\Moteur;
use App\Entity\ActualiteOnpc;
use App\Entity\Etablissement;
use App\Entity\ItemsInsertion;
use App\Elasticsearch\Parametres;
use App\Entity\DonneeComplementaire;
use Symfony\Bundle\FrameworkBundle\Console\Application;
use Symfony\Component\Console\Input\ArrayInput;
use Symfony\Component\Console\Output\BufferedOutput;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpKernel\KernelInterface;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Component\Form\Extension\Core\Type\TextType;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
class HomePageController extends AbstractController
{
/**
* @Route("/", name="homepage")
* @Route("/", name="home_page")
*/
public function index(Request $request, Moteur $moteur)
{
$em = $this->getDoctrine()->getManager();
// Les 3 dernières JPOs
$jpos = $em->getRepository(JPO::class)->getLast();
// Les 3 dernières actus
$actus = $em->getRepository(Actualite::class)->getLast();
// Les 3 dernières offres d'emploi
$emplois = $em->getRepository(OffreEmploi::class)->getLast();
// Ets mis en avant
$miseEnAvant = $em->getRepository(Page::class)->findOneBySlug('home-mise-en-avant')->getTexte(); // x; y; z
$miseEnAvant = \explode(";", strip_tags($miseEnAvant)); // Le texte est saisie via un tinyMCE qui ajoute un <p>...</p>
$miseEnAvant = \array_map('trim', $miseEnAvant);
$miseEnAvant = $em->getRepository(Etablissement::class)->findById($miseEnAvant);
// le résultat a été commenté dans le twig avant long temps, donc ce n'est plus nécessaire, en plus ça génère un SQL très lent !!
// $itemsInsertions = $this->getDoctrine()->getRepository(ItemsInsertion::class)->getDiplomePlus();
// Formulaire Quoi/Où
$etabs = null;
$form = $this->createFormBuilder()
->setAction($this->generateUrl('annuaire_liste', ['quoi' => 'foo', 'lieu' => 'bar']))
->setMethod('GET')
->add('quoi', TextType::class, ['required'=>false, 'label' => 'Quoi'])
->add('ou', TextType::class, ['required'=>false, 'label' => 'Où' ])
->getForm();
$parametres = new Parametres();
$parametres->pageActuele = 1;
$parametres->maxParPage = 100;
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$data = $form->getData();
// Créer un objet Quoi
if (!empty($data['quoi'])) {
$quoi = new class ($data['quoi']) implements QuoiInterface {
private $ids = [];
public function __construct($id) { $this->ids[] = $id; }
public function getLibelle(): ?string { return 'Mocked'; }
public function getSlug(): ?string { return 'mocked'; }
public function getIdsType(): array { return $this->ids; }
};
}
// Créer un objet Lieu (où)
if (!empty($data['ou'])) {
$villeRepository = $this->getDoctrine()->getManager()->getRepository(Ville::class);
$lieu = $villeRepository->find($data['ou']);
}
if (!isset($quoi) && isset($lieu))
$parametres->setLieu($lieu);
else if (!isset($lieu) && isset($quoi))
$parametres->setQuoi($quoi);
else if (isset($quoi) && isset($lieu))
$parametres->setQuoiLieu($quoi, $lieu);
if ($parametres) {
$etabs = $moteur->cherche($parametres);
return $this->render('home_page/index.html.twig', [
'jpos' => $jpos,
'actus' => $actus,
'emplois' => $emplois,
'mises_en_avant'=> $miseEnAvant,
'form' => $form->createView(),
'isHomepage' => true,
]);
}
}
// Récupère tous les diplômes des établissements
$itemsInsertions = $this->getDoctrine()->getRepository(ItemsInsertion::class)->getDiplomePlus(3*4);
// Vidéos ONPC
$videosOnpc = $this->getDoctrine()->getRepository(VideoOnpc::class)->findBy([], ['createdAt' => 'DESC'], 3);
// Actualités ONPC
$actualitesOnpc = $this->getDoctrine()->getRepository(ActualiteOnpc::class)->findBy([], ['createdAt' => 'DESC'], 3);
return $this->render('home_page/index.html.twig', [
'jpos' => $jpos,
'actus' => $actus,
'emplois' => $emplois,
'mises_en_avant'=> $miseEnAvant,
'form' => $form->createView(),
'isHomepage' => true,
'itemsInsertions' => $itemsInsertions,
'isForeignCityNear' => false,
'videosOnpc' => $videosOnpc,
'actualitesOnpc' => $actualitesOnpc,
]);
}
/**
* @Route("/appBackofficeImport/{schema}/{id_demande}", name="app_backoffice_import", methods={"GET"}, requirements={"id_demande"="\d+"})
*/
public function appBackofficeImport(int $id_demande, string $schema, Request $request, KernelInterface $kernel): Response
{
$allowedSchemas = [
'aep_ancienneregion',
'aep_banniere',
'aep_categorie',
'aep_categorieorganisme',
'aep_delegue',
'aep_departement',
'aep_etablissement',
'aep_insertion_item',
'aep_items',
'aep_journal',
'aep_pays',
'aep_region',
'aep_responsabletablissement',
'aep_rubrique',
'aep_typesetablissements',
'aep_utilisateur',
'aep_ville',
'aep_zonesinternat'
];
if (!in_array($schema, $allowedSchemas, true)) {
return new Response('Invalid schema', Response::HTTP_BAD_REQUEST);
}
$application = new Application($kernel);
$application->setAutoExit(false);
$input = new ArrayInput([
'command' => 'app:backoffice:import',
'schema' => $schema,
'--id_demande' => (string) $id_demande,
]);
$output = new BufferedOutput();
$exitCode = $application->run($input, $output);
return new Response(
// sprintf("Exit code: %d\n%s", $exitCode, $output->fetch()),
sprintf("Exit code: %d", $exitCode),
Response::HTTP_OK,
['Content-Type' => 'text/plain']
);
}
}