// Borrowed from the Telerik Sitefinity Forms module // It constructs the items we're going to plug into our notification template private static IDictionary <string, string> GetNotificationTemplateItems(IFormEntryCreatedEvent evt) { Dictionary <string, string> strs = new Dictionary <string, string>(); string projectName = Config.Get <ProjectConfig>().ProjectName; strs.Add("Form.ProjectName", projectName); string domainUrl = UrlPath.GetDomainUrl(); strs.Add("Form.Host", domainUrl); string empty = string.Empty; HttpContextBase currentHttpContext = SystemManager.CurrentHttpContext; if (currentHttpContext != null && currentHttpContext.Request != null) { empty = currentHttpContext.Request.Url.AbsoluteUri; } strs.Add("Form.Url", empty); strs.Add("Form.Title", evt.FormTitle); strs.Add("Form.IpAddress", evt.IpAddress); DateTime sitefinityUITime = evt.SubmissionTime.ToSitefinityUITime(); strs.Add("Form.SubmittedOn", sitefinityUITime.ToString("dd MMMM yyyy")); string username = evt.Username; if (string.IsNullOrWhiteSpace(username)) { username = Res.Get <FormsResources>("AnonymousUsername"); } strs.Add("Form.Username", username); if (evt.Controls.Any <IFormEntryEventControl>()) { strs.Add("Form.Fields", GetNotificationControlsHtml(evt.Controls)); } return(strs); }
/// <summary> /// Handles the event triggered by a user submitting a Sitefinity form /// </summary> /// <param name="EventData">The event data.</param> private void FormEntryCreatedEvent_Handler(IFormEntryCreatedEvent EventData) { var sb = new StringBuilder(); // append generic event data sb.AppendFormat("User Event Type: {0}\n", EventData.GetType().ToString()); sb.AppendFormat(" Form Id: {0}\n", EventData.FormId); sb.AppendFormat(" Form name: {0}\n", EventData.FormName); sb.AppendFormat(" SubscriptionListId: {0}\n", EventData.FormSubscriptionListId); sb.AppendFormat(" Form Title: {0}\n", EventData.FormTitle); sb.AppendFormat(" Origin: {0}\n", EventData.Origin); LoggerHelper.WriteLog(sb.ToString()); }
private static void FormsEventHandler(IFormEntryCreatedEvent eventInfo) { var controls = eventInfo.Controls; FormsManager man = FormsManager.GetManager(); JavaScriptSerializer jsonSerializer = new JavaScriptSerializer(); List <string> emails = new List <string>(); foreach (var item in controls.Where(c => man.LoadControl(man.GetControl <ObjectData>(c.Id)) is EmailDistributionDropDown)) { var data = jsonSerializer.Deserialize <List <DistributionObject> >((man.LoadControl(man.GetControl <ObjectData>(item.Id)) as EmailDistributionDropDown).DistributionList); var d = data.Where(i => i.Text == item.Value.ToString()).FirstOrDefault(); foreach (var emailItem in d.Email.Split(',')) { emails.Add(emailItem); } } if (Config.Get <FormsConfig>().Notifications.Enabled) { List <ISubscriberRequest> subscribers = new List <ISubscriberRequest>(); var ns = SystemManager.GetNotificationService(); var serviceContext = new ServiceContext("ThisApplicationKey", "Forms"); Guid subscriptionListId = eventInfo.FormSubscriptionListId; IEnumerable <ISubscriberRequest> currentSubscribers = ns.GetSubscribers(serviceContext, subscriptionListId, null); var currentSubscribersLookup = currentSubscribers.ToLookup(s => s.Email); IDictionary <string, string> notificationTemplateItems = GetNotificationTemplateItems(eventInfo); foreach (var item in emails.Where(r => !currentSubscribersLookup.Contains(r))) { subscribers.Add(new SubscriberRequestProxy() { Email = item, ResolveKey = item }); } MessageJobRequestProxy messageJobRequestProxy = new MessageJobRequestProxy() { Subscribers = subscribers, MessageTemplateId = Config.Get <FormsConfig>().Notifications.FormEntrySubmittedNotificationTemplateId, SenderProfileName = Config.Get <FormsConfig>().Notifications.SenderProfile, Description = string.Format("Form entry submission email notification for form '{0}'", eventInfo.FormTitle) }; // Make it so, Number One. ns.SendMessage(serviceContext, messageJobRequestProxy, notificationTemplateItems); } }