public ProjectAdminConfigModel GetConfigModel()
        {
            ProjectAdminConfigModel model = new ProjectAdminConfigModel();

            GlobalConfigurationWidgetData <ProjectAdminConfigModel> data = GeminiContext.GlobalConfigurationWidgetStore.Get <ProjectAdminConfigModel>(AppGuid);

            if (data != null && data.Value != null && data.Value.Data != null)
            {
                var item = data.Value.Data;

                if (item != null)
                {
                    model.Data = item;
                }
            }
            var projectGroups = Cache.ProjectGroups.GetAll();

            var groups = projectGroups.Where(g => g.Id != Countersoft.Gemini.Commons.Constants.GlobalGroupEveryone &&
                                             g.Id != Countersoft.Gemini.Commons.Constants.GlobalGroupEveryoneAuthenticated &&
                                             g.Id != Countersoft.Gemini.Commons.Constants.GlobalGroupAdministrators);

            var excludeUserGroups = projectGroups.Where(g => g.Id != Countersoft.Gemini.Commons.Constants.GlobalGroupEveryone &&
                                                        g.Id != Countersoft.Gemini.Commons.Constants.GlobalGroupEveryoneAuthenticated);

            model.Groups     = new MultiSelectList(groups, "Id", "Name", model.Data.ExcludeGroups);
            model.UserGroups = new MultiSelectList(excludeUserGroups, "Id", "Name", model.Data.ExcludeUserFromGroups);

            return(model);
        }
Beispiel #2
0
        public ActionResult SaveProperty(int templateId, int id, string property, string value)
        {
            GlobalConfigurationWidgetData <ChecklistConfigDataModel> data = GeminiContext.GlobalConfigurationWidgetStore.Get <ChecklistConfigDataModel>(AppGuid);

            if (data == null || data.Value == null || data.Value.Data == null)
            {
                return(Content(value));
            }

            var templateData = data.Value.Data.Find(t => t.TemplateId == templateId);

            if (templateData == null)
            {
                return(Content(value));
            }

            var itemIndex = templateData.Items.FindIndex(s => s.Id == id);

            if (itemIndex == -1)
            {
                return(Content(value));
            }

            templateData.Items[itemIndex].Title = value;

            GeminiContext.GlobalConfigurationWidgetStore.Save(AppGuid, data.Value);

            return(Content(value));
        }
Beispiel #3
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());
        }
Beispiel #4
0
        public ActionResult GetProperty(int templateId, int id, string property)
        {
            GlobalConfigurationWidgetData <ChecklistConfigDataModel> data = GeminiContext.GlobalConfigurationWidgetStore.Get <ChecklistConfigDataModel>(AppGuid);

            if (data == null || data.Value == null || data.Value.Data == null)
            {
                return(JsonError());
            }

            var templateData = data.Value.Data.Find(t => t.TemplateId == templateId);

            if (templateData == null)
            {
                return(JsonError());
            }

            var item = templateData.Items.Find(s => s.Id == id);

            if (item == null)
            {
                return(JsonError());
            }

            return(Content(item.Title));
        }
Beispiel #5
0
        public ActionResult Delete(int templateId, int itemId)
        {
            GlobalConfigurationWidgetData <ChecklistConfigDataModel> data = GeminiContext.GlobalConfigurationWidgetStore.Get <ChecklistConfigDataModel>(AppGuid);

            if (data == null || data.Value == null || data.Value.Data == null)
            {
                return(JsonError());
            }

            var templateData = data.Value.Data.Find(t => t.TemplateId == templateId);

            if (templateData == null)
            {
                return(JsonError());
            }

            var itemIndex = templateData.Items.FindIndex(s => s.Id == itemId);

            if (itemIndex == -1)
            {
                return(JsonError());
            }

            templateData.Items.RemoveAt(itemIndex);

            GeminiContext.GlobalConfigurationWidgetStore.Save(AppGuid, data.Value);

            return(JsonSuccess());
        }
        public ActionResult Configure(string consumerKey, string consumerSecret)
        {
            var data = GeminiContext.GlobalConfigurationWidgetStore.Get <LucidChartConfig>(Constants.AppId);

            if (data == null)
            {
                data       = new GlobalConfigurationWidgetData <LucidChartConfig>();
                data.AppId = Constants.AppId;
            }

            data.Value = new LucidChartConfig()
            {
                ConsumerKey = consumerKey, ConsumerSecret = consumerSecret
            };

            GeminiContext.GlobalConfigurationWidgetStore.Save <LucidChartConfig>(Constants.AppId, data.Value);

            LucidChartsConsumer.consumerKey = consumerKey;

            LucidChartsConsumer.consumerSecret = consumerSecret;

            LucidChartsConsumer.token = new InMemoryTokenManager(consumerKey, consumerSecret);

            return(JsonSuccess());
        }
Beispiel #7
0
        private GlobalConfigurationWidgetData <List <WebhooksData> > GetData()
        {
            var data = GeminiContext.GlobalConfigurationWidgetStore.Get <List <WebhooksData> >(AppConstants.AppId);

            if (data == null || data.Value == null)
            {
                data       = new GlobalConfigurationWidgetData <List <WebhooksData> >();
                data.Value = new List <WebhooksData>();
            }

            return(data);
        }
Beispiel #8
0
        private IssueWidgetData <List <ChecklistData> > GetData(IssueDto issue)
        {
            IssueWidgetData <List <ChecklistData> > result = new IssueWidgetData <List <ChecklistData> >()
            {
                Value = new List <ChecklistData>(), AppId = AppGuid, IssueId = issue.Id, ControlId = AppControlGuid
            };

            GlobalConfigurationWidgetData <ChecklistConfigDataModel> data = GeminiContext.GlobalConfigurationWidgetStore.Get <ChecklistConfigDataModel>(AppGuid);

            if (data == null || data.Value == null || data.Value.Data == null)
            {
                return(result);
            }

            var templateData = data.Value.Data.Find(t => t.TemplateId == issue.Project.TemplateId);

            if (templateData == null)
            {
                return(result);
            }

            IssueWidgetData <List <ChecklistData> > issueData = GeminiContext.IssueWidgetStore.Get <List <ChecklistData> >(issue.Id, AppGuid, AppControlGuid);

            foreach (var item in templateData.Items)
            {
                ChecklistData existingItem = issueData != null && issueData.Value != null && issueData.Value.Count > 0 ? issueData.Value.Find(s => s.CheckId == item.Id) : null;

                if (existingItem == null)
                {
                    result.Value.Add(new ChecklistData {
                        CheckId = item.Id, CheckTitle = item.Title
                    });
                }
                else
                {
                    existingItem.CheckedDate = existingItem.CheckedDate.ToLocal(UserContext.User.TimeZone);

                    existingItem.CheckTitle = item.Title;
                    result.Value.Add(existingItem);
                }
            }

            result.Value.Sort((x, y) => x.CheckTitle.HasValue() ? x.CheckTitle.CompareTo(y.CheckTitle) : -1);

            return(result);
        }
        public override WidgetResult Configuration()
        {
            var result = new WidgetResult();

            var data = GeminiContext.GlobalConfigurationWidgetStore.Get <string>(AppConstants.AppId);

            if (data == null)
            {
                data = new GlobalConfigurationWidgetData <string>();

                data.Value = string.Empty;
            }

            result.Success = true;

            result.Markup = new WidgetMarkup("views/settings.cshtml", data.Value);

            return(result);
        }
        public override WidgetResult Configuration()
        {
            GlobalConfigurationWidgetData <LucidChartConfig> config = GeminiContext.GlobalConfigurationWidgetStore.Get <LucidChartConfig>(Constants.AppId);

            if (config == null)
            {
                config = new GlobalConfigurationWidgetData <LucidChartConfig>();

                config.Value = new LucidChartConfig();

                config.Value.ConsumerKey = string.Empty;

                config.Value.ConsumerSecret = string.Empty;
            }

            return(new WidgetResult()
            {
                Markup = new WidgetMarkup("views/Settings.cshtml", config.Value)
            });
        }
        private List <int> GetExcludedUsers(int projectId)
        {
            GlobalConfigurationWidgetData <ProjectAdminConfigModel> data = GeminiContext.GlobalConfigurationWidgetStore.Get <ProjectAdminConfigModel>(AppGuid);

            List <int> excludeUserFromGroups = new List <int>();

            if (data != null && data.Value != null && data.Value.Data != null && data.Value.Data.ExcludeUserFromGroups.Count > 0)
            {
                var excludedProjectGroups = Cache.ProjectGroups.GetAll().Where(g => data.Value.Data.ExcludeUserFromGroups.Contains(g.Id));

                foreach (var group in excludedProjectGroups)
                {
                    excludeUserFromGroups.AddRange(group.Members.
                                                   Where(a => (a.ProjectId == projectId || a.ProjectId == null) &&
                                                         a.UserId != Countersoft.Gemini.Commons.Constants.AnonymousUserId &&
                                                         a.UserId != Countersoft.Gemini.Commons.Constants.SystemAccountUserId).Select(s => s.UserId));
                }
            }

            return(excludeUserFromGroups);
        }
        public ActionResult SaveConfigPage()
        {
            var groupIds     = Request["groupIds[]"].SplitEntries(',', 0);
            var userGroupIds = Request["userGroupIds[]"].SplitEntries(',', 0);

            GlobalConfigurationWidgetData <ProjectAdminConfigModel> data = GeminiContext.GlobalConfigurationWidgetStore.Get <ProjectAdminConfigModel>(AppGuid);

            if (data == null)
            {
                data            = new GlobalConfigurationWidgetData <ProjectAdminConfigModel>();
                data.AppId      = AppGuid;
                data.Value      = new ProjectAdminConfigModel();
                data.Value.Data = new ProjectAdminConfigData();
            }

            data.Value.Data.ExcludeGroups         = groupIds;
            data.Value.Data.ExcludeUserFromGroups = userGroupIds;

            GeminiContext.GlobalConfigurationWidgetStore.Save(AppGuid, data.Value);

            return(JsonSuccess());
        }
Beispiel #13
0
        public ActionResult Add(string title, int templateId)
        {
            GlobalConfigurationWidgetData <ChecklistConfigDataModel> data = GeminiContext.GlobalConfigurationWidgetStore.Get <ChecklistConfigDataModel>(AppGuid);
            ChecklistConfigTemplateData templateData = null;

            if (data == null)
            {
                data            = new GlobalConfigurationWidgetData <ChecklistConfigDataModel>();
                data.AppId      = AppGuid;
                data.Value      = new ChecklistConfigDataModel();
                data.Value.Data = new List <ChecklistConfigTemplateData>();
            }
            else
            {
                templateData = data.Value.Data.Find(t => t.TemplateId == templateId);
            }

            if (templateData == null)
            {
                templateData            = new ChecklistConfigTemplateData();
                templateData.TemplateId = templateId;
                data.Value.Data.Add(templateData);
                data.Value.CurrentSequence = 1;
            }
            else
            {
                data.Value.CurrentSequence += 1;
            }

            templateData.Items.Add(new ChecklistConfigData()
            {
                Id = data.Value.CurrentSequence, Title = title
            });

            GeminiContext.GlobalConfigurationWidgetStore.Save(AppGuid, data.Value);

            return(JsonSuccess());
        }
Beispiel #14
0
        public ChecklistConfigModel GetConfigModel(int templateId = 0)
        {
            var templates = ProjectTemplateManager.GetAll();
            ChecklistConfigModel model = new ChecklistConfigModel();

            GlobalConfigurationWidgetData <ChecklistConfigDataModel> data = GeminiContext.GlobalConfigurationWidgetStore.Get <ChecklistConfigDataModel>(AppGuid);

            if (data != null && data.Value != null && data.Value.Data != null && templates.Count > 0)
            {
                templateId = templateId > 0 ? templateId : templates[0].Id;

                var item = data.Value.Data.Find(s => s.TemplateId == templateId);

                if (item != null)
                {
                    model.Items = item.Items;
                }
            }

            model.Templates = new SelectList(ProjectTemplateManager.GetAll(), "Id", "Name", templateId);

            return(model);
        }
        public ProjectAdminAppModel BuildModelData()
        {
            ProjectAdminAppModel model = new ProjectAdminAppModel();

            model.ProjectAdminAppPermissions = new ProjectAdminAppPermissionModel();

            //Permission Logic
            int id = UserContext.Project.Entity.PermissionId.Value;

            model.ProjectAdminAppPermissions.PermissionSet = new PermissionSetDto(Cache.Permissions.Get(id));

            AddRoles(model.ProjectAdminAppPermissions);

            GlobalConfigurationWidgetData <ProjectAdminConfigModel> data = GeminiContext.GlobalConfigurationWidgetStore.Get <ProjectAdminConfigModel>(AppGuid);

            var allProjectGroups = Cache.ProjectGroups.GetAll();

            //Exclude selected groups from admin screen
            List <int> excludeGroups          = new List <int>();
            List <int> excludeUsersFromGroups = new List <int>();

            if (data != null && data.Value != null && data.Value.Data != null)
            {
                if (data.Value.Data.ExcludeGroups.Count > 0)
                {
                    excludeGroups = data.Value.Data.ExcludeGroups;
                }

                if (data.Value.Data.ExcludeUserFromGroups.Count > 0)
                {
                    var excludedProjectGroups = allProjectGroups.Where(g => data.Value.Data.ExcludeUserFromGroups.Contains(g.Id));

                    foreach (var group in excludedProjectGroups)
                    {
                        excludeUsersFromGroups.AddRange(group.Members.
                                                        Where(a => (a.ProjectId == UserContext.Project.Entity.Id || a.ProjectId == null) &&
                                                              a.UserId != Countersoft.Gemini.Commons.Constants.AnonymousUserId &&
                                                              a.UserId != Countersoft.Gemini.Commons.Constants.SystemAccountUserId).Select(s => s.UserId));
                    }
                }
            }

            //exclude following groups
            excludeGroups.Add(Countersoft.Gemini.Commons.Constants.GlobalGroupEveryone);
            excludeGroups.Add(Countersoft.Gemini.Commons.Constants.GlobalGroupEveryoneAuthenticated);
            excludeGroups.Add(Countersoft.Gemini.Commons.Constants.GlobalGroupAdministrators);

            model.ProjectGroups = new List <ProjectGroupModel>();
            var projectGroups = allProjectGroups.Where(g => !excludeGroups.Contains(g.Id));

            foreach (var projectGroup in projectGroups)
            {
                int myProjects = projectGroup.Members.FindAll(m => m.ProjectId == UserContext.Project.Entity.Id && !excludeUsersFromGroups.Contains(m.UserId)).Count();

                ProjectGroupModel projectGroupModel = new ProjectGroupModel();

                projectGroupModel.Summary      = GetSummary(myProjects);
                projectGroupModel.ProjectGroup = projectGroup;

                model.ProjectGroups.Add(projectGroupModel);
            }

            model.ProjectAttributes = ProjectAttributeRepository.GetAll(UserContext.Project.Entity.Id);

            return(model);
        }