<?php declare(strict_types=1);
namespace App\StartPlatz\Bundle\AlphaBundle\Controller;
use App\StartPlatz\Bundle\AlphaBundle\Entity\Feed;
use App\StartPlatz\Bundle\AlphaBundle\Entity\Page;
use App\StartPlatz\Bundle\AlphaBundle\Entity\Post;
use App\StartPlatz\Bundle\MemberBundle\Entity\Member;
use App\StartPlatz\Bundle\MetaBundle\Entity\Attribute;
use App\StartPlatz\Bundle\UserBundle\Entity\User;
use Symfony\Component\Routing\Annotation\Route;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\IsGranted;
use App\StartPlatz\Bundle\WebsiteBundle\MenuTranslationService;
use Doctrine\ORM\EntityManagerInterface;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Session\SessionInterface;
class BenefitController extends AbstractController
{
public function __construct(
private readonly EntityManagerInterface $entityManager,
private readonly SessionInterface $session,
private readonly MenuTranslationService $menuTranslationService
) {
}
#[Route('/x/startup-tools/home', name: 'x_startup-tools_home')]
public function startupToolsRedirectAction(Request $request)
{
return $this->redirectToRoute('connect_benefit_tools', $request->query->all(), 301);
}
#[Route('/benefits/perks', name: 'benefits_perks')]
#[Route('/en/benefits/perks', name: 'benefits_perks_english')]
public function startupToolsAction(Request $request)
{
$redirect = json_decode(base64_decode((string)$request->get('redirect')));
/** @var User $user */
if ($user = $this->getUser()) {
$this->entityManager->getRepository(User::class)->writeActivity($user);
$member = $this->entityManager->getRepository(Member::class)->find($user->getMemberId());
}
$pageType = "startup-tool";
$parentSlug = "startup-tools";
$pageRepository = $this->entityManager->getRepository(Page::class);
if (!$parentPage = $pageRepository->findOneBy(['slug' => $parentSlug])) {
$parentPage = new Page();
$parentPage->setTitle('Tools');
$parentPage->setTeaser('Welcome');
$parentPage->setDescription('Our Startup Tools are software solutions that can help to scale up your business. Each of our software solutions has an exclusive community-discount. We will continuously add more benefits to our portfolio. In case your prefered tool is not represented here: please do not hesitate to contact us and help us improve our benefits Contact our team.');
}
$ajax = $request->get('ajax');
$limit = 3;
if (!$page = $request->get('page')) {
$page = 1;
}
$criteria = ['type' => $pageType, 'isActive' => 1, 'status' => 'publish'];
$items = $pageRepository->findPaginated($criteria, [], $page, $limit);
$total = $pageRepository->countByCriteria($criteria);
$path = $request->getPathInfo();
$lang = 'DE';
if (str_starts_with($path, "/en/")) {
$lang = 'EN';
}
$viewFeed = '@StartPlatzAlphaBundle/Benefit/StartupTools__feed.twig';
$view = '@StartPlatzAlphaBundle/Benefit/StartupTools__index__homepage.twig';
if ($ajax) {
return $this->render($viewFeed, [
'items' => $items,
'lang' => $lang,
'maxPages' => ceil($total / $limit),
'thisPage' => $page,
'ajax' => $ajax,
'templateVars' => [],
'redirectUrl' => base64_encode(json_encode(['path' => 'x_startup-products_home', 'parameters' => []])),
]);
}
return $this->render($view, [
'items' => $items,
'parentPage' => $parentPage,
'path' => $path,
'lang' => $lang,
'maxPages' => ceil($total / $limit),
'thisPage' => $page,
'ajax' => $ajax,
'redirectUrl' => base64_encode(json_encode(['path' => 'x_startup-tools_home', 'parameters' => []])),
'templateVars' => [],
'menuLinksAndPhrases' => $this->menuTranslationService->getMenuLinksAndPhrases($request->server->get('REQUEST_URI')),
]);
}
#[Route('/x/software-for-startups/{id}/{slug}', name: 'x_startup-tools_single')]
public function startupToolSingleAction(Request $request, $id, $slug)
{
return $this->redirectToRoute('connect_benefit_tool_detail', ['id' => $id, 'slug' => $slug] + $request->query->all(), 301);
}
#[Route('/x/benefits/home', name: 'x_benefits_home')]
public function benefitsAction(Request $request)
{
return $this->redirectToRoute('connect_benefit_index', $request->query->all(), 301);
}
#[Route('/x/startup-products/home', name: 'x_startup-products_home')]
public function startupProductAction(Request $request)
{
return $this->redirectToRoute('connect_benefit_products', $request->query->all(), 301);
}
#[Route('/x/startup-products/single/{id}', name: 'x_startup-products_single')]
public function startupProductSingleAction(Request $request, $id)
{
return $this->redirectToRoute('connect_benefit_product_detail', ['id' => $id] + $request->query->all(), 301);
}
#[Route('/x/pages/{pageType}/single/{id}/{slug}', name: 'x_page_single')]
public function pageSingleAction(Request $request, $pageType, $id, $slug)
{
return $this->redirectToRoute('connect_benefit_page_detail', ['pageType' => $pageType, 'id' => $id, 'slug' => $slug] + $request->query->all(), 301);
}
#[Route('/x/service-partner/home', name: 'x_service-partner_home')]
public function servicePartnerRedirectAction(Request $request)
{
return $this->redirectToRoute('connect_benefit_service_partners', $request->query->all(), 301);
}
#[Route('/benefits/service-partner', name: 'hp_service-partner')]
#[Route('/en/benefits/service-partner', name: 'hp_service-partner_english')]
public function servicePartnerAction(Request $request)
{
$redirect = json_decode(base64_decode((string)$request->get('redirect')));
/** @var User $user */
if ($user = $this->getUser()) {
$this->entityManager->getRepository(User::class)->writeActivity($user);
$member = $this->entityManager->getRepository(Member::class)->find($user->getMemberId());
} else {
$member = $this->entityManager->getRepository(Member::class)->setEmptyMemberAccount();
}
$pageRepository = $this->entityManager->getRepository(Page::class);
if (!$parentPage = $pageRepository->findOneBy(['slug' => 'service-partner'])) {
$parentPage = new Page();
$parentPage->setTitle('Service Partner');
$parentPage->setTeaser('Welcome');
$parentPage->setDescription('Hier sind unsere Partner aufgelistet, die Dir helfen, Dein Business zu verbessern.');
}
$ajax = $request->get('ajax');
$limit = 18;
if (!$page = $request->get('page')) {
$page = 1;
}
if ($topic = $request->get('topic')) {
$criteria = ['partners' => ['service-partner'], 'tags' => $topic, 'isActive' => 1, 'status' => 'publish'];
} else {
$criteria = ['partners' => ['service-partner'], 'isActive' => 1, 'status' => 'publish'];
}
$partners = $pageRepository->findPaginated($criteria, [], $page, $limit);
$total = $pageRepository->countByCriteria($criteria);
$path = $request->getPathInfo();
$lang = 'DE';
if (str_starts_with($path, "/en/")) {
$lang = 'EN';
}
if (!$pageType = $request->get('pageType')) {
$pageType = 'service-partner';
}
$titles = $pageRepository->getPageTexts($pageType, $lang);
$pageTypes = $pageRepository->getPageTypes();
$view = '@StartPlatzAlphaBundle/Benefit/index.servicePartners.homepage.html.twig';
$viewFeed = '@StartPlatzAlphaBundle/Benefit/_feed.servicePartners.homepage.html.twig';
if ($ajax) {
return $this->render($viewFeed, [
'partners' => $partners,
'pageType' => $pageType,
'pageTypes' => $pageTypes,
'lang' => $lang,
'titles' => $titles,
'topic' => $topic,
'userMember' => $member,
'maxPages' => ceil($total / $limit),
'thisPage' => $page,
'ajax' => $ajax,
'limit' => $limit,
'redirectUrl' => base64_encode(json_encode(['path' => 'x_service-partner_home', 'parameters' => []])),
'templateVars' => [],
]);
}
return $this->render($view, [
'partners' => $partners,
'pageType' => $pageType,
'pageTypes' => $pageTypes,
'lang' => $lang,
'titles' => $titles,
'total' => $total,
'parentPage' => $parentPage,
'topic' => $topic,
'userMember' => $member,
'maxPages' => ceil($total / $limit),
'thisPage' => $page,
'ajax' => $ajax,
'limit' => $limit,
'redirectUrl' => base64_encode(json_encode(['path' => 'x_service-partner_home', 'parameters' => []])),
'templateVars' => [],
'menuLinksAndPhrases' => $this->menuTranslationService->getMenuLinksAndPhrases($request->server->get('REQUEST_URI')),
]);
}
#[Route('/x/service-partner/single/{id}/{slug}', name: 'x_service-partner_single')]
/**
* @IsGranted("ROLE_USER")
*/
public function servicePartnerSingleAction(Request $request, $id, $slug)
{
return $this->redirectToRoute('connect_benefit_service_partner_detail', ['id' => $id, 'slug' => $slug] + $request->query->all(), 301);
}
}