/// <summary> /// Uploads an image to a flex field object or template /// </summary> /// <param name="dbAccess">Db access to use (tempate or object)</param> /// <param name="timelineEvent">Timeline Event to use</param> /// <param name="id">Id of the flex field object</param> /// <returns>Image Name</returns> private async Task <IActionResult> UploadImage(IFlexFieldObjectDbAccess <T> dbAccess, TimelineEvent timelineEvent, string id) { // Validate Date string validateResult = this.ValidateImageUploadData(); if (validateResult != null) { return(StatusCode((int)HttpStatusCode.BadRequest, _localizer[validateResult])); } IFormFile uploadFile = Request.Form.Files[0]; T targetFlexFieldObject = await dbAccess.GetFlexFieldObjectById(id); if (targetFlexFieldObject == null) { return(StatusCode((int)HttpStatusCode.BadRequest, _localizer["CouldNotUploadImage"])); } // Save Image string objectImageFile = string.Empty; try { using (Stream imageStream = _imageAccess.CreateFlexFieldObjectImage(uploadFile.FileName, out objectImageFile)) { uploadFile.CopyTo(imageStream); } string oldImageFile = targetFlexFieldObject.ImageFile; targetFlexFieldObject.ImageFile = objectImageFile; targetFlexFieldObject.IsImplemented = false; await this.SetModifiedData(_userManager, targetFlexFieldObject); await dbAccess.UpdateFlexFieldObject(targetFlexFieldObject); if (!string.IsNullOrEmpty(oldImageFile)) { _imageAccess.CheckAndDeleteUnusedImage(oldImageFile); } await _timelineService.AddTimelineEntry(timelineEvent, targetFlexFieldObject.Name, targetFlexFieldObject.Id); } catch (Exception ex) { _logger.LogError(ex, "Could not upload image"); return(StatusCode((int)HttpStatusCode.InternalServerError, _localizer["CouldNotUploadImage"])); } return(Ok(objectImageFile)); }
/// <summary> /// Constructor /// </summary> /// <param name="folderDbAccess">Folder Db Access</param> /// <param name="templateDbAccess">Template Db Access</param> /// <param name="objectDbAccess">Object Db Access</param> /// <param name="projectDbAccess">Project Db Access</param> /// <param name="tagDbAccess">Tag Db Access</param> /// <param name="imageAccess">Image Access</param> /// <param name="userManager">User Manager</param> /// <param name="implementationStatusComparer">Implementation Status Comparer</param> /// <param name="timelineService">Timeline Service</param> /// <param name="logger">Logger</param> /// <param name="localizerFactory">Localizer Factory</param> public FlexFieldBaseApiController(IFlexFieldFolderDbAccess folderDbAccess, IFlexFieldObjectDbAccess <T> templateDbAccess, IFlexFieldObjectDbAccess <T> objectDbAccess, IProjectDbAccess projectDbAccess, IFlexFieldObjectTagDbAccess tagDbAccess, IFlexFieldObjectImageAccess imageAccess, UserManager <GoNorthUser> userManager, IImplementationStatusComparer implementationStatusComparer, ITimelineService timelineService, ILogger <FlexFieldBaseApiController <T> > logger, IStringLocalizerFactory localizerFactory) { _folderDbAccess = folderDbAccess; _templateDbAccess = templateDbAccess; _objectDbAccess = objectDbAccess; _projectDbAccess = projectDbAccess; _tagDbAccess = tagDbAccess; _imageAccess = imageAccess; _userManager = userManager; _implementationStatusComparer = implementationStatusComparer; _timelineService = timelineService; _logger = logger; _localizer = localizerFactory.Create(this.GetType()); }
/// <summary> /// Returns the object name for an id /// </summary> /// <param name="id">Id of the object</param> /// <param name="objectDbAccess">Object Db Access</param> /// <param name="templateDbAccess">Template Db Access</param> /// <typeparam name="T">Type of the object</typeparam> /// <returns>Name of the object</returns> private async Task <string> GetObjectName <T>(string id, IFlexFieldObjectDbAccess <T> objectDbAccess, IFlexFieldObjectDbAccess <T> templateDbAccess) where T : FlexFieldObject { T template = await templateDbAccess.GetFlexFieldObjectById(id); if (template != null) { return(template.Name); } T obj = await objectDbAccess.GetFlexFieldObjectById(id); if (obj != null) { return(obj.Name); } return(string.Empty); }
/// <summary> /// Constructor /// </summary> /// <param name="folderDbAccess">Folder Db Access</param> /// <param name="templateDbAccess">Template Db Access</param> /// <param name="objectDbAccess">Object Db Access</param> /// <param name="projectDbAccess">Project Db Access</param> /// <param name="tagDbAccess">Tag Db Access</param> /// <param name="exportTemplateDbAccess">Export Template Db Access</param> /// <param name="languageKeyDbAccess">Language Key Db Access</param> /// <param name="exportFunctionIdDbAccess">Export Function Id Db Access</param> /// <param name="imageAccess">Image Access</param> /// <param name="thumbnailService">Thumbnail Service</param> /// <param name="userManager">User Manager</param> /// <param name="implementationStatusComparer">Implementation Status Comparer</param> /// <param name="timelineService">Timeline Service</param> /// <param name="xssChecker">Xss Checker</param> /// <param name="logger">Logger</param> /// <param name="localizerFactory">Localizer Factory</param> public FlexFieldBaseApiController(IFlexFieldFolderDbAccess folderDbAccess, IFlexFieldObjectDbAccess <T> templateDbAccess, IFlexFieldObjectDbAccess <T> objectDbAccess, IProjectDbAccess projectDbAccess, IFlexFieldObjectTagDbAccess tagDbAccess, IExportTemplateDbAccess exportTemplateDbAccess, ILanguageKeyDbAccess languageKeyDbAccess, IExportFunctionIdDbAccess exportFunctionIdDbAccess, IFlexFieldObjectImageAccess imageAccess, IFlexFieldThumbnailService thumbnailService, UserManager <GoNorthUser> userManager, IImplementationStatusComparer implementationStatusComparer, ITimelineService timelineService, IXssChecker xssChecker, ILogger <FlexFieldBaseApiController <T> > logger, IStringLocalizerFactory localizerFactory) { _folderDbAccess = folderDbAccess; _templateDbAccess = templateDbAccess; _objectDbAccess = objectDbAccess; _projectDbAccess = projectDbAccess; _tagDbAccess = tagDbAccess; _exportTemplateDbAccess = exportTemplateDbAccess; _languageKeyDbAccess = languageKeyDbAccess; _exportFunctionIdDbAccess = exportFunctionIdDbAccess; _imageAccess = imageAccess; _thumbnailService = thumbnailService; _userManager = userManager; _implementationStatusComparer = implementationStatusComparer; _timelineService = timelineService; _xssChecker = xssChecker; _logger = logger; _localizer = localizerFactory.Create(this.GetType()); }
/// <summary> /// Returns the object name for an id /// </summary> /// <param name="exportTemplates">Id of the object</param> /// <param name="objectDbAccess">Object Db Access</param> /// <param name="templateDbAccess">Template Db Access</param> /// <typeparam name="T">Type of the object</typeparam> /// <returns>Objects using template</returns> private async Task <List <ObjectUsingTemplate> > GetObjectsUsingTemplates <T>(List <ExportTemplate> exportTemplates, IFlexFieldObjectDbAccess <T> objectDbAccess, IFlexFieldObjectDbAccess <T> templateDbAccess) where T : FlexFieldObject { List <string> objectIds = exportTemplates.Select(t => t.CustomizedObjectId).ToList(); List <T> templateNames = await templateDbAccess.ResolveFlexFieldObjectNames(objectIds); List <ObjectUsingTemplate> objectsUsingTemplate = templateNames.Select(o => new ObjectUsingTemplate { ObjectId = o.Id, IsObjectTemplate = true, ObjectName = o.Name }).ToList(); List <string> objectIdsWithoutTemplate = objectIds.Where(i => !objectsUsingTemplate.Any(ou => ou.ObjectId == i)).ToList(); if (objectIdsWithoutTemplate != null && objectIdsWithoutTemplate.Count > 0) { List <T> objectNames = await objectDbAccess.ResolveFlexFieldObjectNames(objectIdsWithoutTemplate); objectsUsingTemplate.AddRange(objectNames.Select(o => new ObjectUsingTemplate { ObjectId = o.Id, IsObjectTemplate = false, ObjectName = o.Name }).ToList()); } return(objectsUsingTemplate); }