src/Controller/HomeController.php line 564

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