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

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