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\Actor;
  4. use App\StartPlatz\Bundle\AlphaBundle\Entity\Feed;
  5. use App\StartPlatz\Bundle\AlphaBundle\Entity\Page;
  6. use App\StartPlatz\Bundle\FeedbackBundle\CallbackService;
  7. use App\StartPlatz\Bundle\MemberBundle\Entity\Member;
  8. use App\StartPlatz\Bundle\MemberBundle\Entity\MemberTeam;
  9. use App\StartPlatz\Bundle\MemberBundle\Entity\Team;
  10. use App\StartPlatz\Bundle\MetaBundle\Entity\Attribute;
  11. use App\StartPlatz\Bundle\StartupBundle\Entity\Application;
  12. use App\StartPlatz\Bundle\StartupBundle\Entity\Startup;
  13. use App\StartPlatz\Bundle\UserBundle\Entity\User;
  14. use DateTime;
  15. use Speicher210\CloudinaryBundle\Cloudinary\Api;
  16. use Symfony\Component\Routing\Annotation\Route;
  17. use App\StartPlatz\Bundle\FeedbackBundle\FeedbackService;
  18. use App\StartPlatz\Bundle\WebsiteBundle\MenuTranslationService;
  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 SessionInterface $session,
  26.         private readonly FeedbackService $feedbackService,
  27.         private readonly CallbackService $callbackService,
  28.         private readonly MenuTranslationService $menuTranslationService,
  29.         private readonly Api $cloudinary)
  30.     {
  31.     }
  32.     /**
  33.      * @Route("/x/partners/home", name="x_partner_home")
  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.      */
  38.     public function partnerPagesAction(Request $request)
  39.     {
  40.         $em=$this->getDoctrine()->getManager();
  41.         $redirect json_decode(base64_decode((string) $request->get('redirect'))) ;
  42.         /** @var User $user */
  43.         if ($user $this->getUser()) {
  44.             $em->getRepository(User::class)->writeActivity($user);
  45.             $member $em->getRepository(Member::class)->find($user->getMemberId());
  46.         } else {
  47.             $member $em->getRepository(Member::class)->setEmptyMemberAccount();
  48.         }
  49.         $parentPageSlug "partner";
  50.         if (!$parentPage $em->getRepository(Page::class)->findOneBy(['slug'=>$parentPageSlug])) {
  51.             $parentPage = new Page();
  52.             $parentPage->setTitle('Partner');
  53.             $parentPage->setTeaser('A strong ecosystem only works with strong partners.');
  54.             $parentPage->setDescription('Page Description');
  55.         }
  56.         $ajax     $request->get('ajax');
  57.         $limit 128;
  58.         if (!$page $request->get('page')) {
  59.             $page 1;
  60.         }
  61.         $pageTypes $em->getRepository(Attribute::class)->findBy(['name'=>'page.type','parent'=>'partner']);
  62.         $types     array_map(fn ($result) => $result->getCode(), $pageTypes);
  63.         if ($topic $request->get('topic')) {
  64.             $criteria = ['partners'=>$types,'tags'=>$topic'isActive'=>1'status'=>'publish' ];
  65.         } else {
  66.             $criteria = ['partners'=>$types'isActive'=>1'status'=>'publish' ];
  67.         }
  68.         $partners $em->getRepository(Page::class)->findPaginated($criteria, ['partnerAdminRating'=> 'DESC''lastModified'=>'DESC'], $page$limit);
  69.         $total    $em->getRepository(Page::class)->countByCriteria($criteria);
  70.         $path $request->getPathInfo();
  71.         $lang 'DE';
  72.         if (str_starts_with($path"/en/")) {
  73.             $lang 'EN';
  74.         } elseif (str_starts_with($path"/fr/")) {
  75.             $lang 'FR';
  76.         }
  77.         $pageTypes $em->getRepository(Page::class)->getPartnerPageTypes();
  78.         $route $request->get('_route');
  79.         if ($route == 'x_partner_home') {
  80.             $view '@StartPlatzAlphaBundle/Page/CorporatePartner__index.twig';
  81.             $viewFeed '@StartPlatzAlphaBundle/Page/_feed.partners.sp-connect.html.twig';
  82.             $requiredVisibility 'sp-connect';
  83.         } else {
  84.             $view '@StartPlatzAlphaBundle/Page/index.partners.homepage.html.twig';
  85.             $viewFeed '@StartPlatzAlphaBundle/Page/_feed.partners.homepage.html.twig';
  86.             $requiredVisibility 'public';
  87.         }
  88.         $criteriaToFindAllRelatedTags = ['partners'=>$types'isActive'=>1'status'=>'publish' ];
  89.         $tags $em->getRepository(Page::class)->getTagListByFilter($criteriaToFindAllRelatedTags);
  90.         $allowedTags $em->getRepository(Attribute::class)->findBy(['name'=>'partner.tags']);
  91.         foreach($allowedTags as $key => $tag) {
  92.             if($tag->getLabel() == 'Other') {
  93.                 unset($allowedTags[$key]);
  94.                 array_push($allowedTags$tag);
  95.             }
  96.         }
  97.         //$menuLinksAndPhrases = $this->menuTranslationService->getMenuLinksAndPhrases( $request->server->get('REQUEST_URI')  );
  98.         if ($ajax) {
  99.             return $this->render($viewFeed, [
  100.                 'partners'    => $partners,
  101.                 'pageTypes'   => $pageTypes,
  102.                 'lang'        => $lang,
  103.                 'topic'       => $topic,
  104.                 'requiredVisibility'  => $requiredVisibility,
  105.                 'userMember'  => $member,
  106.                 'maxPages'    => ceil($total/$limit),
  107.                 'thisPage'    => $page,
  108.                 'ajax'        => $ajax,
  109.                 'limit'       => $limit,
  110.                 'redirectUrl'         => base64_encode(json_encode(['path' => 'x_partner_home''parameters' => []])),
  111.                 'templateVars'        => [],
  112.             ]);
  113.         } else {
  114.             return $this->render($view, [
  115.                 'partners'    => $partners,
  116.                 'pageTypes'   => $pageTypes,
  117.                 'lang'        => $lang,
  118.                 'total'       => $total,
  119.                 'parentPage'  => $parentPage,
  120.                 'topic'       => $topic,
  121.                 'tags'        => $tags,
  122.                 'topics'      => $allowedTags,
  123.                 'requiredVisibility'  => $requiredVisibility,
  124.                 'userMember'  => $member,
  125.                 'maxPages'    => ceil($total/$limit),
  126.                 'thisPage'    => $page,
  127.                 'ajax'        => $ajax,
  128.                 'limit'       => $limit,
  129.                 'redirectUrl'         => base64_encode(json_encode(['path' => 'x_partner_home''parameters' => []])),
  130.                 'templateVars'        => [],
  131.                 'menuLinksAndPhrases' => $this->menuTranslationService->getMenuLinksAndPhrases($request->server->get('REQUEST_URI')),
  132.             ]);
  133.         }
  134.     }
  135.     /**
  136.      * @Route("/x/partner/{slug}", name="x_partner_single")
  137.      * @Route("/partner/{slug}", name="homepage_partner_single")
  138.      * @Route("/en/partner/{slug}", name="homepage_partner_single_english")
  139.      * @Route("/fr/partenaires/{slug}", name="homepage_partner_single_french")
  140.      */
  141.     public function singleAction(Request $request$slug)
  142.     {
  143.         $em $this->getDoctrine()->getManager();
  144.         if (!$redirect json_decode(base64_decode((string) $request->get('redirect')))) {
  145.             $redirect json_decode(json_encode(['path' => 'homepage_partner_home''parameters' => []]));
  146.         }
  147.         /** @var User $user */
  148.         if ($user $this->getUser()) {
  149.             $em->getRepository(User::class)->writeActivity($user);
  150.         }
  151.         $id   explode('-', (string) $slug)[0];
  152.         $slug explode('-', (string) $slug)[1];
  153.         /** @var Page $page */
  154.         if (!$page $em->getRepository(Page::class)->findOneBy(['id'=>$id])) {
  155.             $receiver "lorenz.graef@startplatz.de";
  156.             $sender   "support@startplatz.de";
  157.             $mailSubject "Error 4711 with Page Controller";
  158.             $mailText    "Page {$id} {$slug} called by {$request->getPathInfo()} from referer {$request->headers->get('referer')} does not exist";
  159.             $this->callbackService->sendAlertMailPerZapier($receiver$mailText$mailSubject$sender);
  160.             if ($id 3_000_000) {
  161.                 return $this->redirect($this->generateUrl('extern_startups_single', ['id'=>$id'slug'=>$slug]));
  162.             }
  163.             $this->session->getFlashBag()->add('notice''ERROR - item not found');
  164.             return $this->redirect($this->generateUrl($redirect->path, (array)$redirect->parameters));
  165.         }
  166.         $team $em->getRepository(Team::class)->findOneBy(['id'=>$page->getTeamId()]);
  167.         $feedItems = [];
  168.         $entities  = [];
  169.         if ($page->getFeedTags()) {
  170.             $feedItems $em->getRepository(Feed::class)->findByFeedTag($page->getFeedTags());
  171.             $entities $em->getRepository(Feed::class)->getEntitiesByFeedItems($feedItems);
  172.         }
  173.         $lang     "DE";
  174.         if (str_contains((string) $request->get('_route'), 'english')) {
  175.             $lang "EN";
  176.         } elseif (str_contains((string) $request->get('_route'), 'french')) {
  177.             $lang "FR";
  178.         }
  179.         $memberTypes = [];
  180.         $teamIndustries   = [];
  181.         $teamIndustryList "";
  182.         $applications     = [];
  183.         if ($team) {
  184.             if ($team->getType() == 'Partner') {
  185.                 $memberTypes = ['GF''AP'];
  186.             }
  187.             $teamIndustries $team->getIndustries();
  188.             $teamIndustryList explode("#", (string) $teamIndustries);
  189.             // plausibility checks for members of that team
  190.             $em->getRepository(Member::class)->checkIfDescriptionIsEmptyButMentorProfileIsFilled($team);
  191.             $relevantProgramIds = ['1','2','3'];
  192.             $applications $em->getRepository(Application::class)->findBy(['teamId'=>$team->getId(),'programId'=>$relevantProgramIds]);
  193.         }
  194.         $members $em->getRepository(MemberTeam::class)->getTeamMembers($id$memberTypes);
  195.         $allowEdit false;
  196.         $teamMember false;
  197.         if($user) {
  198.             $userEmail $this->getUser()->getEmail();
  199.             foreach ($members as $member) {
  200.                 if ($member['email'] == $userEmail) {
  201.                     $teamMember true;
  202.                     if ($member['type'] == 'AP' || $member['type'] == 'GF') {
  203.                         $allowEdit true;
  204.                     }
  205.                 }
  206.             }
  207.         }
  208.         if (str_contains((string) $request->get('_route'), 'x_partner_single')) {
  209.             $view "@StartPlatzAlphaBundle/Page/single.partner.connect.html.twig";
  210.         } else {
  211.             $view "@StartPlatzAlphaBundle/Page/single.partner.homepage.html.twig";
  212.         }
  213.         return $this->render($view, [
  214.             'members' => $members,
  215.             'memberTypes' => $memberTypes,
  216.             'allowEdit' => $allowEdit,
  217.             'teamMember' => $teamMember,
  218.             'id'          => $id,
  219.             'slug'        => $slug,
  220.             'item'        => $page,
  221.             'partner'     => $page,
  222.             'team'        => $team,
  223.             'feedItems'   => $feedItems,
  224.             'entities'    => $entities,
  225.             'lang'        => $lang,
  226.             'redirectUrl'         => base64_encode(json_encode(['path' => 'x_partner_single''parameters' => ['slug'=>$id '-'$slug] ])),
  227.             'templateVars'        => [],
  228.             'menuLinksAndPhrases' => $this->menuTranslationService->getMenuLinksAndPhrases($request->server->get('REQUEST_URI')),
  229.         ]);
  230.     }
  231.     /**
  232.      */
  233.     public function listServicePages4WordPressAction(Request $request)
  234.     {
  235.         $redirect json_decode(base64_decode((string) $request->get('redirect'))) ;
  236.         $em=$this->getDoctrine()->getManager();
  237.         $criteria = ['partners'=>['service-partner''partner'],'isActive'=>1'status'=>'publish' ];
  238.         $servicePartners $em->getRepository(Page::class)->findAllPages($criteria, []);
  239.         //$servicePartners = $em->getRepository(Page::class)->findBy(['type'=>'service-partner' ,'isActive'=>1, 'status'=>'publish'],['lastModified'=>'DESC']);
  240.         return $this->render('@StartPlatzAlphaBundle/Page/listServicePages4WordPress.html.twig', ['servicePartners'          => $servicePartners'redirectUrl'  => base64_encode(json_encode(['path' => 'allmeda_pages_home''parameters' => []]))]);
  241.     }
  242.     /**
  243.      * @Route("/x/actorfeed/link/{feedId}", name="meta_actorfeed_link")
  244.      */
  245.     public function actorfeedLinkAction(Request $request$feedId)
  246.     {
  247.         $em $this->getDoctrine()->getManager();
  248.         $redirectUrl $request->get('redirect');
  249.         /** @var User $user */
  250.         if ($user $this->getUser()) {
  251.             $em->getRepository(User::class)->writeActivity($user);
  252.         }
  253.         /** @var Actor $actor */
  254.         $actor $em->getRepository(Actor::class)->updateScoreByActorIdAndGetActor($feedId);
  255.         switch ($actor->getType()) {
  256.             case "startup":
  257.                 /** @var Startup $startup */
  258.                 $startup $em->getRepository(Startup::class)->findOneBy(['id'=>$actor->getExternalId()]);
  259.                 $targetUrl $this->generateUrl('x_connect_team_show', ['id'=>$startup->getTeamId(), 'slug'=>$startup->getSlug()]);
  260.                 break;
  261.         }
  262.         $targetUrl $targetUrl "?redirect=$redirectUrl";
  263.         return $this->redirect($targetUrl);
  264.     }
  265.     /**
  266.      * @Route("/x/service-partner/{id}/{slug}", name="x_page_service-partner_id")
  267.      * @Route("/service-partner/{id}/{slug}", name="website_page_service-partner_id")
  268.      */
  269.     public function showPageServicePartnerAction(Request $request$id$slug)
  270.     {
  271.         $em $this->getDoctrine()->getManager();
  272.         $templateVars $em->getRepository(Page::class)->getTemplateVars($request);
  273.         if (!$redirect json_decode(base64_decode((string) $request->get('redirect')))) {
  274.             $redirect json_decode(json_encode(['path' => 'homepage_partner_home''parameters' => []]));
  275.         }
  276.         $now = new DateTime();
  277.         if ($user $this->getUser()) {
  278.             $em->getRepository(User::class)->writeActivity($user);
  279.         }
  280.         if (!$page $em->getRepository(Page::class)->findOneBy(['id' => $id])) {
  281.             $this->session->getFlashBag()->add('notice''ERROR 081: no page found');
  282.             return $this->redirect($this->generateUrl($redirect->path, (array) $redirect->parameters));
  283.         }
  284.         $myTeamIds $em->getRepository(MemberTeam::class)->findMyTeamsByUser($this->getUser());
  285.         $team $em->getRepository(Team::class)->findOneBy(['id'=>$page->getTeamId()]);
  286.         $route $request->get('_route');
  287.         if ($route == 'x_page_service-partner_id') {
  288.             $view '@StartPlatzAlphaBundle/Page/show.servicePartner.sp-connect.html.twig';
  289.         } else {
  290.             $view '@StartPlatzAlphaBundle/Page/show.servicePartner.website.html.twig';
  291.         }
  292.         return $this->render($view, [
  293.             'page' =>$page,
  294.             'servicePartner' => $page,
  295.             //'form'         => $form->createView(),
  296.             //'edit'         => $edit,
  297.             'id'           => $id,
  298.             'myTeamIds'    => $myTeamIds,
  299.             'team'         => $team,
  300.             'redirectUrl'  => base64_encode(json_encode(['path' => $route'parameters' => ['id'=>$id'slug' => $slug]])),
  301.             'templateVars' => $templateVars,
  302.             'menuLinksAndPhrases' => $this->menuTranslationService->getMenuLinksAndPhrases($request->server->get('REQUEST_URI')),
  303.         ]);
  304.     }
  305. }