Untitled
unknown
plain_text
a year ago
17 kB
10
Indexable
[HttpPost("register")]
public virtual async Task<IActionResult> Register([FromBody]BaseQueryModel<RegisterModel> model)
{
//check whether registration is allowed
if (_customerSettings.UserRegistrationType == UserRegistrationType.Disabled)
return BadRequest();
var response = new GenericResponseModel<RegisterModel>();
if (await _customerService.IsRegisteredAsync(await _workContext.GetCurrentCustomerAsync()))
{
//Already registered customer.
await _authenticationService.SignOutAsync();
//raise logged out event
await _eventPublisher.PublishAsync(new CustomerLoggedOutEvent(await _workContext.GetCurrentCustomerAsync()));
//Save a new record
await _workContext.SetCurrentCustomerAsync(await _customerService.InsertGuestCustomerAsync());
}
var customer = await _workContext.GetCurrentCustomerAsync();
customer.RegisteredInStoreId = (await _storeContext.GetCurrentStoreAsync()).Id;
var form = model.FormValues == null ? new NameValueCollection() : model.FormValues.ToNameValueCollection();
//custom customer attributes
var customerAttributesXml = await ParseCustomCustomerAttributes(form);
var customerAttributeWarnings = await _customerAttributeParser.GetAttributeWarningsAsync(customerAttributesXml);
foreach (var error in customerAttributeWarnings)
{
ModelState.AddModelError("", error);
}
if (ModelState.IsValid)
{
if (_customerSettings.UsernamesEnabled && model.Data.Username != null)
{
model.Data.Username = model.Data.Username.Trim();
}
var isApproved = _customerSettings.UserRegistrationType == UserRegistrationType.Standard;
var registrationRequest = new CustomerRegistrationRequest(customer,
model.Data.Email,
_customerSettings.UsernamesEnabled ? model.Data.Username : model.Data.Email,
model.Data.Password,
_customerSettings.DefaultPasswordFormat,
(await _storeContext.GetCurrentStoreAsync()).Id,
isApproved);
var registrationResult = await _customerRegistrationService.RegisterCustomerAsync(registrationRequest);
if (registrationResult.Success)
{
//properties
if (_dateTimeSettings.AllowCustomersToSetTimeZone)
{
await _genericAttributeService.SaveAttributeAsync(customer, NopCustomerDefaults.TimeZoneIdAttribute, model.Data.TimeZoneId);
}
//VAT number
if (_taxSettings.EuVatEnabled)
{
await _genericAttributeService.SaveAttributeAsync(customer, NopCustomerDefaults.VatNumberAttribute, model.Data.VatNumber);
var vatNumberStatus = await _taxService.GetVatNumberStatusAsync(model.Data.VatNumber);
await _genericAttributeService.SaveAttributeAsync(customer, NopCustomerDefaults.VatNumberStatusIdAttribute, (int)vatNumberStatus.vatNumberStatus);
//send VAT number admin notification
if (!string.IsNullOrEmpty(model.Data.VatNumber) && _taxSettings.EuVatEmailAdminWhenNewVatSubmitted)
await _workflowMessageService.SendNewVatSubmittedStoreOwnerNotificationAsync(customer, model.Data.VatNumber, vatNumberStatus.address, _localizationSettings.DefaultAdminLanguageId);
}
//form fields
if (_customerSettings.GenderEnabled)
await _genericAttributeService.SaveAttributeAsync(customer, NopCustomerDefaults.GenderAttribute, model.Data.Gender);
await _genericAttributeService.SaveAttributeAsync(customer, NopCustomerDefaults.FirstNameAttribute, model.Data.FirstName);
await _genericAttributeService.SaveAttributeAsync(customer, NopCustomerDefaults.LastNameAttribute, model.Data.LastName);
if (_customerSettings.DateOfBirthEnabled)
{
var dateOfBirth = model.Data.ParseDateOfBirth();
await _genericAttributeService.SaveAttributeAsync(customer, NopCustomerDefaults.DateOfBirthAttribute, dateOfBirth);
}
if (_customerSettings.CompanyEnabled)
await _genericAttributeService.SaveAttributeAsync(customer, NopCustomerDefaults.CompanyAttribute, model.Data.Company);
if (_customerSettings.StreetAddressEnabled)
await _genericAttributeService.SaveAttributeAsync(customer, NopCustomerDefaults.StreetAddressAttribute, model.Data.StreetAddress);
if (_customerSettings.StreetAddress2Enabled)
await _genericAttributeService.SaveAttributeAsync(customer, NopCustomerDefaults.StreetAddress2Attribute, model.Data.StreetAddress2);
if (_customerSettings.ZipPostalCodeEnabled)
await _genericAttributeService.SaveAttributeAsync(customer, NopCustomerDefaults.ZipPostalCodeAttribute, model.Data.ZipPostalCode);
if (_customerSettings.CityEnabled)
await _genericAttributeService.SaveAttributeAsync(customer, NopCustomerDefaults.CityAttribute, model.Data.City);
if (_customerSettings.CountyEnabled)
await _genericAttributeService.SaveAttributeAsync(customer, NopCustomerDefaults.CountyAttribute, model.Data.County);
if (_customerSettings.CountryEnabled)
await _genericAttributeService.SaveAttributeAsync(customer, NopCustomerDefaults.CountryIdAttribute, model.Data.CountryId);
if (_customerSettings.CountryEnabled && _customerSettings.StateProvinceEnabled)
await _genericAttributeService.SaveAttributeAsync(customer, NopCustomerDefaults.StateProvinceIdAttribute,
model.Data.StateProvinceId);
if (_customerSettings.PhoneEnabled)
await _genericAttributeService.SaveAttributeAsync(customer, NopCustomerDefaults.PhoneAttribute, model.Data.Phone);
if (_customerSettings.FaxEnabled)
await _genericAttributeService.SaveAttributeAsync(customer, NopCustomerDefaults.FaxAttribute, model.Data.Fax);
//newsletter
if (_customerSettings.NewsletterEnabled)
{
//save newsletter value
var newsletter = await _newsLetterSubscriptionService.GetNewsLetterSubscriptionByEmailAndStoreIdAsync(model.Data.Email, (await _storeContext.GetCurrentStoreAsync()).Id);
if (newsletter != null)
{
if (model.Data.Newsletter)
{
newsletter.Active = true;
await _newsLetterSubscriptionService.UpdateNewsLetterSubscriptionAsync(newsletter);
//GDPR
if (_gdprSettings.GdprEnabled && _gdprSettings.LogNewsletterConsent)
{
await _gdprService.InsertLogAsync(customer, 0, GdprRequestType.ConsentAgree, await _localizationService.GetResourceAsync("Gdpr.Consent.Newsletter"));
}
}
}
else
{
if (model.Data.Newsletter)
{
await _newsLetterSubscriptionService.InsertNewsLetterSubscriptionAsync(new NewsLetterSubscription
{
NewsLetterSubscriptionGuid = Guid.NewGuid(),
Email = model.Data.Email,
Active = true,
StoreId = (await _storeContext.GetCurrentStoreAsync()).Id,
CreatedOnUtc = DateTime.UtcNow
});
//GDPR
if (_gdprSettings.GdprEnabled && _gdprSettings.LogNewsletterConsent)
{
await _gdprService.InsertLogAsync(customer, 0, GdprRequestType.ConsentAgree, await _localizationService.GetResourceAsync("Gdpr.Consent.Newsletter"));
}
}
}
}
if (_customerSettings.AcceptPrivacyPolicyEnabled)
{
//privacy policy is required
//GDPR
if (_gdprSettings.GdprEnabled && _gdprSettings.LogPrivacyPolicyConsent)
{
await _gdprService.InsertLogAsync(customer, 0, GdprRequestType.ConsentAgree, await _localizationService.GetResourceAsync("Gdpr.Consent.PrivacyPolicy"));
}
}
//GDPR
if (_gdprSettings.GdprEnabled)
{
var consents = (await _gdprService.GetAllConsentsAsync()).Where(consent => consent.DisplayDuringRegistration).ToList();
foreach (var consent in consents)
{
var controlId = $"consent{consent.Id}";
var cbConsent = form[controlId];
if (!StringValues.IsNullOrEmpty(cbConsent) && cbConsent.ToString().Equals("on"))
{
//agree
await _gdprService.InsertLogAsync(customer, consent.Id, GdprRequestType.ConsentAgree, consent.Message);
}
else
{
//disagree
await _gdprService.InsertLogAsync(customer, consent.Id, GdprRequestType.ConsentDisagree, consent.Message);
}
}
}
//save customer attributes
await _genericAttributeService.SaveAttributeAsync(customer, NopCustomerDefaults.CustomCustomerAttributes, customerAttributesXml);
//login customer now
if (isApproved)
await _authenticationService.SignInAsync(customer, true);
//insert default address (if possible)
var defaultAddress = new Address
{
FirstName = await _genericAttributeService.GetAttributeAsync<string>(customer, NopCustomerDefaults.FirstNameAttribute),
LastName = await _genericAttributeService.GetAttributeAsync<string>(customer, NopCustomerDefaults.LastNameAttribute),
Email = customer.Email,
Company = await _genericAttributeService.GetAttributeAsync<string>(customer, NopCustomerDefaults.CompanyAttribute),
CountryId = await _genericAttributeService.GetAttributeAsync<int>(customer, NopCustomerDefaults.CountryIdAttribute) > 0
? (int?)await _genericAttributeService.GetAttributeAsync<int>(customer, NopCustomerDefaults.CountryIdAttribute)
: null,
StateProvinceId = await _genericAttributeService.GetAttributeAsync<int>(customer, NopCustomerDefaults.StateProvinceIdAttribute) > 0
? (int?)await _genericAttributeService.GetAttributeAsync<int>(customer, NopCustomerDefaults.StateProvinceIdAttribute)
: null,
County = await _genericAttributeService.GetAttributeAsync<string>(customer, NopCustomerDefaults.CountyAttribute),
City = await _genericAttributeService.GetAttributeAsync<string>(customer, NopCustomerDefaults.CityAttribute),
Address1 = await _genericAttributeService.GetAttributeAsync<string>(customer, NopCustomerDefaults.StreetAddressAttribute),
Address2 = await _genericAttributeService.GetAttributeAsync<string>(customer, NopCustomerDefaults.StreetAddress2Attribute),
ZipPostalCode = await _genericAttributeService.GetAttributeAsync<string>(customer, NopCustomerDefaults.ZipPostalCodeAttribute),
PhoneNumber = await _genericAttributeService.GetAttributeAsync<string>(customer, NopCustomerDefaults.PhoneAttribute),
FaxNumber = await _genericAttributeService.GetAttributeAsync<string>(customer, NopCustomerDefaults.FaxAttribute),
CreatedOnUtc = customer.CreatedOnUtc
};
if (await _addressService.IsAddressValidAsync(defaultAddress))
{
//some validation
if (defaultAddress.CountryId == 0)
defaultAddress.CountryId = null;
if (defaultAddress.StateProvinceId == 0)
defaultAddress.StateProvinceId = null;
//set default address
await _addressService.InsertAddressAsync(defaultAddress);
await _customerService.InsertCustomerAddressAsync(customer, defaultAddress);
customer.BillingAddressId = defaultAddress.Id;
customer.ShippingAddressId = defaultAddress.Id;
await _customerService.UpdateCustomerAsync(customer);
}
//notifications
if (_customerSettings.NotifyNewCustomerRegistration)
await _workflowMessageService.SendCustomerRegisteredNotificationMessageAsync(customer,
_localizationSettings.DefaultAdminLanguageId);
//raise event
await _eventPublisher.PublishAsync(new CustomerRegisteredEvent(customer));
switch (_customerSettings.UserRegistrationType)
{
case UserRegistrationType.EmailValidation:
{
//email validation message
await _genericAttributeService.SaveAttributeAsync(customer, NopCustomerDefaults.AccountActivationTokenAttribute, Guid.NewGuid().ToString());
await _workflowMessageService.SendCustomerEmailValidationMessageAsync(customer, (await _workContext.GetWorkingLanguageAsync()).Id);
response.Message = await _localizationService.GetResourceAsync("Account.Register.Result.EmailValidation");
return Ok(response);
}
case UserRegistrationType.AdminApproval:
{
response.Message = await _localizationService.GetResourceAsync("Account.Register.Result.AdminApproval");
return Ok(response);
}
case UserRegistrationType.Standard:
{
//send customer welcome message
await _workflowMessageService.SendCustomerWelcomeMessageAsync(customer, (await _workContext.GetWorkingLanguageAsync()).Id);
response.Message = await _localizationService.GetResourceAsync("Account.Register.Result.Standard");
return Ok(response);
}
default:
{
return BadRequest();
}
}
}
//errors
response.ErrorList.AddRange(registrationResult.Errors);
}
foreach (var modelState in ModelState.Values)
foreach (var error in modelState.Errors)
response.ErrorList.Add(error.ErrorMessage);
//If we got this far, something failed, redisplay form
response.Data = await _customerModelFactory.PrepareRegisterModelAsync(model.Data, true, customerAttributesXml);
return BadRequest(response);
}Editor is loading...
Leave a Comment