src/Controller/Admin/UserController.php line 817

Open in your IDE?
  1. <?php
  2. namespace EADPlataforma\Controller\Admin;
  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\UserProfile;
  8. use EADPlataforma\Entity\Country;
  9. use EADPlataforma\Entity\State;
  10. use EADPlataforma\Entity\City;
  11. use EADPlataforma\Entity\UserCustomField;
  12. use EADPlataforma\Entity\UserCheckoutInfo;
  13. use EADPlataforma\Entity\Group;
  14. use EADPlataforma\Entity\Session;
  15. use EADPlataforma\Entity\Receiver;
  16. use EADPlataforma\Entity\Enrollment;
  17. use EADPlataforma\Entity\Cart;
  18. use EADPlataforma\Entity\Configuration;
  19. use EADPlataforma\DataTransferObject\UserDTO;
  20. use EADPlataforma\Enum\UserEnum;
  21. use EADPlataforma\Enum\ConfigurationEnum;
  22. use EADPlataforma\Enum\SessionEnum;
  23. use EADPlataforma\Enum\ReceiverEnum;
  24. use EADPlataforma\Enum\UserCustomFieldEnum;
  25. use EADPlataforma\Enum\UserPermissionEnum;
  26. use EADPlataforma\Enum\UserCheckoutInfoEnum;
  27. use EADPlataforma\Enum\TagsMarketingEnum;
  28. use EADPlataforma\Enum\ErrorEnum;
  29. use EADPlataforma\Util\StringUtil;
  30. /**
  31.  * @Route(
  32.  *      schemes         = {"http|https"}
  33.  * )
  34.  * @Cache(
  35.  *      maxage          = "0",
  36.  *      smaxage         = "0",
  37.  *      expires         = "now",
  38.  *      public          = false
  39.  * )
  40.  */
  41. class UserController extends AbstractController {
  42.     public function getEntityClass(){
  43.         return User::class;
  44.     }
  45.     /**
  46.      * @Route(
  47.      *      path          = "/admin/user/list/paginate",
  48.      *      name          = "userPaginate",
  49.      *      methods       = {"GET"},
  50.      * )
  51.      */
  52.     public function getUserPaginate(Request $request) {
  53.         $permission $this->userPermissionUtil->getPermission("user""see");
  54.         if(!$this->userPermissionUtil->isHigh($permission)){
  55.             return $this->eadResponse(nullErrorEnum::PERMISSION);
  56.         }
  57.         $this->requestUtil->setRequest($request)->setData();
  58.         $columns =  [ 
  59.             "u.id"
  60.             "u.name"
  61.             "u.email"
  62.             "up.name AS profile"
  63.             "u.type",
  64.             "DATE_FORMAT(u.dateRegister, '%Y-%m-%d %H:%i:%s') AS dateRegister",
  65.             "DATE_FORMAT(u.dateLastAccess, '%Y-%m-%d %H:%i:%s') AS dateLastAccess",
  66.             "u.status"
  67.             "u.validEmail"
  68.             "u.document"
  69.             "u.photo"
  70.             "u.occupation"
  71.             "u.biography"
  72.             "u.resume"
  73.             "u.custom"
  74.             "u.notes"
  75.             "DATE_FORMAT(u.birthDate, '%Y-%m-%d') AS birthDate"
  76.             "u.phone"
  77.             "u.zipCode"
  78.             "u.address"
  79.             "u.addressNumber"
  80.             "u.addressComplement"
  81.             "u.addressNeighborhood"
  82.             "u.customField",
  83.             "DATE_FORMAT(u.dateDelete, '%Y-%m-%d %H:%i:%s') AS dateDelete",
  84.             "ud.name AS userDelete" 
  85.         ];
  86.         
  87.         $profileClass UserProfile::class;
  88.         $userClass User::class;
  89.         $enrollmentClass Enrollment::class;
  90.         
  91.         $joins = [
  92.             "{$profileClass} AS up" => "up.id = u.userProfile",
  93.             "{$userClass} AS ud" => ["LEFT""ud.id = u.userDelete"]
  94.         ];
  95.         $type $this->requestUtil->getField('type');
  96.         $status $this->requestUtil->getField('status');
  97.         $userProfile $this->requestUtil->getField('userProfile');
  98.         $validEmail $this->requestUtil->getField('validEmail');
  99.         $searchText $this->requestUtil->getField('searchText');
  100.         $orderParam $this->requestUtil->getField('order');
  101.         $limit $this->requestUtil->getField('limit');
  102.         $offset $this->requestUtil->getField('offset');
  103.         $dateStart $this->requestUtil->getField('dateStart');
  104.         $dateEnd $this->requestUtil->getField('dateEnd');
  105.         $recover = (int)$this->requestUtil->getField('recover');
  106.         $course = (int)$this->requestUtil->getField('course');
  107.         $filter = [];
  108.         $filterDelete $this->requestUtil->getDeletedParam();
  109.         $filter = [
  110.             "u.id" => [ "!="]
  111.         ];
  112.         if(!empty($type)){
  113.             $filter["u.type"] = $type;
  114.         }
  115.         if(!is_null($status)){
  116.             $filter["u.status"] = $status;
  117.         }
  118.         if(!empty($course)){
  119.             $filter["whereText"] = " u.id IN ( 
  120.                 SELECT
  121.                    IDENTITY(e.user)
  122.                 FROM {$enrollmentClass} AS e 
  123.                 WHERE e.deleted = 0 
  124.                 AND e.course = {$course}
  125.             ) ";
  126.         }
  127.         if($recover == UserEnum::YES){
  128.             $today date('Y-m-d');
  129.             $filter["u.status"] = UserEnum::WAITING;
  130.             $filter["whereText"] = "
  131.                 (DATE_FORMAT(u.recoverDate, '%Y-%m-%d') != '{$today}' OR u.recoverDate IS NULL)
  132.             ";
  133.         }
  134.         if(!empty($userProfile)){
  135.             $filter["u.userProfile"] = $userProfile;
  136.         }
  137.         if(!is_null($validEmail)){
  138.             $filter["u.validEmail"] = $validEmail;
  139.         }
  140.         if(!empty($dateStart) && !empty($dateEnd)){
  141.             $filter["whereText"] = "
  142.                 DATE_FORMAT(u.dateRegister, '%Y-%m-%d') BETWEEN '{$dateStart}' AND '{$dateEnd}'
  143.             ";
  144.         }
  145.         
  146.         $order = [ "u.id" => "DESC" ];
  147.         if(!empty($orderParam)){
  148.             $orderJson json_decode($orderParamtrue);
  149.             $order = (!empty($orderJson) && is_array($orderJson) ? $orderJson $order);
  150.         }
  151.         $data $this->repository->paginate(
  152.             "u"
  153.             $searchText
  154.             $columns
  155.             $joins
  156.             $filter
  157.             $order
  158.             $limit
  159.             $offset
  160.             $filterDelete
  161.         );
  162.         return $this->eadResponse($data);
  163.     }
  164.     /**
  165.      * @Route(
  166.      *      path          = "/admin/user/list/paginate/all",
  167.      *      name          = "userPaginateAll",
  168.      *      methods       = {"GET"},
  169.      * )
  170.      */
  171.     public function getUserPaginateAll(Request $request) {
  172.         $this->requestUtil->setRequest($request)->setData();
  173.         $columns =  [ 
  174.             "u.id"
  175.             "u.name"
  176.             "u.email"
  177.             "up.name AS profile"
  178.             "u.type",
  179.             "DATE_FORMAT(u.dateRegister, '%Y-%m-%d %H:%i:%s') AS dateRegister",
  180.             "DATE_FORMAT(u.dateLastAccess, '%Y-%m-%d %H:%i:%s') AS dateLastAccess",
  181.             "u.status",
  182.             "u.validEmail",  
  183.             "u.document"
  184.             "u.photo"
  185.             "u.occupation"
  186.             "u.biography"
  187.             "u.resume"
  188.             "u.custom"
  189.             "u.notes"
  190.             "DATE_FORMAT(u.birthDate, '%Y-%m-%d') AS birthDate",
  191.             "u.phone"
  192.             "u.zipCode"
  193.             "u.address"
  194.             "u.addressNumber"
  195.             "u.addressComplement"
  196.             "u.addressNeighborhood"
  197.             "u.customField",
  198.             "DATE_FORMAT(u.dateDelete, '%Y-%m-%d %H:%i:%s') AS dateDelete",
  199.             "ud.name AS userDelete" 
  200.         ];
  201.         
  202.         $profileClass UserProfile::class;
  203.         $userClass User::class;
  204.         $enrollmentClass Enrollment::class;
  205.         
  206.         $joins = [
  207.             "{$profileClass} AS up" => "up.id = u.userProfile",
  208.             "{$userClass} AS ud" => ["LEFT""ud.id = u.userDelete"]
  209.         ];
  210.         $type = (int)$this->requestUtil->getField('type');
  211.         $status $this->requestUtil->getField('status');
  212.         $userProfile = (int)$this->requestUtil->getField('userProfile');
  213.         $enrollment = (int)$this->requestUtil->getField('enrollment');
  214.         $validEmail $this->requestUtil->getField('validEmail');
  215.         $orderParam $this->requestUtil->getField('order');
  216.         $searchText $this->requestUtil->getField('searchText');
  217.         $limit = (int)$this->requestUtil->getField('limit');
  218.         $offset = (int)$this->requestUtil->getField('offset');
  219.         $dateStart $this->requestUtil->getField('dateStart');
  220.         $dateEnd $this->requestUtil->getField('dateEnd');
  221.         $filter = [];
  222.         $filterDelete $this->requestUtil->getDeletedParam();
  223.         $filter = [
  224.             "u.id" => [ "!="],
  225.         ];
  226.         if($enrollment == UserEnum::YES){
  227.             $filter["whereText"] = " u.id IN ( 
  228.                 SELECT
  229.                    IDENTITY(e.user)
  230.                 FROM {$enrollmentClass} AS e 
  231.                 WHERE e.deleted = 0 
  232.                 AND e.user != 1
  233.             ) ";
  234.         }
  235.         if(!empty($type)){
  236.             $filter["u.type"] = $type;
  237.         }
  238.         if(!is_null($status)){
  239.             $filter["u.status"] = $status;
  240.         }
  241.         if(!empty($userProfile)){
  242.             $filter["u.userProfile"] = $userProfile;
  243.         }
  244.         if(!is_null($validEmail)){
  245.             $filter["u.validEmail"] = $validEmail;
  246.         }
  247.         if(!empty($dateStart) && !empty($dateEnd)){
  248.             $filter["whereText"] = "DATE_FORMAT(u.dateRegister, '%Y-%m-%d') BETWEEN '{$dateStart}' AND '{$dateEnd}'";
  249.         }
  250.         $order = [ "u.id" => "DESC" ];
  251.         if(!empty($orderParam)){
  252.             $order json_decode($orderParamtrue);
  253.         }
  254.         
  255.         $data $this->repository->paginate(
  256.             "u"
  257.             $searchText
  258.             $columns
  259.             $joins
  260.             $filter
  261.             $order
  262.             $limit
  263.             $offset
  264.             $filterDelete
  265.         );
  266.         return $this->eadResponse($data);
  267.     }
  268.     /**
  269.      * @Route(
  270.      *      path          = "/admin/user/list/all/trash",
  271.      *      name          = "userAllTrash",
  272.      *      methods       = {"GET"},
  273.      * )
  274.      */
  275.     public function getUserAllTrash(Request $request) {
  276.         $this->requestUtil->setRequest($request)->setData();
  277.         $data $this->repository->getAllTrash();
  278.         return $this->eadResponse($data);
  279.     }
  280.     /**
  281.      * @Route(
  282.      *      path          = "/admin/user/new/number",
  283.      *      name          = "userNewNumber",
  284.      *      methods       = {"GET"},
  285.      * )
  286.      */
  287.     public function getUserNewNumber(Request $request) {
  288.         $permission $this->userPermissionUtil->getPermission("user""see");
  289.         if(!$this->userPermissionUtil->isHigh($permission)){
  290.             return $this->eadResponse(nullErrorEnum::PERMISSION);
  291.         }
  292.         $period $request->get('period');
  293.         $dateStart $request->get('dateStart');
  294.         $dateEnd $request->get('dateEnd');
  295.         if($period == UserEnum::FILTER_PERIOD_All){
  296.             return $this->eadResponse(nullErrorEnum::ACTION_INVALID);
  297.         }
  298.         $dateTimeUtil $this->generalService->getUtil('DateTimeUtil');
  299.         $dates $dateTimeUtil->periodDate($period$dateStart$dateEnd);
  300.         $dateStart $dates->dateStart;
  301.         $dateEnd $dates->dateEnd;
  302.         $numberTotal $this->repository->getNewUsersNumber($dateStart$dateEnd);
  303.         return $this->eadResponse([ "total" => $numberTotal ]);
  304.     }
  305.     /**
  306.      * @Route(
  307.      *      path          = "/admin/user/active/number",
  308.      *      name          = "userActiveNumber",
  309.      *      methods       = {"GET"},
  310.      * )
  311.      */
  312.     public function getActiveUsersNumber(Request $request) {
  313.         $permission $this->userPermissionUtil->getPermission("user""see");
  314.         if(!$this->userPermissionUtil->isHigh($permission)){
  315.             return $this->eadResponse(nullErrorEnum::PERMISSION);
  316.         }
  317.         $period $request->get('period');
  318.         $dateStart $request->get('dateStart');
  319.         $dateEnd $request->get('dateEnd');
  320.         if($period == UserEnum::FILTER_PERIOD_All){
  321.             return $this->eadResponse(nullErrorEnum::ACTION_INVALID);
  322.         }
  323.         $dateTimeUtil $this->generalService->getUtil('DateTimeUtil');
  324.         $dates $dateTimeUtil->periodDate($period$dateStart$dateEnd);
  325.         $dateStart $dates->dateStart;
  326.         $dateEnd $dates->dateEnd;
  327.         $numberTotal $this->repository->getActiveUsersNumber($dateStart$dateEnd);
  328.         return $this->eadResponse([ "total" => $numberTotal ]);
  329.     }
  330.     /**
  331.      * @Route(
  332.      *      path          = "/admin/user/list/admin",
  333.      *      name          = "userListAdmin",
  334.      *      methods       = {"GET"},
  335.      * )
  336.      */
  337.     public function getUserAdmin(Request $request) {
  338.         $product = (int)$request->get('product');
  339.         $course = (int)$request->get('course');
  340.         $data $this->repository->getUserAdminSimply($product$course);
  341.         return $this->eadResponse($data);
  342.     }
  343.     /**
  344.      * @Route(
  345.      *      path          = "/admin/user/list/receiver",
  346.      *      name          = "getUserReceiverList",
  347.      *      methods       = {"GET"}
  348.      * )
  349.      */
  350.     public function getUserReceiverList(Request $request) {
  351.         $permission $this->userPermissionUtil->getPermission(
  352.             "financial"
  353.             "receiver"
  354.             "create"
  355.         );
  356.         
  357.         $data = [];
  358.         if($this->userPermissionUtil->isLow($permission)){
  359.             return $this->eadResponse(nullErrorEnum::PERMISSION);
  360.         }else if(
  361.             $this->userPermissionUtil->isMiddle($permission) &&
  362.             $this->user->getAllowReceiver() == UserEnum::YES
  363.         ){
  364.             $data[] = (object)[
  365.                 "id" => $this->user->getId(),
  366.                 "name" => $this->user->getName(),
  367.                 "email" => $this->user->getEmail(),
  368.             ];
  369.         }else if($this->userPermissionUtil->isHigh($permission)){
  370.             $data $this->repository->getUserAllowReceiver();
  371.         }
  372.         $accountType ReceiverEnum::EAD_CHECKOUT;
  373.         $receiverRepository $this->em->getRepository(Receiver::class);
  374.         $aux = [];
  375.         foreach ($data as $key => $item) {
  376.             $item = (object)$item;
  377.             $numberReceiver $receiverRepository->countByType(
  378.                 $accountType
  379.                 $item->id
  380.             );
  381.             if($numberReceiver 2){
  382.                 $aux[] = $item;
  383.             }
  384.         }
  385.         return $this->eadResponse($aux);
  386.     }
  387.     /**
  388.      * @Route(
  389.      *      path          = "/admin/user/list/manager",
  390.      *      name          = "userListCourseManager",
  391.      *      methods       = {"GET"},
  392.      * )
  393.      */
  394.     public function getUserCourseManager(Request $request) {
  395.         $product = (int)$request->get('product');
  396.         $course = (int)$request->get('course');
  397.         
  398.         $data $this->repository->getUserCourseManager($product$course);
  399.         return $this->eadResponse($data);
  400.     }
  401.     /**
  402.      * @Route(
  403.      *      path          = "/admin/user/list/group/manager",
  404.      *      name          = "userListGroupManager",
  405.      *      methods       = {"GET"},
  406.      * )
  407.      */
  408.     public function userListGroupManager(Request $request) {
  409.         $data $this->repository->getUserAdminToGroupPermission();
  410.         return $this->eadResponse($data);
  411.     }
  412.     /**
  413.      * @Route(
  414.      *      path          = "/admin/user/profile/{username}",
  415.      *      name          = "userProfile",
  416.      *      methods       = {"GET"},
  417.      * )
  418.      */
  419.     public function getUserProfileByUsername(Request $request) {
  420.         $username $request->get('username');
  421.         $user $this->repository->findOneBy([
  422.             "deleted" => UserEnum::ITEM_NO_DELETED,
  423.             "username" => $username,
  424.         ]);
  425.         if (!$user) {
  426.             return $this->eadResponse(nullErrorEnum::NOT_FOUND);
  427.         }
  428.         
  429.         return $this->eadResponse($user->toReturn(true));
  430.     }
  431.     /**
  432.      * @Route(
  433.      *      path          = "/admin/user/profile",
  434.      *      name          = "userProfileOn",
  435.      *      methods       = {"GET"},
  436.      * )
  437.      */
  438.     public function getUserProfile(Request $request) {
  439.         $user $this->user;
  440.         if (!$user) {
  441.             return $this->eadResponse(nullErrorEnum::NOT_FOUND);
  442.         }
  443.         return $this->eadResponse($user->toReturn(true));
  444.     }
  445.     /**
  446.      * @Route(
  447.      *      path          = "/admin/user/permissions",
  448.      *      name          = "userPermissions",
  449.      *      methods       = {"GET"},
  450.      * )
  451.      */
  452.     public function getUserPermissions(Request $request) {
  453.         if(!$this->user){
  454.             return $this->eadResponse(nullErrorEnum::NOT_FOUND);
  455.         }
  456.         
  457.         $permissions json_decode($this->user->getPermission());
  458.         if($this->user->getId() == 1){
  459.             $permissions $this->userPermissionUtil->getAdminPermissionTemplate();
  460.         }
  461.         $permissions->menu = (object)[];
  462.         $permissions->menu->dashboardModule $this->userPermissionUtil->canAccessDashboardModule();
  463.         $permissions->menu->productModule $this->userPermissionUtil->canAccessProductModule();
  464.         $permissions->menu->courseModule $this->userPermissionUtil->canAccessCourseModule();
  465.         $permissions->menu->userModule $this->userPermissionUtil->canAccessUserModule();
  466.         $permissions->menu->financialModule $this->userPermissionUtil->canAccessFinancialModule();
  467.         $permissions->menu->websiteModule $this->userPermissionUtil->canAccessWebsiteModule();
  468.         $permissions->menu->appStoreModule $this->userPermissionUtil->canAccessAppStore();
  469.         $permissions->menu->trashModule $this->userPermissionUtil->canAccessTrashModule();
  470.         $permissions->menu->planModule $this->userPermissionUtil->canAccessPlanModule();
  471.         
  472.         return $this->eadResponse($permissionsnullfalse);
  473.     }
  474.     /**
  475.      * @Route(
  476.      *      path          = "/admin/user/permissions/front/clean",
  477.      *      name          = "userPermissionsFrontClean",
  478.      *      methods       = {"GET"},
  479.      * )
  480.      */
  481.     public function getUserPermissionsFrontClean(Request $request) {
  482.         if(!$this->configuration->checkModuleIsAbleOnPlan('permissionFunction')){
  483.             return $this->eadResponse(nullErrorEnum::ACTION_INVALID);
  484.         }
  485.         if(!$this->user){
  486.             return $this->eadResponse(nullErrorEnum::NOT_FOUND);
  487.         }
  488.         
  489.         $data $this->userPermissionUtil->getPermissionToFrontClean();
  490.         return $this->eadResponse($datanullfalse);
  491.     }
  492.     /**
  493.      * @Route(
  494.      *      path          = "/admin/user/permissions/front/template",
  495.      *      name          = "userPermissionsFrontTemplate",
  496.      *      methods       = {"GET"},
  497.      * )
  498.      */
  499.     public function getUserPermissionsFrontTemplate(Request $request) {
  500.         if(!$this->configuration->checkModuleIsAbleOnPlan('permissionFunction')){
  501.             return $this->eadResponse(nullErrorEnum::ACTION_INVALID);
  502.         }
  503.         if(!$this->user){
  504.             return $this->eadResponse(nullErrorEnum::NOT_FOUND);
  505.         }
  506.         
  507.         $data $this->userPermissionUtil->getStudentPermissionTemplate();
  508.         return $this->eadResponse($datanullfalse);
  509.     }
  510.     /**
  511.      * @Route(
  512.      *      path          = "/admin/user/detail/{id}",
  513.      *      name          = "userDetail",
  514.      *      methods       = {"GET"},
  515.      *      requirements  = { "id" = "\d+" }
  516.      * )
  517.      */
  518.     public function getUserDetail(Request $request) {
  519.         $permission $this->userPermissionUtil->getPermission("user""see");
  520.         if(!$this->userPermissionUtil->isHigh($permission)){
  521.             return $this->eadResponse(nullErrorEnum::PERMISSION);
  522.         }
  523.         $this->requestUtil->setRequest($request)->setData();
  524.         $ignoreOption $this->requestUtil->getField('ignoreOption');
  525.         $userId $request->get('id');
  526.         if($ignoreOption == UserEnum::ITEM_ON_TRASH){
  527.             $user $this->repository->findOneBy([
  528.                 "id" => $userId
  529.             ]);
  530.         }
  531.         if($ignoreOption == UserEnum::ITEM_NO_DELETED || !$ignoreOption){
  532.             $user $this->repository->findOneBy([
  533.                 "id" => $userId,
  534.                 "deleted" => UserEnum::ITEM_NO_DELETED
  535.             ]);
  536.         }
  537.         if (!$user) {
  538.             return $this->eadResponse(nullErrorEnum::NOT_FOUND);
  539.         }
  540.         if($user->getId() == UserEnum::FIRST_ADMIN && $user->getType() == UserEnum::ADMIN){
  541.             $user->setPermission(
  542.                 json_encode($this->userPermissionUtil->getAdminPermissionTemplate())
  543.             );
  544.             $this->em->flush();
  545.         }
  546.         $data $user->toReturn();
  547.         $data['urlProfile'] = $this->generalService->generateUrl(
  548.             'userProfilePublic'
  549.             [ 'username' => $user->getUsername() ]
  550.         );
  551.         
  552.         return $this->eadResponse($data);
  553.     }
  554.     /**
  555.      * @Route(
  556.      *      path          = "/user/download/custom/file/{id}/{fieldId}",
  557.      *      name          = "userDownloadCustom",
  558.      *      methods       = {"GET"},
  559.      *      requirements  = { "id" = "\d+", "fieldId" = "\d+" }
  560.      * )
  561.      */
  562.     public function downloadCustomFieldFile(Request $request) {
  563.         if(!$this->configuration->checkModuleIsAbleOnPlan('customFormModule')){
  564.             return $this->redirectToRoute('notFound');
  565.         }
  566.         $userId $request->get('id');
  567.         $user $this->repository->findOneBy([
  568.             "deleted" => UserEnum::ITEM_NO_DELETED,
  569.             "id" => $userId
  570.         ]);
  571.         if (!$user) {
  572.             return $this->redirectToRoute('notFound');
  573.         }
  574.         if($userId != $this->user->getId()){
  575.             $permission $this->userPermissionUtil->getPermission("user""see");
  576.             if(!$this->userPermissionUtil->isHigh($permission)){
  577.                 return $this->redirectToRoute('notFound');
  578.             }
  579.         }
  580.         $fieldId $request->get('fieldId');
  581.         $fields json_decode($user->getCustomField());
  582.         
  583.         $url null;
  584.         if(!empty($fields->{$fieldId})){
  585.             if(!empty($fields->{$fieldId}->value)){
  586.                 $file $fields->{$fieldId}->value->path;
  587.                 $othersPath UserEnum::PATH_OTHERS_PROFILES;
  588.                 $this->fileService->setFile("{$othersPath}/{$file}");
  589.                 $url $this->fileService->getFileUrlTemp();
  590.             }
  591.         }
  592.         if($url){
  593.             return $this->redirect($url301);
  594.         }
  595.         return $this->redirectToRoute('notFound');
  596.     }
  597.     
  598.     /**
  599.      * @Route(
  600.      *      path          = "/admin/user/merge",
  601.      *      name          = "userMerge",
  602.      *      methods       = {"POST"},
  603.      * )
  604.      */
  605.     public function mergeUser(Request $request) {
  606.         if($this->user->getId() != UserEnum::YES){
  607.             return $this->eadResponse(nullErrorEnum::PERMISSION);
  608.         }
  609.         $this->requestUtil->setRequest($request)->setData();
  610.         $userIdOld $this->requestUtil->getField('userOld');
  611.         $userIdNew $this->requestUtil->getField('userNew');
  612.         $userOld $this->repository->findOneBy([ 
  613.             "deleted" => UserEnum::ITEM_NO_DELETED
  614.             "id" => $userIdOld 
  615.         ]);
  616.         $userNew $this->repository->findOneBy([ 
  617.             "deleted" => UserEnum::ITEM_NO_DELETED
  618.             "id" => $userIdNew 
  619.         ]);
  620.         if (!$userOld) {
  621.             return $this->eadResponse(nullErrorEnum::NOT_FOUND);
  622.         }
  623.         if (!$userNew) {
  624.             return $this->eadResponse(nullErrorEnum::NOT_FOUND);
  625.         }
  626.         $this->repository->mergeUser($userOld$userNew);
  627.         return $this->eadResponse([ "success" => ]);
  628.     }
  629.     /**
  630.      * @Route(
  631.      *      path          = "/admin/user/register",
  632.      *      name          = "userRegister",
  633.      *      methods       = {"POST"},
  634.      * )
  635.      */
  636.     public function registerUser(Request $request) {
  637.         $permission $this->userPermissionUtil->getPermission("user""create");
  638.         if(!$this->userPermissionUtil->isHigh($permission)){
  639.             return $this->eadResponse(nullErrorEnum::PERMISSION);
  640.         }
  641.         $this->requestUtil->setRequest($request)->setData();
  642.         $name $this->requestUtil->getField('name');
  643.         $email $this->requestUtil->getField('email');
  644.         $password $this->requestUtil->getField('password');
  645.         $userProfileId $this->requestUtil->getField('userProfile');
  646.         $groupId $this->requestUtil->getField('group');
  647.         $totalEmail $this->repository->countByEmail($email);
  648.         if(!empty($totalEmail)){
  649.             return $this->eadResponse([ 'email' ], ErrorEnum::FIELD_EMPTY);
  650.         }
  651.         $allowPermissions = [
  652.             UserEnum::STUDENT
  653.         ];
  654.         $permission $this->userPermissionUtil->getPermission("user""permissions");
  655.         if($this->userPermissionUtil->isHigh($permission)){
  656.             $maxAllowID $this->user->getUserProfile()->getId();
  657.             $allowPermissions[] = $maxAllowID;
  658.             if($maxAllowID == UserEnum::ADMIN){
  659.                 $allowPermissions[] = UserEnum::TUTOR;
  660.                 $allowPermissions[] = UserEnum::TEACHER;
  661.                 $allowPermissions[] = $userProfileId;
  662.             }else if($maxAllowID == UserEnum::TEACHER){
  663.                 $allowPermissions[] = UserEnum::TUTOR;
  664.             }
  665.         }
  666.         if(!in_array($userProfileId$allowPermissions)){
  667.             $userProfileId null;
  668.         }
  669.         $dataUser = [
  670.             "name" => $name,
  671.             "email" => $email,
  672.             "password" => $password,
  673.             "userProfileId" => $userProfileId,
  674.             "groupId" => $groupId,
  675.             "notify" => UserEnum::YES,
  676.             "invited" => UserEnum::YES
  677.         ];
  678.     
  679.         $userDTO = new UserDTO($dataUser);
  680.         $data $this->repository->newUser($userDTO);
  681.         if($data->errors){
  682.             return $this->eadResponse($data->errorsErrorEnum::FIELD_EMPTY);
  683.         }
  684.         $user $data->user;
  685.         $data $user->toReturn();
  686.         $this->userLogService->logInsert("user"$user->getId(), $data);
  687.         return $this->eadResponse($data);
  688.     }
  689.     /**
  690.      * @Route(
  691.      *      path          = "/admin/user/edit/info/cart/{id}",
  692.      *      name          = "userEditInfoCart",
  693.      *      methods       = {"PUT"},
  694.      *      requirements  = { "id" = "\d+" }
  695.      * )
  696.      */
  697.     public function editUserInfoCart(Request $request) {
  698.         $userId $request->get('id');
  699.         $user $this->repository->findOneBy([
  700.             "deleted" => UserEnum::ITEM_NO_DELETED,
  701.             "id" => $userId
  702.         ]);
  703.         if (!$user) {
  704.             return $this->eadResponse(nullErrorEnum::NOT_FOUND);
  705.         }
  706.         if($userId != $this->user->getId()){
  707.            return $this->eadResponse(nullErrorEnum::NOT_FOUND);
  708.         }
  709.         $this->requestUtil->setRequest($request)->setData();
  710.         
  711.         if($this->requestUtil->issetField('document')){
  712.             $user->setDocument($this->requestUtil->getField('document'));
  713.         }
  714.         if($this->requestUtil->issetField('country')){
  715.             $countryId $this->requestUtil->getField('country');
  716.             $country $this->em->getRepository(Country::class)->findOneBy([
  717.                 "id" => $countryId,
  718.                 "deleted" => UserEnum::ITEM_NO_DELETED
  719.             ]);
  720.             if($country){
  721.                 $user->setCountry($country);
  722.             }else{
  723.                 $user->setCountry(null);
  724.             }
  725.         }
  726.         if($this->requestUtil->issetField('state')){
  727.             $stateId $this->requestUtil->getField('state');
  728.             $state $this->em->getRepository(State::class)->findOneBy([
  729.                 "id" => $stateId,
  730.                 "deleted" => UserEnum::ITEM_NO_DELETED
  731.             ]);
  732.             if($state){
  733.                 $user->setState($state);
  734.             }else{
  735.                 $user->setState(null);
  736.             }
  737.         }
  738.         if($this->requestUtil->issetField('city')){
  739.             $cityId $this->requestUtil->getField('city');
  740.             $city $this->em->getRepository(City::class)->findOneBy([
  741.                 "id" => $cityId,
  742.                 "deleted" => UserEnum::ITEM_NO_DELETED
  743.             ]);
  744.             if($city){
  745.                 $user->setCity($city);
  746.             }else{
  747.                 $user->setCity(null);
  748.             }
  749.         }
  750.         if($this->requestUtil->issetField('zipCode')){
  751.             $user->setZipCode($this->requestUtil->getField('zipCode'));
  752.         }
  753.         if($this->requestUtil->issetField('address')){
  754.             $user->setAddress($this->requestUtil->getField('address'));
  755.         }
  756.         if($this->requestUtil->issetField('addressNumber')){
  757.             $user->setAddressNumber($this->requestUtil->getField('addressNumber'));
  758.         }
  759.         if($this->requestUtil->issetField('addressComplement')){
  760.             $user->setAddressComplement($this->requestUtil->getField('addressComplement'));
  761.         }
  762.         if($this->requestUtil->issetField('addressNeighborhood')){
  763.             $user->setAddressNeighborhood(
  764.                 $this->requestUtil->getField('addressNeighborhood')
  765.             );
  766.         }
  767.         $errors $this->validateEntity($user);
  768.         if($errors){
  769.             return $this->eadResponse($errorsErrorEnum::FIELD_EMPTY);
  770.         }
  771.         $userCheckoutInfoRepository $this->em->getRepository(UserCheckoutInfo::class);
  772.         $userCheckoutInfoId null;
  773.         $userCheckoutInfo $userCheckoutInfoRepository->findOneBy([
  774.             "user" => $user->getId(),
  775.             "default" => UserCheckoutInfoEnum::YES,
  776.             "deleted" => UserCheckoutInfoEnum::ITEM_NO_DELETED
  777.         ]);
  778.         $new false;
  779.         if(!$userCheckoutInfo){
  780.             $new true;
  781.             $userCheckoutInfo = new UserCheckoutInfo();
  782.         }
  783.         $userCheckoutInfo->setName($user->getName());
  784.         $userCheckoutInfo->setEmail($user->getEmail());
  785.         $userCheckoutInfo->setDocument($user->getDocument());
  786.         $userCheckoutInfo->setPhone($user->getPhone());
  787.         $userCheckoutInfo->setZipCode($user->getZipCode());
  788.         $userCheckoutInfo->setAddress($user->getAddress());
  789.         $userCheckoutInfo->setAddressNumber($user->getAddressNumber());
  790.         $userCheckoutInfo->setAddressComplement($user->getAddressComplement());
  791.         $userCheckoutInfo->setAddressNeighborhood($user->getAddressNeighborhood());
  792.         $userCheckoutInfo->setCity($user->getCity());
  793.         $userCheckoutInfo->setState($user->getState());
  794.         $userCheckoutInfo->setCountry($user->getCountry());
  795.         $userCheckoutInfo->setUser($user);
  796.         $userCheckoutInfo->setReceiveEmail(UserCheckoutInfoEnum::NO);
  797.         if($new){
  798.             $userCheckoutInfo->setDefault(UserCheckoutInfoEnum::YES);
  799.             $this->em->persist($userCheckoutInfo);
  800.         }
  801.         $userCheckoutInfoId $userCheckoutInfo->getId();
  802.         $this->em->flush();
  803.         $this->repository->sendWebhook($user);
  804.         $crmService $this->generalService->getService('CRM\\CrmService');
  805.         $crmService->savePerson($user);
  806.         $data $user->toReturn();
  807.         $this->userLogService->logUpdate("user"$user->getId(), $data);
  808.         $data['userCheckoutInfoId'] = $userCheckoutInfoId;
  809.         return $this->eadResponse($data);
  810.     }
  811.     /**
  812.      * @Route(
  813.      *      path          = "/admin/user/edit/info/profile",
  814.      *      name          = "userEditInfoProfile",
  815.      *      methods       = {"POST"}
  816.      * )
  817.      */
  818.     public function userEditInfoProfile(Request $request) {
  819.         if (!$this->user) {
  820.             return $this->eadResponse(nullErrorEnum::NOT_FOUND);
  821.         }
  822.         $this->requestUtil->setRequest($request)->setData();
  823.         $files $this->requestUtil->getFile('files');
  824.         $filePhoto $this->requestUtil->getFile('photo');
  825.         $fileCover $this->requestUtil->getFile('cover');
  826.         $emailService $this->generalService->getService('EmailService');
  827.         $emailService->setToEmail($this->user->getEmail());
  828.         $emailService->setToName($this->user->getName());
  829.         if($filePhoto){
  830.             if($filePhoto->getSize() > UserEnum::MAX_SIZE_USER_IMAGES){
  831.                 return $this->eadResponse(nullErrorEnum::ACTION_INVALID);
  832.             }
  833.         }
  834.         if($fileCover){
  835.             if($fileCover->getSize() > UserEnum::MAX_SIZE_USER_IMAGES){
  836.                 return $this->eadResponse(nullErrorEnum::ACTION_INVALID);
  837.             }
  838.         }
  839.         if($this->requestUtil->issetField('name')){
  840.             $this->user->setName($this->requestUtil->getField('name'));
  841.         }
  842.         if($this->requestUtil->issetField('username')){
  843.             if($this->user->getUsername() != $this->requestUtil->getField('username'))
  844.             {
  845.                 $totalUsername $this->repository->countByUsername($this->requestUtil->getField('username'));
  846.                 if(!empty($totalUsername))
  847.                 {
  848.                     return $this->eadResponse([ 'username' ], ErrorEnum::FIELD_EMPTY);
  849.                 }
  850.                 $this->user->setUsername($this->requestUtil->getField('username'));
  851.             }
  852.         }
  853.         $password "******";
  854.         if($this->requestUtil->issetField('password')){
  855.             $newPassword $this->requestUtil->getField('password');
  856.             if(
  857.                 $this->user->getPassword() != $newPassword && 
  858.                 $this->user->getPassword() != md5($newPassword)
  859.             ){
  860.                 $oldPassword $this->user->getPassword();
  861.                 $this->user->setPassword($newPassword);
  862.                 $oldPass $this->user->getOldPassword(true);
  863.                 if(in_array($this->user->getPassword(), $oldPass)){
  864.                     return $this->eadResponse([ 
  865.                         "message" => "Nova senha precisa ser diferente da anterior!"
  866.                     ], ErrorEnum::ACTION_INVALID);
  867.                 }
  868.                 if($oldPassword != UserEnum::PASSWORD_RESET){
  869.                     $this->user->setOldPassword($oldPassword);
  870.                 }
  871.                 if(
  872.                     $emailService->checkUserToSend($this->userfalse) ||
  873.                     $this->configuration->get("allow_send_email_user") == UserEnum::YES
  874.                 ){
  875.                     $subText $this->configuration->getLanguage(
  876.                         'change_password.subject''email'
  877.                     );
  878.                     $subject "{$subText} - {$this->client->getBrand()}";
  879.                     $emailService->setSubject($subject);
  880.                     $emailService->setData([
  881.                         "userName" => $this->user->getName(),
  882.                         "btnLink" => 'https://'.$this->client->getDomainPrimary()."/profile",
  883.                     ]);
  884.                     $emailService->setTemplateBody("change_password");
  885.                     $emailService->send();
  886.                 }
  887.             }
  888.         }
  889.         if($this->requestUtil->issetField('document')){
  890.             $this->user->setDocument($this->requestUtil->getField('document'));
  891.         }
  892.         if($this->requestUtil->issetField('phone')){
  893.             $this->user->setPhone($this->requestUtil->getField('phone'));
  894.         }
  895.         if($this->requestUtil->issetField('birthDate')){
  896.             $birthDate $this->requestUtil->getField('birthDate');
  897.             $birthDate implode('-'array_reverse(explode('/'$birthDate)));
  898.             $this->user->setBirthDate($birthDate);
  899.         }
  900.         if($this->configuration->checkModuleIsAbleOnPlan('customFormModule')){
  901.             if($this->requestUtil->issetField('customField')){
  902.                 $this->user->setCustomField($this->requestUtil->getField('customField'));
  903.             }
  904.         }
  905.         if($this->requestUtil->issetField('occupation')){
  906.             $this->user->setOccupation($this->requestUtil->getField('occupation'));
  907.         }
  908.         if($this->requestUtil->issetField('biography')){
  909.             $this->user->setBiography($this->requestUtil->getField('biography'));
  910.         }
  911.         if($this->requestUtil->issetField('resume')){
  912.             $this->user->setResume($this->requestUtil->getField('resume'));
  913.         }
  914.         if($this->requestUtil->issetField('custom')){
  915.             $this->user->setCustom($this->requestUtil->getField('custom'));
  916.         }
  917.         if($this->requestUtil->issetField('notes')){
  918.             $this->user->setNotes($this->requestUtil->getField('notes'));
  919.         }
  920.         
  921.         if($this->requestUtil->issetField('country')){
  922.             $countryId $this->requestUtil->getField('country');
  923.             $country $this->em->getRepository(Country::class)->findOneBy([
  924.                 "id" => $countryId,
  925.                 "deleted" => UserEnum::ITEM_NO_DELETED
  926.             ]);
  927.             if($country){
  928.                 $this->user->setCountry($country);
  929.             }else{
  930.                 $this->user->setCountry(null);
  931.             }
  932.         }
  933.         if($this->requestUtil->issetField('state')){
  934.             $stateId $this->requestUtil->getField('state');
  935.             $state $this->em->getRepository(State::class)->findOneBy([
  936.                 "id" => $stateId,
  937.                 "deleted" => UserEnum::ITEM_NO_DELETED
  938.             ]);
  939.             if($state){
  940.                 $this->user->setState($state);
  941.             }else{
  942.                 $this->user->setState(null);
  943.             }
  944.         }
  945.         if($this->requestUtil->issetField('city')){
  946.             $cityId $this->requestUtil->getField('city');
  947.             $city $this->em->getRepository(City::class)->findOneBy([
  948.                 "id" => $cityId,
  949.                 "deleted" => UserEnum::ITEM_NO_DELETED
  950.             ]);
  951.             if($city){
  952.                 $this->user->setCity($city);
  953.             }else{
  954.                 $this->user->setCity(null);
  955.             }
  956.         }
  957.         if($this->requestUtil->issetField('zipCode')){
  958.             $this->user->setZipCode($this->requestUtil->getField('zipCode'));
  959.         }
  960.         if($this->requestUtil->issetField('address')){
  961.             $this->user->setAddress($this->requestUtil->getField('address'));
  962.         }
  963.         if($this->requestUtil->issetField('addressNumber')){
  964.             $this->user->setAddressNumber($this->requestUtil->getField('addressNumber'));
  965.         }
  966.         if($this->requestUtil->issetField('addressComplement')){
  967.             $this->user->setAddressComplement(
  968.                 $this->requestUtil->getField('addressComplement')
  969.             );
  970.         }
  971.         if($this->requestUtil->issetField('addressNeighborhood')){
  972.             $this->user->setAddressNeighborhood(
  973.                 $this->requestUtil->getField('addressNeighborhood')
  974.             );
  975.         }
  976.         if($this->requestUtil->issetField('website')){
  977.             $this->user->setWebsite($this->requestUtil->getField('website'));
  978.         }
  979.         if($this->requestUtil->issetField('twitter')){
  980.             $this->user->setTwitter($this->requestUtil->getField('twitter'));
  981.         }
  982.         if($this->requestUtil->issetField('facebook')){
  983.             $this->user->setFacebook($this->requestUtil->getField('facebook'));
  984.         }
  985.         if($this->requestUtil->issetField('linkedin')){
  986.             $this->user->setLinkedin($this->requestUtil->getField('linkedin'));
  987.         }
  988.         if($this->requestUtil->issetField('youtube')){
  989.             $this->user->setYoutube($this->requestUtil->getField('youtube'));
  990.         }
  991.         if($this->requestUtil->issetField('instagram')){
  992.             $this->user->setInstagram($this->requestUtil->getField('instagram'));
  993.         }
  994.         if($this->requestUtil->issetField('tiktok')){
  995.             $this->user->setTiktok($this->requestUtil->getField('tiktok'));
  996.         }
  997.         $errors $this->validateEntity($this->user);
  998.         if($errors){
  999.             return $this->eadResponse($errorsErrorEnum::FIELD_EMPTY);
  1000.         }
  1001.         if($filePhoto){
  1002.             $filePhoto $this->fileService->setFile($filePhoto);
  1003.             if($filePhoto){
  1004.                 $this->fileService->moveFile(UserEnum::PATH_PROFILES);
  1005.                 $this->user->setPhoto($this->fileService->getFileName());
  1006.             }
  1007.         }
  1008.         if($fileCover){
  1009.             $fileCover $this->fileService->setFile($fileCover);
  1010.             if($fileCover){
  1011.                 $this->fileService->moveFile(UserEnum::PATH_COVERS_PROFILE);
  1012.                 $this->user->setCover($this->fileService->getFileName());
  1013.             }
  1014.         }
  1015.         if($this->configuration->checkModuleIsAbleOnPlan('customFormModule')){
  1016.             $customField json_decode($this->user->getCustomField());
  1017.             if($customField){
  1018.                 foreach ($customField as $key => $field) {
  1019.                     if(!empty($field->fieldId)){
  1020.                         if(isset($files[$field->fieldId])){
  1021.                             $file $files[$field->fieldId];
  1022.                             if(
  1023.                                 $field->type == UserCustomFieldEnum::FIELD_FILE 
  1024.                                 && $file->getError() == UserCustomFieldEnum::NO
  1025.                             ){
  1026.                                 $file $this->fileService->setFile($file);
  1027.                                 if($file){
  1028.                                     $this->fileService->moveFile(
  1029.                                         UserEnum::PATH_OTHERS_PROFILES
  1030.                                     );
  1031.                                     $filePath $this->fileService->getFileName();
  1032.                                     $extension $this->fileService->getFileExtension();
  1033.                                     if(!empty($field->value)){
  1034.                                         $field->value->path $filePath;
  1035.                                         $field->value->extension $extension;
  1036.                                     }
  1037.                                     $customField->{$key} = $field;
  1038.                                 }
  1039.                             }
  1040.                         }
  1041.                     }
  1042.                 }
  1043.                 
  1044.                 $customField json_encode($customField);
  1045.                 $this->user->setCustomField($customField);
  1046.             }
  1047.         }
  1048.         $this->em->flush();
  1049.         $this->repository->sendWebhook($this->user);
  1050.         $crmService $this->generalService->getService('CRM\\CrmService');
  1051.         $crmService->savePerson($this->user);
  1052.         
  1053.         $data $this->user->toReturn();
  1054.         $this->userLogService->logUpdate("user"$this->user->getId(), $data);
  1055.         return $this->eadResponse($data);
  1056.     }
  1057.     /**
  1058.      * @Route(
  1059.      *      path          = "/admin/user/edit/lesson/config",
  1060.      *      name          = "userEditLessonConfig",
  1061.      *      methods       = {"PUT"}
  1062.      * )
  1063.      */
  1064.     public function userEditLessonConfig(Request $request) {
  1065.         if (!$this->user) {
  1066.             return $this->eadResponse(nullErrorEnum::NOT_FOUND);
  1067.         }
  1068.         $this->requestUtil->setRequest($request)->setData();
  1069.         if($this->requestUtil->issetField('screenSize')){
  1070.             $this->user->setScreenSize((int)$this->requestUtil->getField('screenSize'));
  1071.         }
  1072.         if($this->requestUtil->issetField('autoplay')){
  1073.             $this->user->setAutoplay((int)$this->requestUtil->getField('autoplay'));
  1074.         }
  1075.         $errors $this->validateEntity($this->user);
  1076.         if($errors){
  1077.             return $this->eadResponse($errorsErrorEnum::FIELD_EMPTY);
  1078.         }
  1079.         $this->em->flush();
  1080.         
  1081.         $data $this->user->toReturn();
  1082.         $this->userLogService->logUpdate("user"$this->user->getId(), $data);
  1083.         return $this->eadResponse([ "success" => ]);
  1084.     }
  1085.     /**
  1086.      * @Route(
  1087.      *      path          = "/admin/user/edit/payment/config",
  1088.      *      name          = "userEditPaymentConfig",
  1089.      *      methods       = {"PUT"}
  1090.      * )
  1091.      */
  1092.     public function userEditPaymentConfig(Request $request) {
  1093.         if (!$this->user) {
  1094.             return $this->eadResponse(nullErrorEnum::NOT_FOUND);
  1095.         }
  1096.         $this->requestUtil->setRequest($request)->setData();
  1097.         if($this->requestUtil->issetField('allowOneClickBuy')){
  1098.             $this->user->setAllowOneClickBuy(
  1099.                 (int)$this->requestUtil->getField('allowOneClickBuy')
  1100.             );
  1101.         }
  1102.         $errors $this->validateEntity($this->user);
  1103.         if($errors){
  1104.             return $this->eadResponse($errorsErrorEnum::FIELD_EMPTY);
  1105.         }
  1106.         $this->em->flush();
  1107.         
  1108.         $data $this->user->toReturn();
  1109.         $this->userLogService->logUpdate("user"$this->user->getId(), $data);
  1110.         return $this->eadResponse([ "success" => ]);
  1111.     }
  1112.     /**
  1113.      * @Route(
  1114.      *      path          = "/admin/user/edit/info/{id}",
  1115.      *      name          = "userEditInfo",
  1116.      *      methods       = {"PUT"},
  1117.      *      requirements  = { "id" = "\d+" }
  1118.      * )
  1119.      */
  1120.     public function editUserInfo(Request $request) {
  1121.         $userId $request->get('id');
  1122.         $user $this->repository->findOneBy([
  1123.             "deleted" => UserEnum::ITEM_NO_DELETED,
  1124.             "id" => $userId
  1125.         ]);
  1126.     
  1127.         if (!$user) {
  1128.             return $this->eadResponse(nullErrorEnum::NOT_FOUND);
  1129.         }
  1130.         if($userId != $this->user->getId()){
  1131.             $permission $this->userPermissionUtil->getPermission("user""edit");
  1132.             if(!$this->userPermissionUtil->isHigh($permission)){
  1133.                 return $this->eadResponse(nullErrorEnum::PERMISSION);
  1134.             }
  1135.         }
  1136.         $emailService $this->generalService->getService('EmailService');
  1137.         $emailService->setToEmail($user->getEmail());
  1138.         $emailService->setToName($user->getName());
  1139.         $this->requestUtil->setRequest($request)->setData();
  1140.         $userProfileSave $user->getUserProfile();
  1141.         $userOldStatus $user->getOldStatus();
  1142.         $userTypeSave $user->getType();
  1143.         $userAllowReceiverSave $user->getAllowReceiver();
  1144.         if($this->requestUtil->issetField('email'))
  1145.         {
  1146.             if($user->getEmail() != $this->requestUtil->getField('email'))
  1147.             {
  1148.                 $totalEmail $this->repository->countByEmail($this->requestUtil->getField('email'));
  1149.                 if(!empty($totalEmail))
  1150.                 {
  1151.                     return $this->eadResponse([ 'email' ], ErrorEnum::FIELD_EMPTY);
  1152.                 }
  1153.                 $user->setEmail(strtolower($this->requestUtil->getField('email')));
  1154.                 $user->setValidEmail(UserEnum::UNKNOWN);
  1155.             }
  1156.         }
  1157.         if($this->requestUtil->issetField('name')){
  1158.             $user->setName($this->requestUtil->getField('name'));
  1159.         }
  1160.         if($this->requestUtil->issetField('username')){
  1161.             if($user->getUsername() != $this->requestUtil->getField('username'))
  1162.             {
  1163.                 $totalUsername $this->repository->countByUsername(
  1164.                     $this->requestUtil->getField('username')
  1165.                 );
  1166.                 
  1167.                 if(!empty($totalUsername))
  1168.                 {
  1169.                     return $this->eadResponse([ 'username' ], ErrorEnum::FIELD_EMPTY);
  1170.                 }
  1171.                 $user->setUsername($this->requestUtil->getField('username'));
  1172.             }
  1173.         }
  1174.         if($this->requestUtil->issetField('teacherSpotlight')){
  1175.             $user->setTeacherSpotlight((int)$this->requestUtil->getField('teacherSpotlight'));
  1176.             $this->em->getRepository(Configuration::class)->resetTeacherNumber();
  1177.         }
  1178.         $updatePassword false;
  1179.         $password "******";
  1180.         if($this->requestUtil->issetField('password')){
  1181.             $newPassword $this->requestUtil->getField('password');
  1182.             if(
  1183.                 $user->getPassword() != $newPassword && 
  1184.                 $user->getPassword() != md5($newPassword)
  1185.             ){
  1186.                 $oldPassword $user->getPassword();
  1187.                 $user->setPassword($newPassword);
  1188.                 $oldPass $user->getOldPassword(true);
  1189.                 if(in_array($user->getPassword(), $oldPass)){
  1190.                     return $this->eadResponse([ 
  1191.                         "message" => "Nova senha precisa ser diferente da anterior!"
  1192.                     ], ErrorEnum::ACTION_INVALID);
  1193.                 }
  1194.                 $updatePassword true;
  1195.                 if($oldPassword != UserEnum::PASSWORD_RESET){
  1196.                     $user->setOldPassword($oldPassword);
  1197.                 }
  1198.             }
  1199.         }
  1200.         if($this->requestUtil->issetField('allowReceiver')){
  1201.             $user->setAllowReceiver((int)$this->requestUtil->getField('allowReceiver'));
  1202.         }
  1203.         
  1204.         if($this->requestUtil->issetField('document')){
  1205.             $user->setDocument($this->requestUtil->getField('document'));
  1206.         }
  1207.         if($this->requestUtil->issetField('birthDate')){
  1208.             $user->setBirthDate($this->requestUtil->getField('birthDate'));
  1209.         }
  1210.         if($this->requestUtil->issetField('phone')){
  1211.             $user->setPhone($this->requestUtil->getField('phone'));
  1212.         }
  1213.         if($this->requestUtil->issetField('userProfile')){
  1214.             $userProfileId $this->requestUtil->getField('userProfile');
  1215.             $maxAllowID $this->user->getUserProfile()->getId();
  1216.             $saveAllowID $user->getUserProfile()->getId();
  1217.             $allowEditPermissions = ($maxAllowID == $saveAllowID || $saveAllowID == UserEnum::STUDENT);
  1218.             if($saveAllowID == UserEnum::ADMIN){
  1219.                 $allowEditPermissions = ($maxAllowID == $saveAllowID);
  1220.             }else if($saveAllowID == UserEnum::TEACHER){
  1221.                 $allowEditPermissions = ($maxAllowID == UserEnum::ADMIN);
  1222.             }else if($saveAllowID == UserEnum::TUTOR){
  1223.                 $allowEditPermissions = (
  1224.                     $maxAllowID == UserEnum::TEACHER || $maxAllowID == UserEnum::ADMIN
  1225.                 );
  1226.             }
  1227.             if($userProfileSave->getId() != $userProfileId && $allowEditPermissions){
  1228.                 $allowPermissions = [
  1229.                     $maxAllowID,
  1230.                     UserEnum::STUDENT
  1231.                 ];
  1232.                 
  1233.                 if($maxAllowID == UserEnum::ADMIN){
  1234.                     $allowPermissions[] = UserEnum::TUTOR;
  1235.                     $allowPermissions[] = UserEnum::TEACHER;
  1236.                     $allowPermissions[] = $userProfileId;
  1237.                 }else if($maxAllowID == UserEnum::TEACHER){
  1238.                     $allowPermissions[] = UserEnum::TUTOR;
  1239.                 }
  1240.                 $permission $this->userPermissionUtil->getPermission("user""permissions");
  1241.                 if(!$this->userPermissionUtil->isHigh($permission)){
  1242.                     if(!in_array($userProfileId$allowPermissions)){
  1243.                         $userProfileId null;
  1244.                     }
  1245.                 }
  1246.                 $userProfile $this->em->getRepository(UserProfile::class)->findOneBy([
  1247.                     "id" => $userProfileId,
  1248.                     "deleted" => UserEnum::ITEM_NO_DELETED
  1249.                 ]);
  1250.                 $user->setUserProfile($userProfile);
  1251.                 
  1252.                 if($userProfile){
  1253.                     $user->setPermission($userProfile->getPermission());
  1254.                 }
  1255.             }
  1256.         }
  1257.         if($this->requestUtil->issetField('type')){
  1258.             $type = (int)$this->requestUtil->getField('type');
  1259.             $user->setType($type);
  1260.             if($userTypeSave == UserEnum::ADMIN && $userTypeSave != $type){
  1261.                 $adminsNumber $this->repository->countAdmins();
  1262.                 if($adminsNumber 1){
  1263.                     $user->setType(null);
  1264.                 }
  1265.             }
  1266.         }
  1267.         if($this->requestUtil->issetField('status')){
  1268.             $user->setStatus((int)$this->requestUtil->getField('status'));
  1269.             if($user->getStatus() == UserEnum::ACTIVE){
  1270.                 $user->setConfirmationDate(date('Y-m-d H:i:s'));
  1271.             }
  1272.         }
  1273.         if($this->requestUtil->issetField('validEmail')){
  1274.             $user->setValidEmail($this->requestUtil->getField('validEmail'));
  1275.         }        
  1276.         if($user->getUserProfile()){
  1277.             $types = [
  1278.                 UserEnum::STUDENT,
  1279.                 UserEnum::TUTOR,
  1280.                 UserEnum::TEACHER,
  1281.                 UserEnum::ADMIN,
  1282.             ];
  1283.             if(in_array($user->getUserProfile()->getId(), $types)){
  1284.                 $user->setType($user->getUserProfile()->getId());
  1285.             }
  1286.         }
  1287.         $errors $this->validateEntity($user);
  1288.         if($errors){
  1289.             return $this->eadResponse($errorsErrorEnum::FIELD_EMPTY);
  1290.         }
  1291.         if($updatePassword){
  1292.             $this->em->getRepository(Session::class)->resetSessions($user);
  1293.             if(
  1294.                 $emailService->checkUserToSend($userfalse) ||
  1295.                 $this->configuration->get("allow_send_email_user") == UserEnum::YES
  1296.             ){
  1297.                 $subText $this->configuration->getLanguage(
  1298.                     'change_password.subject''email'
  1299.                 );
  1300.                 $subject "{$subText} - {$this->client->getBrand()}";
  1301.                 $emailService->setSubject($subject);
  1302.                 $emailService->setData([
  1303.                     "userName" => $user->getName(),
  1304.                     "btnLink" => "https://{$this->client->getDomainPrimary()}/profile",
  1305.                 ]);
  1306.                 $emailService->setTemplateBody("change_password");
  1307.                 $emailService->send();
  1308.             }
  1309.         }
  1310.         $this->em->flush();
  1311.         $crmService $this->generalService->getService('CRM\\CrmService');
  1312.         $crmService->savePerson($user);
  1313.         $marketingService $this->generalService->getService(
  1314.             'Marketing\\MarketingService'
  1315.         );
  1316.         if($user->getStatus() == UserEnum::ACTIVE && $userOldStatus == UserEnum::WAITING){
  1317.             
  1318.             $marketingService->setTag(TagsMarketingEnum::TAG_CONFIRM_REGISTER);
  1319.             $marketingService->setUser($user);
  1320.             $marketingService->send();
  1321.         }
  1322.         $userPermission json_decode($user->getPermission());
  1323.         if($userAllowReceiverSave != $user->getAllowReceiver()){
  1324.             if($user->getAllowReceiver() == UserEnum::NO){
  1325.                 if(!isset($userPermission->financial)){
  1326.                     $userPermission->financial = (object)[];
  1327.                 }
  1328.                 if(!isset($userPermission->financial->receiver)){
  1329.                     $userPermission->financial->receiver = (object)[];
  1330.                 }
  1331.                 if(empty($userPermission->financial->receiver->see)){
  1332.                     $userPermission->financial->receiver->see UserPermissionEnum::LOW;
  1333.                 }
  1334.                 if(empty($userPermission->financial->receiver->enable)){
  1335.                     $userPermission->financial->receiver->enable UserPermissionEnum::LOW;
  1336.                 }
  1337.                 if(empty($userPermission->financial->receiver->disable)){
  1338.                     $userPermission->financial->receiver->disable UserPermissionEnum::LOW;
  1339.                 }
  1340.                 if(empty($userPermission->financial->receiver->create)){
  1341.                     $userPermission->financial->receiver->create UserPermissionEnum::LOW;
  1342.                 }
  1343.                 if(empty($userPermission->financial->receiver->edit)){
  1344.                     $userPermission->financial->receiver->edit UserPermissionEnum::LOW;
  1345.                 }
  1346.                 if(empty($userPermission->financial->receiver->delete)){
  1347.                     $userPermission->financial->receiver->delete UserPermissionEnum::LOW;
  1348.                 }
  1349.                 $receiver $this->em->getRepository(Receiver::class)->findOneBy([ 
  1350.                     "user" => $user
  1351.                     "deleted" => UserEnum::ITEM_NO_DELETED 
  1352.                 ]);
  1353.                 if($receiver){
  1354.                     $receiver->setStatus(ReceiverEnum::INACTIVE);
  1355.                 }
  1356.             }else if($user->getAllowReceiver() == UserEnum::YES){
  1357.                 if(!isset($userPermission->financial)){
  1358.                     $userPermission->financial = (object)[];
  1359.                 }
  1360.                 if(!isset($userPermission->financial->receiver)){
  1361.                     $userPermission->financial->receiver = (object)[];
  1362.                 }
  1363.                 if(empty($userPermission->financial->receiver->see)){
  1364.                     $userPermission->financial->receiver->see UserPermissionEnum::MIDDLE;
  1365.                 }
  1366.                 if(empty($userPermission->financial->receiver->enable)){
  1367.                     $userPermission->financial->receiver->enable UserPermissionEnum::MIDDLE;
  1368.                 }
  1369.                 if(empty($userPermission->financial->receiver->disable)){
  1370.                     $userPermission->financial->receiver->disable UserPermissionEnum::MIDDLE;
  1371.                 }
  1372.                 if(empty($userPermission->financial->receiver->create)){
  1373.                     $userPermission->financial->receiver->create UserPermissionEnum::MIDDLE;
  1374.                 }
  1375.                 if(empty($userPermission->financial->receiver->edit)){
  1376.                     $userPermission->financial->receiver->edit UserPermissionEnum::MIDDLE;
  1377.                 }
  1378.                 if(empty($userPermission->financial->receiver->delete)){
  1379.                     $userPermission->financial->receiver->delete UserPermissionEnum::MIDDLE;
  1380.                 }
  1381.                 if($emailService->checkUserToSend($user)){
  1382.                     //send email allow receiver
  1383.                     $subText $this->configuration->getLanguage(
  1384.                         'receiver_register.subject''email'
  1385.                     );
  1386.                     $subject "{$subText} - {$this->client->getBrand()}";
  1387.                     $emailService->setSubject($subject);
  1388.                     $emailService->setData([
  1389.                         "userName" => $user->getName(),
  1390.                         "btnLink" => "https://{$this->client->getDomainPrimary()}/profile#table-receivers",
  1391.                     ]);
  1392.                     $emailService->setTemplateBody("receiver_register");
  1393.                     $emailService->send();
  1394.                 }
  1395.             }
  1396.         }
  1397.         $user->setPermission(json_encode($userPermission));
  1398.         $this->em->flush();
  1399.         $this->repository->sendWebhook($user);
  1400.         $data $user->toReturn();
  1401.         $this->userLogService->logUpdate("user"$user->getId(), $data);
  1402.         return $this->eadResponse($data);
  1403.     }
  1404.     /**
  1405.      * @Route(
  1406.      *      path          = "/admin/user/enable/authentication",
  1407.      *      name          = "userEnableAuthentication",
  1408.      *      methods       = {"PUT"}
  1409.      * )
  1410.      */
  1411.     public function userEnableAuthentication(Request $request) {
  1412.         if (!$this->user) {
  1413.             return $this->eadResponse(nullErrorEnum::NOT_FOUND);
  1414.         }
  1415.         $this->requestUtil->setRequest($request)->setData();
  1416.         $secretKey $this->requestUtil->getField('secretKey');
  1417.         $code $this->requestUtil->getField('code');
  1418.         $googleAuthenticatorService $this->generalService->getService('GoogleAuthenticatorService');
  1419.         $googleAuthenticatorService->setSecretKey($secretKey);
  1420.         $googleAuthenticatorService->setCode($code);
  1421.         $checkCode $googleAuthenticatorService->checkCodeAuthentication();
  1422.         $this->user->setAuthenticationSecretKey($secretKey);
  1423.         $this->user->setAuthenticationAllow(UserEnum::YES);
  1424.         $errors $this->validateEntity($this->user);
  1425.         if($errors){
  1426.             return $this->eadResponse($errorsErrorEnum::FIELD_EMPTY);
  1427.         }
  1428.         if(!$checkCode){
  1429.             return $this->eadResponse($errorsErrorEnum::AUTH_INVALID);
  1430.         }
  1431.         $this->em->flush();
  1432.         
  1433.         $data $this->user->toReturn();
  1434.         $this->userLogService->logUpdate("user"$this->user->getId(), $data);
  1435.         return $this->eadResponse([ "success" => ]);
  1436.     }
  1437.     /**
  1438.      * @Route(
  1439.      *      path          = "/admin/user/disable/authentication",
  1440.      *      name          = "userDisableAuthentication",
  1441.      *      methods       = {"PUT"}
  1442.      * )
  1443.      */
  1444.     public function userDisableAuthentication(Request $request) {
  1445.         if (!$this->user) {
  1446.             return $this->eadResponse(nullErrorEnum::NOT_FOUND);
  1447.         }
  1448.         $this->requestUtil->setRequest($request)->setData();
  1449.         $this->user->setAuthenticationSecretKey(null);
  1450.         $this->user->setAuthenticationCodeEmail(null);
  1451.         $this->user->setAuthenticationEmailDateExpire(null);
  1452.         $this->user->setAuthenticationAllow(UserEnum::NO);
  1453.         $errors $this->validateEntity($this->user);
  1454.         if($errors){
  1455.             return $this->eadResponse($errorsErrorEnum::FIELD_EMPTY);
  1456.         }
  1457.         $this->em->flush();
  1458.         
  1459.         $data $this->user->toReturn();
  1460.         $this->userLogService->logUpdate("user"$this->user->getId(), $data);
  1461.         return $this->eadResponse([ "success" => ]);
  1462.     }
  1463.     /**
  1464.      * @Route(
  1465.      *      path          = "/admin/user/edit/permission/{id}",
  1466.      *      name          = "userEditPermission",
  1467.      *      methods       = {"PUT"},
  1468.      *      requirements  = { "id" = "\d+" }
  1469.      * )
  1470.      */
  1471.     public function editUserPermission(Request $request) {
  1472.         if(!$this->configuration->checkModuleIsAbleOnPlan('permissionFunction')){
  1473.             return $this->eadResponse(nullErrorEnum::ACTION_INVALID);
  1474.         }
  1475.         
  1476.         $userId $request->get('id');
  1477.         $user $this->repository->findOneBy([
  1478.             "deleted" => UserEnum::ITEM_NO_DELETED,
  1479.             "id" => $userId
  1480.         ]);
  1481.         if (!$user) {
  1482.             return $this->eadResponse(nullErrorEnum::NOT_FOUND);
  1483.         }
  1484.         $permission $this->userPermissionUtil->getPermission("user""permissions");
  1485.         if(!$this->userPermissionUtil->isHigh($permission)){
  1486.             return $this->eadResponse(nullErrorEnum::PERMISSION);
  1487.         }
  1488.         $this->requestUtil->setRequest($request)->setData();
  1489.         if($this->requestUtil->issetField('permission')){
  1490.             $user->setPermission($this->requestUtil->getField('permission'));
  1491.         }
  1492.         
  1493.         $errors $this->validateEntity($user);
  1494.         if($errors){
  1495.             return $this->eadResponse($errorsErrorEnum::FIELD_EMPTY);
  1496.         }
  1497.         $this->em->flush();
  1498.         $data $user->toReturn();
  1499.         $this->userLogService->logUpdate("user"$user->getId(), $data);
  1500.         return $this->eadResponse($data);
  1501.     }
  1502.     /**
  1503.      * @Route(
  1504.      *      path          = "/admin/user/edit/custom/{id}",
  1505.      *      name          = "userEditCustom",
  1506.      *      methods       = {"POST"},
  1507.      *      requirements  = { "id" = "\d+" }
  1508.      * )
  1509.      */
  1510.     public function editUserCustomFields(Request $request) {
  1511.         $userId $request->get('id');
  1512.         $user $this->repository->findOneBy([
  1513.             "deleted" => UserEnum::ITEM_NO_DELETED,
  1514.             "id" => $userId
  1515.         ]);
  1516.         if (!$user) {
  1517.             return $this->eadResponse(nullErrorEnum::NOT_FOUND);
  1518.         }
  1519.         if($userId != $this->user->getId()){
  1520.             $permission $this->userPermissionUtil->getPermission("user""edit");
  1521.             if(!$this->userPermissionUtil->isHigh($permission)){
  1522.                 return $this->eadResponse(nullErrorEnum::PERMISSION);
  1523.             }
  1524.         }
  1525.         $this->requestUtil->setRequest($request)->setData();
  1526.         $files $this->requestUtil->getFile('file');
  1527.         if($this->configuration->checkModuleIsAbleOnPlan('customFormModule')){
  1528.             if($this->requestUtil->issetField('customField')){
  1529.                 $user->setCustomField($this->requestUtil->getField('customField'));
  1530.             }
  1531.         }
  1532.         if($this->requestUtil->issetField('occupation')){
  1533.             $user->setOccupation($this->requestUtil->getField('occupation'));
  1534.         }
  1535.         if($this->requestUtil->issetField('biography')){
  1536.             $user->setBiography($this->requestUtil->getField('biography'));
  1537.         }
  1538.         if($this->requestUtil->issetField('resume')){
  1539.             $user->setResume($this->requestUtil->getField('resume'));
  1540.         }
  1541.         if($this->requestUtil->issetField('custom')){
  1542.             $user->setCustom($this->requestUtil->getField('custom'));
  1543.         }
  1544.         if($this->requestUtil->issetField('notes')){
  1545.             $user->setNotes($this->requestUtil->getField('notes'));
  1546.         }
  1547.         
  1548.         $errors $this->validateEntity($user);
  1549.         if($errors){
  1550.             return $this->eadResponse($errorsErrorEnum::FIELD_EMPTY);
  1551.         }
  1552.         if($this->configuration->checkModuleIsAbleOnPlan('customFormModule')){
  1553.             $customField json_decode($user->getCustomField());
  1554.             if($customField){
  1555.                 foreach ($customField as $key => $field) {
  1556.                     if(!empty($field->fieldId)){
  1557.                         if(isset($files[$field->fieldId])){
  1558.                             $file $files[$field->fieldId];
  1559.                             if(
  1560.                                 $field->type == UserCustomFieldEnum::FIELD_FILE && 
  1561.                                 $file->getError() == UserCustomFieldEnum::NO
  1562.                             ){
  1563.                                 $file $this->fileService->setFile($file);
  1564.                                 if($file){
  1565.                                     $this->fileService->moveFile(
  1566.                                         UserEnum::PATH_OTHERS_PROFILES
  1567.                                     );
  1568.                                     $filePath $this->fileService->getFileName();
  1569.                                     $extension $this->fileService->getFileExtension();
  1570.                                     if(!empty($field->value)){
  1571.                                         $field->value->path $filePath;
  1572.                                         $field->value->extension $extension;
  1573.                                     }
  1574.                                     $customField->{$key} = $field;
  1575.                                 }
  1576.                             }
  1577.                         }
  1578.                     }
  1579.                 }
  1580.                 $customField json_encode($customField);
  1581.                 $user->setCustomField($customField);
  1582.             }
  1583.         }
  1584.         $this->em->flush();
  1585.         $this->repository->sendWebhook($user);
  1586.         $data $user->toReturn();
  1587.         $this->userLogService->logUpdate("user"$user->getId(), $data);
  1588.         return $this->eadResponse($data);
  1589.     }
  1590.     /**
  1591.      * @Route(
  1592.      *      path          = "/admin/user/edit/address/{id}",
  1593.      *      name          = "userEditAddress",
  1594.      *      methods       = {"PUT"},
  1595.      *      requirements  = { "id" = "\d+" }
  1596.      * )
  1597.      */
  1598.     public function editUserAddress(Request $request) {
  1599.         $userId $request->get('id');
  1600.         $user $this->repository->findOneBy([
  1601.             "deleted" => UserEnum::ITEM_NO_DELETED,
  1602.             "id" => $userId
  1603.         ]);
  1604.         if (!$user) {
  1605.             return $this->eadResponse(nullErrorEnum::NOT_FOUND);
  1606.         }
  1607.         if($userId != $this->user->getId()){
  1608.             $permission $this->userPermissionUtil->getPermission("user""edit");
  1609.             if(!$this->userPermissionUtil->isHigh($permission)){
  1610.                 return $this->eadResponse(nullErrorEnum::PERMISSION);
  1611.             }
  1612.         }
  1613.         $this->requestUtil->setRequest($request)->setData();
  1614.         if($this->requestUtil->issetField('country')){
  1615.             $countryId $this->requestUtil->getField('country');
  1616.             $country $this->em->getRepository(Country::class)->findOneBy([
  1617.                 "id" => $countryId,
  1618.                 "deleted" => UserEnum::ITEM_NO_DELETED
  1619.             ]);
  1620.             $user->setCountry($country);
  1621.         }
  1622.         if($this->requestUtil->issetField('state')){
  1623.             $stateId $this->requestUtil->getField('state');
  1624.             $state $this->em->getRepository(State::class)->findOneBy([
  1625.                 "id" => $stateId,
  1626.                 "deleted" => UserEnum::ITEM_NO_DELETED
  1627.             ]);
  1628.             $user->setState($state);
  1629.         }
  1630.         if($this->requestUtil->issetField('city')){
  1631.             $cityId $this->requestUtil->getField('city');
  1632.             $city $this->em->getRepository(City::class)->findOneBy([
  1633.                 "id" => $cityId,
  1634.                 "deleted" => UserEnum::ITEM_NO_DELETED
  1635.             ]);
  1636.             $user->setCity($city);
  1637.         }
  1638.         if($this->requestUtil->issetField('zipCode')){
  1639.             $user->setZipCode($this->requestUtil->getField('zipCode'));
  1640.         }
  1641.         if($this->requestUtil->issetField('address')){
  1642.             $user->setAddress($this->requestUtil->getField('address'));
  1643.         }
  1644.         if($this->requestUtil->issetField('addressNumber')){
  1645.             $user->setAddressNumber($this->requestUtil->getField('addressNumber'));
  1646.         }
  1647.         if($this->requestUtil->issetField('addressComplement')){
  1648.             $user->setAddressComplement($this->requestUtil->getField('addressComplement'));
  1649.         }
  1650.         if($this->requestUtil->issetField('addressNeighborhood')){
  1651.             $user->setAddressNeighborhood(
  1652.                 $this->requestUtil->getField('addressNeighborhood')
  1653.             );
  1654.         }
  1655.         
  1656.         $errors $this->validateEntity($user);
  1657.         if($errors){
  1658.             return $this->eadResponse($errorsErrorEnum::FIELD_EMPTY);
  1659.         }
  1660.         $this->em->flush();
  1661.         $this->repository->sendWebhook($user);
  1662.         $data $user->toReturn();
  1663.         $this->userLogService->logUpdate("user"$user->getId(), $data);
  1664.         return $this->eadResponse($data);
  1665.     }
  1666.     /**
  1667.      * @Route(
  1668.      *      path          = "/admin/user/edit/social/{id}",
  1669.      *      name          = "userEditSocial",
  1670.      *      methods       = {"PUT"},
  1671.      *      requirements  = { "id" = "\d+" }
  1672.      * )
  1673.      */
  1674.     public function editUserSocial(Request $request) {
  1675.         $userId $request->get('id');
  1676.         $user $this->repository->findOneBy([
  1677.             "deleted" => UserEnum::ITEM_NO_DELETED,
  1678.             "id" => $userId
  1679.         ]);
  1680.         if (!$user) {
  1681.             return $this->eadResponse(nullErrorEnum::NOT_FOUND);
  1682.         }
  1683.         if($userId != $this->user->getId()){
  1684.             $permission $this->userPermissionUtil->getPermission("user""edit");
  1685.             if(!$this->userPermissionUtil->isHigh($permission)){
  1686.                 return $this->eadResponse(nullErrorEnum::PERMISSION);
  1687.             }
  1688.         }
  1689.         $this->requestUtil->setRequest($request)->setData();
  1690.         if($this->requestUtil->issetField('website')){
  1691.             $user->setWebsite($this->requestUtil->getField('website'));
  1692.         }
  1693.         if($this->requestUtil->issetField('twitter')){
  1694.             $user->setTwitter($this->requestUtil->getField('twitter'));
  1695.         }
  1696.         if($this->requestUtil->issetField('facebook')){
  1697.             $user->setFacebook($this->requestUtil->getField('facebook'));
  1698.         }
  1699.         if($this->requestUtil->issetField('linkedin')){
  1700.             $user->setLinkedin($this->requestUtil->getField('linkedin'));
  1701.         }
  1702.         if($this->requestUtil->issetField('youtube')){
  1703.             $user->setYoutube($this->requestUtil->getField('youtube'));
  1704.         }
  1705.         if($this->requestUtil->issetField('instagram')){
  1706.             $user->setInstagram($this->requestUtil->getField('instagram'));
  1707.         }
  1708.         if($this->requestUtil->issetField('tiktok')){
  1709.             $this->user->setTiktok($this->requestUtil->getField('tiktok'));
  1710.         }
  1711.         
  1712.         $errors $this->validateEntity($user);
  1713.         if($errors){
  1714.             return $this->eadResponse($errorsErrorEnum::FIELD_EMPTY);
  1715.         }
  1716.         $this->em->flush();
  1717.         $this->repository->sendWebhook($user);
  1718.         $data $user->toReturn();
  1719.         $this->userLogService->logUpdate("user"$user->getId(), $data);
  1720.         return $this->eadResponse($data);
  1721.     }
  1722.     /**
  1723.      * @Route(
  1724.      *      path          = "/admin/user/edit/theme/{id}",
  1725.      *      name          = "userEditTheme",
  1726.      *      methods       = {"POST"},
  1727.      *      requirements  = { "id" = "\d+" }
  1728.      * )
  1729.      */
  1730.     public function editUserTheme(Request $request) {
  1731.         $userId $request->get('id');
  1732.         $user $this->repository->findOneBy([
  1733.             "deleted" => UserEnum::ITEM_NO_DELETED,
  1734.             "id" => $userId
  1735.         ]);
  1736.         if (!$user) {
  1737.             return $this->eadResponse(nullErrorEnum::NOT_FOUND);
  1738.         }
  1739.         if($userId != $this->user->getId()){
  1740.             $permission $this->userPermissionUtil->getPermission("user""edit");
  1741.             if(!$this->userPermissionUtil->isHigh($permission)){
  1742.                 return $this->eadResponse(nullErrorEnum::PERMISSION);
  1743.             }
  1744.         }
  1745.         $this->requestUtil->setRequest($request)->setData();
  1746.         $filePhoto $this->requestUtil->getFile('photo');
  1747.         $fileCover $this->requestUtil->getFile('cover');
  1748.         if($filePhoto){
  1749.             if($filePhoto->getSize() > UserEnum::MAX_SIZE_USER_IMAGES){
  1750.                 return $this->eadResponse([ 
  1751.                     "message" => "Photo Size"
  1752.                 ], ErrorEnum::ACTION_INVALID);
  1753.             }
  1754.             $filePhoto $this->fileService->setFile($filePhoto);
  1755.             if($filePhoto){
  1756.                 $this->fileService->moveFile(UserEnum::PATH_PROFILES);
  1757.                 $user->setPhoto($this->fileService->getFileName());
  1758.             }
  1759.         }
  1760.         if($fileCover){
  1761.             if($fileCover->getSize() > UserEnum::MAX_SIZE_USER_IMAGES){
  1762.                 return $this->eadResponse([ 
  1763.                     "message" => "Cover Size"
  1764.                 ], ErrorEnum::ACTION_INVALID);
  1765.             }
  1766.             $fileCover $this->fileService->setFile($fileCover);
  1767.             if($fileCover){
  1768.                 $this->fileService->moveFile(UserEnum::PATH_COVERS_PROFILE);
  1769.                 $user->setCover($this->fileService->getFileName());
  1770.             }
  1771.         }
  1772.         
  1773.         $this->em->flush();
  1774.         $data $user->toReturn();
  1775.         $this->userLogService->logUpdate("user"$user->getId(), $data);
  1776.         return $this->eadResponse($data);
  1777.     }
  1778.     /**
  1779.      * @Route(
  1780.      *      path          = "/admin/user/edit/notification/{id}",
  1781.      *      name          = "userEditNotification",
  1782.      *      methods       = {"PUT"},
  1783.      *      requirements  = { "id" = "\d+" }
  1784.      * )
  1785.      */
  1786.     public function editUserNotification(Request $request) {
  1787.         $userId $request->get('id');
  1788.         $user $this->repository->findOneBy([
  1789.             "deleted" => UserEnum::ITEM_NO_DELETED,
  1790.             "id" => $userId
  1791.         ]);
  1792.         if (!$user) {
  1793.             return $this->eadResponse(nullErrorEnum::NOT_FOUND);
  1794.         }
  1795.         if($userId != $this->user->getId()){
  1796.             $permission $this->userPermissionUtil->getPermission("user""edit");
  1797.             if(!$this->userPermissionUtil->isHigh($permission)){
  1798.                 return $this->eadResponse(nullErrorEnum::PERMISSION);
  1799.             }
  1800.         }
  1801.         $this->requestUtil->setRequest($request)->setData();
  1802.         if($this->requestUtil->issetField('allowNotifyNewLesson')){
  1803.             $user->setAllowNotifyNewLesson($this->requestUtil->getField('allowNotifyNewLesson'));
  1804.         }
  1805.         if($this->requestUtil->issetField('allowNotifyNewExam')){
  1806.             $user->setAllowNotifyNewExam(
  1807.                 $this->requestUtil->getField('allowNotifyNewExam')
  1808.             );
  1809.         }
  1810.         if($this->requestUtil->issetField('allowNotifyNewSupportMessage')){
  1811.             $user->setAllowNotifyNewSupportMessage(
  1812.                 $this->requestUtil->getField('allowNotifyNewSupportMessage')
  1813.             );
  1814.         }
  1815.         if($this->requestUtil->issetField('allowNotifyNewSupportAnswer')){
  1816.             $user->setAllowNotifyNewSupportAnswer(
  1817.                 $this->requestUtil->getField('allowNotifyNewSupportAnswer')
  1818.             );
  1819.         }
  1820.         if($this->requestUtil->issetField('allowNotifyNewMessage')){
  1821.             $user->setAllowNotifyNewMessage(
  1822.                 $this->requestUtil->getField('allowNotifyNewMessage')
  1823.             );
  1824.         }
  1825.         if($this->requestUtil->issetField('allowNotifyNewGroupMessage')){
  1826.             $user->setAllowNotifyNewGroupMessage(
  1827.                 $this->requestUtil->getField('allowNotifyNewGroupMessage')
  1828.             );
  1829.         }
  1830.         if($this->requestUtil->issetField('allowNotifyCart')){
  1831.             $user->setAllowNotifyCart($this->requestUtil->getField('allowNotifyCart'));
  1832.         }
  1833.         $this->em->flush();
  1834.         $data $user->toReturn();
  1835.         $this->userLogService->logUpdate("user"$user->getId(), $data);
  1836.         return $this->eadResponse($data);
  1837.     }
  1838.     /**
  1839.      * @Route(
  1840.      *      path          = "/admin/user/edit/status/email/{id}",
  1841.      *      name          = "userEditStatusEmail",
  1842.      *      methods       = {"PUT"},
  1843.      *      requirements  = { "id" = "\d+" }
  1844.      * )
  1845.      */
  1846.     public function editUserStatusEmail(Request $request) {
  1847.         $userId $request->get('id');
  1848.         $user $this->repository->findOneBy([
  1849.             "deleted" => UserEnum::ITEM_NO_DELETED,
  1850.             "id" => $userId
  1851.         ]);
  1852.         if (!$user) {
  1853.             return $this->eadResponse(nullErrorEnum::NOT_FOUND);
  1854.         }
  1855.         if($userId != $this->user->getId()){
  1856.             $permission $this->userPermissionUtil->getPermission("user""edit");
  1857.             if(!$this->userPermissionUtil->isHigh($permission)){
  1858.                 return $this->eadResponse(nullErrorEnum::PERMISSION);
  1859.             }
  1860.         }
  1861.         $this->requestUtil->setRequest($request)->setData();
  1862.         if($this->requestUtil->issetField('validEmail')){
  1863.             $user->setValidEmail($this->requestUtil->getField('validEmail'));
  1864.         }
  1865.         $this->em->flush();
  1866.         $data $user->toReturn();
  1867.         $this->userLogService->logUpdate("user"$user->getId(), $data);
  1868.         return $this->eadResponse($data);
  1869.     }
  1870.     /**
  1871.      * @Route(
  1872.      *      path          = "/admin/user/edit/many/status/email",
  1873.      *      name          = "userEditManyStatusEmail",
  1874.      *      methods       = {"PUT"}
  1875.      * )
  1876.      */
  1877.     public function editManyUserStatusEmail(Request $request) {
  1878.         $permission $this->userPermissionUtil->getPermission("user""edit");
  1879.         $this->requestUtil->setRequest($request)->setData();
  1880.         $userId $this->requestUtil->getField('users');
  1881.         if(empty($userId)){
  1882.             return $this->eadResponse(nullErrorEnum::ACTION_INVALID);
  1883.         };
  1884.         $userId json_decode($userId);
  1885.         foreach ($userId as $key => $id) {
  1886.             $user $this->repository->findOneBy([
  1887.                 "id" => $id,
  1888.                 "deleted" => UserEnum::ITEM_NO_DELETED
  1889.             ]);
  1890.             if($user) {
  1891.                 if($this->userPermissionUtil->isHigh($permission)){
  1892.                     if($this->requestUtil->issetField('validEmail')){
  1893.                         $user->setValidEmail((int)$this->requestUtil->getField('validEmail'));
  1894.                     }
  1895.                     $errors $this->validateEntity($user);
  1896.                     if(!$errors){
  1897.                         $this->em->flush();
  1898.                     
  1899.                         $data $user->toReturn();
  1900.                         $this->userLogService->logUpdate(
  1901.                             "user"
  1902.                             $user->getId(), 
  1903.                             $data
  1904.                         );
  1905.                     }
  1906.                 }
  1907.             }
  1908.         }
  1909.         return $this->eadResponse([ "message" => "Success" ]);
  1910.     }
  1911.     /**
  1912.      * @Route(
  1913.      *      path          = "/admin/user/delete/custom/file/{id}/{fieldId}",
  1914.      *      name          = "userDeleteCustomFile",
  1915.      *      methods       = {"DELETE"},
  1916.      *      requirements  = { "id" = "\d+", "fieldId" = "\d+" }
  1917.      * )
  1918.      */
  1919.     public function deleteCustomFieldFile(Request $request) {
  1920.         if(!$this->configuration->checkModuleIsAbleOnPlan('customFormModule')){
  1921.             return $this->eadResponse(nullErrorEnum::ACTION_INVALID);
  1922.         }
  1923.         
  1924.         $userId $request->get('id');
  1925.         $user $this->repository->findOneBy([
  1926.             "deleted" => UserEnum::ITEM_NO_DELETED,
  1927.             "id" => $userId
  1928.         ]);
  1929.         if (!$user) {
  1930.             return $this->eadResponse(nullErrorEnum::NOT_FOUND);
  1931.         }
  1932.         if($userId != $this->user->getId()){
  1933.             $permission $this->userPermissionUtil->getPermission("user""edit");
  1934.             if(!$this->userPermissionUtil->isHigh($permission)){
  1935.                 return $this->eadResponse(nullErrorEnum::PERMISSION);
  1936.             }
  1937.         }
  1938.         $fieldId $request->get('fieldId');
  1939.         $fields json_decode($user->getCustomField());
  1940.         
  1941.         if(!empty($fields->{$fieldId})){
  1942.             if(!empty($fields->{$fieldId}->value)){
  1943.                 $file $fields->{$fieldId}->value->path;
  1944.                 $pathComplete $this->fileService->getFilePathComplete(
  1945.                     $file
  1946.                     UserEnum::PATH_OTHERS_PROFILES
  1947.                 );
  1948.                 $this->fileService->setFile($pathComplete);
  1949.                 $this->fileService->deleteFile();
  1950.                 $fields->{$fieldId}->value null;
  1951.             }
  1952.             //unset($fields->{$fieldId});
  1953.             $user->setCustomField(json_encode($fields));
  1954.         }
  1955.         $this->em->flush();
  1956.         $data $user->toReturn();
  1957.         $this->userLogService->logUpdate("user"$user->getId(), $data);
  1958.         return $this->eadResponse([ "success" => ]);
  1959.     }
  1960.     /**
  1961.      * @Route(
  1962.      *      path          = "/admin/user/delete/cover/{id}",
  1963.      *      name          = "userDeleteCover",
  1964.      *      methods       = {"DELETE"},
  1965.      *      requirements  = { "id" = "\d+" }
  1966.      * )
  1967.      */
  1968.     public function deleteUserCover(Request $request) {
  1969.         $userId $request->get('id');
  1970.         $user $this->repository->findOneBy([
  1971.             "deleted" => UserEnum::ITEM_NO_DELETED,
  1972.             "id" => $userId
  1973.         ]);
  1974.         if (!$user) {
  1975.             return $this->eadResponse(nullErrorEnum::NOT_FOUND);
  1976.         }
  1977.         if($userId != $this->user->getId()){
  1978.             $permission $this->userPermissionUtil->getPermission("user""edit");
  1979.             if(!$this->userPermissionUtil->isHigh($permission)){
  1980.                 return $this->eadResponse(nullErrorEnum::PERMISSION);
  1981.             }
  1982.         }
  1983.         
  1984.         if($user->getCover()){
  1985.             $pathComplete $this->fileService->getFilePathComplete(
  1986.                 $user->getCover(), 
  1987.                 UserEnum::PATH_COVERS_PROFILE
  1988.             );
  1989.             $this->fileService->setFile($pathComplete);
  1990.             $this->fileService->deleteFile();
  1991.             $user->setCover(null);
  1992.         }
  1993.         $this->em->flush();
  1994.         $return $user->toReturn();
  1995.         $this->userLogService->logUpdate("user"$user->getId(), $return);
  1996.         return $this->eadResponse($return);
  1997.     }
  1998.     /**
  1999.      * @Route(
  2000.      *      path          = "/admin/user/delete/photo/{id}",
  2001.      *      name          = "userDeletePhoto",
  2002.      *      methods       = {"DELETE"},
  2003.      *      requirements  = { "id" = "\d+" }
  2004.      * )
  2005.      */
  2006.     public function deleteUserPhoto(Request $request) {
  2007.         $userId $request->get('id');
  2008.         $user $this->repository->findOneBy([
  2009.             "deleted" => UserEnum::ITEM_NO_DELETED,
  2010.             "id" => $userId
  2011.         ]);
  2012.         if (!$user) {
  2013.             return $this->eadResponse(nullErrorEnum::NOT_FOUND);
  2014.         }
  2015.         if($userId != $this->user->getId()){
  2016.             $permission $this->userPermissionUtil->getPermission("user""edit");
  2017.             if(!$this->userPermissionUtil->isHigh($permission)){
  2018.                 return $this->eadResponse(nullErrorEnum::PERMISSION);
  2019.             }
  2020.         }
  2021.         
  2022.         if($user->getPhoto()){
  2023.             $pathComplete $this->fileService->getFilePathComplete(
  2024.                 $user->getPhoto(), 
  2025.                 UserEnum::PATH_PROFILES
  2026.             );
  2027.             
  2028.             $this->fileService->setFile($pathComplete);
  2029.             $this->fileService->deleteFile();
  2030.             $user->setPhoto(null);
  2031.         }
  2032.         $this->em->flush();
  2033.         $data $user->toReturn();
  2034.         $this->userLogService->logUpdate("user"$user->getId(), $data);
  2035.         return $this->eadResponse($data);
  2036.     }
  2037.     /**
  2038.      * @Route(
  2039.      *      path          = "/admin/user/recover/data",
  2040.      *      name          = "getDataToRecover",
  2041.      *      methods       = {"GET"}
  2042.      * )
  2043.      */
  2044.     public function getDataToRecover(Request $request) {
  2045.         $permission $this->userPermissionUtil->getPermission("user""recover");
  2046.         if(!$this->userPermissionUtil->isHigh($permission)){
  2047.             return $this->eadResponse(nullErrorEnum::PERMISSION);
  2048.         }
  2049.         $data = [
  2050.             "notConfirmNumber" => $this->repository->countNotConfirmed(),
  2051.             "confirmationSendNumber" => $this->repository->countRecoverSendToday(),
  2052.             "recoverNumber" => $this->repository->countRecoverToday(),
  2053.         ];
  2054.         return $this->eadResponse($data);
  2055.     }
  2056.     /**
  2057.      * @Route(
  2058.      *      path          = "/admin/user/recover",
  2059.      *      name          = "userRecover",
  2060.      *      methods       = {"GET"}
  2061.      * )
  2062.      */
  2063.     public function recoverUser(Request $request) {
  2064.         $permission $this->userPermissionUtil->getPermission("user""recover");
  2065.         if(!$this->userPermissionUtil->isHigh($permission)){
  2066.             return $this->eadResponse(nullErrorEnum::PERMISSION);
  2067.         }
  2068.         $user $this->repository->getUserToRecover();
  2069.         if(!$user){
  2070.             return $this->eadResponse([ "continue" => false ], ErrorEnum::NOT_FOUND);
  2071.         }
  2072.         if($user->getRecoverAttempt() >= 4){
  2073.             return $this->eadResponse([ "continue" => false ], ErrorEnum::ACTION_INVALID);
  2074.         }
  2075.         $emailService $this->generalService->getService('EmailService');
  2076.         $password "******";
  2077.         if($user->getInvited() == UserEnum::YES){
  2078.             $password $this->stringUtil->randomText(6);
  2079.             $user->setPassword($password);
  2080.             $user->setOldPassword($user->getPassword());
  2081.         }
  2082.         $user->setRecoverDate(date('Y-m-d'));
  2083.         $send false;
  2084.         if(
  2085.             $emailService->checkUserToSend($userfalse) ||
  2086.             $this->configuration->get("allow_send_email_user") == UserEnum::YES
  2087.         ){
  2088.             $emailService->setToEmail($user->getEmail());
  2089.             $emailService->setToName($user->getName());
  2090.             $subText $this->configuration->getLanguage('recover_user.subject''email');
  2091.             $subject "{$subText} - {$this->client->getBrand()}";
  2092.             $emailService->setSubject($subject);
  2093.             
  2094.             $domain $this->client->getDomainPrimary();
  2095.             $emailService->setData([
  2096.                 "userName" => $user->getName(),
  2097.                 "invited" => $user->getInvited(),
  2098.                 "userDateRegister" => $user->getDateRegister(),
  2099.                 "userEmail" => $user->getEmail(),
  2100.                 "userPassword" => $password,
  2101.                 "btnConfirm" => "https://{$domain}/confirm/{$user->getHashIdentify()}",
  2102.                 "btnDelete" => "https://{$domain}/stopEmail/{$user->getHashIdentify()}",
  2103.             ]);
  2104.             $emailService->setTemplateBody("recover_user");
  2105.             $send $emailService->send();
  2106.         }
  2107.         if($send){
  2108.             $user->setRecoverAttempt($user->getRecoverAttempt() + 1);
  2109.         }
  2110.         $this->em->flush();
  2111.         return $this->eadResponse([
  2112.             "continue" => true,
  2113.             "send" => $send,
  2114.             "email" => $user->getEmail(),
  2115.             "dateRecover" => date('Y-m-d'),
  2116.         ]);
  2117.     }
  2118.     /**
  2119.      * @Route(
  2120.      *      path          = "/admin/user/send/confirmation/{id}",
  2121.      *      name          = "userConfirm",
  2122.      *      methods       = {"GET"},
  2123.      *      requirements  = { "id" = "\d+" }
  2124.      * )
  2125.      */
  2126.     public function sendUserConfirmation(Request $request) {
  2127.         $permission $this->userPermissionUtil->getPermission(
  2128.             "user"
  2129.             "send_confirmation"
  2130.         );
  2131.         if(!$this->userPermissionUtil->isHigh($permission)){
  2132.             return $this->eadResponse(nullErrorEnum::PERMISSION);
  2133.         }
  2134.         $send null;
  2135.         $userId $request->get('id');
  2136.         $user $this->repository->findOneBy([
  2137.             "id" => $userId,
  2138.             "deleted" => UserEnum::ITEM_NO_DELETED
  2139.         ]);
  2140.         if(!$user){
  2141.             return $this->eadResponse(nullErrorEnum::NOT_FOUND);
  2142.         }
  2143.         $emailService $this->generalService->getService('EmailService');
  2144.         $password "******";
  2145.         if($user->getInvited() == UserEnum::YES){
  2146.             $password $this->stringUtil->randomText(6);
  2147.             $user->setPassword($password);
  2148.             $user->setOldPassword($user->getPassword());
  2149.         }
  2150.         if(
  2151.             $emailService->checkUserToSend($userfalse) ||
  2152.             $this->configuration->get("allow_send_email_user") == UserEnum::YES
  2153.         ){
  2154.             $emailService->setToEmail($user->getEmail());
  2155.             $emailService->setToName($user->getName());
  2156.             $subText $this->configuration->getLanguage('user_confirmation.subject''email');
  2157.             $subject "{$subText} - {$this->client->getBrand()}";
  2158.             $emailService->setSubject($subject);
  2159.             
  2160.             $domain $this->client->getDomainPrimary();
  2161.             $emailService->setData([
  2162.                 "userName" => $user->getName(),
  2163.                 "userEmail" => $user->getEmail(),
  2164.                 "invited" => $user->getInvited(),
  2165.                 "userDateRegister" => $user->getDateRegister("d/m/Y"),
  2166.                 "userPassword" => $password,
  2167.                 "btnLink" => "https://{$domain}/confirm/{$user->getHashIdentify()}",
  2168.                 "isCart" => UserEnum::NO
  2169.             ]);
  2170.             $emailService->setTemplateBody("user_confirmation");
  2171.             $send $emailService->send();
  2172.         }
  2173.         $this->em->flush();
  2174.         return $this->eadResponse([ "send" => $send ]);
  2175.     }
  2176.     /**
  2177.      * @Route(
  2178.      *      path          = "/admin/user/login/{id}",
  2179.      *      name          = "userLogin",
  2180.      *      methods       = {"GET"},
  2181.      *      requirements  = { "id" = "\d+" }
  2182.      * )
  2183.      */
  2184.     public function loginUser(Request $request) {
  2185.         $permission $this->userPermissionUtil->getPermission("user""login");
  2186.         if(!$this->userPermissionUtil->isHigh($permission)){
  2187.             return $this->eadResponse(nullErrorEnum::PERMISSION);
  2188.         }
  2189.         $userId $request->get('id');
  2190.         $user $this->repository->findOneBy([
  2191.             "id" => $userId,
  2192.             "deleted" => UserEnum::ITEM_NO_DELETED
  2193.         ]);
  2194.         if (!$user) {
  2195.             return $this->eadResponse(nullErrorEnum::NOT_FOUND);
  2196.         }
  2197.         if($user->getStatus() == UserEnum::INACTIVE){
  2198.             return $this->eadResponse([ 
  2199.                 "message" => "User Inactive" 
  2200.             ], ErrorEnum::ACTION_INVALID);
  2201.         }
  2202.         if($user->getStatus() == UserEnum::BLOCK){
  2203.             return $this->eadResponse([ 
  2204.                 "message" => "User Blocked" 
  2205.             ], ErrorEnum::ACTION_INVALID);
  2206.         }
  2207.         $maxAllowID $this->user->getUserProfile()->getId();
  2208.         $allowPermissions = [
  2209.             UserEnum::STUDENT
  2210.         ];
  2211.         $userProfileId $user->getUserProfile()->getId();
  2212.         
  2213.         if($maxAllowID == UserEnum::ADMIN && $userProfileId != UserEnum::ADMIN){
  2214.             $allowPermissions[] = $userProfileId;
  2215.         }else if($maxAllowID == UserEnum::TEACHER){
  2216.             $allowPermissions[] = UserEnum::TUTOR;
  2217.         }
  2218.         if(!in_array($userProfileId$allowPermissions) && $this->user->getId() != UserEnum::YES){
  2219.             return $this->eadResponse(nullErrorEnum::PERMISSION);
  2220.         }
  2221.         $session = new Session();
  2222.         $ipApi $this->generalService->getService('IpApiService');
  2223.         $ipApi->setRequest($request);
  2224.         
  2225.         $userAgent $request->headers->get('User-Agent');
  2226.         $session->setUser($user);
  2227.         $session->setIp($ipApi->getIp());
  2228.         $session->setIspName($ipApi->getIsp());
  2229.         $session->setCoordinate($ipApi->getCoordinate());
  2230.         $session->setTimeZone($ipApi->getTimeZone());
  2231.         $session->setCity($ipApi->getCity());
  2232.         $session->setState($ipApi->getState());
  2233.         $session->setCountry($ipApi->getCountry());
  2234.         $session->setIsAdmin(UserEnum::YES);
  2235.         $session->setUserOrigin($this->user);
  2236.         $session->setUserAgent($userAgent);
  2237.         
  2238.         $errors $this->validateEntity($session);
  2239.         
  2240.         if($errors){
  2241.             return $this->eadResponse($errorsErrorEnum::FIELD_EMPTY);
  2242.         }
  2243.         $this->configuration->alertLogin(
  2244.             (string)$user->getEmail(),
  2245.             (string)'LOGOU PELO ADMIN',
  2246.             (string)$this->clientConfig->getId(),
  2247.             (
  2248.                 in_array($request->getHost(), ConfigurationEnum::DOMAIN_DEV) ? 
  2249.                 ConfigurationEnum::IP_LOCAL 
  2250.                 $request->getClientIp()
  2251.             ),
  2252.             $userAgent,
  2253.             $request->getHost(),
  2254.             $user->getId(),
  2255.             $this->user
  2256.         );
  2257.         //$this->sessionSym->set('session', $session);
  2258.         //$this->em->getRepository(Cart::class)->updateCartHashToUser($user);
  2259.         $time time() + (24 60 60);
  2260.         $this->generalService->setCookie('sessiontoken'$session->getToken(), $time);
  2261.         $this->em->persist($session);
  2262.         $this->em->flush();
  2263.         $crmService $this->generalService->getService('CRM\\CrmService');
  2264.         $crmService->savePerson($user);
  2265.         return $this->eadResponse([ 
  2266.             "token" => $session->getToken(), 
  2267.             "userId" => $userId 
  2268.         ]);
  2269.     }
  2270.     /**
  2271.      * @Route(
  2272.      *      path          = "/admin/user/block/{id}",
  2273.      *      name          = "userBlock",
  2274.      *      methods       = {"PUT"},
  2275.      *      requirements  = { "id" = "\d+" }
  2276.      * )
  2277.      */
  2278.     public function blockUser(Request $request) {
  2279.         $permission $this->userPermissionUtil->getPermission("user""block");
  2280.         if(!$this->userPermissionUtil->isHigh($permission)){
  2281.             return $this->eadResponse(nullErrorEnum::PERMISSION);
  2282.         }
  2283.         $userId $request->get('id');
  2284.         $user $this->repository->findOneBy([
  2285.             "id" => $userId,
  2286.             "deleted" => UserEnum::ITEM_NO_DELETED
  2287.         ]);
  2288.         if (!$user) {
  2289.             return $this->eadResponse(nullErrorEnum::NOT_FOUND);
  2290.         }
  2291.         $user->setStatus(UserEnum::BLOCK);
  2292.         $sessions $this->em->getRepository(Session::class)->findBy([ 
  2293.             "user" => $user
  2294.             "deleted" => UserEnum::ITEM_NO_DELETED 
  2295.         ]);
  2296.         foreach ($sessions as $key => $session) {
  2297.             $session->delete();
  2298.         }
  2299.         $receivers $this->em->getRepository(Receiver::class)->findBy([ 
  2300.             "user" => $user
  2301.             "deleted" => UserEnum::ITEM_NO_DELETED 
  2302.         ]);
  2303.         foreach ($receivers as $key => $receiver) {
  2304.             $receiver->setStatus(ReceiverEnum::INACTIVE);
  2305.         }
  2306.         $errors $this->validateEntity($user);
  2307.         if($errors){
  2308.             return $this->eadResponse($errorsErrorEnum::FIELD_EMPTY);
  2309.         }
  2310.         
  2311.         $this->em->flush();
  2312.         $this->repository->sendWebhook($user);
  2313.         $data $user->toReturn();
  2314.         $this->userLogService->logUpdate("user"$user->getId(), $data);
  2315.         return $this->eadResponse($data);
  2316.     }
  2317.     /**
  2318.      * @Route(
  2319.      *      path          = "/admin/user/block/many",
  2320.      *      name          = "userBlockMany",
  2321.      *      methods       = {"PUT"}
  2322.      * )
  2323.      */
  2324.     public function blockUserMany(Request $request) {
  2325.         $permission $this->userPermissionUtil->getPermission("user""block");
  2326.         if(!$this->userPermissionUtil->isHigh($permission)){
  2327.             return $this->eadResponse(nullErrorEnum::PERMISSION);
  2328.         }
  2329.         $this->requestUtil->setRequest($request)->setData();
  2330.         $userId $this->requestUtil->getField('ids');
  2331.         if(empty($userId)){
  2332.             return $this->eadResponse(nullErrorEnum::ACTION_INVALID);
  2333.         };
  2334.         $userId json_decode($userId);
  2335.         foreach ($userId as $key => $id) {
  2336.             $user $this->repository->findOneBy([
  2337.                 "id" => $id,
  2338.                 "deleted" => UserEnum::ITEM_NO_DELETED
  2339.             ]);
  2340.         
  2341.             if($user) {
  2342.                 $user->setStatus(UserEnum::BLOCK);
  2343.                 $sessions $this->em->getRepository(Session::class)->findBy([ 
  2344.                     "user" => $user
  2345.                     "deleted" => UserEnum::ITEM_NO_DELETED 
  2346.                 ]);
  2347.         
  2348.                 foreach ($sessions as $key => $session) {
  2349.                     $session->delete();
  2350.                 }
  2351.         
  2352.                 $receivers $this->em->getRepository(Receiver::class)->findBy([ 
  2353.                     "user" => $user
  2354.                     "deleted" => UserEnum::ITEM_NO_DELETED 
  2355.                 ]);
  2356.         
  2357.                 foreach ($receivers as $key => $receiver) {
  2358.                     $receiver->setStatus(ReceiverEnum::INACTIVE);
  2359.                 }
  2360.                 $errors $this->validateEntity($user);
  2361.                 if(!$errors){
  2362.                     $this->em->flush();
  2363.                     $this->repository->sendWebhook($user);
  2364.                 
  2365.                     $data $user->toReturn();
  2366.                     $this->userLogService->logUpdate(
  2367.                         "user"
  2368.                         $user->getId(), 
  2369.                         $data
  2370.                     );
  2371.                 }
  2372.             }
  2373.         }
  2374.         return $this->eadResponse([ "message" => "Success" ]);
  2375.     }
  2376.     
  2377.     /**
  2378.      * @Route(
  2379.      *      path          = "/admin/user/unblock/{id}",
  2380.      *      name          = "userUnblock",
  2381.      *      methods       = {"PUT"},
  2382.      *      requirements  = { "id" = "\d+" }
  2383.      * )
  2384.      */
  2385.     public function unblockUser(Request $request) {
  2386.         $permission $this->userPermissionUtil->getPermission("user""unblock");
  2387.         if(!$this->userPermissionUtil->isHigh($permission)){
  2388.             return $this->eadResponse(nullErrorEnum::PERMISSION);
  2389.         }
  2390.         $userId $request->get('id');
  2391.         $user $this->repository->findOneBy([
  2392.             "id" => $userId,
  2393.             "deleted" => UserEnum::ITEM_NO_DELETED
  2394.         ]);
  2395.         
  2396.         if (!$user) {
  2397.             return $this->eadResponse(nullErrorEnum::NOT_FOUND);
  2398.         }
  2399.         $userOldStatus $user->getOldStatus();
  2400.         $user->setStatus($userOldStatus);
  2401.         $errors $this->validateEntity($user);
  2402.         if($errors){
  2403.             return $this->eadResponse($errorsErrorEnum::FIELD_EMPTY);
  2404.         }
  2405.         
  2406.         $this->em->flush();
  2407.         $this->repository->sendWebhook($user);
  2408.         $data $user->toReturn();
  2409.         $this->userLogService->logUpdate("user"$user->getId(), $data);
  2410.         return $this->eadResponse($data);
  2411.     }
  2412.     /**
  2413.      * @Route(
  2414.      *      path          = "/admin/user/unblock/many",
  2415.      *      name          = "userUnblockMany",
  2416.      *      methods       = {"PUT"}
  2417.      * )
  2418.      */
  2419.     public function unblockUserMany(Request $request) {
  2420.         $permission $this->userPermissionUtil->getPermission("user""unblock");
  2421.         if(!$this->userPermissionUtil->isHigh($permission)){
  2422.             return $this->eadResponse(nullErrorEnum::PERMISSION);
  2423.         }
  2424.         $this->requestUtil->setRequest($request)->setData();
  2425.         $userId $this->requestUtil->getField('ids');
  2426.         if(empty($userId)){
  2427.             return $this->eadResponse(nullErrorEnum::ACTION_INVALID);
  2428.         };
  2429.         $userId json_decode($userId);
  2430.         foreach ($userId as $key => $id) {
  2431.             $user $this->repository->findOneBy([
  2432.                 "id" => $id,
  2433.                 "deleted" => UserEnum::ITEM_NO_DELETED
  2434.             ]);
  2435.         
  2436.             if($user) {
  2437.                 $userOldStatus $user->getOldStatus();
  2438.                 $user->setStatus($userOldStatus);
  2439.                 $errors $this->validateEntity($user);
  2440.                 if(!$errors){
  2441.                     $this->em->flush();
  2442.                     $this->repository->sendWebhook($user);
  2443.                 
  2444.                     $data $user->toReturn();
  2445.                     $this->userLogService->logUpdate(
  2446.                         "user"
  2447.                         $user->getId(), 
  2448.                         $data
  2449.                     );
  2450.                 }
  2451.             }
  2452.         }
  2453.         return $this->eadResponse([ "message" => "Success" ]);
  2454.     }
  2455.     /**
  2456.      * @Route(
  2457.      *      path          = "/admin/user/activate/{id}",
  2458.      *      name          = "userActivate",
  2459.      *      methods       = {"PUT"},
  2460.      *      requirements  = { "id" = "\d+" }
  2461.      * )
  2462.      */
  2463.     public function activateUser(Request $request) {
  2464.         $permission $this->userPermissionUtil->getPermission("user""enable");
  2465.         if(!$this->userPermissionUtil->isHigh($permission)){
  2466.             return $this->eadResponse(nullErrorEnum::PERMISSION);
  2467.         }
  2468.         $this->requestUtil->setRequest($request)->setData();
  2469.         $userId $request->get('id');
  2470.         $user $this->repository->findOneBy([
  2471.             "id" => $userId,
  2472.             "deleted" => UserEnum::ITEM_NO_DELETED
  2473.         ]);
  2474.         
  2475.         if (!$user) {
  2476.             return $this->eadResponse(nullErrorEnum::NOT_FOUND);
  2477.         }
  2478.         if($user->getStatus() == UserEnum::BLOCK){
  2479.             return $this->eadResponse([ 
  2480.                 "message" => "Action invalid" 
  2481.             ], ErrorEnum::ACTION_INVALID);
  2482.         }
  2483.         if($user->getStatus() == UserEnum::INACTIVE){
  2484.             $userOldStatus $user->getOldStatus();
  2485.             $user->setStatus($userOldStatus);
  2486.         }else{
  2487.             $user->setStatus(UserEnum::ACTIVE);
  2488.         }
  2489.         
  2490.         $errors $this->validateEntity($user);
  2491.         if($errors){
  2492.             return $this->eadResponse($errorsErrorEnum::FIELD_EMPTY);
  2493.         }
  2494.         
  2495.         $this->em->flush();
  2496.         $this->repository->sendWebhook($user);
  2497.         $data $user->toReturn();
  2498.         $this->userLogService->logUpdate("user"$user->getId(), $data);
  2499.         return $this->eadResponse($data);
  2500.     }
  2501.     /**
  2502.      * @Route(
  2503.      *      path          = "/admin/user/activate/many",
  2504.      *      name          = "userActivateMany",
  2505.      *      methods       = {"PUT"}
  2506.      * )
  2507.      */
  2508.     public function activateUserMany(Request $request) {
  2509.         $permission $this->userPermissionUtil->getPermission("user""enable");
  2510.         if(!$this->userPermissionUtil->isHigh($permission)){
  2511.             return $this->eadResponse(nullErrorEnum::PERMISSION);
  2512.         }
  2513.         $this->requestUtil->setRequest($request)->setData();
  2514.         $userId $this->requestUtil->getField('ids');
  2515.         if(empty($userId)){
  2516.             return $this->eadResponse(nullErrorEnum::ACTION_INVALID);
  2517.         };
  2518.         $userId json_decode($userId);
  2519.         foreach ($userId as $key => $id) {
  2520.             $user $this->repository->findOneBy([
  2521.                 "id" => $id,
  2522.                 "deleted" => UserEnum::ITEM_NO_DELETED
  2523.             ]);
  2524.         
  2525.             if($user) {
  2526.                 if($user->getStatus() != UserEnum::BLOCK){
  2527.                     if($user->getStatus() == UserEnum::INACTIVE){
  2528.                         $userOldStatus $user->getOldStatus();
  2529.                         $user->setStatus($userOldStatus);
  2530.                     }else{
  2531.                         $user->setStatus(UserEnum::ACTIVE);
  2532.                     }
  2533.                 }
  2534.                 $errors $this->validateEntity($user);
  2535.                 if(!$errors){
  2536.                     $this->em->flush();
  2537.                     $this->repository->sendWebhook($user);
  2538.                 
  2539.                     $data $user->toReturn();
  2540.                     $this->userLogService->logUpdate(
  2541.                         "user"
  2542.                         $user->getId(), 
  2543.                         $data
  2544.                     );
  2545.                 }
  2546.             }
  2547.         }
  2548.         return $this->eadResponse([ "message" => "Success" ]);
  2549.     }
  2550.     /**
  2551.      * @Route(
  2552.      *      path          = "/admin/user/disable/{id}",
  2553.      *      name          = "userDisable",
  2554.      *      methods       = {"PUT"},
  2555.      *      requirements  = { "id" = "\d+" }
  2556.      * )
  2557.      */
  2558.     public function disableUser(Request $request) {
  2559.         $permission $this->userPermissionUtil->getPermission("user""disable");
  2560.         if(!$this->userPermissionUtil->isHigh($permission)){
  2561.             return $this->eadResponse(nullErrorEnum::PERMISSION);
  2562.         }
  2563.         $this->requestUtil->setRequest($request)->setData();
  2564.         $userId $request->get('id');
  2565.         $user $this->repository->findOneBy([
  2566.             "id" => $userId,
  2567.             "deleted" => UserEnum::ITEM_NO_DELETED
  2568.         ]);
  2569.         
  2570.         if (!$user) {
  2571.             return $this->eadResponse(nullErrorEnum::NOT_FOUND);
  2572.         }
  2573.         if($user->getStatus() == UserEnum::BLOCK){
  2574.             return $this->eadResponse([ 
  2575.                 "message" => "Action invalid" 
  2576.             ], ErrorEnum::ACTION_INVALID);
  2577.         }
  2578.         $user->setStatus(UserEnum::INACTIVE);
  2579.         $errors $this->validateEntity($user);
  2580.         if($errors){
  2581.             return $this->eadResponse($errorsErrorEnum::FIELD_EMPTY);
  2582.         }
  2583.         
  2584.         $this->em->flush();
  2585.         $this->repository->sendWebhook($user);
  2586.         $data $user->toReturn();
  2587.         $this->userLogService->logUpdate("user"$user->getId(), $data);
  2588.         return $this->eadResponse($data);
  2589.     }
  2590.     /**
  2591.      * @Route(
  2592.      *      path          = "/admin/user/disable/many",
  2593.      *      name          = "userDisableMany",
  2594.      *      methods       = {"PUT"}
  2595.      * )
  2596.      */
  2597.     public function disableUserMany(Request $request) {
  2598.         $permission $this->userPermissionUtil->getPermission("user""disable");
  2599.         if(!$this->userPermissionUtil->isHigh($permission)){
  2600.             return $this->eadResponse(nullErrorEnum::PERMISSION);
  2601.         }
  2602.         $this->requestUtil->setRequest($request)->setData();
  2603.         $userId $this->requestUtil->getField('ids');
  2604.         if(empty($userId)){
  2605.             return $this->eadResponse(nullErrorEnum::ACTION_INVALID);
  2606.         };
  2607.         $userId json_decode($userId);
  2608.         foreach ($userId as $key => $id) {
  2609.             $user $this->repository->findOneBy([
  2610.                 "id" => $id,
  2611.                 "deleted" => UserEnum::ITEM_NO_DELETED
  2612.             ]);
  2613.         
  2614.             if($user) {
  2615.                 if($user->getStatus() != UserEnum::BLOCK){
  2616.                     $user->setStatus(UserEnum::INACTIVE);
  2617.                 }
  2618.                 $errors $this->validateEntity($user);
  2619.                 if(!$errors){
  2620.                     $this->em->flush();
  2621.                     $this->repository->sendWebhook($user);
  2622.                 
  2623.                     $data $user->toReturn();
  2624.                     $this->userLogService->logUpdate(
  2625.                         "user"
  2626.                         $user->getId(), 
  2627.                         $data
  2628.                     );
  2629.                 }
  2630.             }
  2631.         }
  2632.         return $this->eadResponse([ "message" => "Success" ]);
  2633.     }
  2634.     /**
  2635.      * @Route(
  2636.      *      path          = "/admin/user/import",
  2637.      *      name          = "userImport",
  2638.      *      methods       = {"POST"},
  2639.      * )
  2640.      */
  2641.     public function importUser(Request $request) {
  2642.         $permission $this->userPermissionUtil->getPermission("user""import");
  2643.         if(!$this->userPermissionUtil->isHigh($permission)){
  2644.             return $this->eadResponse(nullErrorEnum::PERMISSION);
  2645.         }
  2646.         $this->requestUtil->setRequest($request)->setData();
  2647.         $file $this->requestUtil->getFile('file');
  2648.         if(empty($file)){
  2649.             return $this->eadResponse([ "file" ], ErrorEnum::FIELD_EMPTY);
  2650.         }
  2651.         $spreadSheetUtil $this->generalService->getUtil('SpreadSheetUtil');
  2652.         $data $spreadSheetUtil->import($file);
  2653.         $groupsValidation = [];
  2654.         $userProfileRepository $this->em->getRepository(UserProfile::class);
  2655.         $groupRepository $this->em->getRepository(Group::class);
  2656.         
  2657.         $groupId $this->requestUtil->getField('group');
  2658.         
  2659.         $groupRepository $this->em->getRepository(Group::class);
  2660.         $group null;
  2661.         if($groupId 0){
  2662.             $group $groupRepository->findOneBy([
  2663.                 "id" => $groupId,
  2664.                 "deleted" => UserEnum::ITEM_NO_DELETED
  2665.             ]);
  2666.         }
  2667.         $allowPermissions = [
  2668.             UserEnum::STUDENT
  2669.         ];
  2670.         $permission $this->userPermissionUtil->getPermission("user""permissions");
  2671.         if($this->userPermissionUtil->isHigh($permission)){
  2672.             $maxAllowID $this->user->getUserProfile()->getId();
  2673.             $allowPermissions[] = $maxAllowID;
  2674.             if($maxAllowID == UserEnum::ADMIN){
  2675.                 $allowPermissions[] = UserEnum::TUTOR;
  2676.                 $allowPermissions[] = UserEnum::TEACHER;
  2677.             }else if($maxAllowID == UserEnum::TEACHER){
  2678.                 $allowPermissions[] = UserEnum::TUTOR;
  2679.             }
  2680.         }
  2681.         foreach ($data as $key => $value) {
  2682.             $name trim($value['A']);
  2683.             $document = !empty($value['G']) ? trim($value['G']) : null;
  2684.             $email trim($value['B']);
  2685.             $password trim($value['F']);
  2686.             $custom = !empty($value['C']) ? trim($value['C']) : null;
  2687.             $notes = !empty($value['D']) ? trim($value['D']) : null;
  2688.             $userProfileId = !empty($value['E']) ? (int)$value['E'] : null;
  2689.             if(!in_array($userProfileId$allowPermissions)){
  2690.                 $userProfileId null;
  2691.             }
  2692.             if(!empty($name) && !empty($email)){
  2693.                 $dataUser = [
  2694.                     "name" => $name,
  2695.                     "document" => $document,
  2696.                     "email" => $email,
  2697.                     "password" => $password,
  2698.                     "custom" => $custom,
  2699.                     "notes" => $notes,
  2700.                     "userProfileId" => $userProfileId,
  2701.                     "groupId" => $groupId,
  2702.                     "notify" => UserEnum::YES,
  2703.                     "invited" => UserEnum::YES
  2704.                 ];
  2705.                 $userDTO = new UserDTO($dataUser);
  2706.                 $user $this->repository->findOneBy([
  2707.                     "email" => $email
  2708.                 ], [ "id" => "DESC" ]);
  2709.                 if(!$user || $user->isDeleted()){
  2710.                     $data $this->repository->newUser($userDTO);
  2711.                     if($data->user){
  2712.                         $user $data->user;
  2713.                     }
  2714.                 }
  2715.                 if($group && $user){
  2716.                     $user->addGroup($group);
  2717.                     $groupRepository->enrollOneUser($group$user);
  2718.                     $clientDomain $this->configuration->getActiveDomain(true);
  2719.                     $subText $this->configuration->getLanguage(
  2720.                         'user_in_group.subject1''email'
  2721.                     );
  2722.                     $subText2 $this->configuration->getLanguage(
  2723.                         'user_in_group.subject2''email'
  2724.                     );
  2725.                     $emailTitle $subText $group->getName() . $subText2;
  2726.                     $emailService $this->generalService->getService('EmailService');
  2727.                     if($emailService->checkUserToSend($user)){
  2728.                         $emailService->setToEmail($user->getEmail());
  2729.                         $emailService->setToName($user->getName());
  2730.                         $emailService->setSubject($emailTitle);
  2731.                         $emailService->setData([
  2732.                             "userName" => $user->getName(),
  2733.                             "btnLink" => "https:{$clientDomain}",
  2734.                             "groupName" => $group->getName()
  2735.                         ]);
  2736.                         $emailService->setTemplateBody("user_in_group");
  2737.                         $emailService->send();
  2738.                     }
  2739.                 }  
  2740.             }
  2741.         }
  2742.         $this->em->flush();
  2743.         return $this->eadResponse([ "message" => "Successfully imported!" ]);
  2744.     }
  2745. }