Spaces:
No application file
No application file
| namespace Mautic\UserBundle\Controller; | |
| use Mautic\CoreBundle\Controller\FormController; | |
| use Mautic\CoreBundle\Helper\LanguageHelper; | |
| use Mautic\UserBundle\Model\UserModel; | |
| use Symfony\Component\Form\Extension\Core\Type\TextType; | |
| use Symfony\Component\HttpFoundation\Request; | |
| use Symfony\Component\PasswordHasher\Hasher\UserPasswordHasherInterface; | |
| class ProfileController extends FormController | |
| { | |
| /** | |
| * Generate's account profile. | |
| * | |
| * @return \Symfony\Component\HttpFoundation\JsonResponse|\Symfony\Component\HttpFoundation\Response | |
| */ | |
| public function indexAction(Request $request, LanguageHelper $languageHelper, UserPasswordHasherInterface $hasher) | |
| { | |
| // get current user | |
| $me = $this->get('security.token_storage')->getToken()->getUser(); | |
| /** @var UserModel $model */ | |
| $model = $this->getModel('user'); | |
| // set some permissions | |
| $permissions = [ | |
| 'apiAccess' => ($this->coreParametersHelper->get('api_enabled')) ? | |
| $this->security->isGranted('api:access:full') | |
| : 0, | |
| 'editName' => $this->security->isGranted('user:profile:editname'), | |
| 'editUsername' => $this->security->isGranted('user:profile:editusername'), | |
| 'editPosition' => $this->security->isGranted('user:profile:editposition'), | |
| 'editEmail' => $this->security->isGranted('user:profile:editemail'), | |
| ]; | |
| $action = $this->generateUrl('mautic_user_account'); | |
| $form = $model->createForm($me, $this->formFactory, $action, ['in_profile' => true]); | |
| $overrides = []; | |
| // make sure this user has access to edit privileged fields | |
| foreach ($permissions as $permName => $hasAccess) { | |
| if ('apiAccess' == $permName) { | |
| continue; | |
| } | |
| if (!$hasAccess) { | |
| // set the value to its original | |
| switch ($permName) { | |
| case 'editName': | |
| $overrides['firstName'] = $me->getFirstName(); | |
| $overrides['lastName'] = $me->getLastName(); | |
| $form->remove('firstName'); | |
| $form->add( | |
| 'firstName_unbound', | |
| TextType::class, | |
| [ | |
| 'label' => 'mautic.core.firstname', | |
| 'label_attr' => ['class' => 'control-label'], | |
| 'attr' => ['class' => 'form-control'], | |
| 'mapped' => false, | |
| 'disabled' => true, | |
| 'data' => $me->getFirstName(), | |
| 'required' => false, | |
| ] | |
| ); | |
| $form->remove('lastName'); | |
| $form->add( | |
| 'lastName_unbound', | |
| TextType::class, | |
| [ | |
| 'label' => 'mautic.core.lastname', | |
| 'label_attr' => ['class' => 'control-label'], | |
| 'attr' => ['class' => 'form-control'], | |
| 'mapped' => false, | |
| 'disabled' => true, | |
| 'data' => $me->getLastName(), | |
| 'required' => false, | |
| ] | |
| ); | |
| break; | |
| case 'editUsername': | |
| $overrides['username'] = $me->getUserIdentifier(); | |
| $form->remove('username'); | |
| $form->add( | |
| 'username_unbound', | |
| TextType::class, | |
| [ | |
| 'label' => 'mautic.core.username', | |
| 'label_attr' => ['class' => 'control-label'], | |
| 'attr' => ['class' => 'form-control'], | |
| 'mapped' => false, | |
| 'disabled' => true, | |
| 'data' => $me->getUserIdentifier(), | |
| 'required' => false, | |
| ] | |
| ); | |
| break; | |
| case 'editPosition': | |
| $overrides['position'] = $me->getPosition(); | |
| $form->remove('position'); | |
| $form->add( | |
| 'position_unbound', | |
| TextType::class, | |
| [ | |
| 'label' => 'mautic.core.position', | |
| 'label_attr' => ['class' => 'control-label'], | |
| 'attr' => ['class' => 'form-control'], | |
| 'mapped' => false, | |
| 'disabled' => true, | |
| 'data' => $me->getPosition(), | |
| 'required' => false, | |
| ] | |
| ); | |
| break; | |
| case 'editEmail': | |
| $overrides['email'] = $me->getEmail(); | |
| $form->remove('email'); | |
| $form->add( | |
| 'email_unbound', | |
| TextType::class, | |
| [ | |
| 'label' => 'mautic.core.type.email', | |
| 'label_attr' => ['class' => 'control-label'], | |
| 'attr' => ['class' => 'form-control'], | |
| 'mapped' => false, | |
| 'disabled' => true, | |
| 'data' => $me->getEmail(), | |
| 'required' => false, | |
| ] | |
| ); | |
| break; | |
| } | |
| } | |
| } | |
| // Check for a submitted form and process it | |
| $submitted = $request->getSession()->get('formProcessed', 0); | |
| if ('POST' === $request->getMethod() && !$submitted) { | |
| $request->getSession()->set('formProcessed', 1); | |
| // check to see if the password needs to be rehashed | |
| $formUser = $request->request->get('user') ?? []; | |
| $submittedPassword = $formUser['plainPassword']['password'] ?? null; | |
| $overrides['password'] = $model->checkNewPassword($me, $hasher, $submittedPassword); | |
| if (!$cancelled = $this->isFormCancelled($form)) { | |
| if ($this->isFormValid($form)) { | |
| foreach ($overrides as $k => $v) { | |
| $func = 'set'.ucfirst($k); | |
| $me->$func($v); | |
| } | |
| // form is valid so process the data | |
| $model->saveEntity($me); | |
| // check if the user's locale has been downloaded already, fetch it if not | |
| $installedLanguages = $languageHelper->getSupportedLanguages(); | |
| if ($me->getLocale() && !array_key_exists($me->getLocale(), $installedLanguages)) { | |
| $fetchLanguage = $languageHelper->extractLanguagePackage($me->getLocale()); | |
| // If there is an error, we need to reset the user's locale to the default | |
| if ($fetchLanguage['error']) { | |
| $me->setLocale(null); | |
| $model->saveEntity($me); | |
| $message = 'mautic.core.could.not.set.language'; | |
| $messageVars = []; | |
| if (isset($fetchLanguage['message'])) { | |
| $message = $fetchLanguage['message']; | |
| } | |
| if (isset($fetchLanguage['vars'])) { | |
| $messageVars = $fetchLanguage['vars']; | |
| } | |
| $this->addFlashMessage($message, $messageVars); | |
| } | |
| } | |
| // Update timezone and locale | |
| $tz = $me->getTimezone(); | |
| if (empty($tz)) { | |
| $tz = $this->coreParametersHelper->get('default_timezone'); | |
| } | |
| $request->getSession()->set('_timezone', $tz); | |
| $locale = $me->getLocale(); | |
| if (empty($locale)) { | |
| $locale = $this->coreParametersHelper->get('locale'); | |
| } | |
| $request->getSession()->set('_locale', $locale); | |
| $returnUrl = $this->generateUrl('mautic_user_account'); | |
| return $this->postActionRedirect( | |
| [ | |
| 'returnUrl' => $returnUrl, | |
| 'contentTemplate' => 'Mautic\UserBundle\Controller\ProfileController::indexAction', | |
| 'passthroughVars' => [ | |
| 'mauticContent' => 'user', | |
| ], | |
| 'flashes' => [ // success | |
| [ | |
| 'type' => 'notice', | |
| 'msg' => 'mautic.user.account.notice.updated', | |
| ], | |
| ], | |
| ] | |
| ); | |
| } | |
| } else { | |
| return $this->redirectToRoute('mautic_dashboard_index'); | |
| } | |
| } | |
| $request->getSession()->set('formProcessed', 0); | |
| $parameters = [ | |
| 'permissions' => $permissions, | |
| 'me' => $me, | |
| 'userForm' => $form->createView(), | |
| 'authorizedClients' => $this->forward('Mautic\ApiBundle\Controller\ClientController::authorizedClientsAction')->getContent(), | |
| ]; | |
| return $this->delegateView( | |
| [ | |
| 'viewParameters' => $parameters, | |
| 'contentTemplate' => '@MauticUser/Profile/index.html.twig', | |
| 'passthroughVars' => [ | |
| 'route' => $this->generateUrl('mautic_user_account'), | |
| 'mauticContent' => 'user', | |
| ], | |
| ] | |
| ); | |
| } | |
| } | |