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())); }
/** * @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)); }