public function Register($username, $email, $firstName, $lastName, $password, $timezone, $language, $homepageId, $additionalFields = array(), $attributeValues = array(), $groups = null)
{
$encryptedPassword = $this->_passwordEncryption->EncryptPassword($password);
$attributes = new UserAttribute($additionalFields);
if ($this->CreatePending()) {
$user = User::CreatePending($firstName, $lastName, $email, $username, $language, $timezone, $encryptedPassword->EncryptedPassword(), $encryptedPassword->Salt(), $homepageId);
} else {
$user = User::Create($firstName, $lastName, $email, $username, $language, $timezone, $encryptedPassword->EncryptedPassword(), $encryptedPassword->Salt(), $homepageId);
}
$user->ChangeAttributes($attributes->Get(UserAttribute::Phone), $attributes->Get(UserAttribute::Organization), $attributes->Get(UserAttribute::Position));
$user->ChangeCustomAttributes($attributeValues);
if ($groups != null) {
$user->WithGroups($groups);
}
if (Configuration::Instance()->GetKey(ConfigKeys::REGISTRATION_AUTO_SUBSCRIBE_EMAIL, new BooleanConverter())) {
foreach (ReservationEvent::AllEvents() as $event) {
$user->ChangeEmailPreference($event, true);
}
}
$userId = $this->_userRepository->Add($user);
$this->AutoAssignPermissions($userId);
if (Configuration::Instance()->GetKey(ConfigKeys::REGISTRATION_NOTIFY, new BooleanConverter())) {
ServiceLocator::GetEmailService()->Send(new AccountCreationEmail($user, ServiceLocator::GetServer()->GetUserSession()));
}
return $user;
}