<?php
namespace App\Controller;
use App\Entity\Calculator;
use App\Entity\Conditions;
use App\Entity\CoreBanking\RlApp;
use App\Entity\Files;
use App\Entity\FooterInfo;
use App\Entity\HomeHeader;
use App\Entity\HomeSlider;
use App\Entity\LoanTypes;
use App\Entity\LoanTypesSlider;
use App\Entity\Percent;
use App\Entity\PhoneOperator;
use App\Entity\User;
use App\Models\Constants;
use App\Service\ChatbotServices\IpCheckService;
use App\Service\DetectDeviceService;
use App\Service\ErrorHandlingService;
use App\Service\FilesService;
use Doctrine\ORM\EntityManagerInterface;
use Symfony\Bridge\Twig\Mime\TemplatedEmail;
use Symfony\Component\HttpFoundation\Cookie;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\RequestStack;
use Symfony\Component\Mailer\MailerInterface;
use Symfony\Component\Mime\Address;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Component\Security\Core\Exception\AuthenticationException;
use Symfony\Contracts\Translation\TranslatorInterface;
class PageController extends BaseController
{
private $em;
protected $translator;
private $detectDeviceService;
private $fileService;
public function __construct(ErrorHandlingService $errorHandlingService, EntityManagerInterface $em, TranslatorInterface $translator, DetectDeviceService $detectDeviceService, FilesService $fileService)
{
parent::__construct($errorHandlingService);
$this->em = $em;
$this->translator = $translator;
$this->detectDeviceService = $detectDeviceService;
$this->fileService = $fileService;
}
/**
* @Route("/{_locale}", name="home",
* requirements={
* "_locale": "am|ru"
* },
* defaults={
* "_locale": "am"
* }
* )
*/
public function number(Request $request)
{
try {
$insurance = $this->em->getRepository(Calculator::class)->findOneBy(["type" => "insurance"]);
$bankCard = $this->em->getRepository(Calculator::class)->findOneBy(["type" => "bankCard"]);
$currentUrl = 'https://' . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'];
$lastCharacter = null;
if (strpos($currentUrl, 'source') !== false && strpos($currentUrl, 'medium') !== false && strpos($currentUrl, 'campaign') !== false) {
$lastCharacter = substr($currentUrl, -3);
}
$device = $this->detectDeviceService->getDevice();
$socCard = $request->get('num');
$amount = $request->get('amount');
$duration = $request->get('duration');
$amountStepPercent = $request->get('amountStepPercent');
$durationStepPercent = $request->get('durationStepPercent');
$isDiscountForInsure = $request->get('isDiscountForInsure');
$isDiscountForBankCard = $request->get('isDiscountForBankCard');
$user = $this->getUser();
if (isset($user) && !$user->getisChangePassword()) {
return $this->redirectToRoute('change-password');
}
$homeHeader = $this->em->getRepository(HomeHeader::class)->findAll();
$homeSlider = $this->em->getRepository(HomeSlider::class)->findAll();
$loanTypes = $this->em->getRepository(LoanTypes::class)->findAll();
$loanTypesSlider = $this->em->getRepository(LoanTypesSlider::class)->findAll();
$phoneOperators = $this->em->getRepository(PhoneOperator::class)->findAll();
$percentRep = $this->em->getRepository(Percent::class)->findOneBy(['orderNumber' => 1]);
$condition = $this->em->getRepository(Conditions::class)->findOneBy(['orderNumber' => 1]);
$conditionInsurance = $this->em->getRepository(Conditions::class)->findOneBy(['orderNumber' => 4]);
$baseUrl = $_ENV['BASE_URL'];
$operatorsArray = [];
foreach ($phoneOperators as $code) {
array_push($operatorsArray,$code->getCode());
}
// $recaptchaKey = $_ENV['RECAPTCHA3_KEY'];
$check = false;
if ($check) {
throw new \Exception('not_found', 1);
}
// dump($socCard);die();
// $appProdSubType = $em->getRepository('App:CoreBanking\Diction')->findBy(['dataType' => 'appProdSubType']);
return $this->render('page/home.html.twig', [
// 'recaptchaKey' => $recaptchaKey,
'homeHeader' => $homeHeader,
'homeSlider' => $homeSlider,
'loanTypesSlider' => $loanTypesSlider,
'loanTypes' => $loanTypes,
'socCard' => $socCard,
'amount' => $amount,
'duration' => $duration,
'amountStepPercent' => $amountStepPercent,
'durationStepPercent' => $durationStepPercent,
'isDiscountForInsure' => $isDiscountForInsure,
'isDiscountForBankCard' => $isDiscountForBankCard,
'device' => $device,
'operatorsArray' => json_encode($operatorsArray),
'percentData' => $percentRep,
'conditions' => $condition,
'conditionsInsurance' => $conditionInsurance,
'baseUrl' => $baseUrl,
'lastCharacterQr' => $lastCharacter,
'insurance' => $insurance,
'bankCard' => $bankCard,
// 'appProdSubType' => $appProdSubType,
]);
} catch (\Exception $e) {
throw new \ErrorException($e->getMessage(), $e->getCode());
}
}
/**
* @Route("/{_locale}/sms", name="sms",
* requirements={
* "_locale": "am|ru"
* },
* defaults={
* "_locale": "am"
* }
* )
*/
public function smsAction(Request $request)
{
try {
$device = $this->detectDeviceService->getDevice();
$socCard = $request->get('num');
$amount = $request->get('amount');
$duration = $request->get('duration');
$user = $this->getUser();
if (isset($user) && !$user->getisChangePassword()) {
return $this->redirectToRoute('change-password');
}
$homeHeader = $this->em->getRepository(HomeHeader::class)->findAll();
$homeSlider = $this->em->getRepository(HomeSlider::class)->findAll();
$loanTypes = $this->em->getRepository(LoanTypes::class)->findAll();
$loanTypesSlider = $this->em->getRepository(LoanTypesSlider::class)->findAll();
$phoneOperators = $this->em->getRepository(PhoneOperator::class)->findAll();
$percentRep = $this->em->getRepository(Percent::class)->findOneBy(['orderNumber' => 1]);
$condition = $this->em->getRepository(Conditions::class)->findOneBy(['orderNumber' => 1]);
$conditionInsurance = $this->em->getRepository(Conditions::class)->findOneBy(['orderNumber' => 4]);
$baseUrl = $_ENV['BASE_URL'];
$operatorsArray = [];
foreach ($phoneOperators as $code) {
array_push($operatorsArray,$code->getCode());
}
$check = false;
if ($check) {
throw new \Exception('not_found', 1);
}
return $this->render('page/home.html.twig', [
'homeHeader' => $homeHeader,
'homeSlider' => $homeSlider,
'loanTypesSlider' => $loanTypesSlider,
'loanTypes' => $loanTypes,
'socCard' => $socCard,
'amount' => $amount,
'duration' => $duration,
'device' => $device,
'operatorsArray' => json_encode($operatorsArray),
'percentData' => $percentRep,
'conditions' => $condition,
'conditionsInsurance' => $conditionInsurance,
'baseUrl' => $baseUrl,
]);
} catch (\Exception $e) {
throw new \ErrorException($e->getMessage(), $e->getCode());
}
}
/**
* @Route("/{_locale}/email", name="email",
* requirements={
* "_locale": "am|ru"
* },
* defaults={
* "_locale": "am"
* }
* )
*/
public function emailAction(Request $request)
{
try {
$device = $this->detectDeviceService->getDevice();
$socCard = $request->get('num');
$amount = $request->get('amount');
$duration = $request->get('duration');
$user = $this->getUser();
if (isset($user) && !$user->getisChangePassword()) {
return $this->redirectToRoute('change-password');
}
$homeHeader = $this->em->getRepository(HomeHeader::class)->findAll();
$homeSlider = $this->em->getRepository(HomeSlider::class)->findAll();
$loanTypes = $this->em->getRepository(LoanTypes::class)->findAll();
$loanTypesSlider = $this->em->getRepository(LoanTypesSlider::class)->findAll();
$phoneOperators = $this->em->getRepository(PhoneOperator::class)->findAll();
$percentRep = $this->em->getRepository(Percent::class)->findOneBy(['orderNumber' => 1]);
$condition = $this->em->getRepository(Conditions::class)->findOneBy(['orderNumber' => 1]);
$conditionInsurance = $this->em->getRepository(Conditions::class)->findOneBy(['orderNumber' => 4]);
$baseUrl = $_ENV['BASE_URL'];
$operatorsArray = [];
foreach ($phoneOperators as $code) {
array_push($operatorsArray,$code->getCode());
}
$check = false;
if ($check) {
throw new \Exception('not_found', 1);
}
return $this->render('page/home.html.twig', [
'homeHeader' => $homeHeader,
'homeSlider' => $homeSlider,
'loanTypesSlider' => $loanTypesSlider,
'loanTypes' => $loanTypes,
'socCard' => $socCard,
'amount' => $amount,
'duration' => $duration,
'device' => $device,
'operatorsArray' => json_encode($operatorsArray),
'percentData' => $percentRep,
'conditions' => $condition,
'conditionsInsurance' => $conditionInsurance,
'baseUrl' => $baseUrl,
]);
} catch (\Exception $e) {
throw new \ErrorException($e->getMessage(), $e->getCode());
}
}
/**
* @Route("/{_locale}/requests", name="requests",
* requirements={
* "_locale": "am|ru"
* },
* defaults={
* "_locale": "am"
* }
* )
*/
public function requests(Request $request)
{
$user = $this->getUser();
if (!$user) {
return $this->redirectToRoute('login');
}
$allRequest = $this->em->getRepository(RlApp::class)->findBy(['socCard' => $user->getSocCardNumber()],['createdAt' => 'DESC']);
$photo = $this->em->getRepository(Files::class)->findOneBy(['id' => $user->getUserAvatar()]);
if ($photo) {
$userAvatar = $this->fileService->fileToBase64($photo);
} else {
$userAvatar = '';
}
// dump($allRequest);die();
return $this->render('page/requests.html.twig', array(
'user' => $user,
'allRequest' => $allRequest,
'userAvatar' => $userAvatar,
));
}
// /**
// * @Route("/{_locale}/conditions-akra-ekeng-nork", name="conditions-akra-ekeng-nork",
// * requirements={
// * "_locale": "am|ru"
// * },
// * defaults={
// * "_locale": "am"
// * }
// * )
// */
// public function conditionsOne(Request $request)
// {
// $condition = $this->em->getRepository(Conditions::class)->findOneBy(['orderNumber' => 1]);
//
// return $this->render('page/conditions-one.html.twig', array(
// 'conditions' => $condition,
//
// ));
// }
// /**
// * @Route("/{_locale}/conditions-credit", name="conditions-credit",
// * requirements={
// * "_locale": "am|ru"
// * },
// * defaults={
// * "_locale": "am"
// * }
// * )
// */
// public function conditionsTwo(Request $request)
// {
// $condition = $this->em->getRepository(Conditions::class)->findOneBy(['orderNumber' => 2]);
//
// return $this->render('page/conditions-one.html.twig', array(
// 'conditions' => $condition,
//
// ));
// }
// /**
// * @Route("/{_locale}/conditions-open-credit", name="conditions-open-credit",
// * requirements={
// * "_locale": "am|ru"
// * },
// * defaults={
// * "_locale": "am"
// * }
// * )
// */
// public function conditionsThree(Request $request)
// {
// $condition = $this->em->getRepository(Conditions::class)->findOneBy(['orderNumber' => 3]);
//
// return $this->render('page/conditions-one.html.twig', array(
// 'conditions' => $condition,
//
// ));
// }
// /**
// * @Route("/{_locale}/conditions-four", name="conditions-four",
// * requirements={
// * "_locale": "am|ru"
// * },
// * defaults={
// * "_locale": "am"
// * }
// * )
// */
// public function conditionsFour(Request $request)
// {
// $condition = $this->em->getRepository(Conditions::class)->findOneBy(['orderNumber' => 4]);
//
// return $this->render('page/conditions-one.html.twig', array(
// 'conditions' => $condition,
//
// ));
// }
// /**
// * @Route("/{_locale}/conditions-five", name="conditions-five",
// * requirements={
// * "_locale": "am|ru"
// * },
// * defaults={
// * "_locale": "am"
// * }
// * )
// */
// public function conditionsFive(Request $request)
// {
// $condition = $this->em->getRepository(Conditions::class)->findOneBy(['orderNumber' => 5]);
//
// return $this->render('page/conditions-one.html.twig', array(
// 'conditions' => $condition,
//
// ));
// }
/**
* @Route("/{_locale}/credit-types-view", name="credit_types_view",
* requirements={
* "_locale": "am|ru"
* },
* defaults={
* "_locale": "am"
* }
* )
*/
public function credit_types_view(Request $request)
{
$user = $this->getUser();
if (!$user) {
return $this->redirectToRoute('login');
}
$allRequest = $this->em->getRepository(RlApp::class)->findBy(['socCard' => $user->getSocCardNumber()],['createdAt' => 'DESC']);
$photo = $this->em->getRepository(Files::class)->findOneBy(['id' => $user->getUserAvatar()]);
if ($photo) {
$userAvatar = $this->fileService->fileToBase64($photo);
} else {
$userAvatar = '';
}
// dump($allRequest);die();
return $this->render('page/credit.html.twig', array(
'user' => $user,
'allRequest' => $allRequest,
'userAvatar' => $userAvatar,
));
}
/**
* @Route("/{_locale}/info", name="info",
* requirements={
* "_locale": "am|ru"
* },
* defaults={
* "_locale": "am"
* }
* )
*/
public function info(Request $request)
{
$user = $this->getUser();
if (!$user) {
return $this->redirectToRoute('login');
}
$photo = $this->em->getRepository(Files::class)->findOneBy(['id' => $user->getUserAvatar()]);
if ($photo) {
$userAvatar = $this->fileService->fileToBase64($photo);
} else {
$userAvatar = '';
}
return $this->render('page/user_info.html.twig', array(
'user' => $user,
'userAvatar' => $userAvatar,
'username' => $user->getSocCardNumber(),
));
}
/**
* @Route("/{_locale}/update-user-profile-information", name="update-user-profile-information",
* requirements={
* "_locale": "am|ru"
* },
* defaults={
* "_locale": "am"
* }
* )
*/
public function updateUserProfileInformationAction(Request $request)
{
try {
$user = $this->getUser();
if (!$user)
throw new AuthenticationException();
$newMail = false;
if (!filter_var($_POST['mailAddress'], FILTER_VALIDATE_EMAIL)) {
$this->addFlash('danger', $this->translator->trans('Invalid email format'));
return $this->redirectToRoute('info');
} else {
if ($_POST['mailAddress'] && $user->getEmail() !== $_POST['mailAddress']) {
$checkEmail = $this->em->getRepository(User::class)->findOneBy(['email' => $_POST['mailAddress']]);
if ($checkEmail) {
$this->addFlash('danger', $this->translator->trans('такой email уже зарегистрирован'));
return $this->redirectToRoute('info');
} else {
$this->em->getRepository(User::class)->find($user->getId())->setEmail($_POST['mailAddress']);
$this->em->getRepository(User::class)->find($user->getId())->setCheckEmail(false);
$newMail = true;
}
}
}
$numberPhone = str_replace(["(", ")", " ", "-", "+"], "", $_POST['phoneNumber']);
$this->em->getRepository(User::class)->find($user->getId())->setPhoneNumber($numberPhone);
if (isset($_POST['isIndividual']) && $_POST['isIndividual']){
$this->em->getRepository(User::class)->find($user->getId())->setIsIndividual(true);
} else {
$this->em->getRepository(User::class)->find($user->getId())->setIsIndividual(false);
}
$this->em->flush();
$this->addFlash('success', $this->translator->trans('Ваши данные успешно обновлены'));
if ($newMail) {
return $this->redirectToRoute('confirm-user-new-email');
} else {
return $this->redirectToRoute('info');
}
} catch (\ErrorException $e) {
throw new \ErrorException($e->getMessage());
}
}
/**
* @Route("/confirm-user-new-email", name="confirm-user-new-email",
* requirements={
* "_locale": "am|ru"
* },
* defaults={
* "_locale": "am"
* }
* )
*/
public function confrimUserEmailAction($_locale, MailerInterface $mailer)
{
try {
$user = $this->getUser();
if (!$user)
throw new AuthenticationException();
$code = '0123456789asdfghjklmnbvcxzqwertyuiop0123456789asdfghjklmnbvcxzqwertyuiop0123456789asdfghjklmnbvcxzqwertyuiop0123456789asdfghjklmnbvcxzqwertyuiop0123456789asdfghjklmnbvcxzqwertyuiop0123456789asdfghjklmnbvcxzqwertyuiop0123456789asdfghjklmnbvcxzqwertyuiop0123456789asdfghjklmnbvcxzqwertyuiop0123456789asdfghjklmnbvcxzqwertyuiop0123456789asdfghjklmnbvcxzqwertyuiop0123456789asdfghjklmnbvcxzqwertyuiop0123456789asdfghjklmnbvcxzqwertyuiop';
$codeHash = substr(str_shuffle($code), 0, 64);
$this->em->getRepository(User::class)->find($user->getId())->setEmailHash($codeHash);
$this->em->getRepository(User::class)->find($user->getId())->setIsVerified(true);
$this->em->flush();
// $this->emailVerifier->sendEmailConfirmation('app_verify_email', $user,
// (new TemplatedEmail())
// ->from(new Address($_ENV['FROM_EMAIL'], 'Toolbox Registration'))
// ->to($user->getEmail())
// ->subject('Банк ВТБ (Армения)')
// ->htmlTemplate('Chatbot/confirm-profile-email.html.twig')
// ->context([
// 'codeHash' => $codeHash,
// ])
// );
return $this->redirectToRoute('info');
} catch (\ErrorException $e) {
throw new \ErrorException($e->getMessage());
}
}
/**
* @Route("/step-1", name="step_1")
*/
public function step1(Request $request)
{
return $this->render('page/step_1.html.twig');
}
/**
* @Route("/step-2", name="step_2")
*/
public function step2(Request $request)
{
$user = $this->getUser();
if ($user) {
return $this->redirectToRoute('step_16');
}
return $this->render('page/step_2.html.twig');
}
/**
* @Route("/step-3", name="step_3")
*/
public function step3(Request $request)
{
return $this->render('page/step_3.html.twig');
}
/**
* @Route("/step-5", name="step_5")
*/
public function step5(Request $request)
{
return $this->render('page/step_5.html.twig');
}
/**
* @Route("/step-6", name="step_6")
*/
public function step6(Request $request)
{
return $this->render('page/step_6.html.twig');
}
/**
* @Route("/step-7", name="step_7")
*/
public function step7(Request $request)
{
return $this->render('page/step_7.html.twig');
}
/**
* @Route("/step-7-1", name="step_7_1")
*/
public function step7_1(Request $request)
{
return $this->render('page/step_7_1.html.twig');
}
/**
* @Route("/step-8", name="step_8")
*/
public function step8(Request $request)
{
return $this->render('page/step_8.html.twig');
}
/**
* @Route("/step-12", name="step_12")
*/
public function step12(Request $request)
{
return $this->render('page/step_12.html.twig');
}
// /**
// * @Route("/step-16", name="step_16")
// */
// public function step16(IpCheckService $ipCheckService, Request $request, $wrongRequest = false, $shop = null, $formId = null, $cancelRequest = null, $requestId = null)
// {
// try {
// $em = $this->getDoctrine()->getManager();
// if ($shop) {
// $response = new \Symfony\Component\HttpFoundation\Response();
// $cookie = new Cookie('shop', $shop);
// $response->headers->setCookie($cookie);
// $response->sendHeaders();
// }
// $user = $this->getUser();
// if (!$user) {
// return $this->redirectToRoute('login');
// }
// $isLive = Constants::ISLIVE;
// $noApproved = false;
// $newApproved = false;
// $allShopAddress = $this->getDoctrine()->getRepository('App:Chatbot\ShopAdress')->findBy(['isVisible' => true], ['title' => 'ASC']);
// if (!$user->getApprovdedCode()) {
// return $this->redirectToRoute('beforeRegistration');
// }
// $reqCount = $this->getDoctrine()->getRepository('App:Chatbot\OnlineRequestInfo')->findBy(['userId' => $user->getId()]);
// if ($user->getEmail() === $user->getSocCardNumber() . '@mail.ru') {
// $oneReq = $this->getDoctrine()->getRepository('App:Chatbot\OnlineRequestInfo')->findBy(['userId' => $user->getId()]);
// if (count($oneReq) === 1) {
// $noApproved = true;
// }
// } else if ($user->getEmail() !== $user->getSocCardNumber() . '@mail.ru' && !$user->getCheckEmail() && count($reqCount) > 0) {
// $newApproved = true;
// }
// if ($cancelRequest != null) {
// $currentRequest = $em->getRepository('App:Chatbot\OnlineRequestInfo')->findOneBy(['id' => $cancelRequest]);
// if ($currentRequest) {
// $cancelClientStatus = $em->getRepository('App:Chatbot\OnlineRequestStatus')->find(8);
// $currentRequest->setConfirmStatus($cancelClientStatus);
// $em->flush();
// return $this->redirectToRoute('step_6');
// }
// }
// $allRequest = $this->getDoctrine()->getRepository('App:Chatbot\OnlineRequestInfo')->findBy(['userId' => $user->getId()]);
// $lastFormSubmit = null;
// $ipBoolean = $ipCheckService->checkIp();
// }catch (\ErrorException $e){
// throw new \ErrorException($e->getMessage());
// }
//
// return $this->render('page/step_16.html.twig',array(
// 'allRequest' => $allRequest,
// 'user' => $user,
// 'noApproved' => $noApproved,
// 'newApproved' => $newApproved,
// 'wrongRequest' => $wrongRequest,
// 'allShopAddress' => $allShopAddress,
// 'isLive' => $isLive,
// 'lastFormSubmit' => $lastFormSubmit,
// 'ipBoolean' => $ipBoolean,
// ));
// }
}