src/StartPlatz/Bundle/EventBundle/Controller/EventPublicController.php line 82

Open in your IDE?
  1. <?php declare(strict_types=1);
  2. namespace App\StartPlatz\Bundle\EventBundle\Controller;
  3. use App\StartPlatz\Bundle\EventBundle\Entity\Event;
  4. use App\StartPlatz\Bundle\EventBundle\Entity\EventRepository;
  5. use App\StartPlatz\Bundle\EventBundle\Model\EventBaseRepository;
  6. use App\StartPlatz\Bundle\EventBundle\Model\EventCommonRepository;
  7. use App\StartPlatz\Bundle\EventBundle\Service\EventViewHelper;
  8. use App\StartPlatz\Bundle\MetaBundle\Entity\Tag;
  9. use App\StartPlatz\Bundle\StartupBundle\Entity\Application;
  10. use App\StartPlatz\Bundle\StartupBundle\Entity\Batch;
  11. use App\StartPlatz\Bundle\WebsiteBundle\MenuTranslationService;
  12. use Doctrine\ORM\EntityManagerInterface;
  13. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  14. use Symfony\Component\Form\Extension\Core\Type\HiddenType;
  15. use Symfony\Component\Form\Extension\Core\Type\SubmitType;
  16. use Symfony\Component\Form\Extension\Core\Type\TextareaType;
  17. use Symfony\Component\Form\Extension\Core\Type\TextType;
  18. use Symfony\Component\Form\FormFactoryInterface;
  19. use Symfony\Component\HttpFoundation\Request;
  20. use Symfony\Component\HttpFoundation\Response;
  21. use Symfony\Component\Routing\Annotation\Route;
  22. class EventPublicController extends AbstractController
  23. {
  24.     public function __construct(
  25.         private readonly EntityManagerInterface $entityManager,
  26.         private readonly EventCommonRepository $eventCommonRepository,
  27.         private readonly EventBaseRepository $eventBaseRepository,
  28.         private readonly MenuTranslationService $menuTranslationService,
  29.         private readonly FormFactoryInterface $formFactory,
  30.         private readonly EventViewHelper $eventViewHelper,
  31.     ) {
  32.     }
  33.     /**
  34.      */
  35.     public function showEventsAction($time "upcoming"$term=''$title=""$text '')
  36.     {
  37.         // sanitize variable from wordPress
  38.         $time str_replace('&#8220;''', (string) $time);
  39.         $term str_replace('&#8220;''', (string) $term);
  40.         $title str_replace('&#8220;''', (string) $title);
  41.         $text str_replace('&#8220;''', (string) $text);
  42.         $terms explode('#'$term);
  43.         $events $this->entityManager->getRepository(Event::class)->findPublicByTerms($terms, [], ($time == 'upcoming') ? 'future' 'past');
  44.         return $this->render('@StartPlatzEventBundle/Default/show_events.html.twig', [
  45.             'events' => $events,
  46.             'title'  => $title,
  47.             'templateVars' => [],
  48.             'term' => $term,
  49.             'text'=>$text,
  50.         ]);
  51.     }
  52.     /**
  53.      */
  54.     public function showFutureEventsAction($term 'startup'$variant 'default')
  55.     {
  56.         $term ltrim((string) $term'#');
  57.         $events $this->entityManager->getRepository(Event::class)->findPublicEventsByTerm($term);
  58.         $view '@StartPlatzEventBundle/Default/show_future_events.html.twig';
  59.         if ($variant == 'black-rows') {
  60.             $view '@StartPlatzEventBundle/Default/show_future_events.black-rows.html.twig';
  61.         }
  62.         return $this->render($view, [
  63.             'events' => $events,
  64.             'term'   => $term,
  65.             'templateVars' => [],
  66.         ]);
  67.     }
  68.     /**
  69.      */
  70.     public function showNextEventsAction(Request $request$limit 3)
  71.     {
  72.         $events $this->entityManager->getRepository(Event::class)->findNextEvents($limit);
  73.         return $this->render('@StartPlatzEventBundle/Default/show_next_events.html.twig', [
  74.             'events' => $events,
  75.             'templateVars' => [],
  76.             'lang' =>  $this->menuTranslationService->getLang($request->server->get('REDIRECT_URL')),
  77.         ]);
  78.     }
  79.     /**
  80.      */
  81.     public function showListGroupEventsAction(Request $request$limit 15)
  82.     {
  83.         $events $this->entityManager->getRepository(Event::class)->findNextEvents($limit);
  84.         return $this->render('@StartPlatzEvent/Default/show_list_group_events.html.twig', [
  85.             'events' => $events,
  86.             'templateVars' => [],
  87.             'lang' =>  $this->menuTranslationService->getLang($request->server->get('REDIRECT_URL')),
  88.         ]);
  89.     }
  90.     /**
  91.      */
  92.     public function showPastEventsAction($term)
  93.     {
  94.         $events $this->entityManager->getRepository(Event::class)->findPastPublicEventsByTerm($term);
  95.         return $this->render('@StartPlatzEventBundle/Default/show_past_events.html.twig', [
  96.             'events' => $events,
  97.             'term' => $term,
  98.             'templateVars' => [],
  99.         ]);
  100.     }
  101.     #[Route('/events'name'events_list')]
  102.     #[Route('/en/events'name'events_list_english')]
  103.     #[Route('/fr/evenements'name'events_list_french')]
  104.     #[Route('/events/bevorstehend/')]
  105.     #[Route('/events/list')]
  106.     #[Route('/en/events/list')]
  107.     #[Route('/fr/evenements/list')]
  108.     #[Route('/events/embed/list')]
  109.     #[Route('/en/events/embed/list')]
  110.     #[Route('/fr/evenements/embed/list')]
  111.     public function eventsAction(Request $request)
  112.     {
  113.         $templateVars $this->eventCommonRepository->getStartPlatzEventBaseTemplateVars($request);
  114.         $em $this->entityManager;
  115.         // Get the current path
  116.         $path $request->getPathInfo();
  117.         // Check if the path starts with '/en/' or '/fr/'
  118.         if (strpos($path'/en/') === 0) {
  119.             $lang 'EN';
  120.         } elseif (strpos($path'/fr/') === 0) {
  121.             $lang 'FR';
  122.         } else {
  123.             $lang 'DE';
  124.         }
  125.         // Check if the path contains  '/en/'
  126.         $embed false;
  127.         if (str_contains($path'/embed/') ) {
  128.             $embed true;
  129.         }
  130.         // Fetch u tags
  131.         $uTags $em->getRepository(Tag::class)->findBy(['domain' => 'event''isEditableByUser' => 1], ['tag' => 'ASC']);
  132.         // Convert to key-value array
  133.         $uTagsArray array_map(function (Tag $entity) {
  134.             return [
  135.                 'tag' => $entity->getTag(),  // Dies entspricht dem 'slug' in deiner URL-Struktur
  136.                 'label' => $entity->getLabel()
  137.             ];
  138.         }, $uTags);
  139.         // Fetch w tags
  140.         $wTags $em->getRepository(Tag::class)->findBy(['domain' => 'event''isUsedInWordPress' => 1], ['tag' => 'ASC']);
  141.         // Convert to key-value array
  142.         $wTagsArray array_map(function (Tag $entity) {
  143.             return [
  144.                 'tag' => $entity->getTag(),  // Dies entspricht dem 'slug' in deiner URL-Struktur
  145.                 'label' => $entity->getLabel()
  146.             ];
  147.         }, $wTags);
  148.         $additionalEvents = [];
  149.         $queryString '';
  150.         // Check for location filter first (location-based filtering)
  151.         if (isset($templateVars['location']) and $location $templateVars['location']) {
  152.             $futureEvents $this->entityManager->getRepository(Event::class)->findPublicByLocationWithBatches($location$this->eventCommonRepository->setBaseCriteria($templateVars), 'future');
  153.             $pastEvents   $this->entityManager->getRepository(Event::class)->findPublicByLocationWithBatches($location$this->eventCommonRepository->setBaseCriteria($templateVars), 'past');
  154.             $moreFutureEvents $this->eventBaseRepository->countFutureEvents($this->eventCommonRepository->setBaseCriteria($templateVars));
  155.         }
  156.         // Check for tag filter (tag-based filtering)
  157.         elseif (isset($templateVars['tag']) and $tag $templateVars['tag']) {
  158.             $futureEvents $this->entityManager->getRepository(Event::class)->findPublicByTagWithBatches('#' $tag$this->eventCommonRepository->setBaseCriteria($templateVars), 'future');
  159. /*
  160.  * falls einer der zielgruppen tags == uTags gewählt ist
  161.  * dann hole auch die events für alle fTags und startplatz-ai-hub
  162.  */
  163. // Extrahiere alle 'tag' Werte aus dem $uTagsArray
  164.             $uTagsSlugs array_column($uTagsArray'tag');
  165. // Ãœberprüfe, ob der gewählte $tag in den $uTagsSlugs enthalten ist
  166.             $isUTag in_array($tag$uTagsSlugs);
  167.             if ($isUTag) {
  168.                 // Fetch f tags
  169.                 $fTags $em->getRepository(Tag::class)->findBy(['domain' => 'event''isFavorite' => 1], ['tag' => 'ASC']);
  170.                 // Extract just the tags to a simple array
  171.                 $fTagsList array_map(function (Tag $entity) {
  172.                     return $entity->getTag(); // Dies gibt nur den 'tag' zurück
  173.                 }, $fTags);
  174.                 $additionalEvents $this->entityManager->getRepository(Event::class)->findPublicByTagsExcludingTag($fTagsList'#' $tag$this->eventCommonRepository->setBaseCriteria($templateVars), 'future');
  175.             }
  176.             $pastEvents   $this->entityManager->getRepository(Event::class)->findPublicByTagWithBatches('#' $tag$this->eventCommonRepository->setBaseCriteria($templateVars), 'past');
  177.             $moreFutureEvents $this->eventBaseRepository->countFutureEvents($this->eventCommonRepository->setBaseCriteria($templateVars));
  178.         }
  179.         // No filter - show all events
  180.         else {
  181.             $futureEvents $this->entityManager->getRepository(Event::class)->findPublicByWithBatches($queryString$this->eventCommonRepository->setBaseCriteria($templateVars), 'future');
  182.             $moreFutureEvents $this->eventBaseRepository->countFutureEvents($this->eventCommonRepository->setBaseCriteria($templateVars));
  183.             $pastEvents   $this->entityManager->getRepository(Event::class)->findPublicByWithBatches($queryString$this->eventCommonRepository->setBaseCriteria($templateVars), 'past');
  184.         }
  185.         if ($request->get('format') === 'json') {
  186.             $events = [];
  187.             foreach ($futureEvents as $event) {
  188.                 $events[] = $event->toArray();
  189.             }
  190.             return Response::create(
  191.                 json_encode($events),
  192.                 200,
  193.                 [
  194.                     'Content-Type' => 'application/json',
  195.                     'Access-Control-Allow-Origin' => '*',
  196.                 ]
  197.             );
  198.         }
  199.         $targetPath $request->server->get('REDIRECT_URL');
  200.         if ($this->getUser()) {
  201.             if (!$email $this->getUser()->getEmail()) {
  202.                 $email null;
  203.             }
  204.         } else {
  205.             $email null;
  206.         }
  207.         $form $this->setFeedbackForm($targetPath$this->generateUrl('feedback_translation'), $email);
  208.         $eventTypes $em->getRepository(Tag::class)->findBy(['domain'=>'event''isThema'=>1], ['tag'=>'ASC']);
  209.         $eventTypesTags   array_map(fn (Tag $entity) => $entity->getTag(), $eventTypes);
  210.         $eventTypesLabels array_map(fn (Tag $entity) => $entity->getLabel(), $eventTypes);
  211.         $eventTypesTagLabel array_combine($eventTypesTags$eventTypesLabels);
  212.         // Fetch popular tags
  213.         $popularTags $em->getRepository(Tag::class)->findBy(['domain' => 'event''isModul' => 1], ['tag' => 'ASC']);
  214.         // Convert to key-value array
  215.         $popularTagsArray array_map(function (Tag $entity) {
  216.             return [
  217.                 'tag' => $entity->getTag(),  // Dies entspricht dem 'slug' in deiner URL-Struktur
  218.                 'label' => $entity->getLabel()
  219.             ];
  220.         }, $popularTags);
  221.         $view '@StartPlatzEventBundle/Default/events.html.twig';
  222.         if ($embed){
  223.             $view '@StartPlatzEventBundle/Default/events-embed.html.twig';
  224.         }
  225.         return $this->render($view, [
  226.             'templateVars' => $templateVars,
  227.             'lang'           => $lang,
  228.             'embed'          => $embed,
  229.             'nextConference' => $this->entityManager->getRepository(Event::class)->findNextPublicBy("Konferenz"),
  230.             'nextWorkshop'   => $this->entityManager->getRepository(Event::class)->findNextPublicBy("Workshop"),
  231.             'futureEvents'   => $futureEvents,
  232.             'pastEvents'     => $pastEvents,
  233.             'events'         => $this->entityManager->getRepository(Event::class)->findNextEvents(100),
  234.             'moreFutureEvents' => $moreFutureEvents,
  235.             'additionalEvents' => $additionalEvents,
  236.             'eventArten'         => $eventTypes,
  237.             'eventTypesTagLabel' => $eventTypesTagLabel,
  238.             'popularTagsArray'   => $popularTagsArray,
  239.             'uTagsArray'         => $uTagsArray,
  240.             'wTagsArray'         => $wTagsArray,
  241.             'form'           => $form->createView(),
  242.         ]);
  243.     }
  244.     #[Route('/event-series/{seriesTag}'name'event_series')]
  245.     public function eventSeriesAction($seriesTagRequest $request )
  246.     {
  247.         $templateVars $this->eventCommonRepository->getStartPlatzEventBaseTemplateVars($request);
  248.         $em $this->entityManager;
  249.         $eventRepo $em->getRepository(Event::class);
  250.         $batchRepo $em->getRepository(Batch::class);
  251.         // Retrieve the UTM parameters from the URL
  252.         $utmParameters = [
  253.             'utmSource'   => $request->query->get('utm_source'),
  254.             'utmMedium'   => $request->query->get('utm_medium'),
  255.             'utmCampaign' => $request->query->get('utm_campaign'),
  256.             'utmTerm'     => $request->query->get('utm_term'),
  257.             'utmContent'  => $request->query->get('utm_content'),
  258.         ];
  259.         // Fetch data related to the event series using $seriesName
  260.         // For example, using a repository method:
  261.         $nextEvent $eventRepo->findNextEventInSeries($seriesTag, new \DateTime());
  262.         // Check if the result is null (no future events)
  263.         if ($nextEvent === null) {
  264.             // Fetch the most recent past event in the series
  265.             $nextEvent $eventRepo->findMostRecentPastEventInSeries($seriesTag, new \DateTime());
  266.         }
  267.         // Initialize variables with default values
  268.         $noEventsAvailable false// Default to false, indicating events are available
  269.         $alternativeContent ''// Default empty string or a default alternative message
  270.         $nextBatch null;
  271.         $futureEventsData = [];
  272.         $pastEventsData = [];
  273.         // Proceed only if there is an event (either upcoming or past)
  274.         if ($nextEvent !== null) {
  275.             // Fetch all future events in the series, excluding the $nextEvent
  276.             $futureEvents $eventRepo->findAllFutureEventsExcluding($seriesTag$nextEvent->getId());
  277.             // Fetch all past events in the series, excluding the $nextEvent
  278.             $pastEvents $eventRepo->findAllPastEventsExcluding($seriesTag$nextEvent->getId());
  279.             // If the main event is multi-batch, get the next batch
  280.             if ($nextEvent->isMultiBatchEvent()) {
  281.                 $nextBatch $batchRepo->findNextOpenBatchByEvent($nextEvent);
  282.             }
  283.             // Get batch data for future and past events
  284.             $futureBatches $eventRepo->findAllFutureBatchesInSeries($seriesTag$nextEvent->getId());
  285.             $pastBatches $eventRepo->findAllPastBatchesInSeries($seriesTag$nextEvent->getId());
  286.             // Merge events and batches data for display
  287.             $futureEventsData $this->mergeEventsAndBatches($futureEvents$futureBatches);
  288.             $pastEventsData $this->mergeEventsAndBatches($pastEvents$pastBatches);
  289.         } else {
  290.             // No events are available, display alternative content or a message
  291.             $noEventsAvailable true;
  292.             $alternativeContent "Sorry, there are no events available for this series.";
  293.             $nextEvent = new Event();
  294.             $futureEvents = [];
  295.             $pastEvents = [];
  296.             // $alternativeContent can also be fetched from a repository if needed
  297.         }
  298.         return $this->render('@StartPlatzEventBundle/Default/event-series.html.twig', [
  299.             'event'             => $nextEvent,
  300.             'nextEvent'         => $nextEvent,          // The next or most recent event
  301.             'nextBatch'         => $nextBatch,          // The next batch for multi-batch events
  302.             'futureEvents'      => $futureEvents,    // Collection of future events, excluding $nextEvent
  303.             'pastEvents'        => $pastEvents,        // Collection of past events, excluding $nextEvent
  304.             'futureEventsData'  => $futureEventsData,  // Combined events and batches data for future
  305.             'pastEventsData'    => $pastEventsData,    // Combined events and batches data for past
  306.             'noEventsAvailable' => $noEventsAvailable,  // Flag for no events availability
  307.             'alternativeContent' => $alternativeContent// Alternative content when no events are available
  308.             'utmParameters'     => $utmParameters,
  309.             'showTeaser'         => $nextEvent->getTeaser() > '',
  310.             'batch'              => $nextBatch ?: new Batch(),
  311.             'application'        => new Application(),
  312.             'batchIsOpen'        => $nextBatch true false,
  313.             'seriesEvents'       => $futureEvents,
  314.             'promotionUrl'       => "/event-series/{$seriesTag}",
  315.             'templateVars'       => $this->eventCommonRepository->getStartPlatzEventBaseTemplateVars($request),
  316.             'speakers'           => $this->eventViewHelper->getSpeakers($nextEvent),
  317.             'lang' => $lang ?? "DE",  // Default to "DE" if $lang is not set
  318.         ]);
  319.     }
  320.     /**
  321.      * Merge events and batches data for display in series pages
  322.      * Combines single-batch events with multi-batch event batches
  323.      *
  324.      * @param array $events Array of Event entities
  325.      * @param array $batches Array of batch data from raw SQL query
  326.      * @return array Combined and sorted data
  327.      */
  328.     private function mergeEventsAndBatches(array $events, array $batches): array
  329.     {
  330.         $merged = [];
  331.         // Add single-batch events
  332.         foreach ($events as $event) {
  333.             if (!$event->isMultiBatchEvent()) {
  334.                 $merged[] = [
  335.                     'type' => 'event',
  336.                     'event' => $event,
  337.                     'date' => $event->getStartDate(),
  338.                     'endDate' => $event->getEndDate(),
  339.                     'title' => $event->getTitle(),
  340.                     'location' => $event->getLocation(),
  341.                     'slug' => $event->getSlug(),
  342.                     'trainer' => $event->getTrainer()
  343.                 ];
  344.             }
  345.         }
  346.         // Add batches (which are from multi-batch events)
  347.         foreach ($batches as $batch) {
  348.             $merged[] = [
  349.                 'type' => 'batch',
  350.                 'batch_id' => $batch['batch_id'],
  351.                 'event_id' => $batch['event_id'],
  352.                 'date' => new \DateTime($batch['batch_date']),
  353.                 'title' => $batch['event_title'],
  354.                 'batch_name' => $batch['batch_name'],
  355.                 'location' => $batch['location'],
  356.                 'event_slug' => $batch['event_slug'],
  357.                 'batch_slug' => $batch['batch_slug'],
  358.                 'trainer' => $batch['trainer']
  359.             ];
  360.         }
  361.         // Sort by date
  362.         usort($merged, function($a$b) {
  363.             return $a['date'] <=> $b['date'];
  364.         });
  365.         return $merged;
  366.     }
  367.     private function setFeedbackForm $targetPath$actionPath$email NULL ) {
  368.         return $this->formFactory->createNamedBuilder'feedback' )
  369.             ->setAction$actionPath )
  370.             ->add('targetPath'HiddenType::class, array( 'data' => $targetPath, ) )
  371.             ->add('email'TextType::class,  array( 'data' => $email'label' => '-''required' => false))
  372.             ->add('note'TextareaType::class, array( 'label' => '-''required' => true))
  373.             ->add('save'SubmitType::class,array('label'=>'Save'))
  374.             ->getForm();
  375.     }
  376.     #[Route('/events/list/month/{year}/{month}'name'events_list_month')]
  377.     public function listMonthAction($year$monthRequest $request)
  378.     {
  379.         $templateVars $this->eventCommonRepository->getStartPlatzEventBaseTemplateVars($request);
  380.         if (!isset($templateVars['tag'])) {
  381.             $templateVars['tag'] = '';
  382.         }
  383.         $queryString '';
  384.         if (isset($templateVars['tag']) and $tag $templateVars['tag']) {
  385.             $events $this->eventBaseRepository->getEventsByMonth($this->eventCommonRepository->setBaseCriteria($templateVars), $year$month);
  386.         } else {
  387.             $events $this->eventBaseRepository->getEventsByMonth($this->eventCommonRepository->setBaseCriteria($templateVars), $year$month);
  388.         }
  389.         $targetPath $request->server->get('REDIRECT_URL');
  390.         $lang $this->menuTranslationService->getLang($targetPath);
  391.         $menuLinksDe2En $this->menuTranslationService->getMenuLinksSwitcher();
  392.         return $this->render('@StartPlatzEventBundle/Default/list_month.html.twig', [
  393.             'templateVars' => $templateVars,
  394.             'events' => $events,
  395.             'month' => $month,
  396.             'year' => $year,
  397.             'targetPath'      => $targetPath,
  398.             'moreFutureEvents' => $this->eventBaseRepository->countFutureEvents($this->eventCommonRepository->setBaseCriteria($templateVars)),
  399.             'menuLinksDe2En' => $menuLinksDe2En,
  400.             'menuLinksEn2De' => array_flip($menuLinksDe2En) ,
  401.             'menuPhrases'    => $this->menuTranslationService->getMenuPhrases($lang),
  402.             'menuLinks'      => $this->menuTranslationService->getMenuLinks($lang),
  403.             'footerPhrases'  => $this->menuTranslationService->getFooterPhrases($lang),
  404.             'footerLinks'    => $this->menuTranslationService->getFooterLinks($lang),
  405.             'lang'           => $lang,
  406.         ]);
  407.     }
  408.     /** redirecting routes */
  409.     #[Route('/event/corporate-services-event/')]
  410.     public function eventRedirectAction()
  411.     {
  412.         return $this->redirect($this->generateUrl('event_show_single', ['slug' => 'best-practice-digitalisierung']));
  413.     }
  414.     ### section signup starts here ###
  415.     #[Route('/ai-summer-school-single-ticket'name'ai-summer-school-single-ticket')]
  416.     public function aisummerschoolSingleTicketAction(Request $request)
  417.     {
  418.         $lang 'DE';
  419.         if ($targetPath $request->server->get('REDIRECT_URL')) {
  420.             $lang $this->menuTranslationService->getLang($targetPath);
  421.         }
  422.         return $this->render('@StartPlatzEventBundle/Default/ai-summer-school-single-ticket.html.twig', [
  423.             'lang'            => $lang,
  424.         ]);
  425.     }
  426.     #[Route('/ai-summer-school-firmen-pakete'name'ai-summer-school-firmen-pakete')]
  427.     public function aisummerschoolFirmenPaketeAction(Request $request)
  428.     {
  429.         $lang 'DE';
  430.         if ($targetPath $request->server->get('REDIRECT_URL')) {
  431.             $lang $this->menuTranslationService->getLang($targetPath);
  432.         }
  433.         return $this->render('@StartPlatzEventBundle/Default/ai-summer-school-firmen-pakete.html.twig', [
  434.             'lang'            => $lang,
  435.         ]);
  436.     }
  437.     #[Route('/ai-summer-school-stipendien'name'ai-summer-school-stipendien')]
  438.     public function aisummerschoolStipendienAction(Request $request)
  439.     {
  440.         $lang 'DE';
  441.         if ($targetPath $request->server->get('REDIRECT_URL')) {
  442.             $lang $this->menuTranslationService->getLang($targetPath);
  443.         }
  444.         return $this->render('@StartPlatzEventBundle/Default/ai-summer-school-stipendien.html.twig', [
  445.             'lang'            => $lang,
  446.         ]);
  447.     }
  448.     #[Route('/ai-summer-school-volunteers'name'ai-summer-school-volunteers')]
  449.     public function aisummerschoolVolunteersAction(Request $request)
  450.     {
  451.         $lang 'DE';
  452.         if ($targetPath $request->server->get('REDIRECT_URL')) {
  453.             $lang $this->menuTranslationService->getLang($targetPath);
  454.         }
  455.         return $this->render('@StartPlatzEventBundle/Default/ai-summer-school-volunteers.html.twig', [
  456.             'lang'            => $lang,
  457.         ]);
  458.     }
  459.     #[Route('/ai-summer-school-sponsoring'name'ai-summer-school-sponsoring')]
  460.     public function aisummerschoolSponsoringAction(Request $request)
  461.     {
  462.         $lang 'DE';
  463.         if ($targetPath $request->server->get('REDIRECT_URL')) {
  464.             $lang $this->menuTranslationService->getLang($targetPath);
  465.         }
  466.         return $this->render('@StartPlatzEventBundle/Default/ai-summer-school-sponsoring.html.twig', [
  467.             'lang'            => $lang,
  468.         ]);
  469.     }
  470.     #[Route('/archiv/event/{slug}/'name'event_archiv_show')]
  471.     public function showAction(Request $request$slug)
  472.     {
  473.         if ($slug == '22-rheinland-pitch-mai-2015-2015-04-27-1430300112') {
  474.             return $this->redirect($this->generateUrl('event_archiv_show', ['slug' => '23-rheinland-pitch-juni-2015-finale-duesseldorf']));
  475.         }
  476.         if ($slug == 'rheinland-pitch') {
  477.             return $this->redirect($this->generateUrl('event_archiv_show', ['slug' => '01-rheinland-pitch-april-2013']));
  478.         }
  479.         if ($slug == 'rheinland-pitch-mai') {
  480.             return $this->redirect($this->generateUrl('event_archiv_show', ['slug' => '02-rheinland-pitch-mai-2013']));
  481.         }
  482.         if ($slug == 'rheinland-pitch-juni') {
  483.             return $this->redirect($this->generateUrl('event_archiv_show', ['slug' => '03-rheinland-pitch-juni-2013']));
  484.         }
  485.         if ($slug == 'rheinland-pitch-august') {
  486.             return $this->redirect($this->generateUrl('event_archiv_show', ['slug' => '05-rheinland-pitch-august-2013']));
  487.         }
  488.         if ($slug == 'rheinland-pitch-september') {
  489.             return $this->redirect($this->generateUrl('event_archiv_show', ['slug' => '06-rheinland-pitch-september-2013']));
  490.         }
  491.         if ($slug == 'rheinland-pitch-oktober') {
  492.             return $this->redirect($this->generateUrl('event_archiv_show', ['slug' => '07-rheinland-pitch-oktober-2013']));
  493.         }
  494.         if ($slug == 'rheinland-pitch-november') {
  495.             return $this->redirect($this->generateUrl('event_archiv_show', ['slug' => '08-rheinland-pitch-november-2013']));
  496.         }
  497.         if ($slug == 'rheinland-pitch-januar') {
  498.             return $this->redirect($this->generateUrl('event_archiv_show', ['slug' => '09-rheinland-pitch-januar-2014']));
  499.         }
  500.         if ($slug == 'rheinland-pitch-februar') {
  501.             return $this->redirect($this->generateUrl('event_archiv_show', ['slug' => '10-rheinland-pitch-februar-2014']));
  502.         }
  503.         if ($slug == 'rheinland-pitch-marz') {
  504.             return $this->redirect($this->generateUrl('event_archiv_show', ['slug' => '11-rheinland-pitch-maerz-2014']));
  505.         }
  506.         if ($slug == 'rheinland-pitch-april') {
  507.             return $this->redirect($this->generateUrl('event_archiv_show', ['slug' => '12-rheinland-pitch-april-2014']));
  508.         }
  509.         if ($slug == 'rheinland-pitch-mai-3') {
  510.             return $this->redirect($this->generateUrl('event_archiv_show', ['slug' => '13-rheinland-pitch-mai-2014']));
  511.         }
  512.         if ($slug == 'rheinland-pitch-juni-2') {
  513.             return $this->redirect($this->generateUrl('event_archiv_show', ['slug' => '14-rheinland-pitch-juni-2014']));
  514.         }
  515.         if ($slug == '22-rheinland-pitch-mai-2015-2015-04-27') {
  516.             return $this->redirect($this->generateUrl('event_archiv_show', ['slug' => '22-rheinland-pitch-mai-2015']));
  517.         }
  518.         $templateVars $this->eventCommonRepository->getStartPlatzEventBaseTemplateVars($request);
  519.         if (!$event $this->entityManager->getRepository(Event::class)->findOneBy(['slug' => $slug])) {
  520.             $querySlug '/' $slug;
  521.             if (!$event $this->entityManager->getRepository(Event::class)->findOneBy(['slug' => $querySlug])) {
  522.                 $this->addFlash('notice''ERROR Veranstaltung nicht gefunden');
  523.                 return $this->redirect($this->generateUrl('events_list'));
  524.             } else {
  525.                 $em $this->entityManager;
  526.                 $event->setSlug($slug);
  527.                 $em->persist($event);
  528.                 $em->flush();
  529.             }
  530.         }
  531.         if ($event->getStatus() != 'publish') {
  532.             if (!$this->getUser()) {
  533.                 return $this->redirect($this->generateUrl('events_list'$templateVars));
  534.             }
  535.         }
  536.         //previous @StartPlatzEventBundle/Default/show.html.twig
  537.         return $this->render('@StartPlatzEventBundle/Default/event-single.html.twig', [
  538.             'templateVars' => $templateVars,
  539.             'event'        => $event,
  540.             'batch'        => false,
  541.             'speakers'     => [],
  542.         ]);
  543.     }
  544.     /**
  545.      */
  546.     public function eventsThisWeekAction()
  547.     {
  548.         $year date('Y');
  549.         $month date('m');
  550.         $moreFutureEvents $this->eventBaseRepository->getEventsByWeek($this->eventCommonRepository->setBaseCriteria([]), $year$month);
  551.         return $this->render('@StartPlatzEventBundle/Default/events_this_week.html.twig', [
  552.             'moreFutureEvents' => $moreFutureEvents,
  553.         ]);
  554.     }
  555.     private function getRedirects()
  556.     {
  557.         return [
  558.             'Best-Practice-Digitalisierung-Januar-2018' => 'best-practice-digitalisierung',
  559.             'best-practice-digitalisierung-3' => 'best-practice-digitalisierung',
  560.             'adwords-fuer-einsteiger-' => 'adwords-fuer-einsteiger-koeln-2017-01-24',
  561.             'adwords-fur-einsteiger-'  => 'adwords-fuer-einsteiger-koeln-2016-06-06',
  562.             'adwords-fur-einsteiger-DUS' => 'adwords-fuer-einsteiger-dus-2016-06-07',
  563.             '-adwords-fuer-einsteiger' => 'adwords-fur-einsteiger',
  564.             'adwords-fur-einsteiger-2016-02-16' => 'adwords-fuer-einsteiger-koeln-2016-02-16',
  565.             'digital-networking-week-1611257320' => 'digital-networking-week',
  566.             'chatgpt3-how-to-prompt-duesseldorf' => 'chatgpt-how-to-prompt-duesseldorf'
  567.         ];
  568.     }
  569.     #[Route('/sntm'name'legacy_sntm_redirect')]
  570.     #[Route('/sntm/{path}'name'legacy_sntm_redirect_sub'requirements: ['path' => '.+'])]
  571.     public function sntmRedirectAction(): Response
  572.     {
  573.         return $this->redirect($this->generateUrl('events_list'), 301);
  574.     }
  575.     #[Route('/mg2019'name'legacy_mg2019_redirect')]
  576.     #[Route('/mg2019/{path}'name'legacy_mg2019_redirect_sub'requirements: ['path' => '.+'])]
  577.     public function mg2019RedirectAction(): Response
  578.     {
  579.         return $this->redirect($this->generateUrl('events_list'), 301);
  580.     }
  581. }