using System.Linq; using Hangfire; using LeafWeb.WebCms.Controllers; using LeafWeb.WebCms.Services; using MlkPwgen; using Umbraco.Core; using Umbraco.Core.Events; using Umbraco.Core.Models; using Umbraco.Core.Services; namespace LeafWeb.WebCms.EventHandlers { // https://our.umbraco.com/forum/umbraco-7/using-umbraco-7/64185-Assign-new-members-to-member-group-upon-registration#comment-254768 public class MemberEvents : ApplicationEventHandler { protected override void ApplicationStarted(UmbracoApplicationBase umbracoApplication, ApplicationContext applicationContext) { //base.ApplicationStarted(umbracoApplication, applicationContext); MemberService.Created += MemberService_Created; MemberService.Saving += MemberService_OnSaving; } // https://our.umbraco.com/Documentation/Tutorials/Members-Registration-And-Logins/index-v9 private void MemberService_OnSaving(IMemberService sender, SaveEventArgs e) { foreach (var member in e.SavedEntities) { // Member is not approved, don't send an email at all if (!member.HasIdentity || !member.IsApproved) continue; // Pull the old approval state from the member service (this is the value before the save has updated the cache) var alreadyApproved = ApplicationContext.Current.Services.MemberService.GetById(member.Id).IsApproved; //Member wasn't approved before save but is now if (!alreadyApproved) { //todo Code to send email goes here } } } private void MemberService_Created(IMemberService sender, NewEventArgs e) { e.Entity.IsApproved = false; var token = PasswordGenerator.Generate(12, allowed: "0123456789"); e.Entity.SetValue(LeafWebMemberProperties.VerificationToken, token); sender.Save(e.Entity); sender.AssignRole(e.Entity.Id, "Authenticated"); // Send Email BackgroundJob.Enqueue( email => email.SendVerifyMemberEmail(e.Entity.Email)); } } }