/// <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());
 }
Пример #3
0
        /// <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);
        }
Пример #4
0
 /// <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());
 }
Пример #5
0
        /// <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);
        }