public function onPreSave(FilterEntityEvent $event)
 {
     $entity = $event->getEntity();
     /** @var UploadHandler $uploadHandler */
     $uploadHandler = $this->container->get('symfonian_id.admin.handler.upload');
     if ($uploadHandler->isUploadable() && $entity instanceof User) {
         $uploadDir = $this->container->getParameter('symfonian_id.admin.upload_dir');
         $uploadHandler->setUploadDir($uploadDir['server_path']);
         $uploadHandler->upload($entity);
     }
 }
 public function onDeleteUser(FilterEntityEvent $event)
 {
     $entity = $event->getEntity();
     if (!$entity instanceof UserInterface) {
         return;
     }
     if ($this->user->getUsername() === $entity->getUsername()) {
         $response = new JsonResponse(array('status' => false, 'message' => $this->translator->trans('message.cant_delete_your_self', array(), $this->container->getParameter('symfonian_id.admin.translation_domain'))));
         $event->setResponse($response);
     }
 }
 /**
  * @param FilterEntityEvent $event
  */
 public function onPreSaveUser(FilterEntityEvent $event)
 {
     $entity = $event->getEntity();
     if (!$entity instanceof User) {
         return;
     }
     if ($entity->getId() || $entity->isEnabled()) {
         return;
     }
     if (!$this->container->getParameter('symfonian_id.admin.security.auto_enable')) {
         return;
     }
     $entity->setEnabled(true);
 }
 /**
  * @param FilterEntityEvent $event
  */
 public function onPreSaveUser(FilterEntityEvent $event)
 {
     $entity = $event->getEntity();
     if (!$entity instanceof TimestampableInterface) {
         return;
     }
     $token = $this->tokenStorage->getToken();
     if (!$token) {
         return;
     }
     $now = new \DateTime();
     $username = $token->getUsername();
     if (!$entity->getId()) {
         $entity->setCreatedAt($now);
         $entity->setCreatedBy($username);
     }
     $entity->setUpdatedAt($now);
     $entity->setUpdatedBy($username);
 }
 /**
  * @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);
 }