/// <summary>
        /// Distributes the fields of a template
        /// </summary>
        /// <param name="id">Template Id</param>
        /// <returns>Task</returns>
        protected async Task <IActionResult> BaseDistributeFlexFieldTemplateFields(string id)
        {
            T template = await _templateDbAccess.GetFlexFieldObjectById(id);

            if (template == null)
            {
                return(StatusCode((int)HttpStatusCode.BadRequest));
            }

            List <T> flexFieldObjects = await _objectDbAccess.GetFlexFieldObjectsByTemplate(id);

            foreach (T curObject in flexFieldObjects)
            {
                List <FlexField> newFields = template.Fields.Where(f => !curObject.Fields.Any(nf => nf.Name == f.Name)).ToList();
                if (newFields.Count > 0)
                {
                    curObject.IsImplemented = false;
                }
                curObject.Fields.AddRange(newFields);

                FlexFieldApiUtil.SetFieldIdsForNewFields(curObject.Fields);

                await _objectDbAccess.UpdateFlexFieldObject(curObject);
            }

            await _timelineService.AddTimelineEntry(TemplateFieldsDistributedEvent, template.Name, template.Id);

            return(Ok(id));
        }
Пример #2
0
        public async Task <IActionResult> UpdateFlexFieldObject(string id, [FromBody] T flexFieldObject)
        {
            CheckXssForObject(flexFieldObject);

            T loadedFlexFieldObject = await _objectDbAccess.GetFlexFieldObjectById(id);

            List <string> oldTags = loadedFlexFieldObject.Tags;

            if (oldTags == null)
            {
                oldTags = new List <string>();
            }
            if (flexFieldObject.Tags == null)
            {
                flexFieldObject.Tags = new List <string>();
            }

            if (FlexFieldApiUtil.HasDuplicateFieldNames(flexFieldObject.Fields))
            {
                return(StatusCode((int)HttpStatusCode.BadRequest, _localizer["DuplicateFieldNameExist"]));
            }

            FlexFieldApiUtil.SetFieldIdsForNewFields(flexFieldObject.Fields);
            FlexFieldApiUtil.SetFieldIdsForNewFieldsInFolders(flexFieldObject.Fields);

            bool nameChanged = loadedFlexFieldObject.Name != flexFieldObject.Name;

            loadedFlexFieldObject.Name   = flexFieldObject.Name;
            loadedFlexFieldObject.Fields = flexFieldObject.Fields;
            loadedFlexFieldObject.Tags   = flexFieldObject.Tags;

            loadedFlexFieldObject = await RunAdditionalUpdates(flexFieldObject, loadedFlexFieldObject);

            await this.SetModifiedData(_userManager, loadedFlexFieldObject);

            await SetNotImplementedFlagOnChange(loadedFlexFieldObject);

            await _objectDbAccess.UpdateFlexFieldObject(loadedFlexFieldObject);

            _logger.LogInformation("Flex field object was updated.");

            await AddNewTags(flexFieldObject.Tags.Except(oldTags, StringComparer.OrdinalIgnoreCase).ToList());
            await RemoveUnusedTags(oldTags.Except(flexFieldObject.Tags, StringComparer.OrdinalIgnoreCase).ToList());

            _logger.LogInformation("Tags were updated.");

            if (nameChanged)
            {
                await RunMarkerUpdates(loadedFlexFieldObject);
            }

            await _timelineService.AddTimelineEntry(ObjectUpdatedEvent, loadedFlexFieldObject.Name, loadedFlexFieldObject.Id);

            return(Ok(loadedFlexFieldObject));
        }
Пример #3
0
        public async Task <IActionResult> CreateFlexFieldObject([FromBody] T flexFieldObject)
        {
            if (string.IsNullOrEmpty(flexFieldObject.Name))
            {
                return(StatusCode((int)HttpStatusCode.BadRequest));
            }

            CheckXssForObject(flexFieldObject);

            if (FlexFieldApiUtil.HasDuplicateFieldNames(flexFieldObject.Fields))
            {
                return(StatusCode((int)HttpStatusCode.BadRequest, _localizer["DuplicateFieldNameExist"]));
            }

            FlexFieldApiUtil.SetFieldIdsForNewFields(flexFieldObject.Fields);
            FlexFieldApiUtil.SetFieldIdsForNewFieldsInFolders(flexFieldObject.Fields);

            if (flexFieldObject.Tags == null)
            {
                flexFieldObject.Tags = new List <string>();
            }

            try
            {
                GoNorthProject project = await _projectDbAccess.GetDefaultProject();

                flexFieldObject.ProjectId = project.Id;

                flexFieldObject = await RunAdditionalUpdates(flexFieldObject, flexFieldObject);

                await this.SetModifiedData(_userManager, flexFieldObject);

                flexFieldObject = await _objectDbAccess.CreateFlexFieldObject(flexFieldObject);
                await AddNewTags(flexFieldObject.Tags);

                await _timelineService.AddTimelineEntry(ObjectCreatedEvent, flexFieldObject.Name, flexFieldObject.Id);

                return(Ok(flexFieldObject));
            }
            catch (Exception ex)
            {
                _logger.LogError(ex, "Could not create flex field object {0}", flexFieldObject.Name);
                return(StatusCode((int)HttpStatusCode.InternalServerError));
            }
        }
Пример #4
0
        /// <summary>
        /// Copies the valid quest properties to a target quest
        /// </summary>
        /// <param name="targetQuest">Target quest to copy to</param>
        /// <param name="sourceQuest">Source quest to copy from</param>
        private void CopyValidQuestProperties(AikaQuest targetQuest, AikaQuest sourceQuest)
        {
            targetQuest.Name        = sourceQuest.Name;
            targetQuest.Description = sourceQuest.Description;
            targetQuest.IsMainQuest = sourceQuest.IsMainQuest;

            targetQuest.Fields = sourceQuest.Fields;

            FlexFieldApiUtil.SetFieldIdsForNewFields(targetQuest.Fields);

            targetQuest.Start     = GetStartNodeList(sourceQuest.Start);
            targetQuest.Text      = sourceQuest.Text != null ? sourceQuest.Text : new List <AikaTextNode>();
            targetQuest.Finish    = sourceQuest.Finish != null ? sourceQuest.Finish : new List <AikaFinish>();
            targetQuest.Condition = sourceQuest.Condition != null ? sourceQuest.Condition : new List <ConditionNode>();
            targetQuest.Action    = sourceQuest.Action != null ? sourceQuest.Action : new List <ActionNode>();
            targetQuest.AllDone   = sourceQuest.AllDone != null ? sourceQuest.AllDone : new List <AikaAllDone>();
            targetQuest.Link      = sourceQuest.Link != null ? sourceQuest.Link : new List <NodeLink>();
        }
Пример #5
0
        /// <summary>
        /// Creates a new flex field template
        /// </summary>
        /// <param name="template">Template to create</param>
        /// <returns>Result</returns>
        protected async Task <IActionResult> BaseCreateFlexFieldTemplate(T template)
        {
            if (string.IsNullOrEmpty(template.Name))
            {
                return(StatusCode((int)HttpStatusCode.BadRequest));
            }

            CheckXssForObject(template);

            if (FlexFieldApiUtil.HasDuplicateFieldNames(template.Fields))
            {
                return(StatusCode((int)HttpStatusCode.BadRequest, _localizer["DuplicateFieldNameExist"]));
            }

            template.ParentFolderId = string.Empty;

            if (template.Tags == null)
            {
                template.Tags = new List <string>();
            }

            try
            {
                GoNorthProject project = await _projectDbAccess.GetDefaultProject();

                template.ProjectId = project.Id;

                template = await RunAdditionalUpdates(template, template);

                await this.SetModifiedData(_userManager, template);

                template = await _templateDbAccess.CreateFlexFieldObject(template);
                await AddNewTags(template.Tags);

                await _timelineService.AddTimelineEntry(TemplateCreatedEvent, template.Name, template.Id);

                return(Ok(template));
            }
            catch (Exception ex)
            {
                _logger.LogError(ex, "Could not create flex field template {0}", template.Name);
                return(StatusCode((int)HttpStatusCode.InternalServerError));
            }
        }
Пример #6
0
        /// <summary>
        /// Updates a flex field template
        /// </summary>
        /// <param name="id">Template Id</param>
        /// <param name="template">Update template data</param>
        /// <returns>Result Status Code</returns>
        protected async Task <IActionResult> BaseUpdateFlexFieldTemplate(string id, T template)
        {
            if (FlexFieldApiUtil.HasDuplicateFieldNames(template.Fields))
            {
                return(StatusCode((int)HttpStatusCode.BadRequest, _localizer["DuplicateFieldNameExist"]));
            }

            CheckXssForObject(template);

            T loadedTemplate = await _templateDbAccess.GetFlexFieldObjectById(id);

            List <string> oldTags = loadedTemplate.Tags;

            if (oldTags == null)
            {
                oldTags = new List <string>();
            }
            if (template.Tags == null)
            {
                template.Tags = new List <string>();
            }

            loadedTemplate.Name   = template.Name;
            loadedTemplate.Fields = template.Fields;
            loadedTemplate.Tags   = template.Tags;

            template = await RunAdditionalUpdates(template, loadedTemplate);

            await this.SetModifiedData(_userManager, loadedTemplate);

            await _templateDbAccess.UpdateFlexFieldObject(loadedTemplate);

            _logger.LogInformation("Template was updated.");

            await AddNewTags(template.Tags.Except(oldTags, StringComparer.OrdinalIgnoreCase).ToList());
            await RemoveUnusedTags(oldTags.Except(template.Tags, StringComparer.OrdinalIgnoreCase).ToList());

            _logger.LogInformation("Tags were updated.");

            await _timelineService.AddTimelineEntry(TemplateUpdatedEvent, loadedTemplate.Name, loadedTemplate.Id);

            return(Ok(loadedTemplate));
        }
Пример #7
0
        /// <summary>
        /// Distributes the fields of a template
        /// </summary>
        /// <param name="id">Template Id</param>
        /// <returns>Task</returns>
        protected async Task <IActionResult> BaseDistributeFlexFieldTemplateFields(string id)
        {
            T template = await _templateDbAccess.GetFlexFieldObjectById(id);

            if (template == null)
            {
                return(StatusCode((int)HttpStatusCode.BadRequest));
            }

            List <T> flexFieldObjects = await _objectDbAccess.GetFlexFieldObjectsByTemplate(id);

            foreach (T curObject in flexFieldObjects)
            {
                // Update Additional Configuration
                foreach (FlexField curField in curObject.Fields)
                {
                    FlexField templateField = template.Fields.FirstOrDefault(f => f.Name == curField.Name);
                    if (templateField != null && templateField.AdditionalConfiguration != curField.AdditionalConfiguration)
                    {
                        curField.AdditionalConfiguration = templateField.AdditionalConfiguration;
                    }
                }

                // Add new Fields
                List <FlexField> newFields = template.Fields.Where(f => !curObject.Fields.Any(nf => nf.Name == f.Name)).ToList();
                newFields.ForEach(f => f.CreatedFromTemplate = true);
                if (newFields.Count > 0)
                {
                    curObject.IsImplemented = false;
                }
                curObject.Fields.AddRange(newFields);

                FlexFieldApiUtil.SetFieldIdsForNewFields(curObject.Fields);
                FlexFieldApiUtil.SetFieldIdsForNewFieldsInFolders(curObject.Fields, template);

                await _objectDbAccess.UpdateFlexFieldObject(curObject);
            }

            await _timelineService.AddTimelineEntry(TemplateFieldsDistributedEvent, template.Name, template.Id);

            return(Ok(id));
        }
        public async Task <IActionResult> UpdateFlexFieldObject(string id, [FromBody] T flexFieldObject)
        {
            T loadedFlexFieldObject = await _objectDbAccess.GetFlexFieldObjectById(id);

            List <string> oldTags = loadedFlexFieldObject.Tags;

            if (oldTags == null)
            {
                oldTags = new List <string>();
            }
            if (flexFieldObject.Tags == null)
            {
                flexFieldObject.Tags = new List <string>();
            }

            FlexFieldApiUtil.SetFieldIdsForNewFields(flexFieldObject.Fields);

            loadedFlexFieldObject.Name   = flexFieldObject.Name;
            loadedFlexFieldObject.Fields = flexFieldObject.Fields;
            loadedFlexFieldObject.Tags   = flexFieldObject.Tags;

            loadedFlexFieldObject = await RunAdditionalUpdates(flexFieldObject, loadedFlexFieldObject);

            await this.SetModifiedData(_userManager, loadedFlexFieldObject);

            await SetNotImplementedFlagOnChange(loadedFlexFieldObject);

            await _objectDbAccess.UpdateFlexFieldObject(loadedFlexFieldObject);

            _logger.LogInformation("Flex field object was updated.");

            await AddNewTags(flexFieldObject.Tags.Except(oldTags, StringComparer.OrdinalIgnoreCase).ToList());
            await RemoveUnusedTags(oldTags.Except(flexFieldObject.Tags, StringComparer.OrdinalIgnoreCase).ToList());

            _logger.LogInformation("Tags were updated.");

            await _timelineService.AddTimelineEntry(ObjectUpdatedEvent, loadedFlexFieldObject.Name, loadedFlexFieldObject.Id);

            return(Ok(loadedFlexFieldObject));
        }