src/Controller/PublicPortalPagesController.php line 384

Open in your IDE?
  1. <?php
  2. namespace App\Controller;
  3. use Pimcore\Log\ApplicationLogger;
  4. use App\Model\GenericWebsiteClassModel;
  5. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  6. use Symfony\Component\HttpFoundation\Request;
  7. use Symfony\Component\HttpFoundation\Response;
  8. use Symfony\Component\Routing\Annotation\Route;
  9. use Symfony\Contracts\Translation\TranslatorInterface;
  10. use Pimcore\Model\DataObject;
  11. use App\Service\PublicUserPermissionService;
  12. use Symfony\Component\HttpFoundation\JsonResponse;
  13. /**
  14.  * Website controller is responsible for handling various actions related to website.
  15.  *
  16.  * @Route("/api/ncm/public-portal", name="api-ncm-public-portal-")
  17.  */
  18. class PublicPortalPagesController extends AbstractController
  19. {
  20.     private $genericWebsiteClassModel;
  21.     public function __construct(protected TranslatorInterface $translator, private ApplicationLogger $logger, private PublicUserPermissionService $publicUserPermissionService)
  22.     {
  23.         $this->genericWebsiteClassModel = new GenericWebsiteClassModel();
  24.         $this->publicUserPermissionService $publicUserPermissionService;
  25.     }
  26.     /**
  27.      * @Route("/home-page", name="home-page", methods={"POST"})
  28.      */
  29.     public function homePage(Request $request)
  30.     {
  31.         try {
  32.             $response $this->publicUserPermissionService->isAuthorized($request$this->translator);
  33.             if ($response['success'] !== true) {
  34.                 return $this->json($response);
  35.             }
  36.             $response = [];
  37.             $homePage = new DataObject\HomePage\Listing();
  38.             $classDefinition $homePage->current()->getClass()->getFieldDefinitions();
  39.             $homePageObj $homePage->current();
  40.             foreach ($classDefinition as $value) {
  41.                 $response array_merge($response$this->genericWebsiteClassModel->getSwitchCaseCondition($homePageObj$value));
  42.             }
  43.             return $this->json(['success' => true'data' => $response]);
  44.         } catch (\Exception $ex) {
  45.             $this->logger->error($ex->getMessage());
  46.             return $this->json(['success' => false'message' => $ex->getMessage()]);
  47.         }
  48.     }
  49.     /**
  50.      * @Route("/services-page", name="services-page", methods={"POST"})
  51.      */
  52.     public function servicesPage(Request $request)
  53.     {
  54.         try {
  55.             $response $this->publicUserPermissionService->isAuthorized($request$this->translator);
  56.             if ($response['success'] !== true) {
  57.                 return $this->json($response);
  58.             }
  59.             $response = [];
  60.             $servicePage = new DataObject\ServicesPage\Listing();
  61.             $servicePage->current();
  62.             $classDefinition $servicePage->current()->getClass()->getFieldDefinitions();
  63.             $servicesPageObj $servicePage->current();
  64.             foreach ($classDefinition as $value) {
  65.                 $response array_merge($response$this->genericWebsiteClassModel->getSwitchCaseCondition($servicesPageObj$value));
  66.             }
  67.             return $this->json(['success' => true'data' => $response]);
  68.         } catch (\Exception $ex) {
  69.             $this->logger->error($ex->getMessage());
  70.             return $this->json(['success' => false'message' => $ex->getMessage()]);
  71.         }
  72.     }
  73.     /**
  74.      * @Route("/services-detail", name="services-detail", methods={"POST"})
  75.      */
  76.     public function servicesDetail(Request $request)
  77.     {
  78.         try {
  79.             $response $this->publicUserPermissionService->isAuthorized($request$this->translator);
  80.             if ($response['success'] !== true) {
  81.                 return $this->json($response);
  82.             }
  83.             $response = [];
  84.             $param json_decode($request->getContent(), true);
  85.             $viewService \Pimcore\Model\DataObject\ServicesListing::getById($param['id'], true);
  86.             if (!empty($viewService)) {
  87.                 $classDefinition $viewService->getClass()->getFieldDefinitions();
  88.                 foreach ($classDefinition as $value) {
  89.                     $response array_merge($response$this->genericWebsiteClassModel->getSwitchCaseCondition($viewService$value));
  90.                 }
  91.             } else {
  92.                 throw new \Exception('Service not found.');
  93.             }
  94.             // return $this->json(['success' => true, 'data' => $response]);
  95.             return $this->json(['success' => true'data' => $response]);
  96.         } catch (\Exception $ex) {
  97.             $this->logger->error($ex->getMessage());
  98.             return $this->json(['success' => false'message' => $ex->getMessage()]);
  99.         }
  100.     }
  101.     /**
  102.      * @Route("/about-us-page", name="about-us-page", methods={"POST"})
  103.      */
  104.     public function aboutUsPage(Request $request)
  105.     {
  106.         try {
  107.             $response $this->publicUserPermissionService->isAuthorized($request$this->translator);
  108.             if ($response['success'] !== true) {
  109.                 return $this->json($response);
  110.             }
  111.             $response = [];
  112.             $aboutPage = new DataObject\AboutUsPage\Listing();
  113.             $aboutPage->current();
  114.             $classDefinition $aboutPage->current()->getClass()->getFieldDefinitions();
  115.             $aboutPageObj $aboutPage->current();
  116.             foreach ($classDefinition as $value) {
  117.                 $response array_merge($response$this->genericWebsiteClassModel->getSwitchCaseCondition($aboutPageObj$value));
  118.             }
  119.             return $this->json(['success' => true'data' => $response]);
  120.         } catch (\Exception $ex) {
  121.             $this->logger->error($ex->getMessage());
  122.             return $this->json(['success' => false'message' => $ex->getMessage()]);
  123.         }
  124.     }
  125.     /**
  126.      * @Route("/contact-us-page", name="contact-us-page", methods={"POST"})
  127.      */
  128.     public function contactUsPage(Request $request)
  129.     {
  130.         try {
  131.             $response $this->publicUserPermissionService->isAuthorized($request$this->translator);
  132.             if ($response['success'] !== true) {
  133.                 return $this->json($response);
  134.             }
  135.             $response = [];
  136.             $contactUsPage = new DataObject\ContactUsPage\Listing();
  137.             $contactUsPage->current();
  138.             $classDefinition $contactUsPage->current()->getClass()->getFieldDefinitions();
  139.             $contactPageObj $contactUsPage->current();
  140.             foreach ($classDefinition as $value) {
  141.                 $response array_merge($response$this->genericWebsiteClassModel->getSwitchCaseCondition($contactPageObj$value));
  142.             }
  143.             return $this->json(['success' => true'data' => $response]);
  144.         } catch (\Throwable $th) {
  145.             //throw $th;
  146.         }
  147.     }
  148.     /**
  149.      * @Route("/news-page", name="news-page", methods={"POST"})
  150.      */
  151.     public function newsPage(Request $request)
  152.     {
  153.         try {
  154.             $response $this->publicUserPermissionService->isAuthorized($request$this->translator);
  155.             if ($response['success'] !== true) {
  156.                 return $this->json($response);
  157.             }
  158.             $response = [];
  159.             $newsPage = new DataObject\NewsPage\Listing();
  160.             $newsPage->current();
  161.             $classDefinition $newsPage->current()->getClass()->getFieldDefinitions();
  162.             $newsPageObj $newsPage->current();
  163.             foreach ($classDefinition as $value) {
  164.                 $response array_merge($response$this->genericWebsiteClassModel->getSwitchCaseCondition($newsPageObj$value));
  165.             }
  166.             return $this->json(['success' => true'data' => $response]);
  167.         } catch (\Exception $ex) {
  168.             $this->logger->error($ex->getMessage());
  169.             return $this->json(['success' => false'message' => $ex->getMessage()]);
  170.         }
  171.     }
  172.     /**
  173.      * @Route("/today-weather-page", name="today-weather-page", methods={"POST"})
  174.      */
  175.     public function todayWeatherPage(Request $request)
  176.     {
  177.         try {
  178.             $response $this->publicUserPermissionService->isAuthorized($request$this->translator);
  179.             if ($response['success'] !== true) {
  180.                 return $this->json($response);
  181.             }
  182.             $response = [];
  183.             $tWeatherPage = new DataObject\TodaysWeather\Listing();
  184.             $tWeatherPage->current();
  185.             $classDefinition $tWeatherPage->current()->getClass()->getFieldDefinitions();
  186.             $tWeatherPageObj $tWeatherPage->current();
  187.             foreach ($classDefinition as $value) {
  188.                 $response array_merge($response$this->genericWebsiteClassModel->getSwitchCaseCondition($tWeatherPageObj$value));
  189.             }
  190.             return $this->json(['success' => true'data' => $response]);
  191.         } catch (\Exception $ex) {
  192.             $this->logger->error($ex->getMessage());
  193.             return $this->json(['success' => false'message' => $ex->getMessage()]);
  194.         }
  195.     }
  196.     /**
  197.      * @Route("/local-weather-page", name="local-weather-page", methods={"POST"})
  198.      */
  199.     public function localWeatherPage(Request $request)
  200.     {
  201.         try {
  202.             $response $this->publicUserPermissionService->isAuthorized($request$this->translator);
  203.             if ($response['success'] !== true) {
  204.                 return $this->json($response);
  205.             }
  206.             $response = [];
  207.             $localWeatherPage = new DataObject\LocalWeatherPage\Listing();
  208.             $localWeatherPage->current();
  209.             $classDefinition $localWeatherPage->current()->getClass()->getFieldDefinitions();
  210.             $localWeatherPageObj $localWeatherPage->current();
  211.             foreach ($classDefinition as $value) {
  212.                 $response array_merge($response$this->genericWebsiteClassModel->getSwitchCaseCondition($localWeatherPageObj$value));
  213.             }
  214.             return $this->json(['success' => true'data' => $response]);
  215.         } catch (\Exception $ex) {
  216.             $this->logger->error($ex->getMessage());
  217.             return $this->json(['success' => false'message' => $ex->getMessage()]);
  218.         }
  219.     }
  220.     /**
  221.      * @Route("/holy-sites-page", name="holy-sites-page", methods={"POST"})
  222.      */
  223.     public function holySitesPage(Request $request)
  224.     {
  225.         try {
  226.             $response $this->publicUserPermissionService->isAuthorized($request$this->translator);
  227.             if ($response['success'] !== true) {
  228.                 return $this->json($response);
  229.             }
  230.             $response = [];
  231.             $holySitesPage = new DataObject\HolySitesPage\Listing();
  232.             $holySitesPage->current();
  233.             $classDefinition $holySitesPage->current()->getClass()->getFieldDefinitions();
  234.             $holySitesPageObj $holySitesPage->current();
  235.             foreach ($classDefinition as $value) {
  236.                 $response array_merge($response$this->genericWebsiteClassModel->getSwitchCaseCondition($holySitesPageObj$value));
  237.             }
  238.             return $this->json(['success' => true'data' => $response]);
  239.         } catch (\Exception $ex) {
  240.             $this->logger->error($ex->getMessage());
  241.             return $this->json(['success' => false'message' => $ex->getMessage()]);
  242.         }
  243.     }
  244.     /**
  245.      * @Route("/marine-outlook-page", name="marine-outlook-page", methods={"POST"})
  246.      */
  247.     public function marineOutlookPage(Request $request)
  248.     {
  249.         try {
  250.             $response $this->publicUserPermissionService->isAuthorized($request$this->translator);
  251.             if ($response['success'] !== true) {
  252.                 return $this->json($response);
  253.             }
  254.             $response = [];
  255.             $marineOutlookPage = new DataObject\MarineOutlook\Listing();
  256.             $marineOutlookPage->current();
  257.             $classDefinition $marineOutlookPage->current()->getClass()->getFieldDefinitions();
  258.             $marineOutlookPageObj $marineOutlookPage->current();
  259.             foreach ($classDefinition as $value) {
  260.                 $response array_merge($response$this->genericWebsiteClassModel->getSwitchCaseCondition($marineOutlookPageObj$value));
  261.             }
  262.             return $this->json(['success' => true'data' => $response]);
  263.         } catch (\Exception $ex) {
  264.             $this->logger->error($ex->getMessage());
  265.             return $this->json(['success' => false'message' => $ex->getMessage()]);
  266.         }
  267.     }
  268.     /**
  269.      * @Route("/weather-warning-page", name="weather-warning-page", methods={"POST"})
  270.      */
  271.     public function weatherWarningPage(Request $request)
  272.     {
  273.         try {
  274.             $response $this->publicUserPermissionService->isAuthorized($request$this->translator);
  275.             if ($response['success'] !== true) {
  276.                 return $this->json($response);
  277.             }
  278.             $response = [];
  279.             $weatherWarningPage = new DataObject\WeatherWarningPage\Listing();
  280.             $weatherWarningPage->current();
  281.             $classDefinition $weatherWarningPage->current()->getClass()->getFieldDefinitions();
  282.             $weatherWarningPageObj $weatherWarningPage->current();
  283.             foreach ($classDefinition as $value) {
  284.                 $response array_merge($response$this->genericWebsiteClassModel->getSwitchCaseCondition($weatherWarningPageObj$value));
  285.             }
  286.             return $this->json(['success' => true'data' => $response]);
  287.         } catch (\Exception $ex) {
  288.             $this->logger->error($ex->getMessage());
  289.             return $this->json(['success' => false'message' => $ex->getMessage()]);
  290.         }
  291.     }
  292.     /**
  293.      * @Route("/climate-kingdom-page", name="climate-kingdom-page", methods={"POST"})
  294.      */
  295.     public function climateKingdomPage(Request $request)
  296.     {
  297.         try {
  298.             $response $this->publicUserPermissionService->isAuthorized($request$this->translator);
  299.             if ($response['success'] !== true) {
  300.                 return $this->json($response);
  301.             }
  302.             $response = [];
  303.             $climateKingdomPage = new DataObject\ClimateKingdomPage\Listing();
  304.             $climateKingdomPage->current();
  305.             $classDefinition $climateKingdomPage->current()->getClass()->getFieldDefinitions();
  306.             $climateKingdomPageObj $climateKingdomPage->current();
  307.             foreach ($classDefinition as $value) {
  308.                 $response array_merge($response$this->genericWebsiteClassModel->getSwitchCaseCondition($climateKingdomPageObj$value));
  309.             }
  310.             return $this->json(['success' => true'data' => $response]);
  311.         } catch (\Exception $ex) {
  312.             $this->logger->error($ex->getMessage());
  313.             return $this->json(['success' => false'message' => $ex->getMessage()]);
  314.         }
  315.     }
  316.     /**
  317.      * @Route("/translations", name="translations-all", methods={"GET"})
  318.      */
  319.     public function allTranslations(Request $request)
  320.     {
  321.         try {
  322.             $locales = ['en''ar']; // Define the locales you want to fetch
  323.             $response = [];
  324.             $db \Pimcore\Db::get();
  325.             foreach ($locales as $lang) {
  326.                 $selectedLocalities $db->fetchAllAssociative("
  327.                     SELECT * FROM translations_messages 
  328.                     WHERE `key` LIKE 'frontend_%' 
  329.                     AND `language` = '$lang
  330.                     ORDER BY `creationDate` ASC
  331.                 ");
  332.                 $localeResponse = [];
  333.                 foreach ($selectedLocalities as $value) {
  334.                     $keyParts explode('_'$value['key'], 3);
  335.                     $category $keyParts[1];
  336.                     $key $keyParts[2];
  337.                     if (!isset($localeResponse[$category])) {
  338.                         $localeResponse[$category] = [];
  339.                     }
  340.                     $localeResponse[$category][$key] = $value['text'];
  341.                 }
  342.                 // Add the locale's response to the main response array
  343.                 $response[$lang] = $localeResponse;
  344.             }
  345.             return $this->json($response);
  346.         } catch (\Exception $ex) {
  347.             $this->logger->error($ex->getMessage());
  348.             return $this->json(['success' => false'message' => $ex->getMessage()]);
  349.         }
  350.     }
  351.     /**
  352.      * @Route("/translations/{locale}", name="translations", methods={"GET"})
  353.      */
  354.     public function frontendDashboardTranslation(Request $request)
  355.     {
  356.         try {
  357.             $lang $request->get('locale''en');
  358.             $response = [];
  359.             $db \Pimcore\Db::get();
  360.             $selectedLocalities $db->fetchAllAssociative("
  361.                 SELECT * FROM translations_messages 
  362.                 WHERE `key` LIKE 'frontend_%' 
  363.                 AND `language` = '$lang
  364.                 ORDER BY `creationDate` ASC
  365.             ");
  366.             foreach ($selectedLocalities as $value) {
  367.                 $keyParts explode('_'$value['key'], 3);
  368.                 $category $keyParts[1];
  369.                 $key $keyParts[2];
  370.                 if (!isset($response[$category])) {
  371.                     $response[$category] = [];
  372.                 }
  373.                 $response[$category][$key] = $value['text'];
  374.             }
  375.             return $this->json($response);
  376.         } catch (\Exception $ex) {
  377.             $this->logger->error($ex->getMessage());
  378.             return $this->json(['success' => false'message' => $ex->getMessage()]);
  379.         }
  380.     }
  381. }