src/Controller/RegistrationController.php line 257

Open in your IDE?
  1. <?php
  2. namespace App\Controller;
  3. use App\Entity\User;
  4. use App\Entity\UserVendor;
  5. use App\Entity\Vendor;
  6. use App\Form\Model\EmailRegistrationFormModel;
  7. use App\Form\RegistrationStep2Type;
  8. use App\Form\RegistrationStep3Type;
  9. use App\Repository\UserRepository;
  10. use App\Repository\VendorRepository;
  11. use App\Repository\WilayahRepository;
  12. use Doctrine\Persistence\ManagerRegistry;
  13. use Symfony\Bridge\Twig\Mime\TemplatedEmail;
  14. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  15. use Symfony\Component\Form\Extension\Core\Type\EmailType;
  16. use Symfony\Component\Form\Extension\Core\Type\SubmitType;
  17. use Symfony\Component\HttpFoundation\JsonResponse;
  18. use Symfony\Component\HttpFoundation\Request;
  19. use Symfony\Component\HttpFoundation\Response;
  20. use Symfony\Component\Mailer\MailerInterface;
  21. use Symfony\Component\Mime\Email;
  22. use Symfony\Component\PasswordHasher\Hasher\UserPasswordHasherInterface;
  23. use Symfony\Component\Routing\Annotation\Route;
  24. class RegistrationController extends AbstractController
  25. {
  26.     private MailerInterface $mailer;
  27.     private ManagerRegistry $doctrine;
  28.     private UserPasswordHasherInterface $passwordHasher;
  29.     private WilayahRepository $wilayahRepository;
  30.     public function __construct(
  31.         MailerInterface $mailer,
  32.         ManagerRegistry $doctrine,
  33.         UserPasswordHasherInterface $passwordHasher,
  34.         WilayahRepository $wilayahRepository
  35.     ) {
  36.         $this->mailer $mailer;
  37.         $this->doctrine $doctrine;
  38.         $this->passwordHasher $passwordHasher;
  39.         $this->wilayahRepository $wilayahRepository;
  40.     }
  41.     private function generatePass(): string
  42.     {
  43.         $random null;
  44.         $char '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
  45.         $n 6;
  46.         for ($i 0$i <= $n$i++) {
  47.             $index rand(0strlen($char) - 1);
  48.             $random .= $char[$index];
  49.         }
  50.         return $random;
  51.     }
  52.     private function sendEmail($email$random$url)
  53.     {
  54.         $mail = (new TemplatedEmail())
  55.             ->from('sysadmin@wicida.ac.id')
  56.             ->to($email)
  57.             ->subject('Konfirmasi Pendaftaran Akun E-tender PDAM')
  58.             ->htmlTemplate('registration/email.html.twig')
  59.             ->context([
  60.                 'url2' => $url '/registration-step2/' $random
  61.             ]);
  62.         $this->mailer->send($mail);
  63.         return true;
  64.     }
  65.     private function addVendor($params)
  66.     {
  67.         $entityManager $this->doctrine->getManager();
  68.         $user = new User();
  69.         $user->setEmail($params['email']);
  70.         $user->setEnabled(true);
  71.         $user->setPlainPassword($params['password']);
  72.         $hashedPassword $this->passwordHasher->hashPassword(
  73.             $user,
  74.             $params['password']
  75.         );
  76.         $user->setPassword($hashedPassword);
  77.         $user->setRoles([
  78.             'ROLE_USER',
  79.             'ROLE_VENDOR'
  80.         ]);
  81.         $vendor = new Vendor();
  82.         $vendor->setEmail($params['email']);
  83.         $vendor->setKodePendaftaran($params['password']);
  84.         $vendor->setStatus('DRAFT');
  85.         $vendor->setNamaPerusahaan("");
  86.         $vendor->setKodePendaftaran($params['password']);
  87.         $userVendor = new UserVendor();
  88.         $userVendor->setUser($user);
  89.         $userVendor->setVendor($vendor);
  90.         $userVendor->setKodePendaftaran($params['password']);
  91.         $entityManager->persist($user);
  92.         $entityManager->persist($vendor);
  93.         $entityManager->persist($userVendor);
  94.         $entityManager->flush();
  95.     }
  96.     #[Route('/registration-step2/{kodePendaftaran}'name'app_registration_step2')]
  97.     public function step2(
  98.         Request $request,
  99.         VendorRepository $vendorRepository,
  100.         UserRepository $userRepository,
  101.         ManagerRegistry $doctrine,
  102.         $kodePendaftaran
  103.     ): Response {
  104.         $entityManager $doctrine->getManager();
  105.         $vendor $vendorRepository->findOneBy([
  106.             'kodePendaftaran' => $kodePendaftaran
  107.         ]);
  108.         if (!$vendor) {
  109.             return $this->redirectToRoute('app_homepage');
  110.         }
  111.         $form $this->createForm(RegistrationStep2Type::class, [
  112.             'username' => $vendor->getEmail()
  113.         ]);
  114.         $form->handleRequest($request);
  115.         if ($form->isSubmitted() && $form->isValid()) {
  116.             // $form->getData() holds the submitted values
  117.             // but, the original `$task` variable has also been updated
  118.             $pendaftaran $form->getData();
  119.             $vendor->setNpwp($pendaftaran['npwp']);
  120.             $vendor->setBentukUsaha($pendaftaran['bentukUsaha']);
  121.             $vendor->setKantorCabang($pendaftaran['statusKantor']);
  122.             $user $userRepository->findOneBy([
  123.                 'email' => $vendor->getEmail()
  124.             ]);
  125.             $hashedPassword $this->passwordHasher->hashPassword(
  126.                 $user,
  127.                 $pendaftaran['password']
  128.             );
  129.             $user->setPassword($hashedPassword);
  130.             $entityManager->persist($user);
  131.             $entityManager->persist($vendor);
  132.             $entityManager->flush();
  133.             // ... perform some action, such as saving the task to the database
  134.             return $this->redirectToRoute('app_registration_step3', ['kodePendaftaran' => $kodePendaftaran]);
  135.         }
  136.         return $this->render('registration/step2.html.twig', [
  137.             'form' => $form->createView()
  138.         ]);
  139.     }
  140.     #[Route('/registration-step3/{kodePendaftaran}'name'app_registration_step3')]
  141.     public function step3(
  142.         Request $request,
  143.         VendorRepository $vendorRepository,
  144.         UserRepository $userRepository,
  145.         ManagerRegistry $doctrine,
  146.         $kodePendaftaran
  147.     ): Response {
  148.         $entityManager $doctrine->getManager();
  149.         $vendor $vendorRepository->findOneBy([
  150.             'kodePendaftaran' => $kodePendaftaran
  151.         ]);
  152.         if (!$vendor) {
  153.             return $this->redirectToRoute('app_homepage');
  154.         }
  155.         $form $this->createForm(RegistrationStep3Type::class);
  156.         $form->handleRequest($request);
  157.         if ($form->isSubmitted() && $form->isValid()) {
  158.             // $form->getData() holds the submitted values
  159.             // but, the original `$task` variable has also been updated
  160.             $pendaftaran $form->getData();
  161.             $vendor->setProvinsi($pendaftaran['provinsi']);
  162.             $kota $this->wilayahRepository->findOneBy([
  163.                 'kode' => $pendaftaran['kota']->getKode()
  164.             ]);
  165.             $vendor->setKota($kota);
  166.             $vendor->setNoPengukuhanNpwp($pendaftaran['noPKP']);
  167.             $vendor->setNamaPerusahaan($pendaftaran['namaPerusahaan']);
  168.             $vendor->setAlamatPerusahaan($pendaftaran['alamatPerusahaan']);
  169.             $vendor->setKodePOs($pendaftaran['kodepos']);
  170.             $vendor->setTelepon($pendaftaran['noTelepon']);
  171.             $vendor->setFax($pendaftaran['fax']);
  172.             $vendor->setHp($pendaftaran['noHandphone']);
  173.             $vendor->setDeskripsi($pendaftaran['deskripsi']);
  174.             $entityManager->persist($vendor);
  175.             $entityManager->flush();
  176.             $email $vendor->getEmail();
  177.             $mail = (new TemplatedEmail())
  178.                 ->from('sysadmin@wicida.ac.id')
  179.                 ->to($email)
  180.                 ->subject('Registrasi Berhasil')
  181.                 ->htmlTemplate('registration/email2.html.twig')
  182.                 ->context([
  183.                     'username' => $email
  184.                 ]);
  185.             $this->mailer->send($mail);
  186.             // ... perform some action, such as saving the task to the database
  187.             return $this->redirectToRoute('app_registration_success');
  188.         }
  189.         return $this->render('registration/step2.html.twig', [
  190.             'form' => $form->createView()
  191.         ]);
  192.     }
  193.     #[Route('/registration-success'name'app_registration_success')]
  194.     public function registrationSuccess()
  195.     {
  196.         return $this->render('registration/success.html.twig', []);
  197.     }
  198.     #[Route('/registration-Email/{email}'name'app_registration_Email')]
  199.     public function registrationEmail($email)
  200.     {
  201.         return $this->render('registration/success-email.html.twig', [
  202.             'email' => $email
  203.         ]);
  204.     }
  205.     #[Route('/registration'name'app_registration')]
  206.     public function formEmail(Request $request): Response
  207.     {
  208.         $emailRegistrationForm = new EmailRegistrationFormModel();
  209.         $form $this->createFormBuilder($emailRegistrationForm)
  210.             ->add('email'EmailType::class, [
  211.                 'help' => 'Pastikan memasukkan alamat email valid dan aktif. Contoh susan@gmail.com',
  212.                 'attr' => [
  213.                     'placeholder' => 'ptanugerah@anugerah.co.id'
  214.                 ]
  215.             ])
  216.             ->add('daftar'SubmitType::class, ['label' => 'Daftar'])
  217.             ->getForm();
  218.         $form->handleRequest($request);
  219.         if ($form->isSubmitted() && $form->isValid()) {
  220.             // $form->getData() holds the submitted values
  221.             // but, the original `$task` variable has also been updated
  222.             $data $form->getData();
  223.             // ... perform some action, such as saving the task to the database
  224.             $url $request->getSchemeAndHttpHost();
  225.             $random $this->generatePass();
  226.             $this->addVendor(['email' => $emailRegistrationForm->getEmail(), 'password' => $random]);
  227.             $mailing $this->sendEmail($emailRegistrationForm->getEmail(), $random$url);
  228.             return $this->redirectToRoute('app_registration_Email', ['email' => $emailRegistrationForm->getEmail()]);
  229.         }
  230.         return $this->render('registration/registrationEmail.html.twig', [
  231.             'form' => $form->createView(),
  232.         ]);
  233.     }
  234.     #[Route('/provinsi/{kodeProvinsi}/kota'name'get_kota_by_propinis')]
  235.     public function getKota(Request $request$kodeProvinsi): JsonResponse
  236.     {
  237.         $data $this->wilayahRepository->findKotaByKodePropinsi($kodeProvinsi);
  238.         return $this->json($data);
  239.     }
  240.     #[Route('/kota/{kodeKota}/kecamatan'name'get_kecamatan_by_kode')]
  241.     public function getKecamatan(Request $request$kodeKota): JsonResponse
  242.     {
  243.         $data $this->wilayahRepository->findKecamatanByKodeKota($kodeKota);
  244.         return $this->json($data);
  245.     }
  246.     #[Route('/kecamatan/{kodeKecamatan}/kelurahan'name'get_kelurahan_by_kode')]
  247.     public function getKelurahan(Request $request$kodeKecamatan): JsonResponse
  248.     {
  249.         $data $this->wilayahRepository->findKelurahanByKodeKecamatan($kodeKecamatan);
  250.         return $this->json($data);
  251.     }
  252. }