public function insertUpdateProcessing($em, $passwordEncoder, $data, $id)
{
$update = !is_null($id);
try {
$em->beginTransaction();
if ($update) {
$user = $em->find('Model\\User', $id);
} else {
$user = new User();
}
$user->setUsername($data['username']);
//Regenerate salt and update password only if a new password is provided
if (isset($data['password']) && strlen($data['password']) > 8 && strlen($data['password']) < 1024) {
//Prepare salt
// $salt = base64_encode(mcrypt_create_iv(ceil(0.75 * 32), MCRYPT_DEV_URANDOM));
$salt = uniqid("", true);
$user->setSalt($salt);
//Encrypt password
$password = $passwordEncoder->encodePassword($data['password'], $user->getSalt());
$user->setPassword($password);
}
$user->setName($data['name']);
$user->setSurname($data['surname']);
$user->setEmail($data['email']);
$user->setPhone($data['phone']);
$user->setAddress($data['address']);
$user->setCap($data['cap']);
$user->setCity($data['city']);
$user->setProvince($data['province']);
$user->setCountry($data['country']);
//Prepare roles string
$roles = array();
if (isset($data['roles'])) {
foreach ($data['roles'] as $roleString => $val) {
$roles[] = new Role($roleString);
}
}
$user->setRoles($roles);
//Prepare accountExpiration DateTime object
$accountExpiration = new \DateTime($data['accountExpiration'], new \DateTimeZone('Europe/Rome'));
$user->setAccountExpiration($accountExpiration);
$enabled = isset($data['enabled']);
$user->setEnabled($enabled);
//Prepare credentialsExpiration DateTime object
$credentialsExpiration = new \DateTime($data['credentialsExpiration'], new \DateTimeZone('Europe/Rome'));
$user->setCredentialsExpiration($credentialsExpiration);
if ($update) {
$em->merge($user);
} else {
$em->persist($user);
}
$em->flush();
$em->commit();
} catch (\Exception $e) {
$em->rollback();
throw $e;
}
return $user->getId();
}