<?php
namespace EADPlataforma\Controller\Website;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Cache;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\Routing\Annotation\Route;
use EADPlataforma\Entity\User;
use EADPlataforma\Entity\Cart;
use EADPlataforma\Entity\UserCustomField;
use EADPlataforma\DataTransferObject\UserDTO;
use EADPlataforma\Entity\Course;
use EADPlataforma\Entity\ProductOffer;
use EADPlataforma\Enum\CourseEnum;
use EADPlataforma\Enum\UserEnum;
use EADPlataforma\Enum\UserCustomFieldEnum;
use EADPlataforma\Enum\ErrorEnum;
use EADPlataforma\Enum\ProductEnum;
use EADPlataforma\Error\NotFoundException;
/**
* @Route(
* schemes = {"http|https"}
* )
* @Cache(
* maxage = "0",
* smaxage = "0",
* expires = "now",
* public = false
* )
*/
class RegisterController extends AbstractWebsiteController {
/**
* @Route(
* path = "/register",
* name = "register",
* methods = {"GET"}
* )
* @Route(
* path = "/cadastro",
* name = "registerOld",
* methods = {"GET"}
* )
*/
public function registerPage(Request $request) {
if($this->user){
return $this->redirectToRoute('home');
}
$this->data['formName'] = "formRegisterUser";
$this->data['keyCaptcha'] = $this->createCaptchaKey($request);
return $this->renderEAD('login/register.html.twig');
}
/**
* @Route(
* path = "/register/user",
* name = "registerPost",
* methods = {"POST"},
* )
*/
public function registerUser(Request $request) {
if($this->user){
return $this->eadResponse(null, ErrorEnum::ACTION_INVALID);
}
$this->requestUtil->setRequest($request)->setData();
$isValid = $this->isValidCaptcha($request);
if(!$isValid){
return $this->eadResponse([], ErrorEnum::CAPTCHA_INVALID);
}
$name = $this->requestUtil->getField('name');
$email = trim((string)$this->requestUtil->getField('email'));
$password = $this->requestUtil->getField('password');
$phone = $this->requestUtil->getField('phone');
$fast = (int)$this->requestUtil->getField('fast');
$urlRedirectCart = $this->requestUtil->getField('url');
$productOfferId = (int)$this->requestUtil->getField('productOffer');
if($this->requestUtil->issetField('offer-default')){
$productOfferId = (int)$this->requestUtil->getField('offer-default');
}
$userProfileId = $this->requestUtil->getField('userProfile');
$dataUser = [
"name" => $name,
"email" => $email,
"password" => $password,
"phone" => $phone,
"notify" => $this->configuration->get('allow_confirmation'),
"invited" => UserEnum::NO
];
$userDTO = new UserDTO($dataUser);
$data = $this->em->getRepository(User::class)->newUser($userDTO);
if($data->errors){
return $this->eadResponse($data->errors, ErrorEnum::FIELD_EMPTY);
}
$user = $data->user;
if($this->configuration->checkModuleIsAbleOnPlan('customFormModule')){
$files = $this->requestUtil->getFile('files');
if($this->requestUtil->issetField('customField')){
$user->setCustomField($this->requestUtil->getField('customField'));
}
$customField = json_decode($user->getCustomField());
if($customField){
foreach ($customField as $key => $field) {
if(!empty($field->fieldId)){
if(isset($files[$field->fieldId])){
$file = $files[$field->fieldId];
if(
$field->type == UserCustomFieldEnum::FIELD_FILE
&& $file->getError() == UserCustomFieldEnum::NO
){
$file = $this->fileService->setFile($file);
if($file){
$this->fileService->moveFile(UserEnum::PATH_OTHERS_PROFILES);
$filePath = $this->fileService->getFileName();
$extension = $this->fileService->getFileExtension();
if(!empty($field->value)){
$field->value->path = $filePath;
$field->value->extension = $extension;
}
$customField->{$key} = $field;
}
}
}
}
}
$customField = json_encode($customField);
$user->setCustomField($customField);
}
$this->em->flush();
}
$dataUser = $user->toReturn();
$this->userLogService->logInsert("user", $user->getId(), $dataUser);
$data = [
"message" => "Success",
];
$this->em->getRepository(Cart::class)->updateCartHashToUser($user);
if($fast == UserEnum::YES){
$enrollService = $this->generalService->getService('EnrollmentService');
$productOfferRepository = $this->em->getRepository(ProductOffer::class);
if($productOfferId > 0){
$productOffer = $productOfferRepository->findOneBy([
'id' => $productOfferId,
'deleted' => ProductEnum::ITEM_NO_DELETED
]);
if(!$productOffer){
return $this->eadResponse(null, ErrorEnum::NOT_FOUND);
}
$product = $productOffer->getProduct()->toReturn();
$courses = $product['course'];
if(!$courses){
return $this->eadResponse(null, ErrorEnum::NOT_FOUND);
}
foreach($courses as $courseId){
$courseRepository = $this->em->getRepository(Course::class);
$course = $courseRepository->findOneBy([
'id' => $courseId,
'deleted' => CourseEnum::ITEM_NO_DELETED
]);
$data['enrollment'] = $enrollService->enrollUser($user, $course);
}
}
if(empty($urlRedirectCart)){
$urlRedirectCart = $this->generalService->generateUrl('cart');
if($productOfferId > 0){
$enrollService = $this->generalService->getService('EnrollmentService');
$productOfferRepository = $this->em->getRepository(ProductOffer::class);
$productOffer = $productOfferRepository->findOneBy([
'id' => $productOfferId,
'deleted' => ProductEnum::ITEM_NO_DELETED
]);
if(!$productOffer){
return $this->eadResponse(null, ErrorEnum::NOT_FOUND);
}
$product = $productOffer->getProduct()->toReturn();
$courses = $product['course'];
if(!$courses){
return $this->eadResponse(null, ErrorEnum::NOT_FOUND);
}
foreach($courses as $courseId){
$courseRepository = $this->em->getRepository(Course::class);
$course = $courseRepository->findOneBy([
'id' => $courseId,
'deleted' => CourseEnum::ITEM_NO_DELETED
]);
$enrollService->enrollUser($user, $course);
}
$urlRedirectCart = $this->generalService->generateUrl('cartCreateEnroll', [
"productOfferId" => $productOfferId
]);
}
}
$dataRedirect = [
"userId" => $user->getId(),
"time" => date('Y-m-d H:i:s'),
"urlRedirect" => $urlRedirectCart,
];
$pass = $this->stringUtil->encryptArray($dataRedirect);
if(
empty($productOffer) ||
(
$productOfferId > 0 &&
$this->configuration->get('allow_confirmation') == UserEnum::NO
)
){
$data['urlRedirect'] = $this->generalService->generateUrl(
'loginFast',
[ "pass" => $pass ]
);
}
}
$pixelService = $this->generalService->getService('Marketing\\PixelService');
$pixelService->sendConversion('Lead');
return $this->eadResponse($data);
}
}