Untitled
unknown
plain_text
a month ago
17 kB
3
Indexable
Never
[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); }
Leave a Comment