src/StartPlatz/Bundle/AlphaBundle/Controller/PageController.php line 46

Open in your IDE?
  1. <?php declare(strict_types=1);
  2. namespace App\StartPlatz\Bundle\AlphaBundle\Controller;
  3. use App\StartPlatz\Bundle\AlphaBundle\Entity\Feed;
  4. use App\StartPlatz\Bundle\AlphaBundle\Entity\Page;
  5. use App\StartPlatz\Bundle\FeedbackBundle\CallbackService;
  6. use App\StartPlatz\Bundle\MemberBundle\Entity\Member;
  7. use App\StartPlatz\Bundle\MemberBundle\Entity\MemberTeam;
  8. use App\StartPlatz\Bundle\MemberBundle\Entity\Team;
  9. use App\StartPlatz\Bundle\MetaBundle\Entity\Attribute;
  10. use App\StartPlatz\Bundle\StartupBundle\Entity\Application;
  11. use App\StartPlatz\Bundle\StartupBundle\Entity\Startup;
  12. use App\StartPlatz\Bundle\UserBundle\Entity\User;
  13. use DateTime;
  14. use Speicher210\CloudinaryBundle\Cloudinary\Api;
  15. use Symfony\Component\Routing\Annotation\Route;
  16. use App\StartPlatz\Bundle\FeedbackBundle\FeedbackService;
  17. use App\StartPlatz\Bundle\WebsiteBundle\MenuTranslationService;
  18. use Doctrine\ORM\EntityManagerInterface;
  19. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  20. use Symfony\Component\HttpFoundation\Request;
  21. use Symfony\Component\HttpFoundation\Session\SessionInterface;
  22. class PageController extends AbstractController
  23. {
  24.     public function __construct(
  25.         private readonly EntityManagerInterface $entityManager,
  26.         private readonly SessionInterface $session,
  27.         private readonly FeedbackService $feedbackService,
  28.         private readonly CallbackService $callbackService,
  29.         private readonly MenuTranslationService $menuTranslationService,
  30.         private readonly Api $cloudinary)
  31.     {
  32.     }
  33.     #[Route('/x/partners/home'name'x_partner_home')]
  34.     public function partnerPagesAction(Request $request)
  35.     {
  36.         return $this->redirectToRoute('connect_partner_index'$request->query->all(), 301);
  37.     }
  38.     #[Route('/partner'name'homepage_partner_home')]
  39.     #[Route('/en/partner'name'homepage_partner_home_english')]
  40.     #[Route('/fr/partenaires'name'homepage_partner_home_french')]
  41.     public function partnerPagesHomepageAction(Request $request)
  42.     {
  43.                 $redirect json_decode(base64_decode((string) $request->get('redirect'))) ;
  44.         /** @var User $user */
  45.         if ($user $this->getUser()) {
  46.             $this->entityManager->getRepository(User::class)->writeActivity($user);
  47.             $member $this->entityManager->getRepository(Member::class)->find($user->getMemberId());
  48.         } else {
  49.             $member $this->entityManager->getRepository(Member::class)->setEmptyMemberAccount();
  50.         }
  51.         $parentPageSlug "partner";
  52.         if (!$parentPage $this->entityManager->getRepository(Page::class)->findOneBy(['slug'=>$parentPageSlug])) {
  53.             $parentPage = new Page();
  54.             $parentPage->setTitle('Partner');
  55.             $parentPage->setTeaser('A strong ecosystem only works with strong partners.');
  56.             $parentPage->setDescription('Page Description');
  57.         }
  58.         $ajax     $request->get('ajax');
  59.         $limit 128;
  60.         if (!$page $request->get('page')) {
  61.             $page 1;
  62.         }
  63.         $pageTypes $this->entityManager->getRepository(Attribute::class)->findBy(['name'=>'page.type','parent'=>'partner']);
  64.         $types     array_map(fn ($result) => $result->getCode(), $pageTypes);
  65.         if ($topic $request->get('topic')) {
  66.             $criteria = ['partners'=>$types,'tags'=>$topic'isActive'=>1'status'=>'publish' ];
  67.         } else {
  68.             $criteria = ['partners'=>$types'isActive'=>1'status'=>'publish' ];
  69.         }
  70.         $partners $this->entityManager->getRepository(Page::class)->findPaginated($criteria, ['partnerAdminRating'=> 'DESC''lastModified'=>'DESC'], $page$limit);
  71.         $total    $this->entityManager->getRepository(Page::class)->countByCriteria($criteria);
  72.         $path $request->getPathInfo();
  73.         $lang 'DE';
  74.         if (str_starts_with($path"/en/")) {
  75.             $lang 'EN';
  76.         } elseif (str_starts_with($path"/fr/")) {
  77.             $lang 'FR';
  78.         }
  79.         $pageTypes $this->entityManager->getRepository(Page::class)->getPartnerPageTypes();
  80.         $view '@StartPlatzAlphaBundle/Page/index.partners.homepage.html.twig';
  81.         $viewFeed '@StartPlatzAlphaBundle/Page/_feed.partners.homepage.html.twig';
  82.         $requiredVisibility 'public';
  83.         $criteriaToFindAllRelatedTags = ['partners'=>$types'isActive'=>1'status'=>'publish' ];
  84.         $tags $this->entityManager->getRepository(Page::class)->getTagListByFilter($criteriaToFindAllRelatedTags);
  85.         $allowedTags $this->entityManager->getRepository(Attribute::class)->findBy(['name'=>'partner.tags']);
  86.         foreach($allowedTags as $key => $tag) {
  87.             if($tag->getLabel() == 'Other') {
  88.                 unset($allowedTags[$key]);
  89.                 array_push($allowedTags$tag);
  90.             }
  91.         }
  92.         if ($ajax) {
  93.             return $this->render($viewFeed, [
  94.                 'partners'    => $partners,
  95.                 'pageTypes'   => $pageTypes,
  96.                 'lang'        => $lang,
  97.                 'topic'       => $topic,
  98.                 'requiredVisibility'  => $requiredVisibility,
  99.                 'userMember'  => $member,
  100.                 'maxPages'    => ceil($total/$limit),
  101.                 'thisPage'    => $page,
  102.                 'ajax'        => $ajax,
  103.                 'limit'       => $limit,
  104.                 'redirectUrl'         => base64_encode(json_encode(['path' => 'x_partner_home''parameters' => []])),
  105.                 'templateVars'        => [],
  106.             ]);
  107.         } else {
  108.             return $this->render($view, [
  109.                 'partners'    => $partners,
  110.                 'pageTypes'   => $pageTypes,
  111.                 'lang'        => $lang,
  112.                 'total'       => $total,
  113.                 'parentPage'  => $parentPage,
  114.                 'topic'       => $topic,
  115.                 'tags'        => $tags,
  116.                 'topics'      => $allowedTags,
  117.                 'requiredVisibility'  => $requiredVisibility,
  118.                 'userMember'  => $member,
  119.                 'maxPages'    => ceil($total/$limit),
  120.                 'thisPage'    => $page,
  121.                 'ajax'        => $ajax,
  122.                 'limit'       => $limit,
  123.                 'redirectUrl'         => base64_encode(json_encode(['path' => 'x_partner_home''parameters' => []])),
  124.                 'templateVars'        => [],
  125.                 'menuLinksAndPhrases' => $this->menuTranslationService->getMenuLinksAndPhrases($request->server->get('REQUEST_URI')),
  126.             ]);
  127.         }
  128.     }
  129.     #[Route('/x/partner/{slug}'name'x_partner_single')]
  130.     public function singleAction(Request $request$slug)
  131.     {
  132.         return $this->redirectToRoute('connect_partner_detail', ['slug' => $slug] + $request->query->all(), 301);
  133.     }
  134.     #[Route('/partner/{slug}'name'homepage_partner_single')]
  135.     #[Route('/en/partner/{slug}'name'homepage_partner_single_english')]
  136.     #[Route('/fr/partenaires/{slug}'name'homepage_partner_single_french')]
  137.     public function singleHomepageAction(Request $request$slug)
  138.     {
  139.                 if (!$redirect json_decode(base64_decode((string) $request->get('redirect')))) {
  140.             $redirect json_decode(json_encode(['path' => 'homepage_partner_home''parameters' => []]));
  141.         }
  142.         /** @var User $user */
  143.         if ($user $this->getUser()) {
  144.             $this->entityManager->getRepository(User::class)->writeActivity($user);
  145.         }
  146.         $parts explode('-', (string) $slug2);
  147.         $id    $parts[0];
  148.         $slug  $parts[1] ?? null;
  149.         if (!is_numeric($id) || !$slug) {
  150.             throw $this->createNotFoundException();
  151.         }
  152.         /** @var Page $page */
  153.         if (!$page $this->entityManager->getRepository(Page::class)->findOneBy(['id' => $id])) {
  154.             if ($id 3_000_000) {
  155.                 return $this->redirect($this->generateUrl('extern_startups_single', ['id' => $id'slug' => $slug]));
  156.             }
  157.             throw $this->createNotFoundException();
  158.         }
  159.         $team $this->entityManager->getRepository(Team::class)->findOneBy(['id'=>$page->getTeamId()]);
  160.         $feedItems = [];
  161.         $entities  = [];
  162.         if ($page->getFeedTags()) {
  163.             $feedItems $this->entityManager->getRepository(Feed::class)->findByFeedTag($page->getFeedTags());
  164.             $entities $this->entityManager->getRepository(Feed::class)->getEntitiesByFeedItems($feedItems);
  165.         }
  166.         $lang     "DE";
  167.         if (str_contains((string) $request->get('_route'), 'english')) {
  168.             $lang "EN";
  169.         } elseif (str_contains((string) $request->get('_route'), 'french')) {
  170.             $lang "FR";
  171.         }
  172.         $memberTypes = [];
  173.         $applications     = [];
  174.         if ($team) {
  175.             if ($team->getType() == 'Partner') {
  176.                 $memberTypes = ['GF''AP'];
  177.             }
  178.             $this->entityManager->getRepository(Member::class)->checkIfDescriptionIsEmptyButMentorProfileIsFilled($team);
  179.             $relevantProgramIds = ['1','2','3'];
  180.             $applications $this->entityManager->getRepository(Application::class)->findBy(['teamId'=>$team->getId(),'programId'=>$relevantProgramIds]);
  181.         }
  182.         $members $this->entityManager->getRepository(MemberTeam::class)->getTeamMembers($id$memberTypes);
  183.         $allowEdit false;
  184.         $teamMember false;
  185.         if($user) {
  186.             $userEmail $this->getUser()->getEmail();
  187.             foreach ($members as $member) {
  188.                 if ($member['email'] == $userEmail) {
  189.                     $teamMember true;
  190.                     if ($member['type'] == 'AP' || $member['type'] == 'GF') {
  191.                         $allowEdit true;
  192.                     }
  193.                 }
  194.             }
  195.         }
  196.         $view "@StartPlatzAlphaBundle/Page/single.partner.homepage.html.twig";
  197.         return $this->render($view, [
  198.             'members' => $members,
  199.             'memberTypes' => $memberTypes,
  200.             'allowEdit' => $allowEdit,
  201.             'teamMember' => $teamMember,
  202.             'id'          => $id,
  203.             'slug'        => $slug,
  204.             'item'        => $page,
  205.             'partner'     => $page,
  206.             'team'        => $team,
  207.             'feedItems'   => $feedItems,
  208.             'entities'    => $entities,
  209.             'lang'        => $lang,
  210.             'redirectUrl'         => base64_encode(json_encode(['path' => 'x_partner_single''parameters' => ['slug'=>$id '-'$slug] ])),
  211.             'templateVars'        => [],
  212.             'menuLinksAndPhrases' => $this->menuTranslationService->getMenuLinksAndPhrases($request->server->get('REQUEST_URI')),
  213.         ]);
  214.     }
  215.         public function listServicePages4WordPressAction(Request $request)
  216.     {
  217.         $redirect json_decode(base64_decode((string) $request->get('redirect'))) ;
  218.                 $criteria = ['partners'=>['service-partner''partner'],'isActive'=>1'status'=>'publish' ];
  219.         $servicePartners $this->entityManager->getRepository(Page::class)->findAllPages($criteria, []);
  220.         //$servicePartners = $this->entityManager->getRepository(Page::class)->findBy(['type'=>'service-partner' ,'isActive'=>1, 'status'=>'publish'],['lastModified'=>'DESC']);
  221.         return $this->render('@StartPlatzAlphaBundle/Page/listServicePages4WordPress.html.twig', ['servicePartners'          => $servicePartners'redirectUrl'  => base64_encode(json_encode(['path' => 'allmeda_pages_home''parameters' => []]))]);
  222.     }
  223.     #[Route('/x/service-partner/{id}/{slug}'name'x_page_service-partner_id')]
  224.     public function showPageServicePartnerRedirectAction(Request $request$id$slug)
  225.     {
  226.         return $this->redirectToRoute('connect_partner_service', ['id' => $id'slug' => $slug] + $request->query->all(), 301);
  227.     }
  228.     #[Route('/service-partner/{id}/{slug}'name'website_page_service-partner_id')]
  229.     public function showPageServicePartnerAction(Request $request$id$slug)
  230.     {
  231.                 $templateVars $this->entityManager->getRepository(Page::class)->getTemplateVars($request);
  232.         if (!$redirect json_decode(base64_decode((string) $request->get('redirect')))) {
  233.             $redirect json_decode(json_encode(['path' => 'homepage_partner_home''parameters' => []]));
  234.         }
  235.         $now = new DateTime();
  236.         if ($user $this->getUser()) {
  237.             $this->entityManager->getRepository(User::class)->writeActivity($user);
  238.         }
  239.         if (!$page $this->entityManager->getRepository(Page::class)->findOneBy(['id' => $id])) {
  240.             $this->session->getFlashBag()->add('notice''ERROR 081: no page found');
  241.             return $this->redirect($this->generateUrl($redirect->path, (array) $redirect->parameters));
  242.         }
  243.         $myTeamIds $this->entityManager->getRepository(MemberTeam::class)->findMyTeamsByUser($this->getUser());
  244.         $team $this->entityManager->getRepository(Team::class)->findOneBy(['id'=>$page->getTeamId()]);
  245.         $view '@StartPlatzAlphaBundle/Page/show.servicePartner.website.html.twig';
  246.         return $this->render($view, [
  247.             'page' =>$page,
  248.             'servicePartner' => $page,
  249.             'id'           => $id,
  250.             'myTeamIds'    => $myTeamIds,
  251.             'team'         => $team,
  252.             'redirectUrl'  => base64_encode(json_encode(['path' => 'website_page_service-partner_id''parameters' => ['id'=>$id'slug' => $slug]])),
  253.             'templateVars' => $templateVars,
  254.             'menuLinksAndPhrases' => $this->menuTranslationService->getMenuLinksAndPhrases($request->server->get('REQUEST_URI')),
  255.         ]);
  256.     }
  257. }