src/Controller/HomeController.php line 362

Open in your IDE?
  1. <?php
  2. namespace App\Controller;
  3. use App\Entity\Category;
  4. use App\Entity\EmailTemplate;
  5. use App\Entity\LandingPage;
  6. use App\Entity\Language;
  7. use App\Entity\Order;
  8. use App\Entity\OrderStatus;
  9. use App\Entity\RebateCode;
  10. use App\Helper\VeltisControllerTrait;
  11. use App\Mailer\TwigSwiftMailer;
  12. use App\Repository\ArticleRepository;
  13. use App\Repository\BannerRepository;
  14. use App\Repository\BlogRepository;
  15. use App\Repository\CategoryRepository;
  16. use App\Repository\FurnitureTypeRepository;
  17. use App\Repository\HelplineHoursRepository;
  18. use App\Repository\NewsRepository;
  19. use App\Repository\ProductProducerRepository;
  20. use App\Repository\ProductRepository;
  21. use App\Repository\TopBannerRepository;
  22. use App\Repository\TopInformationRepository;
  23. use App\Repository\WorkingHoursRepository;
  24. use App\Services\CartService;
  25. use App\Services\CompareManager;
  26. use App\Services\FacebookApiConversion;
  27. use App\Services\OrderService;
  28. use App\Services\PasswordProtectedService;
  29. use Psr\Log\LoggerInterface;
  30. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  31. use Symfony\Component\HttpFoundation\JsonResponse;
  32. use Symfony\Component\HttpFoundation\Request;
  33. use Symfony\Component\HttpFoundation\Session\Session;
  34. use Symfony\Component\HttpFoundation\Session\SessionInterface;
  35. use Symfony\Component\Routing\Annotation\Route;
  36. use Symfony\Component\HttpFoundation\Response;
  37. use Symfony\Contracts\Translation\TranslatorInterface;
  38. class HomeController extends AbstractController
  39. {
  40.     use VeltisControllerTrait;
  41.     /**
  42.      * @Route("/password-protected", name="password_protected")
  43.      */
  44.     public function passwordProtectedAction(Request $requestPasswordProtectedService $passwordProtectedServiceSessionInterface $session)
  45.     {
  46.         $msg '';
  47.         if ($request->getMethod() === 'POST') {
  48.             if ($request->request->get('site_password') == $passwordProtectedService->getSitePassword()) {
  49.                 $session->set('password_provided'1);
  50.                 return $this->redirectToRoute('homepage');
  51.             } else {
  52.                 $msg 'invalid_password';
  53.             }
  54.         }
  55.         return $this->render('frontend/passwordProtected.html.twig', [
  56.             'locale'=>$request->getLocale(),
  57.             'msg' => $msg,
  58.             'language' => $this->resolveLanguage($request->getLocale()),
  59.         ]);
  60.     }
  61.     /**
  62.      * @Route("/emailer", name="emailer")
  63.      */
  64.     public function emailerAction(Request $requestOrderService $orderServiceTwigSwiftMailer $twigSwiftMailerPasswordProtectedService $passwordProtectedServiceSessionInterface $session)
  65.     {
  66.         throw new \Exception('Testing email error logs');
  67.         $ch curl_init();
  68.         exit();
  69.         //$body = json_encode(['fromField'=>['fromFieldId'=>'f'], 'subject'=>'test wiadomości', 'content'=>['html'=>'<b>Ala ma kota</b>', 'plain'=>'Ala ma kota'], 'recipients'=>['to'=>['email'=>'krzysiek.gaudy@gmail.com', 'name'=>'Krzysztof Gaudy', 'validSince'=>'2018-05-02T09:30:43+0200']]]);
  70.         curl_setopt($chCURLOPT_URL"https://api3.getresponse360.pl/v3/campaigns");
  71.         curl_setopt($chCURLOPT_RETURNTRANSFER1);
  72.         $headers = array();
  73.         $headers[] = "Content-Type: application/json";
  74.         $headers[] = "X-Auth-Token: api-key gs478s9uv59n5ekulmpmgn5p0uqpepbn";
  75.         $headers[] = "X-Domain: centrumkrzesel.com";
  76.         curl_setopt($chCURLOPT_HTTPHEADER$headers);
  77.         $result curl_exec($ch);
  78.         curl_close ($ch);
  79.         $json json_decode($resulttrue);
  80.         dump($json);
  81.         exit();
  82.         $ch curl_init();
  83.         $body json_encode(['fromField'=>['fromFieldId'=>'K'], 'subject'=>'test wiadomości''content'=>['html'=>'<b>Ala ma kota</b>''plain'=>'Ala ma kota'], 'recipients'=>['to'=>['email'=>'krzysiek.gaudy@gmail.com''name'=>'Krzysztof Gaudy''validSince'=>'2018-05-02T09:30:43+0200']]]);
  84.         curl_setopt($chCURLOPT_URL"https://api3.getresponse360.pl/v3/transactional-emails");
  85.         curl_setopt($chCURLOPT_RETURNTRANSFER1);
  86.         curl_setopt($chCURLOPT_POSTFIELDS$body);
  87.         curl_setopt($chCURLOPT_POST1);
  88.         $headers = array();
  89.         $headers[] = "Content-Type: application/json";
  90.         $headers[] = "X-Auth-Token: api-key gs478s9uv59n5ekulmpmgn5p0uqpepbn";
  91.         $headers[] = "X-Domain: centrumkrzesel.com";
  92.         curl_setopt($chCURLOPT_HTTPHEADER$headers);
  93.         $result curl_exec($ch);
  94.         curl_close ($ch);
  95.         $json json_decode($resulttrue);
  96.         dump($json);
  97.         exit();
  98.     }
  99.     /**
  100.      * @Route("/sitemap-photo", name="sitemap-photo")
  101.      */
  102.     public function sitemapPhotoAction(Request $requestOrderService $orderServiceTwigSwiftMailer $twigSwiftMailerPasswordProtectedService $passwordProtectedServiceSessionInterface $session)
  103.     {
  104.         switch ($_SERVER['HTTP_HOST']) {
  105.             case 'www.centrumkrzesel.pl':
  106.                 echo file_get_contents('/home/users/ck_prod/' '/web/xml/sitemap-photo.xml');
  107.                 break;
  108.             case 'www.ezidle.cz':
  109.                 echo file_get_contents('/home/users/ck_prod/' '/web/xml/sitemap-photo-cz.xml');
  110.                 break;
  111.             // etc.
  112.         }
  113.         return new Response();
  114.     }
  115.     /**
  116.      * @Route("/robots.txt", name="robots")
  117.      */
  118.     public function robotsAction(Request $requestOrderService $orderServiceTwigSwiftMailer $twigSwiftMailerPasswordProtectedService $passwordProtectedServiceSessionInterface $session)
  119.     {
  120.         switch ($_SERVER['HTTP_HOST']) {
  121.             case 'www.centrumkrzesel.pl':
  122.                 echo file_get_contents('/home/users/ck_prod/' '/web/robots2.txt');
  123.                 break;
  124.             case 'www.ezidle.cz':
  125.                 echo file_get_contents('/home/users/ck_prod/' '/web/robots_cz.txt');
  126.                 break;
  127.             case 'www.stolicky24.sk':
  128.                 echo file_get_contents('/home/users/ck_prod/' '/web/robots_sk.txt');
  129.                 break;
  130.             case 'www.mobila24.ro':
  131.                 echo file_get_contents('/home/users/ck_prod/' '/web/robots_ro.txt');
  132.                 break;
  133.             // etc.
  134.         }
  135.         return new Response();
  136.     }
  137.     /**
  138.      * @Route("/sitemap", name="sitemap")
  139.      */
  140.     public function sitemapAction(Request $requestOrderService $orderServiceTwigSwiftMailer $twigSwiftMailerPasswordProtectedService $passwordProtectedServiceSessionInterface $session)
  141.     {
  142.         switch ($_SERVER['HTTP_HOST']) {
  143.             case 'www.centrumkrzesel.pl':
  144.                 echo file_get_contents('/home/users/ck_prod/' '/web/xml/sitemap.xml');
  145.                 break;
  146.             case 'www.ezidle.cz':
  147.                 echo file_get_contents('/home/users/ck_prod/' '/web/xml/sitemap_cz.xml');
  148.                 break;
  149.             case 'www.stolicky24.sk':
  150.                 echo file_get_contents('/home/users/ck_prod/' '/web/xml/sitemap_sk.xml');
  151.                 break;
  152.             case 'www.mobila24.ro':
  153.                 echo file_get_contents('/home/users/ck_prod/' '/web/xml/sitemap_ro.xml');
  154.                 break;
  155.             // etc.
  156.         }
  157.         $response = new Response();
  158.         $response->headers->set('Content-Type''text/xml');
  159.         return $response;
  160.     }
  161.     /**
  162.      * @Route("/", name="homepage")
  163.      */
  164.     public function indexAction(Request $requestProductProducerRepository $productProducerRepositoryBannerRepository $bannerRepositoryCategoryRepository $categoryRepositoryProductRepository $productRepositoryPasswordProtectedService $passwordProtectedService)
  165.     {
  166.         if ($passwordProtectedService->isPasswordProtected()) {
  167.             return $this->redirectToRoute('password_protected');
  168.         }
  169.         $banners $bannerRepository->getForHomepageNewBanners($request->getLocale())->getQuery()->getResult();
  170.         if (count($banners) == 0) {
  171.             $banners $bannerRepository->getForHomepage($request->getLocale())->getQuery()->getResult();
  172.         }
  173.         $categories $categoryRepository->getHomepageCategories($request->getLocale(), [Category::TYPE_24hCategory::TYPE_SZOK_CENOWYCategory::TYPE_OUTLET])->getQuery()->getResult();
  174.         $bannerCategories $categoryRepository->getCategories($request->getLocale(), [Category::TYPE_OUTLETCategory::TYPE_SZOK_CENOWY])->getQuery()->getResult();
  175.         $smallBanners $bannerRepository->getSmallForHomepage($request->getLocale())->getQuery()->getResult();
  176.         $promotionsProducts $productRepository->getForHomepage($request->getLocale())->getQuery()->getResult();
  177.         $images = [
  178.             'pl' => ['price' => '/images/ico/icon_cena.svg''return14'=>'/images/ico/14_dni.svg''onMarket'=>'/images/ico/pl_15_lat.svg''outlet'=>'/images/maj_2019/box_outlet.jpg''prod24h'=>'/images/maj_2019/box_24h.jpg''szok'=>'/images/maj_2019/box_szok_cenowy.jpg''freeDelivery'=>'/v2/ico/ico_0_delivery.svg'],
  179.             'sk' => ['price' => '/images/ico/icon_cena.svg''return14'=>'/images/ico/14_dni.svg''onMarket'=>'/images/ro/sk_17_rokov.svg''outlet'=>'/images/outlet_sk.jpg''prod24h'=>'/images/24h_sk.png''szok'=>'/images/szok_sk.jpg''freeDelivery'=>'/images/icon_0eur.svg'],
  180.             'cz' => ['price' => '/images/ico/icon_cena.svg''return14'=>'/images/ico/14_dni.svg''onMarket'=>'/images/ico/cz_5_let.svg''outlet'=>'/images/outlet_cz.jpg''prod24h'=>'/images/48h_cz.png''szok'=>'/images/szok_cz.jpg''freeDelivery'=>'/images/icon_0kc.svg'],
  181.             'ro' => ['price' => '/images/ico/icon_cena.svg''return14'=>'/images/ico/14_dni.svg''onMarket'=>'/images/ro/ro_17_ani.svg''outlet'=>'/images/ro/office_chair_box.jpg''prod24h'=>'/images/ro/box_24h-01.jpg''szok'=>'/images/ro/box_homepage_ro_v2.jpg''freeDelivery'=>'/images/ro/icon_olei_ro.svg'],
  182.         ];
  183.         /*
  184.         $cat = $this->em()->getRepository(\App\Entity\Category::class)->find(125);
  185.         foreach ($cat->getChildrens() as $c) {
  186.             dump($c);
  187.         }
  188.         exit();
  189.         */
  190.         $producers $productProducerRepository->getForHomepageLogos($request->getLocale())->getQuery()->getResult();
  191.         $catNews $categoryRepository->getSpecialCategory($request->getLocale(), Category::TYPE_NEW_PRODUCTS)->getQuery()->getResult();
  192.         $catBest $categoryRepository->getSpecialCategory($request->getLocale(), Category::TYPE_BESTSELLERS)->getQuery()->getResult();
  193.         return $this->render('frontend/index.html.twig', [
  194.             'banners' => $banners,
  195.             'catBest' => (isset($catBest[0])) ? $catBest[0] : false,
  196.             'catNews' => (isset($catNews[0])) ? $catNews[0] : false,
  197.             'categories' => $categories,
  198.             'locale'=>$request->getLocale(),
  199.             'domain' => $_SERVER['SERVER_NAME'],
  200.             'promotionsProducts' => $promotionsProducts,
  201.             'isMobile' => $this->is_mobile(),
  202.             'producers' => $producers,
  203.             'smallBanners' => $smallBanners,
  204.             'staticImages' => $images,
  205.             'language' => $this->resolveLanguage($request->getLocale()),
  206.             'bannerCategories' => $bannerCategories
  207.         ]);
  208.     }
  209.     function is_mobile() {
  210.         if ( empty( $_SERVER['HTTP_USER_AGENT'] ) ) {
  211.             $is_mobile false;
  212.         } elseif ( strpos$_SERVER['HTTP_USER_AGENT'], 'Mobile' ) !== false // many mobile devices (all iPhone, iPad, etc.)
  213.             || strpos$_SERVER['HTTP_USER_AGENT'], 'Android' ) !== false
  214.             || strpos$_SERVER['HTTP_USER_AGENT'], 'Silk/' ) !== false
  215.             || strpos$_SERVER['HTTP_USER_AGENT'], 'Kindle' ) !== false
  216.             || strpos$_SERVER['HTTP_USER_AGENT'], 'BlackBerry' ) !== false
  217.             || strpos$_SERVER['HTTP_USER_AGENT'], 'iPad' ) !== false
  218.             || strpos$_SERVER['HTTP_USER_AGENT'], 'iPhone' ) !== false
  219.             || strpos$_SERVER['HTTP_USER_AGENT'], 'Opera Mini' ) !== false
  220.             || strpos$_SERVER['HTTP_USER_AGENT'], 'Opera Mobi' ) !== false ) {
  221.             $is_mobile true;
  222.         } else {
  223.             $is_mobile false;
  224.         }
  225.         return $is_mobile;
  226.     }
  227.     /**
  228.      * @Route("/top-main-homepage", name="topMenuFront")
  229.      */
  230.     public function topAction(Request $requestTopBannerRepository $topBannerRepositoryHelplineHoursRepository $helplineHoursRepository,  WorkingHoursRepository $workingHoursRepositoryCategoryRepository $categoryRepositoryArticleRepository $articleRepositoryFurnitureTypeRepository $furnitureTypeRepositoryCartService $cartServiceCompareManager $compareManagerProductRepository $productRepositoryBannerRepository $bannerRepositoryFacebookApiConversion $facebookApiConversionTopInformationRepository $topInformationRepository)
  231.     {
  232.         $reqParams $request->query->get('reqParams');
  233.         $route 'homepage';
  234.         if (isset($reqParams['_route'])) {
  235.             $route $reqParams['_route'];
  236.         }
  237.         try {
  238.             $facebookApiConversion->createFbEvent('PageView');
  239.         } catch (\Exception $e) {
  240.             //
  241.         }
  242.         $requestCategory false;
  243.         $requestFurnitureType false;
  244.         if ($route == 'category') {
  245.             $requestCategory $reqParams['id'];
  246.         }
  247.         if ($route == 'furnitureType') {
  248.             $requestFurnitureType $reqParams['furnitureTypeId'];
  249.         }
  250.         $workingHours $workingHoursRepository->getForCurrentDay($request->getLocale())->getQuery()->getOneOrNullResult();
  251.         $helplineHours $helplineHoursRepository->getForCurrentDay($request->getLocale())->getQuery()->getOneOrNullResult();
  252.         $categories $categoryRepository->getMainCategories($request->getLocale(), [Category::TYPE_24hCategory::TYPE_SZOK_CENOWY])->getQuery()->getResult();
  253.         $furnitureTypes $furnitureTypeRepository->getForCategory($request->getLocale())->getQuery()->getResult();
  254.         $articles $articleRepository->getArticleByLanguage($request->getLocale())->getQuery()->getResult();
  255.         $cat24h $categoryRepository->get24hAvailabilityCategories($request->getLocale())->getQuery()->getResult();
  256.         $furnitureTypes24h $furnitureTypeRepository->get24hAvailabilityFurnitureTypes($request->getLocale())->getQuery()->getResult();
  257.         $promoFurnitureTypes $furnitureTypeRepository->getPromoFurnitureTypes($request->getLocale())->getQuery()->getResult();
  258.         $promoCategories $categoryRepository->getCategories($request->getLocale(), [Category::TYPE_OUTLETCategory::TYPE_SZOK_CENOWY])->getQuery()->getResult();
  259.         $promotions $productRepository->getPromotions($request->getLocale())->getQuery()->getResult();
  260.         /*
  261.          * christmass
  262.          * 
  263.         $images = [
  264.             'pl' => ['logo'=>'/images/logo.svg', 'freeDelivery'=>'/images/icon_0zl.svg', 'onMarket'=>'/images/ico/pl_15_lat.svg'],
  265.             'sk' => ['logo'=>'/images/christmas_logo_sk.svg', 'freeDelivery'=>'/images/icon_0eur.svg', 'onMarket'=>'/images/ro/sk_17_rokov.svg'],
  266.             'cz' => ['logo'=>'/images/christmas_logo_cz.svg', 'freeDelivery'=>'/images/icon_0kc.svg', 'onMarket'=>'/images/ico/cz_5_let.svg'],
  267.             'ro' => ['logo'=>'/images/christmas_logo-mobila24-ro.png', 'freeDelivery'=>'/images/ro/icon_olei_ro.svg', 'onMarket'=>'/images/ro/ro_17_ani.svg'],
  268.         ];
  269.         */
  270.         $images = [
  271.             'pl' => ['logo'=>'/images/logo-kopia.svg''freeDelivery'=>'/images/icon_0zl.svg''onMarket'=>'/images/ico/pl_15_lat.svg'],
  272.             'sk' => ['logo'=>'/images/logo_sk.svg''freeDelivery'=>'/images/icon_0eur.svg''onMarket'=>'/images/ro/sk_17_rokov.svg'],
  273.             'cz' => ['logo'=>'/images/logo_cz.svg''freeDelivery'=>'/images/icon_0kc.svg''onMarket'=>'/images/ico/cz_5_let.svg'],
  274.             'ro' => ['logo'=>'/images/ro/logo-mobila24-ro.png''freeDelivery'=>'/images/ro/icon_olei_ro.svg''onMarket'=>'/images/ro/ro_17_ani.svg'],
  275.         ];
  276.         $topBanners $topBannerRepository->getForStore($request->getLocale());
  277.         $strefaOkazji $this->em()->getRepository(LandingPage::class)->find(LandingPage::LP_STREFA_OKAZJI);
  278.         $banners $bannerRepository->getForHomepageNewBanners($request->getLocale())
  279.             ->andWhere('p.visibleInPromotions = :visibleInPromotions')->setParameter('visibleInPromotions'true)
  280.             ->getQuery()->getResult();
  281.         if (count($banners) == 0) {
  282.             $banners = [];//$bannerRepository->getForHomepage($request->getLocale())->getQuery()->getResult();
  283.         }
  284.         $topInformation $topInformationRepository->getForStore($request->getLocale())->getQuery()->getResult();
  285.         return $this->render('frontend/components/top.html.twig', [
  286.             'workingHours' => $workingHours,
  287.             'countProducts' => $cartService->countProducts(),
  288.             'topInformation' => $topInformation,
  289.             'articles' => $articles,
  290.             'mainBanners' => $banners,
  291.             'topBanners' => $topBanners->getQuery()->getResult(),
  292.             'helplineHours' => $helplineHours,
  293.             'strefaOkazji' => $strefaOkazji,
  294.             'locale'=>$request->getLocale(),
  295.             'staticImages'=>$images,
  296.             'compareCounter' => count($compareManager->getIdsCompareProducts()),
  297.             'furnitureTypes' => $furnitureTypes,
  298.             'cat24h' => $cat24h,
  299.             'requestCategory' => $requestCategory,
  300.             'requestFurnitureType' => $requestFurnitureType,
  301.             'promotions' => $promotions,
  302.             'promoCategories' => $promoCategories,
  303.             'furnitureTypes24h' => $furnitureTypes24h,
  304.             'language' => $this->resolveLanguage($request->getLocale()),
  305.             'categories' => $categories,
  306.             'promoFurnitureTypes' => $promoFurnitureTypes,
  307.         ]);
  308.     }
  309.     /**
  310.      * @Route("/footer-fronted", name="footerFront")
  311.      */
  312.     public function footerAction(Request $requestHelplineHoursRepository $helplineHoursRepositoryNewsRepository $newsRepositoryArticleRepository $articleRepositoryCategoryRepository $categoryRepositoryBlogRepository $blogRepository)
  313.     {
  314.         $helplineHours $helplineHoursRepository->getAllForLanguage($request->getLocale())->getQuery()->getResult();
  315.         $news $newsRepository->getNewsByLanguage($request->getLocale())->getQuery()->getResult();
  316.         $articles $articleRepository->getArticleByLanguage($request->getLocale())->getQuery()->getResult();
  317.         $shortcutCategories $categoryRepository->getShortcutCategories($request->getLocale())->getQuery()->getResult();
  318.         $language $this->resolveLanguage($request->getLocale());
  319.         return $this->render('frontend/components/footer.html.twig', [
  320.             'news' => $news,
  321.             'helplineHours' => $helplineHours,
  322.             //'blogs' => $this->em()->getRepository(\App\Entity\Blog::class)->findBy(['deletedBy'=>null, 'special'=>false, 'visible'=>1], ['id'=>'DESC']),
  323.             'blogs' => $blogRepository->getBlogByLanguage($language->getLocale())->getQuery()->getResult(),
  324.             'language' => $language,
  325.             'shortcutCategories' => $shortcutCategories,
  326.             'articles' => $articles
  327.         ]);
  328.     }
  329.     /**
  330.      * @Route("/gopay-notificator", name="gopay-notificator")
  331.      */
  332.     public function gopayNotificatorAction(Request $requestLoggerInterface $loggerTwigSwiftMailer $twigSwiftMailer) {
  333.         $req $request->request->all();
  334.         //$logger->critical(serialize($req));
  335.         $ch curl_init();
  336.         $clientSecret SummaryController::CLIENT_SECRET;
  337.         $clientId SummaryController::CLIENT_ID;
  338.         $appUrl SummaryController::APP_URL_CZ;
  339.         $paymentStatus SummaryController::PAYMENT_STATUS_URL_CZ.$request->query->get('id');
  340.         curl_setopt($chCURLOPT_URL$appUrl);
  341.         curl_setopt($chCURLOPT_RETURNTRANSFER1);
  342.         curl_setopt($chCURLOPT_POSTFIELDS"grant_type=client_credentials&scope=payment-all");
  343.         curl_setopt($chCURLOPT_POST1);
  344.         curl_setopt($chCURLOPT_USERPWD$clientId ":" $clientSecret);
  345.         $headers = array();
  346.         $headers[] = "Accept: application/json";
  347.         $headers[] = "Content-Type: application/x-www-form-urlencoded";
  348.         curl_setopt($chCURLOPT_HTTPHEADER$headers);
  349.         $result curl_exec($ch);
  350.         if ($result) {
  351.             //$logger->critical(serialize($result));
  352.             $json json_decode($resulttrue);
  353.             $ch curl_init();
  354.             curl_setopt($chCURLOPT_URL$paymentStatus);
  355.             curl_setopt($chCURLOPT_RETURNTRANSFER1);
  356.             curl_setopt($chCURLOPT_USERPWD$clientId ":" $clientSecret);
  357.             $headers = array();
  358.             $headers[] = "Accept: application/json";
  359.             $headers[] = "Content-Type: application/x-www-form-urlencoded";
  360.             $headers[] = "Authorization: Bearer ".$json['access_token'];
  361.             curl_setopt($chCURLOPT_HTTPHEADER$headers);
  362.             $resultStatus curl_exec($ch);
  363.             $jsonStatus json_decode($resultStatustrue);
  364.             //$logger->critical(serialize($jsonStatus));
  365.             if ($jsonStatus and $jsonStatus['state'] == 'PAID') {
  366.                 //opłacone
  367.                 $em $this->getDoctrine()->getManager();
  368.                 /** @var $order Order */
  369.                 $order $em->getRepository(Order::class)->findOneBy(array('gopay'=>$request->query->get('id')));
  370.                 //if (is_object($order)) {
  371.                 if (is_object($order) and $order->getStatus()->getId() != 10) {
  372.                     /* Set status of the order */
  373.                     $order->setConfirmed(1);
  374.                     $order->setPaid(1);
  375.                     $now = new \DateTime('now');
  376.                     $status_ent $em->getRepository(OrderStatus::class)->findOneBy(array('id'=>10));
  377.                     $order->setStatus($status_ent);
  378.                     $em->persist($order);
  379.                     $em->flush();
  380.                     $email_template $order->getPaymentMethod()->getConfirmationEmail();
  381.                     if (is_object($email_template)) {
  382.                         $mailer $twigSwiftMailer;
  383.                         $mailer->setLanguage('cz');
  384.                         $send $mailer->sendTemplateMessage($email_template$order->getUser(), $order);
  385.                         return new Response('OK');
  386.                     } else {
  387.                         return new Response('OK');
  388.                     }
  389.                 } else {
  390.                     return new Response('OK');
  391.                 }
  392.             }
  393.         }
  394.         return new Response('OK');
  395.     }
  396.     /**
  397.      * @Route("/gopay-notificator-sk", name="gopay-notificator-sk")
  398.      */
  399.     public function gopayNotificatorSkAction(Request $requestLoggerInterface $loggerTwigSwiftMailer $twigSwiftMailer) {
  400.         $req $request->request->all();
  401.         //$logger->critical(serialize($req));
  402.         $ch curl_init();
  403.         $clientSecret SummaryController::CLIENT_SECRET_SK;
  404.         $clientId SummaryController::CLIENT_ID_SK;
  405.         $appUrl SummaryController::APP_URL_SK;
  406.         $paymentStatus SummaryController::PAYMENT_STATUS_URL_SK.$request->query->get('id');
  407.         curl_setopt($chCURLOPT_URL$appUrl);
  408.         curl_setopt($chCURLOPT_RETURNTRANSFER1);
  409.         curl_setopt($chCURLOPT_POSTFIELDS"grant_type=client_credentials&scope=payment-all");
  410.         curl_setopt($chCURLOPT_POST1);
  411.         curl_setopt($chCURLOPT_USERPWD$clientId ":" $clientSecret);
  412.         $headers = array();
  413.         $headers[] = "Accept: application/json";
  414.         $headers[] = "Content-Type: application/x-www-form-urlencoded";
  415.         curl_setopt($chCURLOPT_HTTPHEADER$headers);
  416.         $result curl_exec($ch);
  417.         if ($result) {
  418.             //$logger->critical(serialize($result));
  419.             $json json_decode($resulttrue);
  420.             $ch curl_init();
  421.             curl_setopt($chCURLOPT_URL$paymentStatus);
  422.             curl_setopt($chCURLOPT_RETURNTRANSFER1);
  423.             curl_setopt($chCURLOPT_USERPWD$clientId ":" $clientSecret);
  424.             $headers = array();
  425.             $headers[] = "Accept: application/json";
  426.             $headers[] = "Content-Type: application/x-www-form-urlencoded";
  427.             $headers[] = "Authorization: Bearer ".$json['access_token'];
  428.             curl_setopt($chCURLOPT_HTTPHEADER$headers);
  429.             $resultStatus curl_exec($ch);
  430.             $jsonStatus json_decode($resultStatustrue);
  431.             //$logger->critical(serialize($jsonStatus));
  432.             if ($jsonStatus and $jsonStatus['state'] == 'PAID') {
  433.                 //opłacone
  434.                 $em $this->getDoctrine()->getManager();
  435.                 /** @var $order Order */
  436.                 $order $em->getRepository(Order::class)->findOneBy(array('gopay'=>$request->query->get('id')));
  437.                 //if (is_object($order)) {
  438.                 if (is_object($order) and $order->getStatus()->getId() != 3) {
  439.                     /* Set status of the order */
  440.                     $order->setConfirmed(1);
  441.                     $order->setPaid(1);
  442.                     $now = new \DateTime('now');
  443.                     $status_ent $em->getRepository(OrderStatus::class)->findOneBy(array('id'=>3));
  444.                     $order->setStatus($status_ent);
  445.                     $em->persist($order);
  446.                     $em->flush();
  447.                     $email_template $order->getPaymentMethod()->getConfirmationEmail();
  448.                     if (is_object($email_template)) {
  449.                         $mailer $twigSwiftMailer;
  450.                         $mailer->setLanguage('sk');
  451.                         $send $mailer->sendTemplateMessage($email_template$order->getUser(), $order);
  452.                         return new Response('OK');
  453.                     } else {
  454.                         return new Response('OK');
  455.                     }
  456.                 } else {
  457.                     return new Response('OK');
  458.                 }
  459.             }
  460.         }
  461.         return new Response('OK');
  462.     }
  463.     /**
  464.      * @Route("/contact", name="contact")
  465.      */
  466.     public function contactAction(Request $requestHelplineHoursRepository $helplineHoursRepositoryWorkingHoursRepository $workingHoursRepository\Swift_Mailer $mailerTranslatorInterface $translator)
  467.     {
  468.         $title $translator->trans('form_query_question', [], 'store');
  469.         /** @var $language Language */
  470.         $language $this->resolveLanguage($request->getLocale());
  471.         $contactData $request->request->get('contact');
  472.         if ($request->getMethod() == 'POST') {
  473.             if ($contactData['content'] and ($contactData['email'] or $contactData['phone'])) {
  474.                 $body $this->renderView(
  475.                     'frontend/email/contactForm.html.twig',
  476.                     ['formData' => $request->request->get('contact')]
  477.                 );
  478.                 if ($request->getLocale() == 'pl') {
  479.                     $message = (new \Swift_Message($title))->setFrom(
  480.                         $language->getStoreEmail(),
  481.                         $language->getShopName()
  482.                     )
  483.                         //->setTo('formularz@centrumkrzesel.pl')
  484.                         ->setTo($language->getAdminStoreEmail())
  485.                         ->setSubject('Contact Form')
  486.                         ->setBody($body'text/html');
  487.                     $send $mailer->send($message);
  488.                 } else {
  489.                     $email = new \SendGrid\Mail\Mail();
  490.                     $email->setFrom($language->getStoreEmail(), $language->getStoreEmail());
  491.                     $email->setSubject('Contact Form');
  492.                     $email->addTo($language->getAdminStoreEmail(), $language->getAdminStoreEmail());
  493.                     $email->setBccSettings(true'objednavky@ezidle.cz');
  494.                     $email->addContent(
  495.                         "text/html"$body
  496.                     );
  497.                     $sendgrid = new \SendGrid('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');
  498.                     try {
  499.                         $response $sendgrid->send($email);
  500.                     } catch (\Exception $e) {
  501.                         //
  502.                     }
  503.                 }
  504.                 $request->request->set('contact'null);
  505.                 $this->setFlash($translator->trans('message_send', [], 'store'$request->getLocale()), 'success');
  506.             } else {
  507.                 $this->setFlash($translator->trans('enter_content_and_contact_dat', [], 'store'$request->getLocale()), 'warning');
  508.             }
  509.         }
  510.         $workingHours $workingHoursRepository->getForCurrentDay($request->getLocale())->getQuery()->getOneOrNullResult();
  511.         $helplineHours $helplineHoursRepository->getForCurrentDay($request->getLocale())->getQuery()->getOneOrNullResult();
  512.         $article $this->em()->getRepository(\App\Entity\Article::class)->find(11);
  513.         $workingHoursTable $workingHoursRepository->getAllForLanguage($request->getLocale())->getQuery()->getResult();
  514.         $workingHoursTableBrzeziny $workingHoursRepository->getAllForLanguage($request->getLocale(), 'second')->getQuery()->getResult();
  515.         $twig 'frontend/article/contact.html.twig';
  516.         if ($request->getLocale() == 'pl') {
  517.             $twig 'frontend/article/contact-pl.html.twig';
  518.         }
  519.         return $this->render($twig, [
  520.             'workingHours' => $workingHours,
  521.             'helplineHours' => $helplineHours,
  522.             'article' => $article,
  523.             'contactData' => $contactData,
  524.             'workingHoursTable' => $workingHoursTable,
  525.             'workingHoursTableBrzeziny' => $workingHoursTableBrzeziny,
  526.             'language' => $this->resolveLanguage($request->getLocale()),
  527.         ]);
  528.     }
  529.     /**
  530.      * @Route("/getresponse-handler", name="getresponse_handler")
  531.      */
  532.     public function getResponseHandlerAction(Request $requestWorkingHoursRepository $workingHoursRepository\Swift_Mailer $mailerTranslatorInterface $translatorLoggerInterface $logger) {
  533.         $email $request->request->get('email');
  534.         if (strstr($email'@gaudytest.pl')) {
  535.             $this->addFlash('success'$translator->trans('successfuly_signed_in_on_newsletter', [], 'store'$request->getLocale()));
  536.             return $this->redirectToRoute('homepage');
  537.         }
  538.         /** @var $language Language */
  539.         $language $this->resolveLanguage($request->getLocale());
  540.         /**
  541.          * PL -> campaingId = I
  542.          * CZ -> campaignId = d
  543.          * SK -> campaignId = a
  544.          */
  545.         $ch curl_init();
  546.         $body json_encode(['email'=>$email'campaign'=>['campaignId'=>$language->getGetResponseCampaignId()]]);
  547.         curl_setopt($chCURLOPT_URL"https://api3.getresponse360.pl/v3/contacts");
  548.         curl_setopt($chCURLOPT_RETURNTRANSFER1);
  549.         curl_setopt($chCURLOPT_POSTFIELDS$body);
  550.         curl_setopt($chCURLOPT_POST1);
  551.         $headers = array();
  552.         $headers[] = "Content-Type: application/json";
  553.         $headers[] = "X-Auth-Token: api-key gs478s9uv59n5ekulmpmgn5p0uqpepbn";
  554.         $headers[] = "X-Domain: echairs.eu";
  555.         curl_setopt($chCURLOPT_HTTPHEADER$headers);
  556.         $result curl_exec($ch);
  557.         curl_close ($ch);
  558.         $json json_decode($resulttrue);
  559.         ////$logger->critical(serialize($json));
  560.         if (isset($json['httpStatus'])) {
  561.             $this->addFlash('danger'$translator->trans('invalid_email_or_email_already_on_list', [], 'store'$request->getLocale()));
  562.             return $this->redirectToRoute('homepage');
  563.         } else {
  564.             $this->addFlash('success'$translator->trans('successfuly_signed_in_on_newsletter', [], 'store'$request->getLocale()));
  565.             return $this->redirectToRoute('homepage');
  566.         }
  567.     }
  568.     /**
  569.      * @Route("/getresponseapi", name="getresponse_webhook")
  570.      */
  571.     public function getResponseWebhookAction(Request $requestTwigSwiftMailer $twigSwiftMailerWorkingHoursRepository $workingHoursRepository\Swift_Mailer $mailerTranslatorInterface $translatorLoggerInterface $logger) {
  572.         //$logger->critical(serialize($request->request->all()));
  573.         if ($request->query->get('action') != 'subscribe') {
  574.             return new Response(1);
  575.         }
  576.         if ($request->query->get('contact_email') and (($request->query->get('campaign_name') == 'ezidle' or $request->query->get('campaign_name') == 'centrumkrzesel' or $request->query->get('campaign_name') == 'Mobila24.ro') or $request->query->get('campaign_name') == 'stolicky24')) {
  577.             /** @var $language Language */
  578.             $language $this->em()->getRepository(\App\Entity\Language::class)->findOneBy(['getResponseCampaignId'=>$request->query->get('CAMPAIGN_ID')]);
  579.             if (!is_object($language)) {
  580.                 $language $this->em()->getRepository(\App\Entity\Language::class)->findOneBy(['isDefault'=>true]);
  581.             }
  582.             $date = new \DateTime();
  583.             $date->modify('+1 year');
  584.             /** @var $lang Language */
  585.             $lang $this->em()->getRepository(\App\Entity\Language::class)->findOneBy(['isDefault' => 1'deletedBy' => null]);
  586.             if ($request->query->get('campaign_name') == 'ezidle') {
  587.                 $lang $this->em()->getRepository(\App\Entity\Language::class)->findOneBy(['id' => 2'deletedBy' => null]);
  588.             }
  589.             if ($request->query->get('campaign_name') == 'stolicky24') {
  590.                 $lang $this->em()->getRepository(\App\Entity\Language::class)->findOneBy(['id' => 3'deletedBy' => null]);
  591.             }
  592.             if ($request->query->get('campaign_name') == 'Mobila24.ro') {
  593.                 $lang $this->em()->getRepository(\App\Entity\Language::class)->findOneBy(['id' => 4'deletedBy' => null]);
  594.             }
  595.             $code = new RebateCode();
  596.             $code->setLanguage($lang);
  597.             $code->setCode(strtoupper(substr(sha1(uniqid(mt_rand(), true)), 07)));
  598.             $code->setCodeType(RebateCode::CODE_TYPE_PERCENT);
  599.             $code->setPercent(3);
  600.             $code->setUsed(0);
  601.             $code->setValidTo($date);
  602.             $code->setMultiple(0);
  603.             $this->em()->persist($code);
  604.             $this->em()->flush();
  605.             /** @var $emailTemplate EmailTemplate */
  606.             $emailTemplate $this->em()->getRepository(\App\Entity\EmailTemplate::class)->findOneBy(['codeName' => 'rebate_code_'.$lang->getLocale()]);
  607.             if (is_object($emailTemplate)) {
  608.                 $mailer $twigSwiftMailer;
  609.                 $mailer->setLanguage($lang->getLocale());
  610.                 $mailer->sendRebateCode($emailTemplate$request->query->get('contact_email'), $code->getCode());
  611.             }
  612.         }
  613.         return new JsonResponse([]);
  614.     }
  615.     /**
  616.      * @Route("/payu/ipn", name="payu-ipn")
  617.      */
  618.     public function payURoAction(Request $requestLoggerInterface $loggerTwigSwiftMailer $twigSwiftMailer) {
  619.         /* Make sure strlen behaves as intended by setting multibyte function overload to 0*/
  620.         ini_set("mbstring.func_overload"0);
  621.         if(ini_get("mbstring.func_overload") > 2){  /* check if mbstring.func_overload is still set to overload strings(2)*/
  622.             echo "WARNING: mbstring.func_overload is set to overload strings and might cause problems\n";
  623.         }
  624.         /* Internet Payment Notification */
  625.         $pass        "5w4?)z?w|k@a)o@6|5(X";    /* pass to compute HASH */
  626.         $result        "";                 /* string for compute HASH for received data */
  627.         $return        "";                 /* string to compute HASH for return result */
  628.         $signature    $_POST["HASH"];    /* HASH received */
  629.         $body        "";
  630.         /* read info received */
  631.         ob_start();
  632.         while(list($key$val) = each($_POST)){
  633.             $$key=$val;
  634.             /* get values */
  635.             if($key != "HASH"){
  636.                 if(is_array($val)) $result .= $this->ArrayExpand($val);
  637.                 else{
  638.                     $size        strlen(StripSlashes($val));
  639.                     $result    .= $size.StripSlashes($val);
  640.                 }
  641.             }
  642.         }
  643.         $body ob_get_contents();
  644.         ob_end_flush();
  645.         $date_return date("YmdGis");
  646.         $return strlen($_POST["IPN_PID"][0]).$_POST["IPN_PID"][0].strlen($_POST["IPN_PNAME"][0]).$_POST["IPN_PNAME"][0];
  647.         $return .= strlen($_POST["IPN_DATE"]).$_POST["IPN_DATE"].strlen($date_return).$date_return;
  648.         $hash =  $this->hmac($pass$result); /* HASH for data received */
  649.         $body .= $result."\r\n\r\nHash: ".$hash."\r\n\r\nSignature: ".$signature."\r\n\r\nReturnSTR: ".$return;
  650.         if($hash == $signature){
  651.             /* ePayment response */
  652.             $result_hash =  $this->hmac($pass$return);
  653.             $content =  "<EPAYMENT>".$date_return."|".$result_hash."</EPAYMENT>";
  654.             /* Begin automated procedures (START YOUR CODE)*/
  655.             $reqData $request->request->all();
  656.             $orderId $reqData['REFNOEXT'];
  657.             $status $reqData['ORDERSTATUS'];
  658.             if ($status == 'TEST' or $status == 'PAYMENT_RECEIVED' or $status == 'PAYMENT_AUTHORIZED') {
  659.                 $order $this->em()->getRepository(Order::class)->findOneBy(['id'=>$orderId]);
  660.                 $em $this->em();
  661.                 if (is_object($order) and $order->getStatus()->getId() != 21) {
  662.                     /* Set status of the order */
  663.                     $order->setConfirmed(1);
  664.                     $order->setPaid(1);
  665.                     $now = new \DateTime('now');
  666.                     $status_ent $em->getRepository(OrderStatus::class)->findOneBy(array('id'=>21));
  667.                     $order->setStatus($status_ent);
  668.                     $em->persist($order);
  669.                     $em->flush();
  670.                     $email_template $order->getPaymentMethod()->getConfirmationEmail();
  671.                     if (is_object($email_template)) {
  672.                         $mailer $twigSwiftMailer;
  673.                         $mailer->setLanguage('ro');
  674.                         $send $mailer->sendTemplateMessage($email_template$order->getUser(), $order);
  675.                         return new Response($content);
  676.                     } else {
  677.                         return new Response($content);
  678.                     }
  679.                 } else {
  680.                     return new Response('OK');
  681.                 }
  682.             } else {
  683.                 $logger->critical(serialize($request->request->all()));
  684.             }
  685.         } else {
  686.             $logger->critical(serialize($request->request->all()));
  687.         }
  688.         return new Response(1);
  689.     }
  690.     function ArrayExpand($array){
  691.         $retval "";
  692.         for($i 0$i sizeof($array); $i++){
  693.             $size        strlen(StripSlashes($array[$i]));
  694.             $retval    .= $size.StripSlashes($array[$i]);
  695.         }
  696.         return $retval;
  697.     }
  698.     function hmac ($key$data){
  699.         $b 64// byte length for md5
  700.         if (strlen($key) > $b) {
  701.             $key pack("H*",md5($key));
  702.         }
  703.         $key  str_pad($key$bchr(0x00));
  704.         $ipad str_pad(''$bchr(0x36));
  705.         $opad str_pad(''$bchr(0x5c));
  706.         $k_ipad $key $ipad ;
  707.         $k_opad $key $opad;
  708.         return md5($k_opad  pack("H*",md5($k_ipad $data)));
  709.     }
  710.     /**
  711.      * @Route("/anaf/callback", name="anaf")
  712.      */
  713.     public function anafCallbackAction(Request $request)
  714.     {
  715.         exit();
  716.         define('SPV_CLIENT_ID'"a1f7821ba234d0d823ff4dec3d737e8a7e3ee71d02aafa66");
  717.         define('SPV_CLIENT_SECRET'"2f6299e1f232a6c524d09e580f4709a9b20d1922ab037e8a7e3ee71d02aafa66");
  718.         define('SPV_REDIRECT'"https://www.mobila24.ro/anaf/callback");
  719.         $link "https://logincert.anaf.ro/anaf-oauth2/v1/authorize?response_type=code&client_id=".SPV_CLIENT_ID."&redirect_uri=".SPV_REDIRECT."&token_content_type=jwt";
  720.         echo "<a href='$link'>Login Anaf</a>";
  721.         /** Debug data for you */
  722.         echo "<hr>";
  723.         print_r($_POST);
  724.         print_r($_GET);
  725.         //print_r($_SERVER);
  726.         echo "<hr>";
  727.         /** Read and print authorization code */
  728.         $query = isset($_SERVER['REDIRECT_QUERY_STRING'])?$_SERVER['REDIRECT_QUERY_STRING']:"";
  729.         parse_str($query$output);
  730.         if (isset($output['code'])) {
  731.             $code = isset($output['code']) ? $output['code'] : "";
  732.             /** Debug for authorization data */
  733.             echo "<hr>";
  734.             print_r($output);
  735.             echo "<hr>";
  736.             /** ----------------------------------------------------------------------- */
  737.             $curl curl_init();
  738.             $test "grant_type=authorization_code&code=".$code."&client_id=".SPV_CLIENT_ID."&client_secret=".SPV_CLIENT_SECRET."&redirect_uri=".SPV_REDIRECT."&token_content_type=jwt";
  739.             /** Debug Again */
  740.             echo "$test";
  741.             echo "<hr>";
  742.             $ch curl_init();
  743.             curl_setopt($chCURLOPT_URL"https://logincert.anaf.ro/anaf-oauth2/v1/token");
  744.             curl_setopt($chCURLOPT_POST1);
  745.             curl_setopt($chCURLOPT_POSTFIELDS$test);
  746.             curl_setopt($chCURLOPT_RETURNTRANSFERtrue);
  747.             $server_output curl_exec($ch);
  748.             curl_close($ch);
  749.             $outputJson json_decode($server_outputtrue);
  750.             print_r($outputJson);
  751.             $access_token $outputJson["access_token"];
  752.             var_dump('TOKEN: ');
  753.             var_dump($access_token);
  754.             var_dump($outputJson);
  755.         }
  756.         exit();
  757.     }
  758. }