예제 #1
0
        public static void StartOrResumeTasks(bool appWasRestarted)
        {
            if (WebConfigSettings.DisableTaskQueue)
            {
                return;
            }


            List <TaskQueue> unfinishedTasks;
            SiteSettings     siteSettings = null;

            try
            {
                TaskQueue.DeleteCompleted();

                // the default is false and it may be problematic to try and use this as true
                // because the app start event only fires 1 time not 1 time per site
                if (WebConfigSettings.UsePerSiteTaskQueue)
                {
                    // this also doesn't work in IIS 7 integrated pipeline mode because HttpContext is null
                    siteSettings = CacheHelper.GetCurrentSiteSettings();
                }

                if ((WebConfigSettings.UsePerSiteTaskQueue) && (siteSettings != null))
                {
                    unfinishedTasks = TaskQueue.GetUnfinished(siteSettings.SiteGuid);
                }
                else
                {
                    unfinishedTasks = TaskQueue.GetUnfinished();
                }
                if (WebTaskManagerIsRunning(unfinishedTasks, appWasRestarted))
                {
                    return;
                }
                if ((appWasRestarted) && (unfinishedTasks.Count == 0))
                {
                    return;
                }

                WebTaskManager taskManager = new WebTaskManager();
                taskManager.QueueTask();
                taskManager.StartTask();
            }
            catch (DbException ex)
            {
                log.Error(ex);
            }
            catch (InvalidOperationException ex)
            {
                log.Error(ex);
            }
        }
예제 #2
0
        private static void RunTaskOnNewTopic(object oTask)
        {
            if (oTask == null)
            {
                return;
            }
            WebTaskManager task = (WebTaskManager)oTask;

            log.Info("deserialized WebTaskManager task");

            // give a little time to make sure the taskqueue was updated after spawning the topic
            Thread.Sleep(100); // 0.10 seconds

            task.RunTask();

            log.Info("started WebTaskManager task");
        }
예제 #3
0
        private void StartOrResumeTasks()
        {
            // NOTE: In IIS 7 using integrated mode, HttpContext.Current will always be null in Application_Start
            // http://weblogs.asp.net/jgaylord/archive/2008/09/04/iis7-integrated-mode-and-global-asax.aspx
            if (WebConfigSettings.UseAppKeepAlive)
            {
                AppKeepAliveTask keepAlive;
                try
                {
                    try
                    {
                        if ((HttpContext.Current != null) && (HttpContext.Current.Request != null))
                        {
                            keepAlive = new AppKeepAliveTask();
                            keepAlive.UrlToRequest      = WebUtils.GetSiteRoot();
                            keepAlive.MaxRunTimeMinutes = WebConfigSettings.AppKeepAliveMaxRunTimeMinutes;
                            keepAlive.MinutesToSleep    = WebConfigSettings.AppKeepAliveSleepMinutes;
                            keepAlive.QueueTask();
                        }
                    }
                    catch (HttpException)
                    {
                        //this error will be thrown when using IIS 7 Integrated pipeline mode
                        //since we have no context.Request to get the site root, in IIS 7 Integrated pipeline mode
                        //we need to use an additional config setting to get the url to request for keep alive
                        if (WebConfigSettings.AppKeepAliveUrl.Length > 0)
                        {
                            keepAlive = new AppKeepAliveTask();
                            keepAlive.UrlToRequest      = WebConfigSettings.AppKeepAliveUrl;
                            keepAlive.MaxRunTimeMinutes = WebConfigSettings.AppKeepAliveMaxRunTimeMinutes;
                            keepAlive.MinutesToSleep    = WebConfigSettings.AppKeepAliveSleepMinutes;
                            keepAlive.QueueTask();
                        }
                    }
                }
                catch (Exception ex)
                {
                    // if a new installation the table will not exist yet so just log and swallow
                    log.Error(ex);
                }
            }


            WebTaskManager.StartOrResumeTasks(true);
        }
예제 #4
0
        public static void SendRejectionNotification(
            SmtpSettings smtpSettings,
            SiteSettings siteSettings,
            SiteUser rejectingUser,
            ContentWorkflow rejectedWorkflow,
            string rejectionReason
            )
        {
            EmailMessageTask messageTask = new EmailMessageTask(smtpSettings);

            messageTask.SiteGuid     = siteSettings.SiteGuid;
            messageTask.EmailFrom    = siteSettings.DefaultEmailFromAddress;
            messageTask.EmailReplyTo = rejectingUser.Email;
            messageTask.EmailTo      = rejectedWorkflow.RecentActionByUserEmail;

            CultureInfo defaultCulture = SiteUtils.GetDefaultCulture();

            messageTask.Subject = ResourceHelper.GetMessageTemplate(defaultCulture, "ApprovalRequestRejectionNotificationSubject.config").Replace("{SiteName}", siteSettings.SiteName);

            StringBuilder message = new StringBuilder();

            message.Append(ResourceHelper.GetMessageTemplate(defaultCulture, "ApprovalRequestRejectionNotification.config"));
            message.Replace("{ModuleTitle}", rejectedWorkflow.ModuleTitle);
            message.Replace("{ApprovalRequestedDate}", rejectedWorkflow.RecentActionOn.ToShortDateString());
            message.Replace("{RejectionReason}", rejectionReason);
            message.Replace("{RejectedBy}", rejectingUser.Name);

            if (!Email.IsValidEmailAddressSyntax(rejectedWorkflow.RecentActionByUserEmail))
            {
                //invalid address log it
                log.Error("Failed to send workflow rejection message, invalid recipient email "
                          + rejectedWorkflow.RecentActionByUserEmail
                          + " message was " + message.ToString());

                return;
            }

            messageTask.TextBody = message.ToString();
            messageTask.QueueTask();

            WebTaskManager.StartOrResumeTasks();
        }
예제 #5
0
        public override void UserRegisteredHandler(object sender, UserRegisteredEventArgs e)
        {
            //if (sender == null) return;
            if (e == null)
            {
                return;
            }
            if (e.SiteUser == null)
            {
                return;
            }

            if (!WebConfigSettings.NotifyAdminsOnNewUserRegistration)
            {
                return;
            }

            log.Debug("NotifyAdminUserRegisteredHandler called for new user " + e.SiteUser.Email);

            if (HttpContext.Current == null)
            {
                return;
            }

            //lookup admin users and send notification email with link to manage user

            SiteSettings siteSettings   = CacheHelper.GetCurrentSiteSettings();
            CultureInfo  defaultCulture = ResourceHelper.GetDefaultCulture();

            //Role adminRole = Role.GetRoleByName(siteSettings.SiteId, "Admins");

            //if (adminRole == null)
            //{
            //    // TODO: log it?
            //    return;
            //}

            //DataTable admins = SiteUser.GetRoleMembers(adminRole.RoleId);

            string subjectTemplate
                = ResourceHelper.GetMessageTemplate(defaultCulture,
                                                    "NotifyAdminofNewUserRegistationSubject.config");

            string textBodyTemplate = ResourceHelper.GetMessageTemplate(defaultCulture,
                                                                        "NotifyAdminofNewUserRegistationMessage.config");

            string       siteRoot     = SiteUtils.GetNavigationSiteRoot();
            SmtpSettings smtpSettings = SiteUtils.GetSmtpSettings();

            List <string> adminEmails = SiteUser.GetEmailAddresses(siteSettings.SiteId, "Admins;");

            //foreach (DataRow row in admins.Rows)
            foreach (string email in adminEmails)
            {
                if (WebConfigSettings.EmailAddressesToExcludeFromAdminNotifications.IndexOf(email, StringComparison.InvariantCultureIgnoreCase) > -1)
                {
                    continue;
                }

                EmailMessageTask messageTask = new EmailMessageTask(smtpSettings);

                messageTask.EmailFrom = siteSettings.DefaultEmailFromAddress;
                //messageTask.EmailTo = row["Email"].ToString();
                messageTask.EmailTo = email;

                messageTask.Subject = string.Format(
                    defaultCulture,
                    subjectTemplate,
                    e.SiteUser.Email,
                    siteRoot
                    );


                string manageUserLink = siteRoot + "/Admin/ManageUsers.aspx?userid="
                                        + e.SiteUser.UserId.ToString(CultureInfo.InvariantCulture);

                messageTask.TextBody = string.Format(
                    defaultCulture,
                    textBodyTemplate,
                    siteSettings.SiteName,
                    siteRoot,
                    manageUserLink
                    );

                messageTask.SiteGuid = siteSettings.SiteGuid;
                messageTask.QueueTask();
            }

            WebTaskManager.StartOrResumeTasks();
        }
예제 #6
0
        public static void SendApprovalRequestNotification(
            SmtpSettings smtpSettings,
            SiteSettings siteSettings,
            SiteUser submittingUser,
            ContentWorkflow draftWorkflow,
            string approvalRoles,
            string contentUrl
            )
        {
            if (string.IsNullOrEmpty(approvalRoles))
            {
                approvalRoles = "Admins;Content Administrators;Content Publishers;";
            }

            List <string> emailAddresses = SiteUser.GetEmailAddresses(siteSettings.SiteId, approvalRoles);

            int queuedMessageCount = 0;

            CultureInfo defaultCulture  = SiteUtils.GetDefaultCulture();
            string      messageTemplate = ResourceHelper.GetMessageTemplate(defaultCulture, "ApprovalRequestNotification.config");
            string      messageSubject  = ResourceHelper.GetMessageTemplate(defaultCulture, "ApprovalRequestNotificationSubject.config").Replace("{SiteName}", siteSettings.SiteName);

            foreach (string email in emailAddresses)
            {
                if (WebConfigSettings.EmailAddressesToExcludeFromAdminNotifications.IndexOf(email, StringComparison.InvariantCultureIgnoreCase) > -1)
                {
                    continue;
                }

                if (!Email.IsValidEmailAddressSyntax(email))
                {
                    continue;
                }

                EmailMessageTask messageTask = new EmailMessageTask(smtpSettings);
                messageTask.SiteGuid     = siteSettings.SiteGuid;
                messageTask.EmailFrom    = siteSettings.DefaultEmailFromAddress;
                messageTask.EmailReplyTo = submittingUser.Email;
                messageTask.EmailTo      = email;

                messageTask.Subject = messageSubject;

                StringBuilder message = new StringBuilder();
                message.Append(messageTemplate);
                message.Replace("{ModuleTitle}", draftWorkflow.ModuleTitle);
                message.Replace("{ApprovalRequestedDate}", draftWorkflow.RecentActionOn.ToShortDateString());
                message.Replace("{SubmittedBy}", submittingUser.Name);
                message.Replace("{ContentUrl}", contentUrl);

                if (!Email.IsValidEmailAddressSyntax(draftWorkflow.RecentActionByUserEmail))
                {
                    //invalid address log it
                    log.Error("Failed to send workflow rejection message, invalid recipient email "
                              + draftWorkflow.RecentActionByUserEmail
                              + " message was " + message.ToString());

                    return;
                }

                messageTask.TextBody = message.ToString();
                messageTask.QueueTask();
                queuedMessageCount += 1;
            }

            if (queuedMessageCount > 0)
            {
                WebTaskManager.StartOrResumeTasks();
            }
        }