// 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);
            }
        }