<?php
namespace App\Controller;
use App\Entity\User;
use App\Entity\Company;
use App\Entity\Session;
use App\Entity\UserTag;
use App\Entity\ElCourse;
use App\Service\EsCache;
use App\Entity\Container;
use App\Entity\CompanyTag;
use App\Entity\Conference;
use App\Entity\ElCourseTag;
use App\Entity\SpecialTitle;
use App\Entity\VideoGallery;
use App\Entity\AcademicTitle;
use App\Entity\ConferenceTag;
use App\Entity\CommonCategory;
use App\Entity\CreditCategory;
use App\Entity\VideoGalleryTag;
use Doctrine\ORM\EntityManagerInterface;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Component\Serializer\SerializerInterface;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
class PublicController extends AbstractController
{
/**
* @Route("/public-api/get-all", methods={"GET"}, name="api_pub_public_get_all")
* @param Request $request
* @return JsonResponse
*/
public function getAll(Request $request, EntityManagerInterface $_em, EsCache $esCache, SerializerInterface $serializer): JsonResponse
{
$locale = $request->query->get('locale');
$containerId = null;
if (!$esCache->getIsPublicClient()) {
$containerId = $esCache->getContainer()->getId();
}
$clientId = $esCache->getClient()->getId();
/*
$result = $esCache->setAndGet('PUBLIC_RESULT_'.$clientId);
if (empty($result)) {
$containerIds = $esCache->getClientContainerIds();
$entities = [
'conferences' => ['class' => Conference::class, 'arg' => $containerIds, 'groups' => ['Conference:PRead'], 'rows' => 8],
'videoGalleries' => ['class' => VideoGallery::class, 'arg' => $containerIds, 'groups' => ['VideoGallery:PRead'], 'rows' => 8],
'courses' => ['class' => ElCourse::class, 'arg' => $containerIds, 'groups' => ['ElCourse:PRead'], 'rows' => 8],
'attendees' => ['class' => User::class, 'arg' => $clientId, 'groups' => ['User:PRead'], 'rows' => 12],
'containers' => ['class' => Container::class, 'arg' => $clientId, 'groups' => ['Container:PRead'], 'rows' => 8]
];
$result = [];
foreach ($entities as $key => $entity) {
$data = $_em->getRepository($entity['class'])
->getQbForPublicPage($entity['arg'])
->setMaxResults($entity['rows'])
->getQuery()
->getResult()
;
$result[$key] = $serializer->normalize($data, null, ['groups' => $entity['groups']]);
}
$esCache->delete('PUBLIC_RESULT_'.$clientId);
$result = $esCache->setAndGet('PUBLIC_RESULT_'.$clientId, $result);
}
*/
$containerIds = $esCache->getIsPublicClient() ? $esCache->getClientContainerIds() : [$containerId];
$entities = [
'conferences' => ['class' => Conference::class, 'arg' => ['containerIds' => $containerIds, 'locale' => $locale], 'groups' => ['Conference:PRead'], 'rows' => 8],
'sessions' => ['class' => Session::class, 'arg' => ['containerIds' => $containerIds, 'locale' => $locale], 'groups' => ['Session:PRead'], 'rows' => 8],
'videoGalleries' => ['class' => VideoGallery::class, 'arg' => ['containerIds' => $containerIds, 'locale' => $locale], 'groups' => ['VideoGallery:PRead', 'TZ:Read'], 'rows' => 8],
'courses' => ['class' => ElCourse::class, 'arg' => ['containerIds' => $containerIds, 'locale' => $locale], 'groups' => ['ElCourse:PRead'], 'rows' => 8],
'attendees' => ['class' => User::class, 'arg' => ['clientId' => $clientId, 'locale' => $locale], 'groups' => ['User:PRead'], 'rows' => 12],
'containers' => ['class' => Container::class, 'arg' => ['clientId' => $clientId, 'locale' => $locale], 'groups' => ['Container:PRead'], 'rows' => 8]
];
$result = [];
foreach ($entities as $key => $entity) {
$data = $_em->getRepository($entity['class'])
->getQbForPublicPage($entity['arg'])
->setMaxResults($entity['rows'])
->getQuery()
->getResult()
;
$result[$key] = $serializer->normalize($data, null, ['groups' => $entity['groups']]);
}
return new JsonResponse($result);
}
/**
* @Route("/public-api/iconference", methods={"GET"}, name="api_pub_public_get_i_conference")
* @param Request $request
* @return Response
*/
public function getIConference(Request $request, EntityManagerInterface $_em, EsCache $esCache): Response
{
$locale = $request->query->get('locale');
$containerId = null;
if (!$esCache->getIsPublicClient()) {
$containerId = $esCache->getContainer()->getId();
}
$client = $esCache->getClient();
$containerIds = $esCache->getIsPublicClient() ? $esCache->getClientContainerIds() : [$containerId];
$data = $_em->getRepository(Conference::class)
->getQbForPublicPage(['containerIds' => $containerIds, 'locale' => $locale])
->setMaxResults(6)
->getQuery()
->getResult()
;
foreach ($data as $d) {
$tr = $d->getTranslations();
if (empty($d->getTitle())) {
$d->setTitle($tr->first()->getTitle());
}
if (empty($d->getDescription())) {
$d->setDescription($tr->first()->getDescription());
}
$cc = $d->getConferenceCategory();
if ($cc) {
if (empty($cc->getName())) {
$trcc = $cc->getTranslations();
$cc->setName($trcc->first()->getName());
}
}
}
return $this->render('public_iframe/iConference.html.twig', [
'data' => $data,
'client' => $client,
'tr' => $this->getITrans($locale),
'designConfiguration' => $this->getDesignConfiguration($_em, $client->getId(), $containerId)
]);
}
/**
* @Route("/public-api/icourse", methods={"GET"}, name="api_pub_public_get_i_course")
* @param Request $request
* @return Response
*/
public function getICourse(Request $request, EntityManagerInterface $_em, EsCache $esCache): Response
{
$locale = $request->query->get('locale');
$containerId = null;
if (!$esCache->getIsPublicClient()) {
$containerId = $esCache->getContainer()->getId();
}
$client = $esCache->getClient();
$containerIds = $esCache->getIsPublicClient() ? $esCache->getClientContainerIds() : [$containerId];
$data = $_em->getRepository(ElCourse::class)
->getQbForPublicPage(['containerIds' => $containerIds, 'locale' => $locale])
->setMaxResults(6)
->getQuery()
->getResult()
;
foreach ($data as $d) {
$tr = $d->getTranslations();
if (empty($d->getName())) {
$d->setName($tr->first()->getName());
}
if (empty($d->getDescription())) {
$d->setDescription($tr->first()->getDescription());
}
$cc = $d->getElCourseCategory();
if ($cc) {
if (empty($cc->getName())) {
$trcc = $cc->getTranslations();
$cc->setName($trcc->first()->getName());
}
}
}
return $this->render('public_iframe/iCourse.html.twig', [
'data' => $data,
'client' => $client,
'tr' => $this->getITrans($locale),
'designConfiguration' => $this->getDesignConfiguration($_em, $client->getId(), $containerId)
]);
}
/**
* @Route("/public-api/iattendee", methods={"GET"}, name="api_pub_public_get_i_attendee")
* @param Request $request
* @return Response
*/
public function getIAttendee(Request $request, EntityManagerInterface $_em, EsCache $esCache): Response
{
$locale = $request->query->get('locale');
$client = $esCache->getClient();
$data = $_em->getRepository(User::class)
->getQbForPublicPage(['clientId' => $client->getId(), 'locale' => $locale])
->setMaxResults(8)
->getQuery()
->getResult()
;
return $this->render('public_iframe/iAttendee.html.twig', [
'data' => $data,
'client' => $client,
'tr' => $this->getITrans($locale),
'designConfiguration' => $this->getDesignConfiguration($_em, $client->getId())
]);
}
/**
* @Route("/public-api/icontainer", methods={"GET"}, name="api_pub_public_get_i_container")
* @param Request $request
* @return Response
*/
public function getIContainer(Request $request, EntityManagerInterface $_em, EsCache $esCache): Response
{
$locale = $request->query->get('locale');
$client = $esCache->getClient();
$data = $_em->getRepository(Container::class)
->getQbForPublicPage(['clientId' => $client->getId(), 'locale' => $locale])
->setMaxResults(6)
->getQuery()
->getResult()
;
return $this->render('public_iframe/iContainer.html.twig', [
'data' => $data,
'client' => $client,
'tr' => $this->getITrans($locale),
'designConfiguration' => $this->getDesignConfiguration($_em, $client->getId())
]);
}
private function getITrans($locale = null)
{
$default = [
'liveNow' => 'Live Now',
'more' => 'More',
'btnRegistration' => 'Registration',
'speakerAndModerator' => 'Speaker & Moderator',
'organiser' => 'Organiser',
'new' => 'New',
'duration' => 'Duration',
'exam' => 'Exams',
'task' => 'Tasks',
'speakers' => 'Speakers',
'btnConnect' => 'Connect',
];
$tr = [];
switch ($locale) {
case 'de':
$tr = [
'liveNow' => 'Jetzt Live',
'more' => 'Mehr',
'btnRegistration' => 'Registration',
'speakerAndModerator' => 'Sprecher & Moderator',
'organiser' => 'Organisator',
'new' => 'Neu',
'duration' => 'Dauer',
'exam' => 'Test',
'task' => 'Aufgabe',
'speakers' => 'Speakers',
'btnConnect' => 'Connect',
];
break;
}
return array_merge($default, $tr);
}
private function getDesignConfiguration($_em, $clientId, $containerId = null)
{
$mainContainer = null;
if (!$containerId) {
$mainContainer = $_em->getRepository(Container::class)
->findOneBy(['client' => $clientId, 'isMainContainer' => true]);
} else {
$mainContainer = $_em->getRepository(Container::class)
->find($containerId);
}
if ($mainContainer) {
return $mainContainer->getDesignConfiguration();
}
return null;
}
/**
* @Route(
* path="/public-api/credit-categories/get",
* name="api_pub_credit_categories_get_for_public_page_collection",
* methods={"GET"},
* defaults={
* "_api_resource_class"=CreditCategory::class,
* "_api_collection_operation_name"="get_for_public_page"
* }
* )
*/
public function getPublicCreditCategory($data)
{
return $data;
}
/**
* @Route(
* path="/public-api/conference-tags/get",
* name="api_pub_conference_tags_get_for_public_page_collection",
* methods={"GET"},
* defaults={
* "_api_resource_class"=ConferenceTag::class,
* "_api_collection_operation_name"="get_for_public_page"
* }
* )
*/
public function getPublicConferenceTag($data)
{
return $data;
}
/**
* @Route(
* path="/public-api/common-categories/get",
* name="api_pub_common_categories_tags_get_for_public_page_collection",
* methods={"GET"},
* defaults={
* "_api_resource_class"=CommonCategory::class,
* "_api_collection_operation_name"="get_for_public_page"
* }
* )
*/
public function getPublicCommonCategory($data)
{
return $data;
}
/**
* @Route(
* path="/public-api/special-titles/get",
* name="api_pub_special_titles_get_for_public_page_collection",
* methods={"GET"},
* defaults={
* "_api_resource_class"=SpecialTitle::class,
* "_api_collection_operation_name"="get_for_public_page"
* }
* )
*/
public function getPublicSpecialTitle($data)
{
return $data;
}
/**
* @Route(
* path="/public-api/academic-titles/get",
* name="api_pub_academic_titles_get_for_public_page_collection",
* methods={"GET"},
* defaults={
* "_api_resource_class"=AcademicTitle::class,
* "_api_collection_operation_name"="get_for_public_page"
* }
* )
*/
public function getPublicAcademicTitle($data)
{
return $data;
}
/**
* @Route(
* path="/public-api/user-tags/get",
* name="api_pub_user_tags_get_for_public_page_collection",
* methods={"GET"},
* defaults={
* "_api_resource_class"=UserTag::class,
* "_api_collection_operation_name"="get_for_public_page"
* }
* )
*/
public function getPublicUserTag($data)
{
return $data;
}
/**
* @Route(
* path="/public-api/companies/get",
* name="api_pub_companies_get_for_public_page_collection",
* methods={"GET"},
* defaults={
* "_api_resource_class"=Company::class,
* "_api_collection_operation_name"="get_for_public_page"
* }
* )
*/
public function getPublicCompany($data)
{
return $data;
}
/**
* @Route(
* path="/public-api/company-tags/get",
* name="api_pub_company_tags_get_for_public_page_collection",
* methods={"GET"},
* defaults={
* "_api_resource_class"=CompanyTag::class,
* "_api_collection_operation_name"="get_for_public_page"
* }
* )
*/
public function getPublicCompanyTag($data)
{
return $data;
}
/**
* @Route(
* path="/public-api/el-course-tags/get",
* name="api_pub_el_course_tags_get_for_public_page_collection",
* methods={"GET"},
* defaults={
* "_api_resource_class"=ElCourseTag::class,
* "_api_collection_operation_name"="get_for_public_page"
* }
* )
*/
public function getPublicElCourseTag($data)
{
return $data;
}
/**
* @Route(
* path="/public-api/video-gallery-tags/get",
* name="api_pub_video_gallery_tags_get_for_public_page_collection",
* methods={"GET"},
* defaults={
* "_api_resource_class"=VideoGalleryTag::class,
* "_api_collection_operation_name"="get_for_public_page"
* }
* )
*/
public function getPublicVideoGalleryTag($data)
{
return $data;
}
}