/** * @param array $values * @param User|null $user * @return ValidationObject */ private function create(array $values, User $user = null) { if ($user === null) { $user = new User($values['username'], $values['email'], $values['password']); } $this->em->beginTransaction(); $user->setUsername($values['username']); $user->setEmail($values['email']); $user->setPassword($values['password']); $user->setFirstName($values['first_name']); $user->setLastName($values['last_name']); $validationObject = new ValidationObject(); $role = $this->getRole($values['role'], $validationObject); if (!$validationObject->isValid()) { $this->em->rollback(); return $validationObject; } $user->addRole($role); $newUser = $this->em->safePersist($user); if ($newUser === false) { // username or email already exists if ($this->usernameExists($values['username'])) { $validationObject->addError('users.user.form.messages.usernameExists', FlashMessage::WARNING); } if ($this->emailExists($values['email'])) { $validationObject->addError('users.user.form.messages.emailExists', FlashMessage::WARNING); } } if ($validationObject->isValid()) { $this->onSuccessUserCreation($user); $this->em->commit(); } else { $this->em->rollback(); } return $validationObject; }