/// <summary> /// Exports an object /// </summary> /// <param name="template">Template to use</param> /// <param name="objectData">Object data</param> /// <returns>Export Result</returns> public Task <ExportObjectResult> ExportObject(ExportTemplate template, ExportObjectData objectData) { ExportObjectResult result = new ExportObjectResult(); result.FileExtension = "json"; object exportResult = null; if (template.TemplateType == TemplateType.ObjectNpc) { NpcJsonExportObject exportObject = new NpcJsonExportObject((KortistoNpc)objectData.ExportData[ExportConstants.ExportDataObject]); exportObject.Dialog = objectData.ExportData[ExportConstants.ExportDataDialog] as TaleDialog; exportResult = exportObject; } else { exportResult = objectData.ExportData[ExportConstants.ExportDataObject]; } JsonSerializerSettings serializerSettings = new JsonSerializerSettings(); serializerSettings.ContractResolver = new JsonExportContractResolver(); serializerSettings.Formatting = Formatting.Indented; result.Code = JsonConvert.SerializeObject(exportResult, serializerSettings); return(Task.FromResult(result)); }
/// <summary> /// Exports an object /// </summary> /// <param name="template">Template to use</param> /// <param name="objectData">Object data</param> /// <returns>Export Result</returns> public async Task <ExportObjectResult> ExportObject(ExportTemplate template, ExportObjectData objectData) { GoNorthProject project = await _projectDbAccess.GetDefaultProject(); ExportSettings exportSettings = await _exportSettingsDbAccess.GetExportSettings(project.Id); ExportObjectResult result = new ExportObjectResult(); result.FileExtension = exportSettings.ScriptExtension; ExportPlaceholderFillResult filledResult = await _placeholderResolver.FillPlaceholders(template.TemplateType, template.Code, objectData); result.Code = filledResult.Code; result.Errors = filledResult.Errors.ToErrorList(); return(result); }
/// <summary> /// Exports an object /// </summary> /// <param name="template">Template to use</param> /// <param name="objectData">Object data</param> /// <returns>Export Result</returns> public async Task <ExportObjectResult> ExportObject(ExportTemplate template, ExportObjectData objectData) { ExportObjectResult result = new ExportObjectResult(); result.FileExtension = "json"; object exportResult = null; if (template.TemplateType == TemplateType.ObjectNpc) { NpcJsonExportObject exportObject = new NpcJsonExportObject((KortistoNpc)objectData.ExportData[ExportConstants.ExportDataObject]); exportObject.Dialog = objectData.ExportData[ExportConstants.ExportDataDialog] as TaleDialog; exportObject.StateMachine = objectData.ExportData[ExportConstants.ExportDataStateMachine] as StateMachine; exportObject.ExportSnippets = await _objectExportSnippetDbAccess.GetExportSnippets(exportObject.Id); exportResult = exportObject; } else if (template.TemplateType == TemplateType.ObjectItem) { ItemJsonExportObject exportObject = new ItemJsonExportObject((StyrItem)objectData.ExportData[ExportConstants.ExportDataObject]); exportObject.ExportSnippets = await _objectExportSnippetDbAccess.GetExportSnippets(exportObject.Id); exportResult = exportObject; } else if (template.TemplateType == TemplateType.ObjectSkill) { SkillJsonExportObject exportObject = new SkillJsonExportObject((EvneSkill)objectData.ExportData[ExportConstants.ExportDataObject]); exportObject.ExportSnippets = await _objectExportSnippetDbAccess.GetExportSnippets(exportObject.Id); exportResult = exportObject; } else { exportResult = objectData.ExportData[ExportConstants.ExportDataObject]; } JsonSerializerOptions options = new JsonSerializerOptions { WriteIndented = true, Encoder = JavaScriptEncoder.UnsafeRelaxedJsonEscaping }; result.Code = JsonSerializer.Serialize(exportResult, options); return(result); }
/// <summary> /// Exports an object /// </summary> /// <param name="template">Template to use</param> /// <param name="objectData">Object data</param> /// <returns>Export Result</returns> public async Task <ExportObjectResult> ExportObject(ExportTemplate template, ExportObjectData objectData) { // Run script export to refresh language keys IFlexFieldExportable flexFieldObject = null; if (objectData.ExportData.ContainsKey(ExportConstants.ExportDataObject)) { flexFieldObject = objectData.ExportData[ExportConstants.ExportDataObject] as IFlexFieldExportable; } if (flexFieldObject != null) { _languageKeyReferenceCollector.PrepareCollectionForGroup(flexFieldObject.Id); } else { _languageKeyReferenceCollector.PrepareCollectionForGroup(null); } await _scriptExporter.ExportObject(template, objectData); objectData.ExportData[ExportConstants.ExportDataReferencedLanguageIds] = _languageKeyReferenceCollector.GetReferencedLanguageKeys(); // Export language keys GoNorthProject project = await _userProjectAccess.GetUserProject(); ExportSettings exportSettings = await _exportSettingsDbAccess.GetExportSettings(project.Id); ExportTemplate exportTemplate = await _defaultTemplateProvider.GetDefaultTemplateByType(project.Id, TemplateType.LanguageFile); ExportObjectResult result = new ExportObjectResult(); result.FileExtension = exportSettings.LanguageFileExtension; ExportPlaceholderFillResult filledResult = await _placeholderResolver.FillPlaceholders(TemplateType.LanguageFile, exportTemplate.Code, objectData, exportTemplate.RenderingEngine); result.Code = filledResult.Code; result.Errors = filledResult.Errors.ToErrorList(); return(result); }
public async Task <IActionResult> ExportObjectDownload(string exportFormat, string id, TemplateType templateType) { ExportObjectResult exportResult = null; try { exportResult = await RunExportObject(exportFormat, id, templateType); } catch (InvalidOperationException ex) { return(StatusCode((int)HttpStatusCode.BadRequest, ex.Message)); } catch (KeyNotFoundException) { return(StatusCode((int)HttpStatusCode.NotFound)); } catch (UnauthorizedAccessException) { return(StatusCode((int)HttpStatusCode.Unauthorized)); } return(File(Encoding.UTF8.GetBytes(exportResult.Code), "text/plain", exportResult.ObjectFilename + "." + exportResult.FileExtension)); }
public async Task <IActionResult> ExportObject(string exportFormat, string id, TemplateType templateType) { ExportObjectResult exportResult = null; try { exportResult = await RunExportObject(exportFormat, id, templateType); } catch (InvalidOperationException ex) { return(StatusCode((int)HttpStatusCode.BadRequest, ex.Message)); } catch (KeyNotFoundException) { return(StatusCode((int)HttpStatusCode.NotFound)); } catch (UnauthorizedAccessException) { return(StatusCode((int)HttpStatusCode.Unauthorized)); } return(Ok(exportResult)); }
/// <summary> /// Exports an object /// </summary> /// <param name="template">Template to use</param> /// <param name="objectData">Object data</param> /// <returns>Export Result</returns> public async Task <ExportObjectResult> ExportObject(ExportTemplate template, ExportObjectData objectData) { // Run script export to refresh language keys await _scriptExporter.ExportObject(template, objectData); // Export language keys GoNorthProject project = await _projectDbAccess.GetDefaultProject(); ExportSettings exportSettings = await _exportSettingsDbAccess.GetExportSettings(project.Id); ExportTemplate exportTemplate = await _defaultTemplateProvider.GetDefaultTemplateByType(project.Id, TemplateType.LanguageFile); ExportObjectResult result = new ExportObjectResult(); result.FileExtension = exportSettings.LanguageFileExtension; ExportPlaceholderFillResult filledResult = await _placeholderResolver.FillPlaceholders(TemplateType.LanguageFile, exportTemplate.Code, objectData); result.Code = filledResult.Code; result.Errors = filledResult.Errors.ToErrorList(); return(result); }
/// <summary> /// Exports an object /// </summary> /// <param name="exportFormat">Format to export (Script, JSON or LanguageFile)</param> /// <param name="id">Id of the object to export</param> /// <param name="templateType">Template type</param> /// <returns>Export result</returns> private async Task <ExportObjectResult> RunExportObject(string exportFormat, string id, TemplateType templateType) { // Check Access if ((templateType == TemplateType.ObjectNpc && !User.IsInRole(RoleNames.Kortisto)) || (templateType == TemplateType.ObjectItem && !User.IsInRole(RoleNames.Styr)) || (templateType == TemplateType.ObjectSkill && !User.IsInRole(RoleNames.Evne))) { throw new UnauthorizedAccessException(); } // Get Exporter string exporterKey = exportFormat.ToLowerInvariant(); if (!_exporters.ContainsKey(exporterKey)) { throw new InvalidOperationException("Unknown Export Format"); } IObjectExporter exporter = _exporters[exporterKey]; // Get Objects bool objectFound = false; ExportObjectData objectData = new ExportObjectData(); if (templateType == TemplateType.ObjectNpc) { KortistoNpc npc = await _npcDbAccess.GetFlexFieldObjectById(id); if (npc != null) { objectData.ExportData.Add(ExportConstants.ExportDataObject, npc); objectData.ExportData.Add(ExportConstants.ExportDataObjectType, ExportConstants.ExportObjectTypeNpc); TaleDialog dialog = await _dialogDbAccess.GetDialogByRelatedObjectId(id); objectData.ExportData.Add(ExportConstants.ExportDataDialog, dialog); objectFound = true; } } else if (templateType == TemplateType.ObjectItem) { StyrItem item = await _itemDbAccess.GetFlexFieldObjectById(id); if (item != null) { objectData.ExportData.Add(ExportConstants.ExportDataObject, item); objectData.ExportData.Add(ExportConstants.ExportDataObjectType, ExportConstants.ExportObjectTypeItem); objectFound = true; } } else if (templateType == TemplateType.ObjectSkill) { EvneSkill skill = await _skillDbAccess.GetFlexFieldObjectById(id); if (skill != null) { objectData.ExportData.Add(ExportConstants.ExportDataObject, skill); objectData.ExportData.Add(ExportConstants.ExportDataObjectType, ExportConstants.ExportObjectTypeSkill); objectFound = true; } } else { throw new InvalidOperationException("Template Type not supported for exporting"); } if (!objectFound) { throw new KeyNotFoundException(); } // Get Template ExportTemplateByObjectIdResult template = await GetValidExportTemplateByIdAndType(id, templateType); // Run Export ExportObjectResult result = await exporter.ExportObject(template.Template, objectData); result.ObjectFilename = ((FlexFieldObject)objectData.ExportData[ExportConstants.ExportDataObject]).Name; string regexSearch = Regex.Escape(new string(Path.GetInvalidFileNameChars())); Regex illegalCharRegex = new Regex(string.Format("[{0}]", regexSearch)); result.ObjectFilename = illegalCharRegex.Replace(result.ObjectFilename, string.Empty); return(result); }