vendor/elements/cdm-user-manager-bundle/src/Controller/UserManagerController.php line 30

Open in your IDE?
  1. <?php
  2. namespace Elements\Bundle\CDMUserManagerBundle\Controller;
  3. use Carbon\Carbon;
  4. use CustomerManagementFrameworkBundle\CustomerMerger\CustomerMergerInterface;
  5. use CustomerManagementFrameworkBundle\CustomerProvider\CustomerProviderInterface;
  6. use CustomerManagementFrameworkBundle\CustomerSaveValidator\Exception\DuplicateCustomerException;
  7. use CustomerManagementFrameworkBundle\Model\CustomerInterface;
  8. use CustomerManagementFrameworkBundle\Security\Authentication\LoginManagerInterface;
  9. use CustomerManagementFrameworkBundle\SegmentManager\SegmentManagerInterface;
  10. use Exception;
  11. use HWI\Bundle\OAuthBundle\Security\Core\Authentication\Token\OAuthToken;
  12. use Pimcore\Model\DataObject\Customer;
  13. use Pimcore\Model\DataObject\CustomerSegment;
  14. use Pimcore\Model\Document\Email;
  15. use Symfony\Component\HttpFoundation\Response;
  16. use Symfony\Component\HttpFoundation\Request;
  17. use CustomerManagementFrameworkBundle\Security\OAuth\OAuthRegistrationHandler;
  18. use HWI\Bundle\OAuthBundle\OAuth\Response\UserResponseInterface;
  19. use CustomerManagementFrameworkBundle\Security\OAuth\Exception\AccountNotLinkedException;
  20. use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
  21. use Sensio\Bundle\FrameworkExtraBundle\Configuration\Security;
  22. use Symfony\Component\Security\Core\Exception\InvalidCsrfTokenException;
  23. use Symfony\Component\Security\Core\User\UserInterface;
  24. use Symfony\Component\Security\Csrf\CsrfToken;
  25. use Symfony\Component\Security\Csrf\CsrfTokenManagerInterface;
  26. use Elements\Bundle\CDMUserManagerBundle\Service\CDMUserManagerServiceInterface;
  27. class UserManagerController extends AbstractController
  28. {
  29.     /**
  30.      * @param Request $request
  31.      * @param CsrfTokenManagerInterface $csrfTokenManager
  32.      * @param UserInterface|null $user
  33.      *
  34.      * @param SegmentManagerInterface $segmentManager
  35.      * @return Response
  36.      * @Route("/{_locale}/auth/data", name="cdm_data")
  37.      */
  38.     public function dataAction(
  39.         Request $request,
  40.         CsrfTokenManagerInterface $csrfTokenManager,
  41.         UserInterface $user null,
  42.         SegmentManagerInterface $segmentManager
  43.     ) {
  44.         if (!$this->editmode) {
  45.             $this->denyAccessUnlessGranted('ROLE_USER');
  46.         }
  47.         $segmentsArray = [];
  48.         if ($user instanceof Customer) {
  49.             if (!$user->getConfirmed()) {
  50.                 return $this->redirectToRoute('cdm_auth_sendconfirm');
  51.             }
  52.             $isInitDataSet $user->getInitDataSet();
  53.             if ($request->isMethod('POST') && $request->get('phone') == '') {
  54.                 $token = new CsrfToken(CDMUserManagerServiceInterface::DATA_CSRF_TOKEN_ID,
  55.                     $request->get(CDMUserManagerServiceInterface::CSRF_PARAM));
  56.                 if (!$csrfTokenManager->isTokenValid($token)) {
  57.                     throw new InvalidCsrfTokenException();
  58.                 }
  59.                 $block $this->getDocumentEditable('block''fields');
  60.                 $count $block->getCount();
  61.                 $selectedSegmentIds = [];
  62.                 $selectedSegmentsArray = [];
  63.                 for ($i 0$i $count$i++) {
  64.                     $parameterVal $request->get('segment-field-' $i);
  65.                     if (is_array($parameterVal)) {
  66.                         $selectedSegmentIds array_merge($selectedSegmentIds$parameterVal);
  67.                     } else {
  68.                         if ($parameterVal != '' && ((int)$parameterVal) > 0) {
  69.                             $selectedSegmentIds[] = $parameterVal;
  70.                         }
  71.                     }
  72.                 }
  73.                 if (is_array($selectedSegmentIds) && count($selectedSegmentIds)) {
  74.                     $selectedSegments = new CustomerSegment\Listing();
  75.                     $selectedSegments->addConditionParam('o_id IN (' implode(','$selectedSegmentIds) . ')');
  76.                     $selectedSegmentsArray $selectedSegments->load();
  77.                 }
  78.                 if (is_array($selectedSegmentsArray)) {
  79.                     $toDeleteSegments = [];
  80.                     while ($block->loop()) {
  81.                         if ($this->getDocumentEditable('select''type') != 'snippet') {
  82.                             foreach ($this->getDocumentEditable('relations''segments') as $segment) {
  83.                                 $toDeleteSegments[] = $segment;
  84.                             }
  85.                         }
  86.                     }
  87.                     $targetGroupSegments = [];
  88.                     /**
  89.                      * @var CustomerSegment $segment
  90.                      */
  91.                     foreach ($selectedSegmentsArray as $segment) {
  92.                         if ($segment->getTargetgroupSegment() instanceof CustomerSegment) {
  93.                             $targetGroupSegments[] = $segment->getTargetgroupSegment();
  94.                         }
  95.                         if ($toDeleteSegments) {
  96.                             foreach ($toDeleteSegments as $key => $toDeleteSegment) {
  97.                                 if ($segment->getId() == $toDeleteSegment->getId()) {
  98.                                     unset($toDeleteSegments[$key]);
  99.                                 }
  100.                             }
  101.                         }
  102.                     }
  103.                     $segmentManager->mergeSegments($userarray_merge($selectedSegmentsArray$targetGroupSegments),
  104.                         $toDeleteSegments);
  105.                 }
  106.                 $endDate $request->get('addProfile-endDate-alt'0);
  107.                 $startDate $request->get('addProfile-startDate-alt'0);
  108.                 if ($endDate 0) {
  109.                     $user->setEndDate(Carbon::createFromTimestamp($endDate 1000));
  110.                 }
  111.                 if ($startDate 0) {
  112.                     $user->setStartDate(Carbon::createFromTimestamp($startDate 1000));
  113.                 }
  114.                 try {
  115.                     $user->setInitDataSet(true);
  116.                     $user->save();
  117.                     if (!$isInitDataSet) {
  118.                         return $this->redirectToRoute('cdm_profile');
  119.                     } else {
  120.                         $returnArray['success'] = true;
  121.                     }
  122.                 } catch (Exception $e) {
  123.                     $returnArray['errors'] = [$e->getMessage()];
  124.                 }
  125.             }
  126.         }
  127.         if ($user instanceof CustomerInterface) {
  128.             $manualSegments $segmentManager->getManualSegmentsFromCustomer($user);
  129.             foreach ($manualSegments as $segment) {
  130.                 $segmentsArray[] = $segment->getId();
  131.             }
  132.         }
  133.         $returnArray = [
  134.             'segmentManager' => $segmentManager,
  135.             'isInitDataset' => $isInitDataSet ?: false,
  136.             'segmentsArray' => $segmentsArray,
  137.             'csrfTokenManager' => $csrfTokenManager,
  138.             'customer' => $user
  139.         ];
  140.         return $this->render('@ElementsCDMUserManager/UserManager/data.html.twig'$returnArray);
  141.     }
  142.     /**
  143.      * @param Request $request
  144.      * @param CDMUserManagerServiceInterface $cdmUserManagerService
  145.      *
  146.      * @return Response
  147.      * @throws Exception
  148.      * @Route("/{_locale}/auth/editprofile", name="cdm_profile")
  149.      *
  150.      */
  151.     public function profileAction(
  152.         Request $request,
  153.         CDMUserManagerServiceInterface $cdmUserManagerService
  154.     ) {
  155.         if (!$this->editmode) {
  156.             if ($redirect $cdmUserManagerService->profilePreCheck($request)) {
  157.                 return $redirect;
  158.             }
  159.         }
  160.         if ($returnArray $cdmUserManagerService->updateProfileData($request)) {
  161.             $returnArray['customer'] = $this->getUser();
  162.             return $this->render('@ElementsCDMUserManager/UserManager/profile.html.twig'$returnArray);
  163.         }
  164.         return $this->render('@ElementsCDMUserManager/UserManager/profile.html.twig', [
  165.             'customer' => $this->getUser()
  166.         ]);
  167.     }
  168.     /**
  169.      * @Route("/{_locale}/auth/send-recovery", name="cdm_auth_sendrecovery")
  170.      *
  171.      * @param Request $request
  172.      * @param CDMUserManagerServiceInterface $CDMUserManagerService
  173.      *
  174.      * @return Response
  175.      * @throws Exception
  176.      */
  177.     public function sendRecovery(Request $requestCDMUserManagerServiceInterface $CDMUserManagerService) {
  178.         $view = [];
  179.         if ($request->isMethod('POST') && $request->get('phone') == '') {
  180.             $errors = [];
  181.             $params['email'] = $request->get('email');
  182.             if (filter_var($params['email'], FILTER_VALIDATE_EMAIL) !== false) {
  183.                 if ($CDMUserManagerService->customerExists($params['email'])) {
  184.                     $emailDoc $this->document->getProperty('email');
  185.                     $success $CDMUserManagerService->sendRecoveryMail($request$params['email'], $emailDoc);
  186.                     $view['success'] = $success;
  187.                     $view['email'] = $params['email'];
  188.                 } else {
  189.                     $errors[] = 'Customer does not exist';
  190.                 }
  191.             } else {
  192.                 $errors[] = 'email not valid';
  193.             }
  194.             $view['errors'] = $errors;
  195.         }
  196.         return $this->render('@ElementsCDMUserManager/UserManager/sendRecovery.html.twig'$view);
  197.     }
  198.     /**
  199.      * @Route("/{_locale}/auth/send-confirm", name="cdm_auth_sendconfirm")
  200.      *
  201.      * @param Request $request
  202.      * @param CDMUserManagerServiceInterface $CDMUserManagerService
  203.      *
  204.      * @return Response
  205.      * @throws Exception
  206.      */
  207.     public function sendConfirm(
  208.         Request $request,
  209.         CDMUserManagerServiceInterface $CDMUserManagerService
  210.     ) {
  211.         $returnArray = [];
  212.         if ($this->document->getProperty('confirmEmail') instanceof Email) {
  213.             $returnArray $CDMUserManagerService->sendConfirm($request$this->document->getProperty('confirmEmail'), $this->editmode);
  214.         }
  215.         return $this->render('@ElementsCDMUserManager/UserManager/sendConfirm.html.twig'$returnArray);
  216.     }
  217. }