예제 #1
0
 public EmailNotification GetEmailNotificationObject(IssueModifications issueModifications)
 {
     return mIssueEmailer.GetEmailNotificationObject(issueModifications);
 }
예제 #2
0
        public EmailNotificationRule CalculateTriggeredIssueNotificationRule(IssueModifications issueModifications)
        {
            //InitialCreation
            IEnumerable<EmailNotificationRule> activeRules = GetIssueEmailNotificationRules();
            IList<EmailNotificationRule> triggeredRules = new List<EmailNotificationRule>();

            if (issueModifications.OriginalIssue == null)
            {
                string code = IssueEmailNotificationCode.InitialCreation.ToString();
                var rule = (from x in activeRules where x.Code == code select x).FirstOrDefault();
                if (rule != null)
                {
                    return rule;
                }
            }

            //StatusChange
            if (issueModifications.OriginalIssue.IssueStatusId != issueModifications.Issue.IssueStatusId)
            {
                string code = IssueEmailNotificationCode.StatusChanged.ToString();
                var rule = (from x in activeRules where x.Code == code select x).FirstOrDefault();
                if (rule != null)
                {
                    triggeredRules.Add(rule);
                }
            }

            //APPROVED
            if (issueModifications.CategoryApprovedNames != null && issueModifications.CategoryApprovedNames.Any())
            {
                string code = IssueEmailNotificationCode.Approved.ToString();
                var rule = (from x in activeRules where x.Code == code select x).FirstOrDefault();
                if (rule != null)
                {
                    triggeredRules.Add(rule);
                }
            }

            //UNAPPROVED
            if (issueModifications.CategoryUnApprovedNames != null && issueModifications.CategoryUnApprovedNames.Any())
            {
                string code = IssueEmailNotificationCode.Unapproved.ToString();
                var rule = (from x in activeRules where x.Code == code select x).FirstOrDefault();
                if (rule != null)
                {
                    triggeredRules.Add(rule);
                }
            }

            //PriorityChange
            if (issueModifications.OriginalIssue.IssuePriorityId != issueModifications.Issue.IssuePriorityId)
            {
                string code = IssueEmailNotificationCode.PriorityChanged.ToString();
                var rule = (from x in activeRules where x.Code == code select x).FirstOrDefault();
                if (rule != null)
                {
                    triggeredRules.Add(rule);
                }
            }

            //ClassificationChanged
            if (issueModifications.OriginalIssue.IssueClassificationId != issueModifications.Issue.IssueClassificationId)
            {
                string code = IssueEmailNotificationCode.ClassificationChanged.ToString();
                var rule = (from x in activeRules where x.Code == code select x).FirstOrDefault();
                if (rule != null)
                {
                    triggeredRules.Add(rule);
                }
            }

            //IssueTypeChange
            if (issueModifications.OriginalIssue.IssueTypeId != issueModifications.Issue.IssueTypeId)
            {
                string code = IssueEmailNotificationCode.IssueTypeChanged.ToString();
                var rule = (from x in activeRules where x.Code == code select x).FirstOrDefault();
                if (rule != null)
                {
                    triggeredRules.Add(rule);
                }
            }

            //AssignedCategories
            using (CmsEntities cee = new CmsEntities())
            {
                var originalCategories = (from x in issueModifications.OriginalIssue.IssueAssignedCategories orderby x.IssueCategoryId select x.IssueCategoryId).ToArray();
                var newCategories = (from x in issueModifications.Issue.IssueAssignedCategories orderby x.IssueCategoryId select x.IssueCategoryId).ToArray();

                bool areEqual = originalCategories.SequenceEqual(newCategories);
                if (!areEqual)
                {
                    string code = IssueEmailNotificationCode.AssignedCategoriesChanged.ToString();
                    var rule = (from x in activeRules where x.Code == code select x).FirstOrDefault();
                    if (rule != null)
                    {
                        triggeredRules.Add(rule);
                    }
                }
            }

            //Reassigned
            if (issueModifications.OriginalIssue.CurrentlyAssignedToId != issueModifications.Issue.CurrentlyAssignedToId)
            {
                string code = IssueEmailNotificationCode.Reassigned.ToString();
                var rule = (from x in activeRules where x.Code == code select x).FirstOrDefault();
                if (rule != null)
                {
                    triggeredRules.Add(rule);
                }
            }

            //ResponseAdded
            if (!String.IsNullOrEmpty(issueModifications.Issue.Response))
            {
                string code = IssueEmailNotificationCode.ResponseAdded.ToString();
                var rule = (from x in activeRules where x.Code == code select x).FirstOrDefault();
                if (rule != null)
                {
                    triggeredRules.Add(rule);
                }
            }

            //DEFAULT// Always add this...in case it's just a straight save.
            string updatedCode = IssueEmailNotificationCode.Updated.ToString();
            var updateRule = (from x in activeRules where x.Code == updatedCode select x).FirstOrDefault();
            if (updateRule != null)
            {
                triggeredRules.Add(updateRule);
            }

            //Added Distribution User
            //DISTRIBUTION LIST
            var removedUsers = new List<String>();
            var addedUsers = new List<String>();
            using (CmsEntities cee = new CmsEntities())
            {
                foreach (var oldDistUser in issueModifications.OriginalIssue.IssueDistributionUsers)
                {
                    var newDistUser = (from x in issueModifications.Issue.IssueDistributionUsers
                                       where x.IssueId == oldDistUser.IssueId
                                             && x.UserId == oldDistUser.UserId
                                       select x).FirstOrDefault();
                    if (newDistUser == null)
                    {
                        //User was removed
                        removedUsers.Add(oldDistUser.User.FirstLastName);
                    }
                }

                foreach (var newDistUser in issueModifications.Issue.IssueDistributionUsers)
                {
                    var oldDistUser = (from x in issueModifications.OriginalIssue.IssueDistributionUsers
                                       where x.IssueId == newDistUser.IssueId
                                             && x.UserId == newDistUser.UserId
                                       select x).FirstOrDefault();
                    if (oldDistUser == null)
                    {
                        User match = (from x in cee.Users where x.Id == newDistUser.UserId && x.ActiveUser select x).FirstOrDefault();
                        if (match != null)
                        {
                            //New User was added
                            addedUsers.Add(match.FirstLastName);
                        }
                    }
                }
            }

            if (addedUsers.Any())
            {
                string code = IssueEmailNotificationCode.DistributionUserAdded.ToString();
                var rule = (from x in activeRules where x.Code == code select x).FirstOrDefault();
                if (rule != null)
                {
                    triggeredRules.Add(rule);
                }
            }

            if (removedUsers.Any())
            {
                string code = IssueEmailNotificationCode.DistributionUserRemoved.ToString();
                var rule = (from x in activeRules where x.Code == code select x).FirstOrDefault();
                if (rule != null)
                {
                    triggeredRules.Add(rule);
                }
            }

            return (from x in triggeredRules orderby x.Ordinal select x).FirstOrDefault();
        }
예제 #3
0
        private string BuildIssueSubjectText(IssueModifications issueModifications, string subjectText)
        {
            string result = subjectText;

            //{IssueTitle}
            string token = String.Format("{{{0}}}", IssueEmailSubjectTextTokens.IssueTitle.ToString());
            result = result.Replace(token, issueModifications.Issue.Name);

            //{ModifiedBy}
            token = String.Format("{{{0}}}", IssueEmailSubjectTextTokens.ModifiedBy.ToString());
            result = result.Replace(token, issueModifications.Issue.ModifiedByUser.FirstLastName);

            //{OldStatus}
            if (issueModifications.OriginalIssue != null)
            {
                token = String.Format("{{{0}}}", IssueEmailSubjectTextTokens.OldStatus.ToString());
                result = result.Replace(token, issueModifications.OriginalIssue.IssueStatus.Name);
            }

            //{NewStatus}
            if (issueModifications.Issue.IssueStatus != null)
            {
                token = String.Format("{{{0}}}", IssueEmailSubjectTextTokens.NewStatus.ToString());
                result = result.Replace(token, issueModifications.Issue.IssueStatus.Name);
            }

            //{Category} approved category
            if (issueModifications.CategoryApprovedNames != null && issueModifications.CategoryApprovedNames.Any())
            {
                string catsApproved = string.Join(",", new List<string>(issueModifications.CategoryApprovedNames).ToArray());
                token = String.Format("{{{0}}}", IssueEmailSubjectTextTokens.Category.ToString());
                result = result.Replace(token, catsApproved);
            }

            //{Category} approved category
            if (issueModifications.CategoryUnApprovedNames != null && issueModifications.CategoryUnApprovedNames.Any())
            {
                string catsApproved = string.Join(",", new List<string>(issueModifications.CategoryUnApprovedNames).ToArray());
                token = String.Format("{{{0}}}", IssueEmailSubjectTextTokens.Category.ToString());
                result = result.Replace(token, catsApproved);
            }

            //{OldPriority}
            if (issueModifications.OriginalIssue != null)
            {
                token = String.Format("{{{0}}}", IssueEmailSubjectTextTokens.OldPriority.ToString());
                result = result.Replace(token, issueModifications.OriginalIssue.IssuePriority.Name);
            }

            //{NewPriority}
            if (issueModifications.Issue.IssuePriority != null)
            {
                token = String.Format("{{{0}}}", IssueEmailSubjectTextTokens.NewPriority.ToString());
                result = result.Replace(token, issueModifications.Issue.IssuePriority.Name);
            }

            //{OldIssueType}
            if (issueModifications.OriginalIssue != null)
            {
                token = String.Format("{{{0}}}", IssueEmailSubjectTextTokens.OldIssueType.ToString());
                result = result.Replace(token, issueModifications.OriginalIssue.IssueType.Name);
            }

            //{NewIssueType}
            if (issueModifications.Issue.IssueType != null)
            {
                token = String.Format("{{{0}}}", IssueEmailSubjectTextTokens.NewIssueType.ToString());
                result = result.Replace(token, issueModifications.Issue.IssueType.Name);
            }

            //{OldClassification}
            if (issueModifications.OriginalIssue != null && issueModifications.OriginalIssue.IssueClassification != null)
            {
                token = String.Format("{{{0}}}", IssueEmailSubjectTextTokens.OldClassification.ToString());
                result = result.Replace(token, issueModifications.OriginalIssue.IssueClassification.Name);
            }

            //{NewClassification}
            if (issueModifications.Issue.IssueClassification != null)
            {
                token = String.Format("{{{0}}}", IssueEmailSubjectTextTokens.NewClassification.ToString());
                result = result.Replace(token, issueModifications.Issue.IssueClassification.Name);
            }

            //{OldUsername}
            if (issueModifications.OriginalIssue != null)
            {
                token = String.Format("{{{0}}}", IssueEmailSubjectTextTokens.OldAssignedToUserName.ToString());
                result = result.Replace(token, issueModifications.OriginalIssue.CurrentlyAssignedToUser.FirstLastName);
            }

            //{NewUserName}
            if (issueModifications.Issue.CurrentlyAssignedToUser != null)
            {
                token = String.Format("{{{0}}}", IssueEmailSubjectTextTokens.NewAssignedToUserName.ToString());
                result = result.Replace(token, issueModifications.Issue.CurrentlyAssignedToUser.FirstLastName);
            }

            return result.Replace(Environment.NewLine, " ").Replace("\r", "<br/>").Replace("\n", " ");
        }
예제 #4
0
        public EmailNotification GetEmailNotificationObject(IssueModifications issueModifications)
        {
            EmailNotification emailNotification = new EmailNotification();
            emailNotification.IssueId = issueModifications.Issue.Id;

            emailNotification.EmailNotificationRule = CalculateTriggeredIssueNotificationRule(issueModifications);

            if (emailNotification.EmailNotificationRule == null)
            {
                log.Warning("", "Could not sent Issue email notification. Updated Email notification rule needs to be configured and set to Active. Please update under Issue->Config->Email Notifications->Updated.");
            }
            else
            {
                //TEMPLATE
                emailNotification.Replacements = BuildIssueEmailReplacements(issueModifications.Issue);

                string[] sentToTokens = emailNotification.EmailNotificationRule.SendTo.Split(new[] { ',', ';' });
                string[] ccToTokens = emailNotification.EmailNotificationRule.CcTo.Split(new[] { ',', ';' });

                emailNotification.SentTo = BuildIssueEmailRecepientsList(issueModifications, emailNotification.EmailNotificationRule, sentToTokens);

                emailNotification.Subject = BuildIssueSubjectText(issueModifications, emailNotification.EmailNotificationRule.SubjectText);

                emailNotification.CCList = BuildIssueEmailRecepientsList(issueModifications, emailNotification.EmailNotificationRule, ccToTokens);
            }

            return emailNotification;
        }
예제 #5
0
        private IEnumerable<string> BuildIssueEmailRecepientsList(IssueModifications issueModifications, EmailNotificationRule triggeredRule, string[] tokens)
        {
            IList<string> emailRecepientsList = new List<string>();
            Hashtable ht = new Hashtable();

            foreach (string splitToken in tokens)
            {
                foreach (IssueEmailRecipientTextTokens token in Enum.GetValues(typeof(IssueEmailRecipientTextTokens)))
                {
                    string clearedBrackets = splitToken.Replace("{", "");
                    clearedBrackets = clearedBrackets.Replace("}", "");

                    if (string.Compare(token.ToString(), clearedBrackets, true, CultureInfo.CurrentCulture) == 0)
                    {
                        if (token == IssueEmailRecipientTextTokens.AssignedTo)
                        {
                            //{AssignedTo}
                            if (EmailCommon.IsValidEmailaddress(issueModifications.Issue.CurrentlyAssignedToUser.EmailAddress))
                            {
                                emailRecepientsList.Add(issueModifications.Issue.CurrentlyAssignedToUser.EmailAddress);
                            }
                            else
                            {
                                log.Error("", "{0} user '{1}' does not have valid email address '{2}'",
                                    token.ToString(), issueModifications.Issue.CurrentlyAssignedToUser.FirstLastName,
                                    issueModifications.Issue.CurrentlyAssignedToUser.EmailAddress);
                            }
                        }
                        else if (token == IssueEmailRecipientTextTokens.DistributionUsers
                                 && issueModifications.Issue.IssueDistributionUsers != null
                                 && issueModifications.Issue.IssueDistributionUsers.Any())
                        {
                            //{DistributionUsers}
                            using (CmsEntities cee = new CmsEntities())
                            {
                                foreach (IssueDistributionUser user in issueModifications.Issue.IssueDistributionUsers)
                                {
                                    User distUser = (from x in cee.Users where x.Id == user.UserId && x.ActiveUser select x).FirstOrDefault();
                                    if (distUser != null)
                                    {
                                        if (EmailCommon.IsValidEmailaddress(distUser.EmailAddress))
                                        {
                                            if (!ht.ContainsKey(distUser.Id))
                                            {
                                                if (triggeredRule.AllowCCIgnore)
                                                {
                                                    var preference = (from x in cee.UserPreferences where x.Id == distUser.UserPreferenceId select x).FirstOrDefault();
                                                    if (preference == null || !preference.IgnoreCCEmail)
                                                    {
                                                        ht.Add(distUser.Id, distUser.EmailAddress);
                                                        emailRecepientsList.Add(distUser.EmailAddress);
                                                    }
                                                }
                                                else
                                                {
                                                    ht.Add(distUser.Id, distUser.EmailAddress);
                                                    emailRecepientsList.Add(distUser.EmailAddress);
                                                }
                                            }
                                        }
                                        else
                                        {
                                            log.Error("", "{0} user '{1}' does not have valid email address '{2}'",
                                                token.ToString(), distUser.FirstLastName,
                                                distUser.EmailAddress);
                                        }
                                    }
                                }
                            }
                        }
                        else if (token == IssueEmailRecipientTextTokens.InitiatedBy)
                        {
                            //{InitiatedBy}
                            using (CmsEntities cee = new CmsEntities())
                            {
                                User initiatedBy = (from x in cee.Users where x.Id == issueModifications.Issue.InitiatedById && x.ActiveUser select x).FirstOrDefault();
                                if (initiatedBy != null)
                                {
                                    if (EmailCommon.IsValidEmailaddress(initiatedBy.EmailAddress))
                                    {
                                        if (!ht.ContainsKey(initiatedBy.Id))
                                        {
                                            ht.Add(initiatedBy.Id, initiatedBy.EmailAddress);
                                            emailRecepientsList.Add(initiatedBy.EmailAddress);
                                        }
                                    }
                                    else
                                    {
                                        log.Error("", "{0} user '{1}' does not have valid email address '{2}'",
                                            token.ToString(), initiatedBy.FirstLastName,
                                            initiatedBy.EmailAddress);
                                    }
                                }
                            }
                        }
                        else if (token == IssueEmailRecipientTextTokens.ModifiedBy)
                        {
                            //{ModifiedBy}
                            using (CmsEntities cee = new CmsEntities())
                            {
                                User modifiedBy = (from x in cee.Users where x.Id == issueModifications.Issue.ModifiedById && x.ActiveUser select x).FirstOrDefault();
                                if (modifiedBy != null)
                                {
                                    if (EmailCommon.IsValidEmailaddress(modifiedBy.EmailAddress))
                                    {
                                        if (!ht.ContainsKey(modifiedBy.Id))
                                        {
                                            ht.Add(modifiedBy.Id, modifiedBy.EmailAddress);
                                            emailRecepientsList.Add(modifiedBy.EmailAddress);
                                        }
                                    }
                                    else
                                    {
                                        log.Error("", "{0} user '{1}' does not have valid email address '{2}'",
                                            token.ToString(), modifiedBy.FirstLastName,
                                            modifiedBy.EmailAddress);
                                    }
                                }
                            }
                        }
                        else if (token == IssueEmailRecipientTextTokens.PreviouslyAssignedTo)
                        {
                            //{PreviouslyAssignedTo}
                            using (CmsEntities cee = new CmsEntities())
                            {
                                User previouslyAssignedTo = (from x in cee.Users where x.Id == issueModifications.OriginalIssue.CurrentlyAssignedToId && x.ActiveUser select x).FirstOrDefault();
                                if (previouslyAssignedTo != null)
                                {
                                    if (EmailCommon.IsValidEmailaddress(previouslyAssignedTo.EmailAddress))
                                    {
                                        if (!ht.ContainsKey(previouslyAssignedTo.Id))
                                        {
                                            ht.Add(previouslyAssignedTo.Id, previouslyAssignedTo.EmailAddress);
                                            emailRecepientsList.Add(previouslyAssignedTo.EmailAddress);
                                        }
                                    }
                                    else
                                    {
                                        log.Error("", "{0} user '{1}' does not have valid email address '{2}'",
                                            token.ToString(), previouslyAssignedTo.FirstLastName,
                                            previouslyAssignedTo.EmailAddress);
                                    }
                                }
                            }
                        }
                        else if (token == IssueEmailRecipientTextTokens.AddedDistributionUsers)
                        {
                            //Added Distribution User

                            var addedUsers = new List<User>();
                            using (CmsEntities cee = new CmsEntities())
                            {
                                foreach (var newDistUser in issueModifications.Issue.IssueDistributionUsers)
                                {
                                    var oldDistUser = (from x in issueModifications.OriginalIssue.IssueDistributionUsers
                                                       where x.IssueId == newDistUser.IssueId
                                                             && x.UserId == newDistUser.UserId
                                                       select x).FirstOrDefault();
                                    if (oldDistUser == null)
                                    {
                                        var user = (from x in cee.Users where x.Id == newDistUser.UserId && x.ActiveUser select x).FirstOrDefault();

                                        if (user != null)
                                        {
                                            //New User was added
                                            addedUsers.Add(user);
                                        }
                                    }
                                }

                                foreach (User user in addedUsers)
                                {
                                    if (EmailCommon.IsValidEmailaddress(user.EmailAddress))
                                    {
                                        if (!ht.ContainsKey(user.Id))
                                        {
                                            if (triggeredRule.AllowCCIgnore)
                                            {
                                                var preference = (from x in cee.UserPreferences where x.Id == user.UserPreferenceId select x).FirstOrDefault();
                                                if (preference == null || !preference.IgnoreCCEmail)
                                                {
                                                    ht.Add(user.Id, user.EmailAddress);
                                                    emailRecepientsList.Add(user.EmailAddress);
                                                }
                                            }
                                            else
                                            {
                                                ht.Add(user.Id, user.EmailAddress);
                                                emailRecepientsList.Add(user.EmailAddress);
                                            }
                                        }
                                        else
                                        {
                                            log.Error("", "{0} user '{1}' does not have valid email address '{2}'",
                                                token.ToString(), user.FirstLastName,
                                                user.EmailAddress);
                                        }
                                    }
                                }
                            }
                        }
                        else if (token == IssueEmailRecipientTextTokens.RemovedDistributionUsers)
                        {
                            //Removed Distribution User
                            var removedUsers = new List<User>();
                            using (CmsEntities cee = new CmsEntities())
                            {
                                foreach (var oldDistUser in issueModifications.OriginalIssue.IssueDistributionUsers)
                                {
                                    var newDistUser = (from x in issueModifications.Issue.IssueDistributionUsers
                                                       where x.IssueId == oldDistUser.IssueId
                                                             && x.UserId == oldDistUser.UserId
                                                       select x).FirstOrDefault();
                                    if (newDistUser == null)
                                    {
                                        var user = (from x in cee.Users where x.Id == oldDistUser.UserId && x.ActiveUser select x).FirstOrDefault();

                                        if (user != null)
                                        {
                                            //User was removed
                                            removedUsers.Add(user);
                                        }
                                    }
                                }

                                foreach (User user in removedUsers)
                                {
                                    if (EmailCommon.IsValidEmailaddress(user.EmailAddress))
                                    {
                                        if (!ht.ContainsKey(user.Id))
                                        {
                                            if (triggeredRule.AllowCCIgnore)
                                            {
                                                var preference = (from x in cee.UserPreferences where x.Id == user.UserPreferenceId select x).FirstOrDefault();
                                                if (preference == null || !preference.IgnoreCCEmail)
                                                {
                                                    ht.Add(user.Id, user.EmailAddress);
                                                    emailRecepientsList.Add(user.EmailAddress);
                                                }
                                            }
                                            else
                                            {
                                                ht.Add(user.Id, user.EmailAddress);
                                                emailRecepientsList.Add(user.EmailAddress);
                                            }
                                        }
                                    }
                                    else
                                    {
                                        log.Error("", "{0} user '{1}' does not have valid email address '{2}'",
                                            token.ToString(), user.FirstLastName,
                                            user.EmailAddress);
                                    }
                                }
                            }
                        }
                    }
                }
            }

            return emailRecepientsList;
        }