<?php
namespace App\Controller;
use App\Entity\Category;
use App\Entity\EmailTemplate;
use App\Entity\LandingPage;
use App\Entity\Language;
use App\Entity\Order;
use App\Entity\RebateCode;
use App\Helper\VeltisControllerTrait;
use App\Mailer\TwigSwiftMailer;
use App\Repository\ArticleRepository;
use App\Repository\BannerRepository;
use App\Repository\BlogRepository;
use App\Repository\CategoryRepository;
use App\Repository\FurnitureTypeRepository;
use App\Repository\HelplineHoursRepository;
use App\Repository\NewsRepository;
use App\Repository\ProductProducerRepository;
use App\Repository\ProductRepository;
use App\Repository\TopBannerRepository;
use App\Repository\WorkingHoursRepository;
use App\Services\CartService;
use App\Services\CompareManager;
use App\Services\FacebookApiConversion;
use App\Services\OrderService;
use App\Services\PasswordProtectedService;
use Psr\Log\LoggerInterface;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Session\Session;
use Symfony\Component\HttpFoundation\Session\SessionInterface;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Translation\TranslatorInterface;
class HomeController extends AbstractController
{
use VeltisControllerTrait;
/**
* @Route("/password-protected", name="password_protected")
*/
public function passwordProtectedAction(Request $request, PasswordProtectedService $passwordProtectedService, SessionInterface $session)
{
$msg = '';
if ($request->getMethod() === 'POST') {
if ($request->request->get('site_password') == $passwordProtectedService->getSitePassword()) {
$session->set('password_provided', 1);
return $this->redirectToRoute('homepage');
} else {
$msg = 'invalid_password';
}
}
return $this->render('frontend/passwordProtected.html.twig', [
'locale'=>$request->getLocale(),
'msg' => $msg,
'language' => $this->resolveLanguage($request->getLocale()),
]);
}
/**
* @Route("/emailer", name="emailer")
*/
public function emailerAction(Request $request, OrderService $orderService, TwigSwiftMailer $twigSwiftMailer, PasswordProtectedService $passwordProtectedService, SessionInterface $session)
{
throw new \Exception('Testing email error logs');
$ch = curl_init();
exit();
//$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']]]);
curl_setopt($ch, CURLOPT_URL, "https://api3.getresponse360.pl/v3/campaigns");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$headers = array();
$headers[] = "Content-Type: application/json";
$headers[] = "X-Auth-Token: api-key gs478s9uv59n5ekulmpmgn5p0uqpepbn";
$headers[] = "X-Domain: centrumkrzesel.com";
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
$result = curl_exec($ch);
curl_close ($ch);
$json = json_decode($result, true);
dump($json);
exit();
$ch = curl_init();
$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']]]);
curl_setopt($ch, CURLOPT_URL, "https://api3.getresponse360.pl/v3/transactional-emails");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $body);
curl_setopt($ch, CURLOPT_POST, 1);
$headers = array();
$headers[] = "Content-Type: application/json";
$headers[] = "X-Auth-Token: api-key gs478s9uv59n5ekulmpmgn5p0uqpepbn";
$headers[] = "X-Domain: centrumkrzesel.com";
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
$result = curl_exec($ch);
curl_close ($ch);
$json = json_decode($result, true);
dump($json);
exit();
}
/**
* @Route("/sitemap-photo", name="sitemap-photo")
*/
public function sitemapPhotoAction(Request $request, OrderService $orderService, TwigSwiftMailer $twigSwiftMailer, PasswordProtectedService $passwordProtectedService, SessionInterface $session)
{
switch ($_SERVER['HTTP_HOST']) {
case 'www.centrumkrzesel.pl':
echo file_get_contents('/home/users/ck_prod/' . '/web/xml/sitemap-photo.xml');
break;
case 'www.ezidle.cz':
echo file_get_contents('/home/users/ck_prod/' . '/web/xml/sitemap-photo-cz.xml');
break;
// etc.
}
return new Response();
}
/**
* @Route("/robots.txt", name="robots")
*/
public function robotsAction(Request $request, OrderService $orderService, TwigSwiftMailer $twigSwiftMailer, PasswordProtectedService $passwordProtectedService, SessionInterface $session)
{
switch ($_SERVER['HTTP_HOST']) {
case 'www.centrumkrzesel.pl':
echo file_get_contents('/home/users/ck_prod/' . '/web/robots2.txt');
break;
case 'www.ezidle.cz':
echo file_get_contents('/home/users/ck_prod/' . '/web/robots_cz.txt');
break;
case 'www.stolicky24.sk':
echo file_get_contents('/home/users/ck_prod/' . '/web/robots_sk.txt');
break;
case 'www.mobila24.ro':
echo file_get_contents('/home/users/ck_prod/' . '/web/robots_ro.txt');
break;
// etc.
}
return new Response();
}
/**
* @Route("/sitemap", name="sitemap")
*/
public function sitemapAction(Request $request, OrderService $orderService, TwigSwiftMailer $twigSwiftMailer, PasswordProtectedService $passwordProtectedService, SessionInterface $session)
{
switch ($_SERVER['HTTP_HOST']) {
case 'www.centrumkrzesel.pl':
echo file_get_contents('/home/users/ck_prod/' . '/web/xml/sitemap.xml');
break;
case 'www.ezidle.cz':
echo file_get_contents('/home/users/ck_prod/' . '/web/xml/sitemap_cz.xml');
break;
case 'www.stolicky24.sk':
echo file_get_contents('/home/users/ck_prod/' . '/web/xml/sitemap_sk.xml');
break;
case 'www.mobila24.ro':
echo file_get_contents('/home/users/ck_prod/' . '/web/xml/sitemap_ro.xml');
break;
// etc.
}
$response = new Response();
$response->headers->set('Content-Type', 'text/xml');
return $response;
}
/**
* @Route("/", name="homepage")
*/
public function indexAction(Request $request, ProductProducerRepository $productProducerRepository, BannerRepository $bannerRepository, CategoryRepository $categoryRepository, ProductRepository $productRepository, PasswordProtectedService $passwordProtectedService)
{
if ($passwordProtectedService->isPasswordProtected()) {
return $this->redirectToRoute('password_protected');
}
$banners = $bannerRepository->getForHomepageNewBanners($request->getLocale())->getQuery()->getResult();
if (count($banners) == 0) {
$banners = $bannerRepository->getForHomepage($request->getLocale())->getQuery()->getResult();
}
$categories = $categoryRepository->getHomepageCategories($request->getLocale(), [Category::TYPE_24h, Category::TYPE_SZOK_CENOWY, Category::TYPE_OUTLET])->getQuery()->getResult();
$bannerCategories = $categoryRepository->getCategories($request->getLocale(), [Category::TYPE_OUTLET, Category::TYPE_SZOK_CENOWY])->getQuery()->getResult();
$smallBanners = $bannerRepository->getSmallForHomepage($request->getLocale())->getQuery()->getResult();
$promotionsProducts = $productRepository->getForHomepage($request->getLocale())->getQuery()->getResult();
$images = [
'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'],
'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'],
'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'],
'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'],
];
/*
$cat = $this->em()->getRepository('App:Category')->find(125);
foreach ($cat->getChildrens() as $c) {
dump($c);
}
exit();
*/
$producers = $productProducerRepository->getForHomepageLogos($request->getLocale())->getQuery()->getResult();
$catNews = $categoryRepository->getSpecialCategory($request->getLocale(), Category::TYPE_NEW_PRODUCTS)->getQuery()->getResult();
$catBest = $categoryRepository->getSpecialCategory($request->getLocale(), Category::TYPE_BESTSELLERS)->getQuery()->getResult();
return $this->render('frontend/index.html.twig', [
'banners' => $banners,
'catBest' => (isset($catBest[0])) ? $catBest[0] : false,
'catNews' => (isset($catNews[0])) ? $catNews[0] : false,
'categories' => $categories,
'locale'=>$request->getLocale(),
'domain' => $_SERVER['SERVER_NAME'],
'promotionsProducts' => $promotionsProducts,
'isMobile' => $this->is_mobile(),
'producers' => $producers,
'smallBanners' => $smallBanners,
'staticImages' => $images,
'language' => $this->resolveLanguage($request->getLocale()),
'bannerCategories' => $bannerCategories
]);
}
function is_mobile() {
if ( empty( $_SERVER['HTTP_USER_AGENT'] ) ) {
$is_mobile = false;
} elseif ( strpos( $_SERVER['HTTP_USER_AGENT'], 'Mobile' ) !== false // many mobile devices (all iPhone, iPad, etc.)
|| strpos( $_SERVER['HTTP_USER_AGENT'], 'Android' ) !== false
|| strpos( $_SERVER['HTTP_USER_AGENT'], 'Silk/' ) !== false
|| strpos( $_SERVER['HTTP_USER_AGENT'], 'Kindle' ) !== false
|| strpos( $_SERVER['HTTP_USER_AGENT'], 'BlackBerry' ) !== false
|| strpos( $_SERVER['HTTP_USER_AGENT'], 'iPad' ) !== false
|| strpos( $_SERVER['HTTP_USER_AGENT'], 'iPhone' ) !== false
|| strpos( $_SERVER['HTTP_USER_AGENT'], 'Opera Mini' ) !== false
|| strpos( $_SERVER['HTTP_USER_AGENT'], 'Opera Mobi' ) !== false ) {
$is_mobile = true;
} else {
$is_mobile = false;
}
return $is_mobile;
}
/**
* @Route("/top-main-homepage", name="topMenuFront")
*/
public function topAction(Request $request, TopBannerRepository $topBannerRepository, HelplineHoursRepository $helplineHoursRepository, WorkingHoursRepository $workingHoursRepository, CategoryRepository $categoryRepository, ArticleRepository $articleRepository, FurnitureTypeRepository $furnitureTypeRepository, CartService $cartService, CompareManager $compareManager, ProductRepository $productRepository, BannerRepository $bannerRepository, FacebookApiConversion $facebookApiConversion)
{
$reqParams = $request->query->get('reqParams');
$route = 'homepage';
if (isset($reqParams['_route'])) {
$route = $reqParams['_route'];
}
try {
$facebookApiConversion->createFbEvent('PageView');
} catch (\Exception $e) {
//
}
$requestCategory = false;
$requestFurnitureType = false;
if ($route == 'category') {
$requestCategory = $reqParams['id'];
}
if ($route == 'furnitureType') {
$requestFurnitureType = $reqParams['furnitureTypeId'];
}
$workingHours = $workingHoursRepository->getForCurrentDay($request->getLocale())->getQuery()->getOneOrNullResult();
$helplineHours = $helplineHoursRepository->getForCurrentDay($request->getLocale())->getQuery()->getOneOrNullResult();
$categories = $categoryRepository->getMainCategories($request->getLocale(), [Category::TYPE_24h, Category::TYPE_SZOK_CENOWY])->getQuery()->getResult();
$furnitureTypes = $furnitureTypeRepository->getForCategory($request->getLocale())->getQuery()->getResult();
$articles = $articleRepository->getArticleByLanguage($request->getLocale())->getQuery()->getResult();
$cat24h = $categoryRepository->get24hAvailabilityCategories($request->getLocale())->getQuery()->getResult();
$furnitureTypes24h = $furnitureTypeRepository->get24hAvailabilityFurnitureTypes($request->getLocale())->getQuery()->getResult();
$promoFurnitureTypes = $furnitureTypeRepository->getPromoFurnitureTypes($request->getLocale())->getQuery()->getResult();
$promoCategories = $categoryRepository->getCategories($request->getLocale(), [Category::TYPE_OUTLET, Category::TYPE_SZOK_CENOWY])->getQuery()->getResult();
$promotions = $productRepository->getPromotions($request->getLocale())->getQuery()->getResult();
/*
* christmass
*
$images = [
'pl' => ['logo'=>'/images/logo.svg', 'freeDelivery'=>'/images/icon_0zl.svg', 'onMarket'=>'/images/ico/pl_15_lat.svg'],
'sk' => ['logo'=>'/images/christmas_logo_sk.svg', 'freeDelivery'=>'/images/icon_0eur.svg', 'onMarket'=>'/images/ro/sk_17_rokov.svg'],
'cz' => ['logo'=>'/images/christmas_logo_cz.svg', 'freeDelivery'=>'/images/icon_0kc.svg', 'onMarket'=>'/images/ico/cz_5_let.svg'],
'ro' => ['logo'=>'/images/christmas_logo-mobila24-ro.png', 'freeDelivery'=>'/images/ro/icon_olei_ro.svg', 'onMarket'=>'/images/ro/ro_17_ani.svg'],
];
*/
$images = [
'pl' => ['logo'=>'/images/logo-kopia.svg', 'freeDelivery'=>'/images/icon_0zl.svg', 'onMarket'=>'/images/ico/pl_15_lat.svg'],
'sk' => ['logo'=>'/images/logo_sk.svg', 'freeDelivery'=>'/images/icon_0eur.svg', 'onMarket'=>'/images/ro/sk_17_rokov.svg'],
'cz' => ['logo'=>'/images/logo_cz.svg', 'freeDelivery'=>'/images/icon_0kc.svg', 'onMarket'=>'/images/ico/cz_5_let.svg'],
'ro' => ['logo'=>'/images/ro/logo-mobila24-ro.png', 'freeDelivery'=>'/images/ro/icon_olei_ro.svg', 'onMarket'=>'/images/ro/ro_17_ani.svg'],
];
$topBanners = $topBannerRepository->getForStore($request->getLocale());
$strefaOkazji = $this->em()->getRepository('App:LandingPage')->find(LandingPage::LP_STREFA_OKAZJI);
$banners = $bannerRepository->getForHomepageNewBanners($request->getLocale())
->andWhere('p.visibleInPromotions = :visibleInPromotions')->setParameter('visibleInPromotions', true)
->getQuery()->getResult();
if (count($banners) == 0) {
$banners = [];//$bannerRepository->getForHomepage($request->getLocale())->getQuery()->getResult();
}
return $this->render('frontend/components/top.html.twig', [
'workingHours' => $workingHours,
'countProducts' => $cartService->countProducts(),
'articles' => $articles,
'mainBanners' => $banners,
'topBanners' => $topBanners->getQuery()->getResult(),
'helplineHours' => $helplineHours,
'strefaOkazji' => $strefaOkazji,
'locale'=>$request->getLocale(),
'staticImages'=>$images,
'compareCounter' => count($compareManager->getIdsCompareProducts()),
'furnitureTypes' => $furnitureTypes,
'cat24h' => $cat24h,
'requestCategory' => $requestCategory,
'requestFurnitureType' => $requestFurnitureType,
'promotions' => $promotions,
'promoCategories' => $promoCategories,
'furnitureTypes24h' => $furnitureTypes24h,
'language' => $this->resolveLanguage($request->getLocale()),
'categories' => $categories,
'promoFurnitureTypes' => $promoFurnitureTypes,
]);
}
/**
* @Route("/footer-fronted", name="footerFront")
*/
public function footerAction(Request $request, HelplineHoursRepository $helplineHoursRepository, NewsRepository $newsRepository, ArticleRepository $articleRepository, CategoryRepository $categoryRepository, BlogRepository $blogRepository)
{
$helplineHours = $helplineHoursRepository->getAllForLanguage($request->getLocale())->getQuery()->getResult();
$news = $newsRepository->getNewsByLanguage($request->getLocale())->getQuery()->getResult();
$articles = $articleRepository->getArticleByLanguage($request->getLocale())->getQuery()->getResult();
$shortcutCategories = $categoryRepository->getShortcutCategories($request->getLocale())->getQuery()->getResult();
$language = $this->resolveLanguage($request->getLocale());
return $this->render('frontend/components/footer.html.twig', [
'news' => $news,
'helplineHours' => $helplineHours,
//'blogs' => $this->em()->getRepository('App:Blog')->findBy(['deletedBy'=>null, 'special'=>false, 'visible'=>1], ['id'=>'DESC']),
'blogs' => $blogRepository->getBlogByLanguage($language->getLocale())->getQuery()->getResult(),
'language' => $language,
'shortcutCategories' => $shortcutCategories,
'articles' => $articles
]);
}
/**
* @Route("/gopay-notificator", name="gopay-notificator")
*/
public function gopayNotificatorAction(Request $request, LoggerInterface $logger, TwigSwiftMailer $twigSwiftMailer) {
$req = $request->request->all();
//$logger->critical(serialize($req));
$ch = curl_init();
$clientSecret = SummaryController::CLIENT_SECRET;
$clientId = SummaryController::CLIENT_ID;
$appUrl = SummaryController::APP_URL_CZ;
$paymentStatus = SummaryController::PAYMENT_STATUS_URL_CZ.$request->query->get('id');
curl_setopt($ch, CURLOPT_URL, $appUrl);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, "grant_type=client_credentials&scope=payment-all");
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_USERPWD, $clientId . ":" . $clientSecret);
$headers = array();
$headers[] = "Accept: application/json";
$headers[] = "Content-Type: application/x-www-form-urlencoded";
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
$result = curl_exec($ch);
if ($result) {
//$logger->critical(serialize($result));
$json = json_decode($result, true);
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $paymentStatus);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_USERPWD, $clientId . ":" . $clientSecret);
$headers = array();
$headers[] = "Accept: application/json";
$headers[] = "Content-Type: application/x-www-form-urlencoded";
$headers[] = "Authorization: Bearer ".$json['access_token'];
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
$resultStatus = curl_exec($ch);
$jsonStatus = json_decode($resultStatus, true);
//$logger->critical(serialize($jsonStatus));
if ($jsonStatus and $jsonStatus['state'] == 'PAID') {
//opłacone
$em = $this->getDoctrine()->getManager();
/** @var $order Order */
$order = $em->getRepository('App:Order')->findOneBy(array('gopay'=>$request->query->get('id')));
//if (is_object($order)) {
if (is_object($order) and $order->getStatus()->getId() != 10) {
/* Set status of the order */
$order->setConfirmed(1);
$order->setPaid(1);
$now = new \DateTime('now');
$status_ent = $em->getRepository('App:OrderStatus')->findOneBy(array('id'=>10));
$order->setStatus($status_ent);
$em->persist($order);
$em->flush();
$email_template = $order->getPaymentMethod()->getConfirmationEmail();
if (is_object($email_template)) {
$mailer = $twigSwiftMailer;
$mailer->setLanguage('cz');
$send = $mailer->sendTemplateMessage($email_template, $order->getUser(), $order);
return new Response('OK');
} else {
return new Response('OK');
}
} else {
return new Response('OK');
}
}
}
return new Response('OK');
}
/**
* @Route("/gopay-notificator-sk", name="gopay-notificator-sk")
*/
public function gopayNotificatorSkAction(Request $request, LoggerInterface $logger, TwigSwiftMailer $twigSwiftMailer) {
$req = $request->request->all();
//$logger->critical(serialize($req));
$ch = curl_init();
$clientSecret = SummaryController::CLIENT_SECRET_SK;
$clientId = SummaryController::CLIENT_ID_SK;
$appUrl = SummaryController::APP_URL_SK;
$paymentStatus = SummaryController::PAYMENT_STATUS_URL_SK.$request->query->get('id');
curl_setopt($ch, CURLOPT_URL, $appUrl);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, "grant_type=client_credentials&scope=payment-all");
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_USERPWD, $clientId . ":" . $clientSecret);
$headers = array();
$headers[] = "Accept: application/json";
$headers[] = "Content-Type: application/x-www-form-urlencoded";
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
$result = curl_exec($ch);
if ($result) {
//$logger->critical(serialize($result));
$json = json_decode($result, true);
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $paymentStatus);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_USERPWD, $clientId . ":" . $clientSecret);
$headers = array();
$headers[] = "Accept: application/json";
$headers[] = "Content-Type: application/x-www-form-urlencoded";
$headers[] = "Authorization: Bearer ".$json['access_token'];
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
$resultStatus = curl_exec($ch);
$jsonStatus = json_decode($resultStatus, true);
//$logger->critical(serialize($jsonStatus));
if ($jsonStatus and $jsonStatus['state'] == 'PAID') {
//opłacone
$em = $this->getDoctrine()->getManager();
/** @var $order Order */
$order = $em->getRepository('App:Order')->findOneBy(array('gopay'=>$request->query->get('id')));
//if (is_object($order)) {
if (is_object($order) and $order->getStatus()->getId() != 3) {
/* Set status of the order */
$order->setConfirmed(1);
$order->setPaid(1);
$now = new \DateTime('now');
$status_ent = $em->getRepository('App:OrderStatus')->findOneBy(array('id'=>3));
$order->setStatus($status_ent);
$em->persist($order);
$em->flush();
$email_template = $order->getPaymentMethod()->getConfirmationEmail();
if (is_object($email_template)) {
$mailer = $twigSwiftMailer;
$mailer->setLanguage('sk');
$send = $mailer->sendTemplateMessage($email_template, $order->getUser(), $order);
return new Response('OK');
} else {
return new Response('OK');
}
} else {
return new Response('OK');
}
}
}
return new Response('OK');
}
/**
* @Route("/contact", name="contact")
*/
public function contactAction(Request $request, HelplineHoursRepository $helplineHoursRepository, WorkingHoursRepository $workingHoursRepository, \Swift_Mailer $mailer, TranslatorInterface $translator)
{
$title = $translator->trans('form_query_question', [], 'store');
/** @var $language Language */
$language = $this->resolveLanguage($request->getLocale());
$contactData = $request->request->get('contact');
if ($request->getMethod() == 'POST') {
if ($contactData['content'] and ($contactData['email'] or $contactData['phone'])) {
$body = $this->renderView(
'frontend/email/contactForm.html.twig',
['formData' => $request->request->get('contact')]
);
if ($request->getLocale() == 'pl') {
$message = (new \Swift_Message($title))->setFrom(
$language->getStoreEmail(),
$language->getShopName()
)
//->setTo('formularz@centrumkrzesel.pl')
->setTo($language->getAdminStoreEmail())
->setSubject('Contact Form')
->setBody($body, 'text/html');
$send = $mailer->send($message);
} else {
$email = new \SendGrid\Mail\Mail();
$email->setFrom($language->getStoreEmail(), $language->getStoreEmail());
$email->setSubject('Contact Form');
$email->addTo($language->getAdminStoreEmail(), $language->getAdminStoreEmail());
$email->setBccSettings(true, 'objednavky@ezidle.cz');
$email->addContent(
"text/html", $body
);
$sendgrid = new \SendGrid('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');
try {
$response = $sendgrid->send($email);
} catch (\Exception $e) {
//
}
}
$request->request->set('contact', null);
$this->setFlash($translator->trans('message_send', [], 'store', $request->getLocale()), 'success');
} else {
$this->setFlash($translator->trans('enter_content_and_contact_dat', [], 'store', $request->getLocale()), 'warning');
}
}
$workingHours = $workingHoursRepository->getForCurrentDay($request->getLocale())->getQuery()->getOneOrNullResult();
$helplineHours = $helplineHoursRepository->getForCurrentDay($request->getLocale())->getQuery()->getOneOrNullResult();
$article = $this->em()->getRepository('App:Article')->find(11);
$workingHoursTable = $workingHoursRepository->getAllForLanguage($request->getLocale())->getQuery()->getResult();
$workingHoursTableBrzeziny = $workingHoursRepository->getAllForLanguage($request->getLocale(), 'second')->getQuery()->getResult();
$twig = 'frontend/article/contact.html.twig';
if ($request->getLocale() == 'pl') {
$twig = 'frontend/article/contact-pl.html.twig';
}
return $this->render($twig, [
'workingHours' => $workingHours,
'helplineHours' => $helplineHours,
'article' => $article,
'contactData' => $contactData,
'workingHoursTable' => $workingHoursTable,
'workingHoursTableBrzeziny' => $workingHoursTableBrzeziny,
'language' => $this->resolveLanguage($request->getLocale()),
]);
}
/**
* @Route("/getresponse-handler", name="getresponse_handler")
*/
public function getResponseHandlerAction(Request $request, WorkingHoursRepository $workingHoursRepository, \Swift_Mailer $mailer, TranslatorInterface $translator, LoggerInterface $logger) {
$email = $request->request->get('email');
if (strstr($email, '@gaudytest.pl')) {
$this->addFlash('success', $translator->trans('successfuly_signed_in_on_newsletter', [], 'store', $request->getLocale()));
return $this->redirectToRoute('homepage');
}
/** @var $language Language */
$language = $this->resolveLanguage($request->getLocale());
/**
* PL -> campaingId = I
* CZ -> campaignId = d
* SK -> campaignId = a
*/
$ch = curl_init();
$body = json_encode(['email'=>$email, 'campaign'=>['campaignId'=>$language->getGetResponseCampaignId()]]);
curl_setopt($ch, CURLOPT_URL, "https://api3.getresponse360.pl/v3/contacts");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $body);
curl_setopt($ch, CURLOPT_POST, 1);
$headers = array();
$headers[] = "Content-Type: application/json";
$headers[] = "X-Auth-Token: api-key gs478s9uv59n5ekulmpmgn5p0uqpepbn";
$headers[] = "X-Domain: echairs.eu";
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
$result = curl_exec($ch);
curl_close ($ch);
$json = json_decode($result, true);
////$logger->critical(serialize($json));
if (isset($json['httpStatus'])) {
$this->addFlash('danger', $translator->trans('invalid_email_or_email_already_on_list', [], 'store', $request->getLocale()));
return $this->redirectToRoute('homepage');
} else {
$this->addFlash('success', $translator->trans('successfuly_signed_in_on_newsletter', [], 'store', $request->getLocale()));
return $this->redirectToRoute('homepage');
}
}
/**
* @Route("/getresponseapi", name="getresponse_webhook")
*/
public function getResponseWebhookAction(Request $request, TwigSwiftMailer $twigSwiftMailer, WorkingHoursRepository $workingHoursRepository, \Swift_Mailer $mailer, TranslatorInterface $translator, LoggerInterface $logger) {
//$logger->critical(serialize($request->request->all()));
if ($request->query->get('action') != 'subscribe') {
return new Response(1);
}
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')) {
/** @var $language Language */
$language = $this->em()->getRepository('App:Language')->findOneBy(['getResponseCampaignId'=>$request->query->get('CAMPAIGN_ID')]);
if (!is_object($language)) {
$language = $this->em()->getRepository('App:Language')->findOneBy(['isDefault'=>true]);
}
$date = new \DateTime();
$date->modify('+1 year');
/** @var $lang Language */
$lang = $this->em()->getRepository('App:Language')->findOneBy(['isDefault' => 1, 'deletedBy' => null]);
if ($request->query->get('campaign_name') == 'ezidle') {
$lang = $this->em()->getRepository('App:Language')->findOneBy(['id' => 2, 'deletedBy' => null]);
}
if ($request->query->get('campaign_name') == 'stolicky24') {
$lang = $this->em()->getRepository('App:Language')->findOneBy(['id' => 3, 'deletedBy' => null]);
}
if ($request->query->get('campaign_name') == 'Mobila24.ro') {
$lang = $this->em()->getRepository('App:Language')->findOneBy(['id' => 4, 'deletedBy' => null]);
}
$code = new RebateCode();
$code->setLanguage($lang);
$code->setCode(strtoupper(substr(sha1(uniqid(mt_rand(), true)), 0, 7)));
$code->setCodeType(RebateCode::CODE_TYPE_PERCENT);
$code->setPercent(3);
$code->setUsed(0);
$code->setValidTo($date);
$code->setMultiple(0);
$this->em()->persist($code);
$this->em()->flush();
/** @var $emailTemplate EmailTemplate */
$emailTemplate = $this->em()->getRepository('App:EmailTemplate')->findOneBy(['codeName' => 'rebate_code_'.$lang->getLocale()]);
if (is_object($emailTemplate)) {
$mailer = $twigSwiftMailer;
$mailer->setLanguage($lang->getLocale());
$mailer->sendRebateCode($emailTemplate, $request->query->get('contact_email'), $code->getCode());
}
}
return new JsonResponse([]);
}
/**
* @Route("/payu/ipn", name="payu-ipn")
*/
public function payURoAction(Request $request, LoggerInterface $logger, TwigSwiftMailer $twigSwiftMailer) {
/* Make sure strlen behaves as intended by setting multibyte function overload to 0*/
ini_set("mbstring.func_overload", 0);
if(ini_get("mbstring.func_overload") > 2){ /* check if mbstring.func_overload is still set to overload strings(2)*/
echo "WARNING: mbstring.func_overload is set to overload strings and might cause problems\n";
}
/* Internet Payment Notification */
$pass = "5w4?)z?w|k@a)o@6|5(X"; /* pass to compute HASH */
$result = ""; /* string for compute HASH for received data */
$return = ""; /* string to compute HASH for return result */
$signature = $_POST["HASH"]; /* HASH received */
$body = "";
/* read info received */
ob_start();
while(list($key, $val) = each($_POST)){
$$key=$val;
/* get values */
if($key != "HASH"){
if(is_array($val)) $result .= $this->ArrayExpand($val);
else{
$size = strlen(StripSlashes($val));
$result .= $size.StripSlashes($val);
}
}
}
$body = ob_get_contents();
ob_end_flush();
$date_return = date("YmdGis");
$return = strlen($_POST["IPN_PID"][0]).$_POST["IPN_PID"][0].strlen($_POST["IPN_PNAME"][0]).$_POST["IPN_PNAME"][0];
$return .= strlen($_POST["IPN_DATE"]).$_POST["IPN_DATE"].strlen($date_return).$date_return;
$hash = $this->hmac($pass, $result); /* HASH for data received */
$body .= $result."\r\n\r\nHash: ".$hash."\r\n\r\nSignature: ".$signature."\r\n\r\nReturnSTR: ".$return;
if($hash == $signature){
/* ePayment response */
$result_hash = $this->hmac($pass, $return);
$content = "<EPAYMENT>".$date_return."|".$result_hash."</EPAYMENT>";
/* Begin automated procedures (START YOUR CODE)*/
$reqData = $request->request->all();
$orderId = $reqData['REFNOEXT'];
$status = $reqData['ORDERSTATUS'];
if ($status == 'TEST' or $status == 'PAYMENT_RECEIVED' or $status == 'PAYMENT_AUTHORIZED') {
$order = $this->em()->getRepository('App:Order')->findOneBy(['id'=>$orderId]);
$em = $this->em();
if (is_object($order) and $order->getStatus()->getId() != 21) {
/* Set status of the order */
$order->setConfirmed(1);
$order->setPaid(1);
$now = new \DateTime('now');
$status_ent = $em->getRepository('App:OrderStatus')->findOneBy(array('id'=>21));
$order->setStatus($status_ent);
$em->persist($order);
$em->flush();
$email_template = $order->getPaymentMethod()->getConfirmationEmail();
if (is_object($email_template)) {
$mailer = $twigSwiftMailer;
$mailer->setLanguage('ro');
$send = $mailer->sendTemplateMessage($email_template, $order->getUser(), $order);
return new Response($content);
} else {
return new Response($content);
}
} else {
return new Response('OK');
}
} else {
$logger->critical(serialize($request->request->all()));
}
} else {
$logger->critical(serialize($request->request->all()));
}
return new Response(1);
}
function ArrayExpand($array){
$retval = "";
for($i = 0; $i < sizeof($array); $i++){
$size = strlen(StripSlashes($array[$i]));
$retval .= $size.StripSlashes($array[$i]);
}
return $retval;
}
function hmac ($key, $data){
$b = 64; // byte length for md5
if (strlen($key) > $b) {
$key = pack("H*",md5($key));
}
$key = str_pad($key, $b, chr(0x00));
$ipad = str_pad('', $b, chr(0x36));
$opad = str_pad('', $b, chr(0x5c));
$k_ipad = $key ^ $ipad ;
$k_opad = $key ^ $opad;
return md5($k_opad . pack("H*",md5($k_ipad . $data)));
}
/**
* @Route("/anaf/callback", name="anaf")
*/
public function anafCallbackAction(Request $request)
{
exit();
define('SPV_CLIENT_ID', "a1f7821ba234d0d823ff4dec3d737e8a7e3ee71d02aafa66");
define('SPV_CLIENT_SECRET', "2f6299e1f232a6c524d09e580f4709a9b20d1922ab037e8a7e3ee71d02aafa66");
define('SPV_REDIRECT', "https://www.mobila24.ro/anaf/callback");
$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";
echo "<a href='$link'>Login Anaf</a>";
/** Debug data for you */
echo "<hr>";
print_r($_POST);
print_r($_GET);
//print_r($_SERVER);
echo "<hr>";
/** Read and print authorization code */
$query = isset($_SERVER['REDIRECT_QUERY_STRING'])?$_SERVER['REDIRECT_QUERY_STRING']:"";
parse_str($query, $output);
if (isset($output['code'])) {
$code = isset($output['code']) ? $output['code'] : "";
/** Debug for authorization data */
echo "<hr>";
print_r($output);
echo "<hr>";
/** ----------------------------------------------------------------------- */
$curl = curl_init();
$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";
/** Debug Again */
echo "$test";
echo "<hr>";
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "https://logincert.anaf.ro/anaf-oauth2/v1/token");
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $test);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$server_output = curl_exec($ch);
curl_close($ch);
$outputJson = json_decode($server_output, true);
print_r($outputJson);
$access_token = $outputJson["access_token"];
var_dump('TOKEN: ');
var_dump($access_token);
var_dump($outputJson);
}
exit();
}
}