/// <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)); }
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)); }
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)); } }
/// <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>(); }
/// <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)); } }
/// <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)); }
/// <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)); }