<?php declare(strict_types=1);
namespace App\StartPlatz\Bundle\EventBundle\Controller;
use App\StartPlatz\Bundle\EventBundle\Entity\Event;
use App\StartPlatz\Bundle\EventBundle\Entity\EventRepository;
use App\StartPlatz\Bundle\EventBundle\Model\EventBaseRepository;
use App\StartPlatz\Bundle\EventBundle\Model\EventCommonRepository;
use App\StartPlatz\Bundle\EventBundle\Service\EventViewHelper;
use App\StartPlatz\Bundle\MetaBundle\Entity\Tag;
use App\StartPlatz\Bundle\StartupBundle\Entity\Application;
use App\StartPlatz\Bundle\StartupBundle\Entity\Batch;
use App\StartPlatz\Bundle\WebsiteBundle\MenuTranslationService;
use Doctrine\ORM\EntityManagerInterface;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\Form\Extension\Core\Type\HiddenType;
use Symfony\Component\Form\Extension\Core\Type\SubmitType;
use Symfony\Component\Form\Extension\Core\Type\TextareaType;
use Symfony\Component\Form\Extension\Core\Type\TextType;
use Symfony\Component\Form\FormFactoryInterface;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpFoundation\Session\SessionInterface;
use Symfony\Component\Routing\Annotation\Route;
class EventPublicController extends AbstractController
{
public function __construct(
private readonly EntityManagerInterface $entityManager,
private readonly EventCommonRepository $eventCommonRepository,
private readonly EventBaseRepository $eventBaseRepository,
private readonly MenuTranslationService $menuTranslationService,
private readonly FormFactoryInterface $formFactory,
private readonly SessionInterface $session,
private readonly EventViewHelper $eventViewHelper,
) {
}
/**
*/
public function showEventsAction($time = "upcoming", $term='', $title="", $text = '')
{
// sanitize variable from wordPress
$time = str_replace('“', '', (string) $time);
$term = str_replace('“', '', (string) $term);
$title = str_replace('“', '', (string) $title);
$text = str_replace('“', '', (string) $text);
$terms = explode('#', $term);
$events = $this->entityManager->getRepository(Event::class)->findPublicByTerms($terms, [], ($time == 'upcoming') ? 'future' : 'past');
return $this->render('@StartPlatzEventBundle/Default/show_events.html.twig', [
'events' => $events,
'title' => $title,
'templateVars' => [],
'term' => $term,
'text'=>$text,
]);
}
/**
*/
public function showFutureEventsAction($term = 'startup', $variant = 'default')
{
$term = ltrim((string) $term, '#');
$events = $this->entityManager->getRepository(Event::class)->findPublicEventsByTerm($term);
$view = '@StartPlatzEventBundle/Default/show_future_events.html.twig';
if ($variant == 'black-rows') {
$view = '@StartPlatzEventBundle/Default/show_future_events.black-rows.html.twig';
}
return $this->render($view, [
'events' => $events,
'term' => $term,
'templateVars' => [],
]);
}
/**
*/
public function showNextEventsAction(Request $request, $limit = 3)
{
$events = $this->entityManager->getRepository(Event::class)->findNextEvents($limit);
return $this->render('@StartPlatzEventBundle/Default/show_next_events.html.twig', [
'events' => $events,
'templateVars' => [],
'lang' => $this->menuTranslationService->getLang($request->server->get('REDIRECT_URL')),
]);
}
/**
*/
public function showListGroupEventsAction(Request $request, $limit = 15)
{
$events = $this->entityManager->getRepository(Event::class)->findNextEvents($limit);
return $this->render('@StartPlatzEvent/Default/show_list_group_events.html.twig', [
'events' => $events,
'templateVars' => [],
'lang' => $this->menuTranslationService->getLang($request->server->get('REDIRECT_URL')),
]);
}
/**
*/
public function showPastEventsAction($term)
{
$events = $this->entityManager->getRepository(Event::class)->findPastPublicEventsByTerm($term);
return $this->render('@StartPlatzEventBundle/Default/show_past_events.html.twig', [
'events' => $events,
'term' => $term,
'templateVars' => [],
]);
}
#[Route('/events', name: 'events_list')]
#[Route('/en/events', name: 'events_list_english')]
#[Route('/fr/evenements', name: 'events_list_french')]
#[Route('/events/bevorstehend/')]
#[Route('/events/list')]
#[Route('/en/events/list')]
#[Route('/fr/evenements/list')]
#[Route('/events/embed/list')]
#[Route('/en/events/embed/list')]
#[Route('/fr/evenements/embed/list')]
public function eventsAction(Request $request)
{
$templateVars = $this->eventCommonRepository->getStartPlatzEventBaseTemplateVars($request);
$em = $this->entityManager;
// Get the current path
$path = $request->getPathInfo();
// Check if the path starts with '/en/' or '/fr/'
if (strpos($path, '/en/') === 0) {
$lang = 'EN';
} elseif (strpos($path, '/fr/') === 0) {
$lang = 'FR';
} else {
$lang = 'DE';
}
// Check if the path contains '/en/'
$embed = false;
if (str_contains($path, '/embed/') ) {
$embed = true;
}
// Fetch u tags
$uTags = $em->getRepository(Tag::class)->findBy(['domain' => 'event', 'isEditableByUser' => 1], ['tag' => 'ASC']);
// Convert to key-value array
$uTagsArray = array_map(function (Tag $entity) {
return [
'tag' => $entity->getTag(), // Dies entspricht dem 'slug' in deiner URL-Struktur
'label' => $entity->getLabel()
];
}, $uTags);
// Fetch w tags
$wTags = $em->getRepository(Tag::class)->findBy(['domain' => 'event', 'isUsedInWordPress' => 1], ['tag' => 'ASC']);
// Convert to key-value array
$wTagsArray = array_map(function (Tag $entity) {
return [
'tag' => $entity->getTag(), // Dies entspricht dem 'slug' in deiner URL-Struktur
'label' => $entity->getLabel()
];
}, $wTags);
$additionalEvents = [];
$queryString = '';
// Check for location filter first (location-based filtering)
if (isset($templateVars['location']) and $location = $templateVars['location']) {
$futureEvents = $this->entityManager->getRepository(Event::class)->findPublicByLocationWithBatches($location, $this->eventCommonRepository->setBaseCriteria($templateVars), 'future');
$pastEvents = $this->entityManager->getRepository(Event::class)->findPublicByLocationWithBatches($location, $this->eventCommonRepository->setBaseCriteria($templateVars), 'past');
$moreFutureEvents = $this->eventBaseRepository->countFutureEvents($this->eventCommonRepository->setBaseCriteria($templateVars));
}
// Check for tag filter (tag-based filtering)
elseif (isset($templateVars['tag']) and $tag = $templateVars['tag']) {
$futureEvents = $this->entityManager->getRepository(Event::class)->findPublicByTagWithBatches('#' . $tag, $this->eventCommonRepository->setBaseCriteria($templateVars), 'future');
/*
* falls einer der zielgruppen tags == uTags gewählt ist
* dann hole auch die events für alle fTags und startplatz-ai-hub
*/
// Extrahiere alle 'tag' Werte aus dem $uTagsArray
$uTagsSlugs = array_column($uTagsArray, 'tag');
// Überprüfe, ob der gewählte $tag in den $uTagsSlugs enthalten ist
$isUTag = in_array($tag, $uTagsSlugs);
if ($isUTag) {
// Fetch f tags
$fTags = $em->getRepository(Tag::class)->findBy(['domain' => 'event', 'isFavorite' => 1], ['tag' => 'ASC']);
// Extract just the tags to a simple array
$fTagsList = array_map(function (Tag $entity) {
return $entity->getTag(); // Dies gibt nur den 'tag' zurück
}, $fTags);
$additionalEvents = $this->entityManager->getRepository(Event::class)->findPublicByTagsExcludingTag($fTagsList, '#' . $tag, $this->eventCommonRepository->setBaseCriteria($templateVars), 'future');
}
$pastEvents = $this->entityManager->getRepository(Event::class)->findPublicByTagWithBatches('#' . $tag, $this->eventCommonRepository->setBaseCriteria($templateVars), 'past');
$moreFutureEvents = $this->eventBaseRepository->countFutureEvents($this->eventCommonRepository->setBaseCriteria($templateVars));
}
// No filter - show all events
else {
$futureEvents = $this->entityManager->getRepository(Event::class)->findPublicByWithBatches($queryString, $this->eventCommonRepository->setBaseCriteria($templateVars), 'future');
$moreFutureEvents = $this->eventBaseRepository->countFutureEvents($this->eventCommonRepository->setBaseCriteria($templateVars));
$pastEvents = $this->entityManager->getRepository(Event::class)->findPublicByWithBatches($queryString, $this->eventCommonRepository->setBaseCriteria($templateVars), 'past');
}
if ($request->get('format') === 'json') {
$events = [];
foreach ($futureEvents as $event) {
$events[] = $event->toArray();
}
return Response::create(
json_encode($events),
200,
[
'Content-Type' => 'application/json',
'Access-Control-Allow-Origin' => '*',
]
);
}
$targetPath = $request->server->get('REDIRECT_URL');
if ($this->getUser()) {
if (!$email = $this->getUser()->getEmail()) {
$email = null;
}
} else {
$email = null;
}
$form = $this->setFeedbackForm($targetPath, $this->generateUrl('feedback_translation'), $email);
$eventTypes = $em->getRepository(Tag::class)->findBy(['domain'=>'event', 'isThema'=>1], ['tag'=>'ASC']);
$eventTypesTags = array_map(fn (Tag $entity) => $entity->getTag(), $eventTypes);
$eventTypesLabels = array_map(fn (Tag $entity) => $entity->getLabel(), $eventTypes);
$eventTypesTagLabel = array_combine($eventTypesTags, $eventTypesLabels);
// Fetch popular tags
$popularTags = $em->getRepository(Tag::class)->findBy(['domain' => 'event', 'isModul' => 1], ['tag' => 'ASC']);
// Convert to key-value array
$popularTagsArray = array_map(function (Tag $entity) {
return [
'tag' => $entity->getTag(), // Dies entspricht dem 'slug' in deiner URL-Struktur
'label' => $entity->getLabel()
];
}, $popularTags);
$view = '@StartPlatzEventBundle/Default/events.html.twig';
if ($embed){
$view = '@StartPlatzEventBundle/Default/events-embed.html.twig';
}
return $this->render($view, [
'templateVars' => $templateVars,
'lang' => $lang,
'embed' => $embed,
'nextConference' => $this->entityManager->getRepository(Event::class)->findNextPublicBy("Konferenz"),
'nextWorkshop' => $this->entityManager->getRepository(Event::class)->findNextPublicBy("Workshop"),
'futureEvents' => $futureEvents,
'pastEvents' => $pastEvents,
'events' => $this->entityManager->getRepository(Event::class)->findNextEvents(100),
'moreFutureEvents' => $moreFutureEvents,
'additionalEvents' => $additionalEvents,
'eventArten' => $eventTypes,
'eventTypesTagLabel' => $eventTypesTagLabel,
'popularTagsArray' => $popularTagsArray,
'uTagsArray' => $uTagsArray,
'wTagsArray' => $wTagsArray,
'form' => $form->createView(),
'menuLinksAndPhrases' => $this->menuTranslationService->getMenuLinksAndPhrases($request->server->get('REQUEST_URI')),
]);
}
#[Route('/event-series/{seriesTag}', name: 'event_series')]
public function eventSeriesAction($seriesTag, Request $request )
{
$templateVars = $this->eventCommonRepository->getStartPlatzEventBaseTemplateVars($request);
$em = $this->entityManager;
$eventRepo = $em->getRepository(Event::class);
$batchRepo = $em->getRepository(Batch::class);
// Retrieve the UTM parameters from the URL
$utmParameters = [
'utmSource' => $request->query->get('utm_source'),
'utmMedium' => $request->query->get('utm_medium'),
'utmCampaign' => $request->query->get('utm_campaign'),
'utmTerm' => $request->query->get('utm_term'),
'utmContent' => $request->query->get('utm_content'),
];
// Fetch data related to the event series using $seriesName
// For example, using a repository method:
$nextEvent = $eventRepo->findNextEventInSeries($seriesTag, new \DateTime());
// Check if the result is null (no future events)
if ($nextEvent === null) {
// Fetch the most recent past event in the series
$nextEvent = $eventRepo->findMostRecentPastEventInSeries($seriesTag, new \DateTime());
}
// Initialize variables with default values
$noEventsAvailable = false; // Default to false, indicating events are available
$alternativeContent = ''; // Default empty string or a default alternative message
$nextBatch = null;
$futureEventsData = [];
$pastEventsData = [];
// Proceed only if there is an event (either upcoming or past)
if ($nextEvent !== null) {
// Fetch all future events in the series, excluding the $nextEvent
$futureEvents = $eventRepo->findAllFutureEventsExcluding($seriesTag, $nextEvent->getId());
// Fetch all past events in the series, excluding the $nextEvent
$pastEvents = $eventRepo->findAllPastEventsExcluding($seriesTag, $nextEvent->getId());
// If the main event is multi-batch, get the next batch
if ($nextEvent->isMultiBatchEvent()) {
$nextBatch = $batchRepo->findNextOpenBatchByEvent($nextEvent);
}
// Get batch data for future and past events
$futureBatches = $eventRepo->findAllFutureBatchesInSeries($seriesTag, $nextEvent->getId());
$pastBatches = $eventRepo->findAllPastBatchesInSeries($seriesTag, $nextEvent->getId());
// Merge events and batches data for display
$futureEventsData = $this->mergeEventsAndBatches($futureEvents, $futureBatches);
$pastEventsData = $this->mergeEventsAndBatches($pastEvents, $pastBatches);
} else {
// No events are available, display alternative content or a message
$noEventsAvailable = true;
$alternativeContent = "Sorry, there are no events available for this series.";
$nextEvent = new Event();
$futureEvents = [];
$pastEvents = [];
// $alternativeContent can also be fetched from a repository if needed
}
return $this->render('@StartPlatzEventBundle/Default/event-series.html.twig', [
'event' => $nextEvent,
'nextEvent' => $nextEvent, // The next or most recent event
'nextBatch' => $nextBatch, // The next batch for multi-batch events
'futureEvents' => $futureEvents, // Collection of future events, excluding $nextEvent
'pastEvents' => $pastEvents, // Collection of past events, excluding $nextEvent
'futureEventsData' => $futureEventsData, // Combined events and batches data for future
'pastEventsData' => $pastEventsData, // Combined events and batches data for past
'noEventsAvailable' => $noEventsAvailable, // Flag for no events availability
'alternativeContent' => $alternativeContent, // Alternative content when no events are available
'utmParameters' => $utmParameters,
'showTeaser' => $nextEvent->getTeaser() > '',
'batch' => $nextBatch ?: new Batch(),
'application' => new Application(),
'batchIsOpen' => $nextBatch ? true : false,
'seriesEvents' => $futureEvents,
'promotionUrl' => "/event-series/{$seriesTag}",
'templateVars' => $this->eventCommonRepository->getStartPlatzEventBaseTemplateVars($request),
'speakers' => $this->eventViewHelper->getSpeakers($nextEvent),
'lang' => $lang ?? "DE", // Default to "DE" if $lang is not set
'menuLinksAndPhrases' => $this->menuTranslationService->getMenuLinksAndPhrases( $request->server->get('REQUEST_URI') ),
]);
}
/**
* Merge events and batches data for display in series pages
* Combines single-batch events with multi-batch event batches
*
* @param array $events Array of Event entities
* @param array $batches Array of batch data from raw SQL query
* @return array Combined and sorted data
*/
private function mergeEventsAndBatches(array $events, array $batches): array
{
$merged = [];
// Add single-batch events
foreach ($events as $event) {
if (!$event->isMultiBatchEvent()) {
$merged[] = [
'type' => 'event',
'event' => $event,
'date' => $event->getStartDate(),
'endDate' => $event->getEndDate(),
'title' => $event->getTitle(),
'location' => $event->getLocation(),
'slug' => $event->getSlug(),
'trainer' => $event->getTrainer()
];
}
}
// Add batches (which are from multi-batch events)
foreach ($batches as $batch) {
$merged[] = [
'type' => 'batch',
'batch_id' => $batch['batch_id'],
'event_id' => $batch['event_id'],
'date' => new \DateTime($batch['batch_date']),
'title' => $batch['event_title'],
'batch_name' => $batch['batch_name'],
'location' => $batch['location'],
'event_slug' => $batch['event_slug'],
'batch_slug' => $batch['batch_slug'],
'trainer' => $batch['trainer']
];
}
// Sort by date
usort($merged, function($a, $b) {
return $a['date'] <=> $b['date'];
});
return $merged;
}
private function setFeedbackForm ( $targetPath, $actionPath, $email = NULL ) {
return $this->formFactory->createNamedBuilder( 'feedback' )
->setAction( $actionPath )
->add('targetPath', HiddenType::class, array( 'data' => $targetPath, ) )
->add('email', TextType::class, array( 'data' => $email, 'label' => '-', 'required' => false))
->add('note', TextareaType::class, array( 'label' => '-', 'required' => true))
->add('save', SubmitType::class,array('label'=>'Save'))
->getForm();
}
#[Route('/events/list/month/{year}/{month}', name: 'events_list_month')]
public function listMonthAction($year, $month, Request $request)
{
$templateVars = $this->eventCommonRepository->getStartPlatzEventBaseTemplateVars($request);
if (!isset($templateVars['tag'])) {
$templateVars['tag'] = '';
}
$queryString = '';
if (isset($templateVars['tag']) and $tag = $templateVars['tag']) {
$events = $this->eventBaseRepository->getEventsByMonth($this->eventCommonRepository->setBaseCriteria($templateVars), $year, $month);
} else {
$events = $this->eventBaseRepository->getEventsByMonth($this->eventCommonRepository->setBaseCriteria($templateVars), $year, $month);
}
$targetPath = $request->server->get('REDIRECT_URL');
$lang = $this->menuTranslationService->getLang($targetPath);
$menuLinksDe2En = $this->menuTranslationService->getMenuLinksSwitcher();
return $this->render('@StartPlatzEventBundle/Default/list_month.html.twig', [
'templateVars' => $templateVars,
'events' => $events,
'month' => $month,
'year' => $year,
'targetPath' => $targetPath,
'moreFutureEvents' => $this->eventBaseRepository->countFutureEvents($this->eventCommonRepository->setBaseCriteria($templateVars)),
'menuLinksDe2En' => $menuLinksDe2En,
'menuLinksEn2De' => array_flip($menuLinksDe2En) ,
'menuPhrases' => $this->menuTranslationService->getMenuPhrases($lang),
'menuLinks' => $this->menuTranslationService->getMenuLinks($lang),
'footerPhrases' => $this->menuTranslationService->getFooterPhrases($lang),
'footerLinks' => $this->menuTranslationService->getFooterLinks($lang),
'lang' => $lang,
]);
}
/** redirecting routes */
#[Route('/event/corporate-services-event/')]
public function eventRedirectAction()
{
return $this->redirect($this->generateUrl('event_show_single', ['slug' => 'best-practice-digitalisierung']));
}
### section signup starts here ###
#[Route('/ai-summer-school-single-ticket', name: 'ai-summer-school-single-ticket')]
public function aisummerschoolSingleTicketAction(Request $request)
{
$lang = 'DE';
if ($targetPath = $request->server->get('REDIRECT_URL')) {
$lang = $this->menuTranslationService->getLang($targetPath);
}
return $this->render('@StartPlatzEventBundle/Default/ai-summer-school-single-ticket.html.twig', [
'menuLinksAndPhrases' => $this->menuTranslationService->getMenuLinksAndPhrases($request->server->get('REQUEST_URI')),
'lang' => $lang,
]);
}
#[Route('/ai-summer-school-firmen-pakete', name: 'ai-summer-school-firmen-pakete')]
public function aisummerschoolFirmenPaketeAction(Request $request)
{
$lang = 'DE';
if ($targetPath = $request->server->get('REDIRECT_URL')) {
$lang = $this->menuTranslationService->getLang($targetPath);
}
return $this->render('@StartPlatzEventBundle/Default/ai-summer-school-firmen-pakete.html.twig', [
'menuLinksAndPhrases' => $this->menuTranslationService->getMenuLinksAndPhrases($request->server->get('REQUEST_URI')),
'lang' => $lang,
]);
}
#[Route('/ai-summer-school-stipendien', name: 'ai-summer-school-stipendien')]
public function aisummerschoolStipendienAction(Request $request)
{
$lang = 'DE';
if ($targetPath = $request->server->get('REDIRECT_URL')) {
$lang = $this->menuTranslationService->getLang($targetPath);
}
return $this->render('@StartPlatzEventBundle/Default/ai-summer-school-stipendien.html.twig', [
'menuLinksAndPhrases' => $this->menuTranslationService->getMenuLinksAndPhrases($request->server->get('REQUEST_URI')),
'lang' => $lang,
]);
}
#[Route('/ai-summer-school-volunteers', name: 'ai-summer-school-volunteers')]
public function aisummerschoolVolunteersAction(Request $request)
{
$lang = 'DE';
if ($targetPath = $request->server->get('REDIRECT_URL')) {
$lang = $this->menuTranslationService->getLang($targetPath);
}
return $this->render('@StartPlatzEventBundle/Default/ai-summer-school-volunteers.html.twig', [
'menuLinksAndPhrases' => $this->menuTranslationService->getMenuLinksAndPhrases($request->server->get('REQUEST_URI')),
'lang' => $lang,
]);
}
#[Route('/ai-summer-school-sponsoring', name: 'ai-summer-school-sponsoring')]
public function aisummerschoolSponsoringAction(Request $request)
{
$lang = 'DE';
if ($targetPath = $request->server->get('REDIRECT_URL')) {
$lang = $this->menuTranslationService->getLang($targetPath);
}
return $this->render('@StartPlatzEventBundle/Default/ai-summer-school-sponsoring.html.twig', [
'menuLinksAndPhrases' => $this->menuTranslationService->getMenuLinksAndPhrases($request->server->get('REQUEST_URI')),
'lang' => $lang,
]);
}
#[Route('/archiv/event/{slug}/', name: 'event_archiv_show')]
public function showAction(Request $request, $slug)
{
if ($slug == '22-rheinland-pitch-mai-2015-2015-04-27-1430300112') {
return $this->redirect($this->generateUrl('event_archiv_show', ['slug' => '23-rheinland-pitch-juni-2015-finale-duesseldorf']));
}
if ($slug == 'rheinland-pitch') {
return $this->redirect($this->generateUrl('event_archiv_show', ['slug' => '01-rheinland-pitch-april-2013']));
}
if ($slug == 'rheinland-pitch-mai') {
return $this->redirect($this->generateUrl('event_archiv_show', ['slug' => '02-rheinland-pitch-mai-2013']));
}
if ($slug == 'rheinland-pitch-juni') {
return $this->redirect($this->generateUrl('event_archiv_show', ['slug' => '03-rheinland-pitch-juni-2013']));
}
if ($slug == 'rheinland-pitch-august') {
return $this->redirect($this->generateUrl('event_archiv_show', ['slug' => '05-rheinland-pitch-august-2013']));
}
if ($slug == 'rheinland-pitch-september') {
return $this->redirect($this->generateUrl('event_archiv_show', ['slug' => '06-rheinland-pitch-september-2013']));
}
if ($slug == 'rheinland-pitch-oktober') {
return $this->redirect($this->generateUrl('event_archiv_show', ['slug' => '07-rheinland-pitch-oktober-2013']));
}
if ($slug == 'rheinland-pitch-november') {
return $this->redirect($this->generateUrl('event_archiv_show', ['slug' => '08-rheinland-pitch-november-2013']));
}
if ($slug == 'rheinland-pitch-januar') {
return $this->redirect($this->generateUrl('event_archiv_show', ['slug' => '09-rheinland-pitch-januar-2014']));
}
if ($slug == 'rheinland-pitch-februar') {
return $this->redirect($this->generateUrl('event_archiv_show', ['slug' => '10-rheinland-pitch-februar-2014']));
}
if ($slug == 'rheinland-pitch-marz') {
return $this->redirect($this->generateUrl('event_archiv_show', ['slug' => '11-rheinland-pitch-maerz-2014']));
}
if ($slug == 'rheinland-pitch-april') {
return $this->redirect($this->generateUrl('event_archiv_show', ['slug' => '12-rheinland-pitch-april-2014']));
}
if ($slug == 'rheinland-pitch-mai-3') {
return $this->redirect($this->generateUrl('event_archiv_show', ['slug' => '13-rheinland-pitch-mai-2014']));
}
if ($slug == 'rheinland-pitch-juni-2') {
return $this->redirect($this->generateUrl('event_archiv_show', ['slug' => '14-rheinland-pitch-juni-2014']));
}
if ($slug == '22-rheinland-pitch-mai-2015-2015-04-27') {
return $this->redirect($this->generateUrl('event_archiv_show', ['slug' => '22-rheinland-pitch-mai-2015']));
}
$templateVars = $this->eventCommonRepository->getStartPlatzEventBaseTemplateVars($request);
if (!$event = $this->entityManager->getRepository(Event::class)->findOneBy(['slug' => $slug])) {
$querySlug = '/' . $slug;
if (!$event = $this->entityManager->getRepository(Event::class)->findOneBy(['slug' => $querySlug])) {
$this->session->getFlashBag()->add('notice', 'ERROR Veranstaltung nicht gefunden');
return $this->redirect($this->generateUrl('events_list'));
} else {
$em = $this->entityManager;
$event->setSlug($slug);
$em->persist($event);
$em->flush();
}
}
if ($event->getStatus() != 'publish') {
if (!$this->getUser()) {
return $this->redirect($this->generateUrl('events_list', $templateVars));
}
}
//previous @StartPlatzEventBundle/Default/show.html.twig
return $this->render('@StartPlatzEventBundle/Default/event-single.html.twig', [
'templateVars' => $templateVars,
'event' => $event,
'batch' => false,
'speakers' => [],
'menuLinksAndPhrases' => $this->menuTranslationService->getMenuLinksAndPhrases($request->server->get('REQUEST_URI')),
]);
}
/**
*/
public function eventsThisWeekAction()
{
$year = date('Y');
$month = date('m');
$moreFutureEvents = $this->eventBaseRepository->getEventsByWeek($this->eventCommonRepository->setBaseCriteria([]), $year, $month);
return $this->render('@StartPlatzEventBundle/Default/events_this_week.html.twig', [
'moreFutureEvents' => $moreFutureEvents,
]);
}
private function getRedirects()
{
return [
'Best-Practice-Digitalisierung-Januar-2018' => 'best-practice-digitalisierung',
'best-practice-digitalisierung-3' => 'best-practice-digitalisierung',
'adwords-fuer-einsteiger-' => 'adwords-fuer-einsteiger-koeln-2017-01-24',
'adwords-fur-einsteiger-' => 'adwords-fuer-einsteiger-koeln-2016-06-06',
'adwords-fur-einsteiger-DUS' => 'adwords-fuer-einsteiger-dus-2016-06-07',
'-adwords-fuer-einsteiger' => 'adwords-fur-einsteiger',
'adwords-fur-einsteiger-2016-02-16' => 'adwords-fuer-einsteiger-koeln-2016-02-16',
'digital-networking-week-1611257320' => 'digital-networking-week',
'chatgpt3-how-to-prompt-duesseldorf' => 'chatgpt-how-to-prompt-duesseldorf'
];
}
#[Route('/sntm', name: 'legacy_sntm_redirect')]
#[Route('/sntm/{path}', name: 'legacy_sntm_redirect_sub', requirements: ['path' => '.+'])]
public function sntmRedirectAction(): Response
{
return $this->redirect($this->generateUrl('events_list'), 301);
}
#[Route('/mg2019', name: 'legacy_mg2019_redirect')]
#[Route('/mg2019/{path}', name: 'legacy_mg2019_redirect_sub', requirements: ['path' => '.+'])]
public function mg2019RedirectAction(): Response
{
return $this->redirect($this->generateUrl('events_list'), 301);
}
}