src/Controller/DefaultController.php line 46

Open in your IDE?
  1. <?php
  2. namespace App\Controller;
  3. use App\DTO\OrderFormDTO;
  4. use App\Entity\P24roninOrders;
  5. use App\Entity\User;
  6. use App\Helper\RandStringHelper;
  7. use App\Service\Integrations\Przelewy24;
  8. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  9. use Symfony\Component\HttpFoundation\Response;
  10. use Symfony\Component\HttpFoundation\JsonResponse;
  11. use Symfony\Component\Routing\Annotation\Route;
  12. use Symfony\Component\HttpFoundation\Request;
  13. use Doctrine\ORM\EntityManagerInterface;
  14. use Doctrine\Persistence\ManagerRegistry;
  15. use Symfony\Component\Mailer\MailerInterface;
  16. use App\Security\EmailVerifier;
  17. use Symfony\Bridge\Twig\Mime\TemplatedEmail;
  18. use Symfony\Component\Mime\Address;
  19. use App\Form\ContactFormType;
  20. use Symfony\Component\Serializer\Encoder\JsonEncoder;
  21. use Symfony\Component\Serializer\Normalizer\ObjectNormalizer;
  22. use Symfony\Component\Serializer\Serializer;
  23. use Throwable;
  24. class DefaultController extends AbstractController
  25. {
  26.     const P24_MERCHANT_ID 204581;
  27.     const P24_POS_ID      204581;
  28.     const P24_CRC         '9060559fa034dfd7';
  29.     private EmailVerifier $emailVerifier;
  30.     private EntityManagerInterface $em;
  31.     public function __construct(
  32.         EmailVerifier $emailVerifier,
  33.         EntityManagerInterface $em
  34.     ) {
  35.         $this->emailVerifier $emailVerifier;
  36.         $this->em $em;
  37.     }
  38.     #[Route('/'name'home')]
  39.     public function index(): Response
  40.     {
  41.         $contactForm $this->createForm(ContactFormType::class);
  42.         return $this->render('default/index.html.twig', [
  43.             'controller_name' => 'DefaultController',
  44.             'session_id' => md5(session_id().date("YmdHis")),
  45.             'contactForm' => $contactForm->createView(),
  46.         ]);
  47.     }
  48.     #[Route('/homepage_order_form'name'app_form_order')]
  49.     public function orderFormAction(Request $requestMailerInterface $mailer): JsonResponse
  50.     {
  51.         if($request->isMethod('POST')) {
  52.             $objectNormalizer = new ObjectNormalizer();
  53.             $normalizers = [$objectNormalizer];
  54.             $encoders = [new JsonEncoder()];
  55.             $serializer = new Serializer($normalizers$encoders);
  56.             /** @var OrderFormDTO $formData */
  57.             $formData $serializer->deserialize($request->getContent(), OrderFormDTO::class, 'json');
  58.             try {
  59.                 $string_pass null;
  60.                 $user $this->em->getRepository(User::class)->findOneByEmail($formData->getEmail());
  61.                 if ($user === null) {
  62.                     $generatePass RandStringHelper::generate();
  63.                     $string_pass "Hasło: ".$generatePass;
  64.                     $user $this->em->getRepository(User::class)->addUserFromMail($generatePass$formData->getEmail());
  65.                 }
  66.                 // Price in pennies by gross price => amount of assessments
  67.                 $availableAssessments = [
  68.                     => 1,
  69.                     2448 => 1,
  70.                     11058 => 5,
  71.                     40578 => 20,
  72.                     98388 => 50,
  73.                 ];
  74.                 $selectedAssessment $availableAssessments[$formData->getFinalPriceGross()];
  75.                 $mailToClient = (new TemplatedEmail())
  76.                     ->from(new Address('kontakt@ronin24.pl''Ronin24'))
  77.                     ->to($formData->getEmail())
  78.                     ->subject('Potwierdzenie złożenia zamówienia w RONiN24.pl')
  79.                     ->htmlTemplate('default/order_email.html.twig')
  80.                     ->context([
  81.                         'company_name' => $formData->getCompany() ?? '-',
  82.                         'nip' => $formData->getNip() ?? '-',
  83.                         'address' => $formData->getFullAddress(),
  84.                         'pakiet' => $selectedAssessment,
  85.                         'netto' => number_format($formData->getFinalPriceNet()/1002),
  86.                         'brutto' => number_format($formData->getFinalPriceGross()/1002),
  87.                         'phone' => $formData->getPhone(),
  88.                         'client' => $formData->getName(),
  89.                         'cemail' => $formData->getEmail(),
  90.                         'password' => $string_pass,
  91.                     ])
  92.                 ;
  93.                 $mailToRoninAdmins = (new TemplatedEmail())
  94.                     ->from(new Address('kontakt@ronin24.pl''Ronin24'))
  95.                     ->to('kontakt@ronin24.pl')
  96.                     ->subject('Nowe zapytanie ofertowe w RONiN24.pl')
  97.                     ->htmlTemplate('default/order_email.html.twig')
  98.                     ->context([
  99.                         'company_name' => $formData->getCompany() ?? '-',
  100.                         'nip' => $formData->getNip() ?? '-',
  101.                         'address' => $formData->getFullAddress(),
  102.                         'pakiet' => $selectedAssessment,
  103.                         'netto' => number_format($formData->getFinalPriceNet()/1002),
  104.                         'brutto' => number_format($formData->getFinalPriceGross()/1002),
  105.                         'phone' => $formData->getPhone(),
  106.                         'client' => $formData->getName(),
  107.                         'cemail' => $formData->getEmail(),
  108.                         'password' => $string_pass,
  109.                     ])
  110.                 ;
  111.                 $mailer->send($mailToClient);
  112.                 $mailer->send($mailToRoninAdmins);
  113.                 $randomSessionID md5(session_id().date("YmdHis"));
  114.                 // Można było zdecydowanie lepiej to zrobić, ale niestety czas na gonił ;p
  115.                 // $P24 = new Przelewy24(self::P24_MERCHANT_ID, self::P24_POS_ID, self::P24_CRC, false); // Prod
  116.                $P24 = new Przelewy24(204580204580'41944b70501d6345'true); // Sandbox
  117.                 $P24->addValue("p24_session_id"$randomSessionID);
  118.                 $P24->addValue("p24_order_id"rand());
  119.                 $P24->addValue("p24_amount"$formData->getFinalPriceGross());
  120.                 $P24->addValue("p24_currency"'PLN');
  121.                 $P24->addValue("p24_description"'Zakup uslugi Ronin');
  122.                 $P24->addValue("p24_country"'PL');
  123.                 $P24->addValue('p24_api_version''3.2');
  124.                 $P24->addValue("p24_email"$formData->getEmail());
  125.                 $P24->addValue("p24_client"$formData->getCompany() ?? $formData->getName());
  126.                 $P24->addValue("p24_street"$formData->getAddress());
  127.                 $P24->addValue("p24_number_street"$formData->getApartmentNumber());
  128.                 $P24->addValue("p24_city"$formData->getCity());
  129.                 $P24->addValue("p24_zip_code"$formData->getPostalCode());
  130.                 $P24->addValue("p24_phone"$formData->getPhone());
  131.                 $P24->addValue('p24_url_return''https://' $request->getHost() . '/potwierdzono');
  132.                 $P24->addValue('p24_url_status''https://' $request->getHost() . '/zaplac?ok=2');
  133.                 $orderSession $this->em->getRepository(P24roninOrders::class)->findOneBy(array('p24_session_id' => $randomSessionID));
  134.                 if ($orderSession === null){
  135.                     $p24Sign md5($randomSessionID ."|"self::P24_POS_ID ."|"$formData->getFinalPriceGross()/100 ."|PLN|".self::P24_CRC) ;
  136.                     $p24ronin_orders = new P24roninOrders();
  137.                     $p24ronin_orders->setP24MerchantId(self::P24_MERCHANT_ID);
  138.                     $p24ronin_orders->setP24PosId(self::P24_POS_ID);
  139.                     $p24ronin_orders->setP24Crc(self::P24_CRC);
  140.                     $p24ronin_orders->setP24SessionId($randomSessionID);
  141.                     $p24ronin_orders->setP24Amount($formData->getFinalPriceGross()/100);
  142.                     $p24ronin_orders->setP24Currency('PLN');
  143.                     $p24ronin_orders->setP24Client($formData->getName());
  144.                     $p24ronin_orders->setP24Email($formData->getEmail());
  145.                     $p24ronin_orders->setP24Company($formData->getCompany() ?? '');
  146.                     $p24ronin_orders->setP24Address($formData->getFullAddress());
  147.                     $p24ronin_orders->setP24Nip($formData->getNip() ?? '');
  148.                     $p24ronin_orders->setDateinsert(new \DateTime());
  149.                     $p24ronin_orders->setP24Phone($formData->getPhone());
  150.                     $p24ronin_orders->setP24Sign($p24Sign);
  151.                     $p24ronin_orders->setUserId($user->getId());
  152.                     $p24ronin_orders->setP24Netto($formData->getFinalPriceNet()/100);
  153.                     $this->em->persist($p24ronin_orders);
  154.                     $this->em->flush();
  155.                 }
  156.                 $p24TestConnection $P24->testConnection();
  157.                 if(isset($p24TestConnection["error"]) && $p24TestConnection["error"] !== '0') {
  158.                     dump('test_connection_error');
  159.                     return new JsonResponse(
  160.                         [
  161.                             'status'  => 'error',
  162.                             'message' => 'Błąd podczas wysyłki formularza! Spróbuj ponownie później!',
  163.                         ],
  164.                         500);
  165.                 }
  166.                 $p24Register $P24->trnRegister();
  167.                 return new JsonResponse(
  168.                     [
  169.                         'status'           => 'success',
  170.                         'message'          => "Zaraz zostaniesz przekierowany do płatności!",
  171.                         'p24RedirectToken' => $P24->trnRequest($p24Register['token'], false),
  172.                     ],
  173.                     200
  174.                 );
  175.             } catch ( Throwable $t ) {
  176.                 dump($t->getMessage());
  177.                 return new JsonResponse(
  178.                     [
  179.                         'status'  => 'error',
  180.                         'message' => 'Błąd podczas składania zamówienia! Spróbuj ponownie później!',
  181.                     ],
  182.                     500);
  183.             }
  184.         }
  185.         return new JsonResponse(
  186.             [
  187.                 'status'  => 'error',
  188.                 'message' => 'Błąd podczas składania zamówienia! Spróbuj ponownie później!',
  189.             ],
  190.             500);
  191.     }
  192.    
  193. //    #[Route('/order', name: 'order')]
  194. //    public function order(Request $request, ManagerRegistry $doctrine,MailerInterface $mailer): Response
  195. //    {
  196. //        $pattern = '/^[a-zA-Z0-9.\-_]+@[a-zA-Z0-9\-.]+\.[a-zA-Z]{2,4}$/';
  197. //        if ($_POST['p24_email'] !== '' && $_POST['nip'] !== '' && $_POST['company_name'] !== '' && $_POST['p24_amount'] !== '' && $_POST['p24_phone'] !== '' && preg_match($pattern, $_POST['p24_email'])){
  198. //            $price = $_POST['p24_amount']/100;
  199. //            $brutto = $price*1.23;
  200. //
  201. //            $mail = (new TemplatedEmail())
  202. //                    ->from(new Address('kontakt@ronin24.pl', 'Ronin24'))
  203. //                    ->to($_POST['p24_email'])
  204. //                    ->subject('Potwierdzenie złożenia zamówienia w RONiN24.pl')
  205. //                    ->htmlTemplate('default/order_email.html.twig')
  206. //                    ->context([
  207. //                    'company_name' => $_POST['company_name'],
  208. //                    'nip' => $_POST['nip'],
  209. //                    'address' => $_POST['p24_address'],
  210. //                    'pakiet' => $_POST['pakiet'],
  211. //                    'netto' => $price,
  212. //                    'brutto' => number_format($brutto, 2),
  213. //                    'phone' => $_POST['p24_phone'],
  214. //                    'client' => $_POST['p24_client'],
  215. //
  216. //                    ])
  217. //            ;
  218. //             $mailer->send($mail);
  219. //             $mail2 = (new TemplatedEmail())
  220. //                    ->from(new Address($_POST['p24_email'], $_POST['p24_client']))
  221. //                    ->to('kontakt@ronin24.pl')
  222. //                    ->subject('Nowe zapytanie ofertowe w RONiN24.pl')
  223. //                    ->htmlTemplate('default/order_email.html.twig')
  224. //                    ->context([
  225. //                    'company_name' => $_POST['company_name'],
  226. //                    'nip' => $_POST['nip'],
  227. //                    'address' => $_POST['p24_address'],
  228. //                    'pakiet' => $_POST['pakiet'],
  229. //                    'netto' => $price,
  230. //                    'brutto' => number_format($brutto, 2),
  231. //                    'phone' => $_POST['p24_phone'],
  232. //                    'client' => $_POST['p24_client'],
  233. //
  234. //                    ])
  235. //            ;
  236. //             $mailer->send($mail2);
  237. //
  238. //            return new JsonResponse(1);
  239. //        }
  240. //        else {
  241. //            return new JsonResponse(0);
  242. //        }
  243. //
  244. //    }
  245.     #[Route('/contact'name'contact')]
  246.      public function contact(Request $requestManagerRegistry $doctrine,MailerInterface $mailer): Response
  247.      {
  248.         
  249.         $pattern '/^[a-zA-Z0-9.\-_]+@[a-zA-Z0-9\-.]+\.[a-zA-Z]{2,4}$/';
  250.         if ($_POST["contact_form"]["email"] !== '' && $_POST["contact_form"]['phone'] !== '' && $_POST["contact_form"]['textarea'] !== '' && $_POST["contact_form"]['checkbox'] !== ''  && preg_match($pattern$_POST["contact_form"]["email"] )){
  251.             $mail = (new TemplatedEmail())
  252.                     ->from(new Address('kontakt@ronin24.pl''Ronin24'))
  253.                     ->to($_POST["contact_form"]["email"])
  254.                     ->subject('Potwierdzenie wysłania z formularza w RONiN24.pl')
  255.                     ->htmlTemplate('default/contact_email.html.twig')
  256.                     ->context([    
  257.                     'phone' => $_POST["contact_form"]['phone'],
  258.                     'textarea' => $_POST["contact_form"]['textarea'],
  259.                     ])
  260.             ;
  261.              $mailer->send($mail);
  262.              $mail2 = (new TemplatedEmail())
  263.                     ->from(new Address($_POST["contact_form"]["email"], ' Email'))
  264.                     ->to('kontakt@ronin24.pl')
  265.                     ->subject('Nowe wiadomosć w RONiN24.pl')
  266.                     ->htmlTemplate('default/contact_email.html.twig')
  267.                     ->context([    
  268.                     'phone' => $_POST["contact_form"]['phone'],
  269.                     'textarea' => $_POST["contact_form"]['textarea'],
  270.                     ])
  271.             ;
  272.              $mailer->send($mail2);
  273.          return new JsonResponse(1);
  274.          }
  275.         else {
  276.             return new JsonResponse(0);
  277.         }
  278.      }
  279. }