src/Controller/Website/RegisterController.php line 46

Open in your IDE?
  1. <?php
  2. namespace EADPlataforma\Controller\Website;
  3. use Sensio\Bundle\FrameworkExtraBundle\Configuration\Cache;
  4. use Symfony\Component\HttpFoundation\Request;
  5. use Symfony\Component\Routing\Annotation\Route;
  6. use EADPlataforma\Entity\User;
  7. use EADPlataforma\Entity\Cart;
  8. use EADPlataforma\Entity\UserCustomField;
  9. use EADPlataforma\DataTransferObject\UserDTO;
  10. use EADPlataforma\Entity\Course;
  11. use EADPlataforma\Entity\ProductOffer;
  12. use EADPlataforma\Enum\CourseEnum;
  13. use EADPlataforma\Enum\UserEnum;
  14. use EADPlataforma\Enum\UserCustomFieldEnum;
  15. use EADPlataforma\Enum\ErrorEnum;
  16. use EADPlataforma\Enum\ProductEnum;
  17. use EADPlataforma\Error\NotFoundException;
  18. /**
  19.  * @Route(
  20.  *      schemes         = {"http|https"}
  21.  * )
  22.  * @Cache(
  23.  *      maxage          = "0",
  24.  *      smaxage         = "0",
  25.  *      expires         = "now",
  26.  *      public          = false
  27.  * )
  28.  */
  29. class RegisterController extends AbstractWebsiteController {
  30.     /**
  31.      * @Route(
  32.      *      path          = "/register",
  33.      *      name          = "register",
  34.      *      methods       = {"GET"}
  35.      * )
  36.      * @Route(
  37.      *      path          = "/cadastro",
  38.      *      name          = "registerOld",
  39.      *      methods       = {"GET"}
  40.      * )
  41.      */
  42.     public function registerPage(Request $request) {
  43.         if($this->user){
  44.             return $this->redirectToRoute('home');
  45.         }
  46.         $this->data['formName'] = "formRegisterUser";
  47.         $this->data['keyCaptcha'] = $this->createCaptchaKey($request);
  48.         return $this->renderEAD('login/register.html.twig');
  49.     }
  50.     /**
  51.      * @Route(
  52.      *      path          = "/register/user",
  53.      *      name          = "registerPost",
  54.      *      methods       = {"POST"},
  55.      * )
  56.      */
  57.     public function registerUser(Request $request) {
  58.         
  59.         if($this->user){
  60.             return $this->eadResponse(nullErrorEnum::ACTION_INVALID);
  61.         }
  62.         $this->requestUtil->setRequest($request)->setData();
  63.         $isValid $this->isValidCaptcha($request);
  64.         if(!$isValid){
  65.             return $this->eadResponse([], ErrorEnum::CAPTCHA_INVALID);
  66.         }
  67.         $name $this->requestUtil->getField('name');
  68.         $email trim((string)$this->requestUtil->getField('email'));
  69.         $password $this->requestUtil->getField('password');
  70.         $phone $this->requestUtil->getField('phone');
  71.         $fast = (int)$this->requestUtil->getField('fast');
  72.         $urlRedirectCart $this->requestUtil->getField('url');
  73.         $productOfferId = (int)$this->requestUtil->getField('productOffer');
  74.         if($this->requestUtil->issetField('offer-default')){
  75.             $productOfferId = (int)$this->requestUtil->getField('offer-default');
  76.         }
  77.         $userProfileId $this->requestUtil->getField('userProfile');
  78.         $dataUser = [
  79.             "name" => $name,
  80.             "email" => $email,
  81.             "password" => $password,
  82.             "phone" => $phone,
  83.             "notify" => $this->configuration->get('allow_confirmation'),
  84.             "invited" => UserEnum::NO
  85.         ];
  86.         $userDTO = new UserDTO($dataUser);
  87.         $data $this->em->getRepository(User::class)->newUser($userDTO);
  88.         if($data->errors){
  89.             return $this->eadResponse($data->errorsErrorEnum::FIELD_EMPTY);
  90.         }
  91.         $user $data->user;
  92.         if($this->configuration->checkModuleIsAbleOnPlan('customFormModule')){
  93.             $files $this->requestUtil->getFile('files');
  94.             
  95.             if($this->requestUtil->issetField('customField')){
  96.                 $user->setCustomField($this->requestUtil->getField('customField'));
  97.             }
  98.             $customField json_decode($user->getCustomField());
  99.             if($customField){
  100.                 foreach ($customField as $key => $field) {
  101.                     if(!empty($field->fieldId)){
  102.                         if(isset($files[$field->fieldId])){
  103.                             $file $files[$field->fieldId];
  104.                             if(
  105.                                 $field->type == UserCustomFieldEnum::FIELD_FILE 
  106.                                 && $file->getError() == UserCustomFieldEnum::NO
  107.                             ){
  108.                                 $file $this->fileService->setFile($file);
  109.                                 if($file){
  110.                                     $this->fileService->moveFile(UserEnum::PATH_OTHERS_PROFILES);
  111.                                     $filePath $this->fileService->getFileName();
  112.                                     $extension $this->fileService->getFileExtension();
  113.                                     if(!empty($field->value)){
  114.                                         $field->value->path $filePath;
  115.                                         $field->value->extension $extension;
  116.                                     }
  117.                                     $customField->{$key} = $field;
  118.                                 }
  119.                             }
  120.                         }
  121.                     }
  122.                 }
  123.                 $customField json_encode($customField);
  124.                 $user->setCustomField($customField);
  125.             }
  126.             $this->em->flush();
  127.         }
  128.         $dataUser $user->toReturn();
  129.         $this->userLogService->logInsert("user"$user->getId(), $dataUser);
  130.         
  131.         $data = [
  132.             "message" => "Success",
  133.         ];
  134.         $this->em->getRepository(Cart::class)->updateCartHashToUser($user);
  135.         if($fast == UserEnum::YES){
  136.             $enrollService $this->generalService->getService('EnrollmentService');
  137.             $productOfferRepository $this->em->getRepository(ProductOffer::class);
  138.             if($productOfferId 0){
  139.                 $productOffer $productOfferRepository->findOneBy([
  140.                     'id'    => $productOfferId,
  141.                     'deleted' => ProductEnum::ITEM_NO_DELETED
  142.                 ]);
  143.                 if(!$productOffer){
  144.                     return $this->eadResponse(nullErrorEnum::NOT_FOUND);
  145.                 }
  146.                 $product $productOffer->getProduct()->toReturn();
  147.                 $courses $product['course'];
  148.                 if(!$courses){
  149.                     return $this->eadResponse(nullErrorEnum::NOT_FOUND);
  150.                 }
  151.         
  152.                 foreach($courses as $courseId){
  153.                     $courseRepository $this->em->getRepository(Course::class);
  154.                     $course $courseRepository->findOneBy([
  155.                         'id'    => $courseId,
  156.                         'deleted' => CourseEnum::ITEM_NO_DELETED
  157.                     ]);
  158.         
  159.                     $data['enrollment'] = $enrollService->enrollUser($user$course);
  160.                 }
  161.             }
  162.             if(empty($urlRedirectCart)){
  163.                 $urlRedirectCart $this->generalService->generateUrl('cart');
  164.                 if($productOfferId 0){
  165.                     $enrollService $this->generalService->getService('EnrollmentService');
  166.                     $productOfferRepository $this->em->getRepository(ProductOffer::class);
  167.                     $productOffer $productOfferRepository->findOneBy([
  168.                         'id'    => $productOfferId,
  169.                         'deleted' => ProductEnum::ITEM_NO_DELETED
  170.                     ]);
  171.         
  172.                     if(!$productOffer){
  173.                         return $this->eadResponse(nullErrorEnum::NOT_FOUND);
  174.                     }
  175.             
  176.                     $product $productOffer->getProduct()->toReturn();
  177.                     $courses $product['course'];
  178.         
  179.                     if(!$courses){
  180.                         return $this->eadResponse(nullErrorEnum::NOT_FOUND);
  181.                     }
  182.             
  183.                     foreach($courses as $courseId){
  184.                         $courseRepository $this->em->getRepository(Course::class);
  185.                         $course $courseRepository->findOneBy([
  186.                             'id'    => $courseId,
  187.                             'deleted' => CourseEnum::ITEM_NO_DELETED
  188.                         ]);
  189.             
  190.                         $enrollService->enrollUser($user$course);
  191.                     }
  192.                     $urlRedirectCart $this->generalService->generateUrl('cartCreateEnroll', [ 
  193.                         "productOfferId" => $productOfferId 
  194.                     ]); 
  195.                 }
  196.             }
  197.             $dataRedirect = [
  198.                 "userId" => $user->getId(),
  199.                 "time" => date('Y-m-d H:i:s'),
  200.                 "urlRedirect" => $urlRedirectCart,
  201.             ];
  202.             
  203.             $pass $this->stringUtil->encryptArray($dataRedirect);
  204.             
  205.             if(
  206.                 empty($productOffer) ||
  207.                 (
  208.                     $productOfferId &&
  209.                     $this->configuration->get('allow_confirmation') == UserEnum::NO
  210.                 )
  211.             ){
  212.                 $data['urlRedirect'] = $this->generalService->generateUrl(
  213.                     'loginFast'
  214.                     [ "pass" => $pass ]
  215.                 );
  216.             }
  217.         }
  218.         $pixelService $this->generalService->getService('Marketing\\PixelService');
  219.         $pixelService->sendConversion('Lead');
  220.         return $this->eadResponse($data);
  221.     }
  222. }