/** * @param CrudController $controller * @param Request $request * @param EntityInterface $data * @param FormInterface|null $form * * @return mixed */ public function createNewOrUpdate(CrudController $controller, Request $request, EntityInterface $data, FormInterface $form = null) { $translator = $this->container->get('translator'); $translationDomain = $this->container->getParameter('symfonian_id.admin.translation_domain'); $event = new FilterFormEvent(); $event->setData($data); $event->setForm($form); $this->fireEvent(Event::PRE_FORM_SUBMIT, $event); $response = $event->getResponse(); if ($response) { return $response; } $form->handleRequest($request); $viewParams['form'] = $form->createView(); $viewParams['form_theme'] = $this->container->getParameter('symfonian_id.admin.themes.form_theme'); $viewParams['menu'] = $this->container->getParameter('symfonian_id.admin.menu'); if ($request->isMethod('POST')) { $preFormValidationEvent = new FilterFormEvent(); $preFormValidationEvent->setForm($form); $this->fireEvent(Event::PRE_FORM_VALIDATION, $preFormValidationEvent); $response = $preFormValidationEvent->getResponse(); if ($response) { return $response; } if (!$form->isValid()) { $viewParams['errors'] = true; } else { $data = $form->getData(); $preSaveEvent = new FilterEntityEvent(); $preSaveEvent->setEntity($data); $preSaveEvent->setEntityManager($this->manager); $this->fireEvent(Event::PRE_SAVE, $preSaveEvent); $this->manager->persist($data); $this->manager->flush(); $postSaveEvent = new FilterEntityEvent(); $postSaveEvent->setEntityManager($this->manager); $postSaveEvent->setEntity($data); $this->fireEvent(Event::POST_SAVE, $postSaveEvent); $viewParams['success'] = $translator->trans('message.data_saved', array(), $translationDomain); } } $this->viewParams = array_merge($this->viewParams, $viewParams); }
/** * @Route("/change_password/") * @Method({"GET", "POST"}) * * @param Request $request * * @return \Symfony\Component\HttpFoundation\Response */ public function changePasswordAction(Request $request) { $translator = $this->container->get('translator'); $translationDomain = $this->container->getParameter('symfonian_id.admin.translation_domain'); $user = $this->getUser(); if (!is_object($user) || !$user instanceof UserInterface) { throw new AccessDeniedException($translator->trans('message.access_denied', array(), $translationDomain)); } /** @var ConfigurationHandler $configuration */ $configuration = $this->container->get('symfonian_id.admin.handler.configuration'); $form = $configuration->getForm($user); $form->handleRequest($request); $this->viewParams['page_title'] = $translator->trans('page.change_password.title', array(), $translationDomain); $this->viewParams['page_description'] = $translator->trans('page.change_password.description', array(), $translationDomain); $this->viewParams['form'] = $form->createView(); $this->viewParams['form_theme'] = $this->container->getParameter('symfonian_id.admin.themes.form_theme'); $this->viewParams['menu'] = $this->container->getParameter('symfonian_id.admin.menu'); if ($request->isMethod('POST')) { if (!$form->isValid()) { $this->viewParams['errors'] = true; } elseif ($form->isValid()) { /** @var \Symfony\Component\Security\Core\Encoder\EncoderFactory $encoderFactory */ $encoderFactory = $this->container->get('security.encoder_factory'); /** @var \Symfony\Component\Security\Core\Encoder\PasswordEncoderInterface $encoder */ $encoder = $encoderFactory->getEncoder($user); $password = $encoder->encodePassword($form->get('current_password')->getData(), $user->getSalt()); if ($password !== $user->getPassword()) { $this->viewParams['current_password_invalid'] = true; return $this->render('SymfonianIndonesiaAdminBundle:Index:change_password.html.twig', $this->viewParams); } $userManager = $this->container->get('fos_user.user_manager'); $entity = $form->getData(); /** @var \Doctrine\ORM\EntityManager $entityManager */ $entityManager = $this->container->get('doctrine.orm.entity_manager'); $dispatcher = $this->container->get('event_dispatcher'); $event = new FilterEntityEvent(); $event->setEntityManager($entityManager); $event->setEntity($entity); $userManager->updateUser($entity); $dispatcher->dispatch(Event::POST_SAVE, $event); $this->viewParams['success'] = $translator->trans('message.data_saved', array(), $translationDomain); } } return $this->render($this->container->getParameter('symfonian_id.admin.themes.change_password'), $this->viewParams); }