public function accountAction()
 {
     $loggedUser = $this->getUser();
     $request = $this->getRequest();
     $accountInfo = new AccountInfo();
     // If user has submit form => save user acount info
     if ($request->getMethod() == 'POST') {
         try {
             $entityManager = $this->getDoctrine()->getManager();
             $form = $this->createForm(new AccountInfoType(), $accountInfo);
             $form->bind($request);
             // If password changed => check password security + password confirmation
             if (strlen($accountInfo->getPassword()) > 0) {
                 if (!ValidateUtil::checkPassword($accountInfo->getPassword(), 1)) {
                     $form->get('password')->addError(new FormError("Le mot de passe n'est pas assez fort"));
                 } else {
                     if (strcmp($accountInfo->getPassword(), $accountInfo->getConfirmPassword()) != 0) {
                         $form->get('confirmPassword')->addError(new FormError("La confirmation du mot de passe n'est pas correcte"));
                     }
                 }
             }
             // Check mail unicity
             if (!$entityManager->getRepository('jcUserBundle:User')->checkMailForUser($accountInfo->getMail(), $loggedUser->getId())) {
                 $form->get('mail')->addError(new FormError("Ce mail est déjà utilisé"));
             }
             if ($form->isValid()) {
                 // Get User object from database => for update
                 $user = $entityManager->getRepository('jcUserBundle:User')->find($loggedUser->getId());
                 // Populate form data in User object
                 $user->setFirstname($accountInfo->getFirstname());
                 $user->setLastname($accountInfo->getLastname());
                 $user->setMail($accountInfo->getMail());
                 // Encode password using SHA
                 if (strlen($accountInfo->getPassword()) > 0) {
                     $user->setPassword(PasswordUtil::encodePassword($accountInfo->getPassword()));
                 }
                 // Save User object in database
                 $entityManager->persist($user);
                 $entityManager->flush();
                 $request->getSession()->getFlashBag()->add('popup-message', 'Votre compte a bien été mis à jour');
             }
         } catch (Exception $e) {
             $request->getSession()->getFlashBag()->add('popup-message', 'Erreur lors de la mise à jour de vos informations personnelles');
         }
     } else {
         // Initialize AccountInfo with logged user data
         // NOTE : Ignore password (unchanged if ignored)
         $accountInfo->setFirstname($loggedUser->getFirstname());
         $accountInfo->setLastname($loggedUser->getLastname());
         $accountInfo->setMail($loggedUser->getMail());
         $form = $this->createForm(new AccountInfoType(), $accountInfo);
     }
     return $this->render('jcUserBundle:FO:account.html.twig', array('accountInfo' => $form->createView()));
 }
Beispiel #2
0
 /**
  * @Route("/admin/user/edit/{id}", defaults={"id" = 0}, name="jc_user_bo_edit")
  */
 public function editAction(Request $request, $id)
 {
     $entityManager = $this->getDoctrine()->getManager();
     $user = $id > 0 ? $entityManager->getRepository('jcUserBundle:User')->find($id) : new User();
     // If user has submit form => save user
     if ($request->getMethod() == 'POST') {
         try {
             // Keep initial password for further use...
             $initialPassword = $user->getPassword();
             $form = $this->createForm(new UserType(), $user);
             $form->handleRequest($request);
             $generatePassword = $request->request->get('generate-password');
             if ($generatePassword) {
                 $user->setPassword(PasswordUtil::generatePassword(6, true, true, true, false));
             } else {
                 // For new user or if password changed => check password security + password confirmation
                 if (!$user->getId() || strlen($user->getPassword()) > 0) {
                     if (!ValidateUtil::checkPassword($user->getPassword(), 1)) {
                         $form->get('password')->addError(new FormError("Le mot de passe n'est pas assez fort"));
                     } else {
                         if (strcmp($user->getPassword(), $user->getConfirmPassword()) != 0) {
                             $form->get('confirmPassword')->addError(new FormError("La confirmation du mot de passe n'est pas correcte"));
                         }
                     }
                 }
             }
             if ($form->isValid()) {
                 // For generated password, new user or new password => Encode password using SHA
                 if ($generatePassword || !$user->getId() || strlen($user->getPassword()) > 0) {
                     $user->setPassword(PasswordUtil::encodePassword($user->getPassword()));
                 } else {
                     $user->setPassword($initialPassword);
                 }
                 $entityManager->persist($user);
                 $entityManager->flush();
                 $request->getSession()->getFlashBag()->add('bo-log-message', 'Sauvegarde OK');
                 // If account must be sent to user => update password + send mail
                 if ($request->request->get('generate-password')) {
                     $accountMailService = $this->get('jc_user.account_mail');
                     if ($accountMailService->sendNewAccountInformation($user->getId(), true)) {
                         $request->getSession()->getFlashBag()->add('bo-log-message', 'Envoi du mail à l\'utilisateur OK');
                     } else {
                         $request->getSession()->getFlashBag()->add('bo-error-message', 'Erreur lors de l\'envoi du mail');
                     }
                 }
                 return $this->redirect($this->generateUrl('jc_user_bo_list'));
             } else {
                 $request->getSession()->getFlashBag()->add('bo-warning-message', 'Certains champs ne sont pas remplis correctement');
             }
         } catch (Exception $e) {
             $request->getSession()->getFlashBag()->add('bo-error-message', 'Erreur lors de la sauvegarde');
         }
     } else {
         // Erase password information
         $user->setPassword('');
         $form = $this->createForm(new UserType(), $user);
     }
     // Get role list to select user's role
     $roleList = $this->getDoctrine()->getManager()->getRepository('jcUserBundle:Role')->findAll();
     return $this->render('jcUserBundle:BO:edit.html.twig', array('userToEdit' => $form->createView(), 'roleList' => $roleList));
 }