Ejemplo n.º 1
0
        //called when the timeout has expired which was waiting for pending changes.
        private static void PostChangesToSlack(IssueDtoEventArgs args, GlobalConfigurationWidgetData <SlackConfigData> data, string channel, DateTime createDate)
        {
            var issueManager = GeminiApp.GetManager <IssueManager>(args.User);
            var userManager  = GeminiApp.GetManager <UserManager>(args.User);
            var userDto      = userManager.Convert(args.User);
            var issue        = issueManager.Get(args.Issue.Id);
            //get the changelog of all changes since the create date (minus a second to avoid missing the initial change)
            var changelog = issueManager.GetChangeLog(issue, userDto, userDto, createDate.AddSeconds(-1));

            changelog.RemoveAll(c => c.Entity.AttributeChanged == ItemAttributeVisibility.AssociatedComments); // No need to show comments in updates as we already do that in the AfterComment event.
            if (changelog.Count == 0)
            {
                return;                   // No changes made!
            }
            var fields = changelog
                         .Select(a => new
            {
                title  = a.Field,
                value  = StripHTML(a.FullChange),
                _short = a.Entity.AttributeChanged != ItemAttributeVisibility.Description && a.Entity.AttributeChanged != ItemAttributeVisibility.AssociatedComments
            });

            QuickSlack.Send(data.Value.SlackAPIEndpoint, channel, string.Format("{0} updated issue <{1}|{2} - {3}>"
                                                                                , args.User.Fullname, args.BuildIssueUrl(args.Issue), args.Issue.IssueKey, args.Issue.Title),
                            "details attached",
                            "good",             //todo colors here based on something
                            fields.ToArray());
        }
Ejemplo n.º 2
0
        public override void AfterCreateFull(IssueDtoEventArgs args)
        {
            if (!GeminiApp.Config.EmailAlertsEnabled)
            {
                return;
            }

            var data = args.Context.GlobalConfigurationWidgetStore.Get <List <CreateItemNotifierData> >(AppConstants.AppId);

            if (data == null || data.Value == null || data.Value.Count == 0)
            {
                return;
            }

            var projectData = data.Value.Find(d => d.ProjectId.GetValueOrDefault() == args.Issue.Entity.ProjectId);

            if (projectData == null)
            {
                projectData = data.Value.Find(d => d.ProjectId.GetValueOrDefault() == 0);
            }

            if (projectData == null)
            {
                return;
            }

            var alertService = GeminiApp.Container.Resolve <IAlertTemplates>();

            var alerts = alertService.GetAll();

            var template = alerts.Find(t => t.Id == projectData.TemplateId);

            if (template == null)
            {
                return;
            }

            AlertsTemplateHelper helper = new AlertsTemplateHelper(alerts, args.GeminiUrls[0].Key);

            using (var cache = GeminiApp.Container.Resolve <ICacheContainer>())
            {
                var userManager = GeminiApp.GetManager <UserManager>(cache.Users.Find(u => u.Active && u.ProjectGroups.Where(p => p.ProjectGroupId == Constants.GlobalGroupAdministrators && p.UserId == u.Id).Any()));

                var metaManager = new MetaManager(userManager);

                var types = metaManager.TypeGetAll();

                var OrganizationManager = new OrganizationManager(userManager);

                var organizations = OrganizationManager.GetAll();

                var permissions = new PermissionSetManager(userManager);

                var permissionSets = permissions.GetAll();

                PermissionsManager permissionManager = null;

                foreach (var user in projectData.UserIds)
                {
                    var userDto = userManager.Get(user);

                    if (userDto != null && userDto.Entity.Active)
                    {
                        if (permissionManager == null)
                        {
                            permissionManager = new PermissionsManager(userDto, types, permissionSets, organizations, userManager.UserContext.Config.HelpDeskModeGroup, false);
                        }
                        else
                        {
                            permissionManager = permissionManager.Copy(userDto);
                        }

                        if (!permissionManager.CanSeeItem(args.Issue.Project, args.Issue) || !userDto.Entity.EmailMe)
                        {
                            continue;
                        }

                        var body = helper.Build(template, args.Issue, userDto);

                        string emailLog;

                        EmailHelper.Send(GeminiApp.Config, body.Key.HasValue() ? body.Key : string.Format("[{0}] {1}", args.Issue.IssueKey, args.Issue.Title), body.Value, userDto.Entity.Email, userDto.Entity.Fullname, true, out emailLog);
                    }
                }
            }
        }