Esempio n. 1
0
 public FileResourceDto(FileResourceInfo fileResourceInfo)
 {
     FileResourceData      = fileResourceInfo.FileResourceData.Data;
     FileResourceGUID      = fileResourceInfo.FileResourceGUID;
     OriginalBaseFilename  = fileResourceInfo.OriginalBaseFilename;
     OriginalFileExtension = fileResourceInfo.OriginalFileExtension;
     Email      = fileResourceInfo.CreatePerson.Email;
     CreateDate = fileResourceInfo.CreateDate;
     FileResourceMimeTypeName = fileResourceInfo.FileResourceMimeType.FileResourceMimeTypeDisplayName;
 }
Esempio n. 2
0
 public ProjectUpdateNotificationHelper(string contactSupportEmail, string introContent, string reminderSubject,
                                        FileResourceInfo toolLogo, string toolDisplayName, int tenantID)
 {
     ContactSupportEmail  = contactSupportEmail;
     IntroContent         = introContent;
     ReminderEmailSubject = reminderSubject;
     ToolLogo             = toolLogo;
     ToolName             = toolDisplayName;
     TenantID             = tenantID;
 }
Esempio n. 3
0
 public EntityAttachment(string deleteUrl, string editUrl, FileResourceInfo fileResourceInfo, AttachmentType attachmentType, string displayCssClass,
                         string displayName, string description)
 {
     _deleteUrl       = deleteUrl;
     _editUrl         = editUrl;
     FileResourceInfo = fileResourceInfo;
     SetDisplayCssClass(displayCssClass);
     DisplayName    = displayName;
     Description    = description;
     AttachmentType = attachmentType;
 }
Esempio n. 4
0
            // ReSharper restore InconsistentNaming

            public string GetCkEditorJavascriptContentToReturn(FileResourceInfo fileResourceInfo)
            {
                var ckEditorJavascriptContentToReturn = $@"
<script language=""javascript"" type=""text/javascript"">
    // <![CDATA[
    window.parent.CKEDITOR.tools.callFunction({CKEditorFuncNum}, {fileResourceInfo.GetFileResourceUrl().ToJS()});
    // ]]>
</script>";

                return(ckEditorJavascriptContentToReturn);
            }
        //Only public for unit testing
        public static FileResourceInfo CreateNewFromHttpPostedFile(HttpPostedFileBase httpPostedFileBase, Person currentPerson)
        {
            var originalFilenameInfo         = new FileInfo(httpPostedFileBase.FileName);
            var baseFilenameWithoutExtension = originalFilenameInfo.Name.Remove(originalFilenameInfo.Name.Length - originalFilenameInfo.Extension.Length, originalFilenameInfo.Extension.Length);
            var fileResourceData             = ConvertHttpPostedFileToByteArray(httpPostedFileBase);
            var fileResourceMimeTypeID       = GetFileResourceMimeTypeForFile(httpPostedFileBase).FileResourceMimeTypeID;
            var fileResourceInfo             = new FileResourceInfo(fileResourceMimeTypeID, baseFilenameWithoutExtension, originalFilenameInfo.Extension, Guid.NewGuid(), currentPerson.PersonID, DateTime.Now);

            fileResourceInfo.FileResourceDatas.Add(new FileResourceData(fileResourceInfo.FileResourceInfoID, fileResourceData));

            return(fileResourceInfo);
        }
Esempio n. 6
0
            public static FileResourceInfo Create()
            {
                var fileResourceInfo = new FileResourceInfo(FileResourceMimeType.JPEG.FileResourceMimeTypeID,
                                                            MakeTestImagefileBaseName(),
                                                            ".jpg",
                                                            Guid.NewGuid(),
                                                            LoginConstants.PersonID,
                                                            DateTime.Now);

                fileResourceInfo.FileResourceDatas.Add(new FileResourceData(fileResourceInfo.FileResourceInfoID, new byte[2000]));
                return(fileResourceInfo);
            }
        public IHttpActionResult UpdateOrganization(string apiKey, [FromBody] OrganizationDto organizationDto)
        {
            Check.Require(apiKey == FirmaWebApiConfiguration.PsInfoApiKey, "Unrecognized api key!");
            var organization = _databaseEntities.Organizations.SingleOrDefault(x => x.OrganizationID == organizationDto.OrganizationID);

            if (organization == null)
            {
                var message = $"Organization with ID = {organizationDto.OrganizationID} not found";
                return(NotFound());
            }

            organization.OrganizationName         = organizationDto.OrganizationName;
            organization.KeystoneOrganizationGuid = organizationDto.OrganizationGuid;
            organization.OrganizationShortName    = organizationDto.OrganizationShortName;
            organization.OrganizationTypeID       = organizationDto.OrganizationTypeID;
            organization.IsActive        = organizationDto.IsActive;
            organization.OrganizationUrl = organizationDto.OrganizationUrl;
            organization.Description     = organizationDto.Description;
            if (organizationDto.LogoFileResource != null)
            {
                var fileResourceDto      = organizationDto.LogoFileResource;
                var fileResourceMimeType = MapFileResourceMimeTypeNameToFileResourceMimeType(fileResourceDto.FileResourceMimeTypeName);
                if (fileResourceMimeType == null)
                {
                    var error =
                        $"Invalid File Resource Mime Type '{fileResourceDto.FileResourceMimeTypeName}' for '{fileResourceDto.FileResourceGUID}'";
                    return(BadRequest(error));
                }

                var peopleDictionary       = _databaseEntities.People.ToDictionary(x => x.Email);
                var fileResourceMimeTypeID = fileResourceMimeType.FileResourceMimeTypeID;
                var personID         = peopleDictionary.ContainsKey(fileResourceDto.Email) ? peopleDictionary[fileResourceDto.Email].PersonID : 5278;
                var fileResourceInfo = new FileResourceInfo(fileResourceMimeTypeID, fileResourceDto.OriginalBaseFilename,
                                                            fileResourceDto.OriginalFileExtension, fileResourceDto.FileResourceGUID,
                                                            personID, fileResourceDto.CreateDate);
                fileResourceInfo.FileResourceDatas.Add(new FileResourceData(fileResourceInfo.FileResourceInfoID, fileResourceDto.FileResourceData));

                var oldLogoFileResourceInfo = organization.LogoFileResourceInfo;
                organization.LogoFileResourceInfo = fileResourceInfo;
                oldLogoFileResourceInfo?.FileResourceData.Delete(_databaseEntities);
                oldLogoFileResourceInfo?.Delete(_databaseEntities);
            }

            _databaseEntities.SaveChangesWithNoAuditing(Tenant.ActionAgendaForPugetSound.TenantID);
            var fundingSourceReloaded = new OrganizationDto(organization);

            return(Ok(fundingSourceReloaded));
        }
        public IHttpActionResult PostOrganization(string apiKey, [FromBody] OrganizationDto organizationDto)
        {
            Check.Require(apiKey == FirmaWebApiConfiguration.PsInfoApiKey, "Unrecognized api key!");
            var tenantID = Tenant.ActionAgendaForPugetSound.TenantID;

            // If Organization already exists because it was created by Keystone - do an Update instead of a create
            if (_databaseEntities.Organizations.Any(x => x.OrganizationName == organizationDto.OrganizationName))
            {
                var existingOrganization = _databaseEntities.Organizations.Single(x => x.OrganizationName == organizationDto.OrganizationName);
                // Give the Dto the correct Organization ID and OrganizationTypeID for ProjectFirma
                organizationDto.OrganizationID     = existingOrganization.OrganizationID;
                organizationDto.OrganizationTypeID = _databaseEntities.OrganizationTypes.SingleOrDefault(x => x.OrganizationTypeName == organizationDto.OrganizationTypeName)?.OrganizationTypeID ?? _databaseEntities.OrganizationTypes.Single(x => x.IsDefaultOrganizationType).OrganizationTypeID;
                return(UpdateOrganization(apiKey, organizationDto));
            }
            var organization = new Organization(organizationDto.OrganizationName, organizationDto.IsActive, organizationDto.OrganizationTypeID, true, false);

            organization.KeystoneOrganizationGuid = organizationDto.OrganizationGuid;
            organization.OrganizationShortName    = organizationDto.OrganizationShortName;
            organization.OrganizationUrl          = organizationDto.OrganizationUrl;
            organization.Description = organizationDto.Description;
            if (organizationDto.LogoFileResource != null)
            {
                var fileResourceDto      = organizationDto.LogoFileResource;
                var fileResourceMimeType = MapFileResourceMimeTypeNameToFileResourceMimeType(fileResourceDto.FileResourceMimeTypeName);
                if (fileResourceMimeType == null)
                {
                    var error =
                        $"Invalid File Resource Mime Type '{fileResourceDto.FileResourceMimeTypeName}' for '{fileResourceDto.FileResourceGUID}'";
                    return(BadRequest(error));
                }

                var peopleDictionary       = _databaseEntities.People.ToDictionary(x => x.Email);
                var fileResourceMimeTypeID = fileResourceMimeType.FileResourceMimeTypeID;
                var personID         = peopleDictionary.ContainsKey(fileResourceDto.Email) ? peopleDictionary[fileResourceDto.Email].PersonID : 5278;
                var fileResourceInfo = new FileResourceInfo(fileResourceMimeTypeID, fileResourceDto.OriginalBaseFilename,
                                                            fileResourceDto.OriginalFileExtension, fileResourceDto.FileResourceGUID,
                                                            personID, fileResourceDto.CreateDate);
                fileResourceInfo.FileResourceDatas.Add(new FileResourceData(fileResourceInfo.FileResourceInfoID, fileResourceDto.FileResourceData));

                organization.LogoFileResourceInfo = fileResourceInfo;
            }
            _databaseEntities.AllOrganizations.Add(organization);
            _databaseEntities.SaveChangesWithNoAuditing(tenantID);
            var organizationReloaded = new OrganizationDto(organization);

            return(Ok(organizationReloaded));
        }
        public IHttpActionResult UpdatePerformanceMeasureImportance(string apiKey, [FromBody] PerformanceMeasureImportanceDto performanceMeasureDto)
        {
            Check.Require(apiKey == FirmaWebApiConfiguration.PsInfoApiKey, "Unrecognized api key!");
            var performanceMeasure = _databaseEntities.PerformanceMeasures.SingleOrDefault(x => x.PerformanceMeasureID == performanceMeasureDto.PerformanceMeasureID);

            if (performanceMeasure == null)
            {
                var message = $"Performance Measure with ID = {performanceMeasureDto.PerformanceMeasureID} not found";
                return(NotFound());
            }

            performanceMeasure.Importance = performanceMeasureDto.Importance;

            var fileResourceDtos      = performanceMeasureDto.FileResources;
            var fileResourceMimeTypes = fileResourceDtos.ToDictionary(x => new { x.FileResourceGUID, x.FileResourceMimeTypeName },
                                                                      x => MapFileResourceMimeTypeNameToFileResourceMimeType(x.FileResourceMimeTypeName));

            if (fileResourceMimeTypes.Values.Any(x => x == null))
            {
                var errors =
                    fileResourceMimeTypes.Where(x => x.Value == null).Select(x =>
                                                                             $"Invalid File Resource Mime Type '{x.Key.FileResourceMimeTypeName}' for '{x.Key.FileResourceGUID}'").ToList();
                return(BadRequest(string.Join("\r\n", errors)));
            }

            // Remove all of these, too hard to merge nicely
            _databaseEntities.AllFileResourceDatas.RemoveRange(performanceMeasure.PerformanceMeasureImages.Select(x => x.FileResourceInfo.FileResourceData));
            _databaseEntities.AllFileResourceInfos.RemoveRange(performanceMeasure.PerformanceMeasureImages.Select(x => x.FileResourceInfo));
            _databaseEntities.AllPerformanceMeasureImages.RemoveRange(performanceMeasure.PerformanceMeasureImages);

            var peopleDictionary = _databaseEntities.People.ToDictionary(x => x.Email);
            var performanceMeasureImagesToUpdate = fileResourceDtos.Select(x =>
            {
                var fileResourceMimeTypeID = fileResourceMimeTypes.Single(y => y.Key.FileResourceGUID == x.FileResourceGUID).Value.FileResourceMimeTypeID;
                var personID         = peopleDictionary.ContainsKey(x.Email) ? peopleDictionary[x.Email].PersonID : 5278;
                var fileResourceInfo = new FileResourceInfo(fileResourceMimeTypeID, x.OriginalBaseFilename, x.OriginalFileExtension, x.FileResourceGUID, personID, x.CreateDate);
                fileResourceInfo.FileResourceDatas.Add(new FileResourceData(fileResourceInfo.FileResourceInfoID, x.FileResourceData));
                var performanceMeasureImage = new PerformanceMeasureImage(performanceMeasure, fileResourceInfo);
                return(performanceMeasureImage);
            }).ToList();

            _databaseEntities.SaveChangesWithNoAuditing(Tenant.ActionAgendaForPugetSound.TenantID);
            var performanceMeasureReloaded = new PerformanceMeasureSimpleDto(performanceMeasure);

            return(Ok(performanceMeasureReloaded));
        }
Esempio n. 10
0
        private ActionResult DisplayResourceImpl(string fileResourceInfoPrimaryKey, FileResourceInfo fileResourceInfo)
        {
            if (fileResourceInfo == null)
            {
                var message = $"File Resource {fileResourceInfoPrimaryKey} Not Found in database. It may have been deleted.";
                throw new HttpException(404, message);
            }

            // If you're adding new mime types to the system, you need to add them below -- 08/29/2019 SMG
            // Removed PDFResult & ExcelResult and just ran both through the FileResourceResult to fix bugs occurring - both PDF & Excel work fine/better with FileResourceResult -- 6/15/2020 MZ
            switch (fileResourceInfo.FileResourceMimeType.ToEnum)
            {
            case FileResourceMimeTypeEnum.PDF:
            case FileResourceMimeTypeEnum.ExcelXLS:
            case FileResourceMimeTypeEnum.ExcelXLSX:
            case FileResourceMimeTypeEnum.xExcelXLSX:
            case FileResourceMimeTypeEnum.WordDOCX:
            case FileResourceMimeTypeEnum.WordDOC:
            case FileResourceMimeTypeEnum.PowerpointPPTX:
            case FileResourceMimeTypeEnum.PowerpointPPT:
            case FileResourceMimeTypeEnum.CSS:
            case FileResourceMimeTypeEnum.KMZ:
            case FileResourceMimeTypeEnum.KML:
            case FileResourceMimeTypeEnum.XZIP:
            case FileResourceMimeTypeEnum.ZIP:
                return(new FileResourceResult(fileResourceInfo.GetOriginalCompleteFileName(), fileResourceInfo.FileResourceData.Data, fileResourceInfo.FileResourceMimeType));

            case FileResourceMimeTypeEnum.XPNG:
            case FileResourceMimeTypeEnum.PNG:
            case FileResourceMimeTypeEnum.TIFF:
            case FileResourceMimeTypeEnum.BMP:
            case FileResourceMimeTypeEnum.GIF:
            case FileResourceMimeTypeEnum.JPEG:
            case FileResourceMimeTypeEnum.PJPEG:
                return(File(fileResourceInfo.FileResourceData.Data, fileResourceInfo.FileResourceMimeType.FileResourceMimeTypeName));

            default:
                // throw a more specific error that can hint to developers and assure users what needs to be done when adding a new mime type
                throw new SitkaDisplayErrorException($"The file type \"{fileResourceInfo.FileResourceMimeType.FileResourceMimeTypeDisplayName}\" has not been explicitly whitelisted to download. The development team has been notified, if you continue to receive errors, please contact support.");
            }
        }
Esempio n. 11
0
        public void UpdateModel(ReportTemplate reportTemplate, FileResourceInfo fileResourceInfo,
                                FirmaSession currentFirmaSession, DatabaseEntities databaseEntities)
        {
            // updating parameters
            reportTemplate.DisplayName               = DisplayName;
            reportTemplate.Description               = Description;
            reportTemplate.FileResourceInfo          = fileResourceInfo;
            reportTemplate.ReportTemplateModelTypeID = ReportTemplateModelTypeID;
            reportTemplate.ReportTemplateModelID     = ReportTemplateModelID;

            var updateIsReplacingFileResourceData = FileResourceData != null && FileResourceInfoID != null;

            if (updateIsReplacingFileResourceData)
            {
                // delete the old FileResourceInfo
                var oldFileResource =
                    HttpRequestStorage.DatabaseEntities.FileResourceInfos.First(x => x.FileResourceInfoID == FileResourceInfoID);
                oldFileResource.FileResourceData.Delete(databaseEntities);
                oldFileResource.Delete(databaseEntities);
            }
        }
        public static void CreateFromProject(ProjectUpdateBatch projectUpdateBatch)
        {
            var project = projectUpdateBatch.Project;

            projectUpdateBatch.ProjectImageUpdates = project.ProjectImages.Select(pn =>
            {
                var currentFileResource = pn.FileResourceInfo;
                var newFileResource     = new FileResourceInfo(currentFileResource.FileResourceMimeType,
                                                               currentFileResource.OriginalBaseFilename,
                                                               currentFileResource.OriginalFileExtension,
                                                               Guid.NewGuid(),
                                                               currentFileResource.CreatePerson,
                                                               currentFileResource.CreateDate);
                newFileResource.FileResourceDatas.Add(new FileResourceData(newFileResource.FileResourceInfoID, currentFileResource.FileResourceData.Data));
                return(new ProjectImageUpdate(projectUpdateBatch, pn.ProjectImageTiming, pn.Caption, pn.Credit, pn.IsKeyPhoto, pn.ExcludeFromFactSheet)
                {
                    FileResourceInfo = newFileResource,
                    ProjectImageID = pn.ProjectImageID
                });
            }).ToList();
        }
 public static string GetFileResourceUrlScaledForPrint(this FileResourceInfo fileResourceInfo)
 {
     return(SitkaRoute <FileResourceController> .BuildUrlFromExpression(x =>
                                                                        x.GetFileResourceResized(fileResourceInfo.GetFileResourceGUIDAsString(), 500, 500)));
 }
        public IHttpActionResult PostPerformanceMeasure(string apiKey, [FromBody] PerformanceMeasureDto performanceMeasureDto)
        {
            Check.Require(apiKey == FirmaWebApiConfiguration.PsInfoApiKey, "Unrecognized api key!");
            var performanceMeasureType           = MapPerformanceMeasureTypeNameToPerformanceMeasureType(performanceMeasureDto.PerformanceMeasureTypeName);
            var performanceMeasureDataSourceType = MapPerformanceMeasureDataSourceTypeNameToPerformanceMeasureDataSourceType(performanceMeasureDto.PerformanceMeasureDataSourceTypeName);
            var measurementUnitType = MapMeasurementUnitTypeNameToMeasurementUnitType(performanceMeasureDto.MeasurementUnitTypeName);

            if (performanceMeasureType == null)
            {
                return(BadRequest($"Invalid Performance Measure Type: {performanceMeasureDto.PerformanceMeasureTypeName}"));
            }
            if (performanceMeasureDataSourceType == null)
            {
                return(BadRequest($"Invalid Performance Measure Data Source Type: {performanceMeasureDto.PerformanceMeasureDataSourceTypeName}"));
            }
            if (measurementUnitType == null)
            {
                return(BadRequest($"Invalid Measurement Unit: {performanceMeasureDto.MeasurementUnitTypeName}"));
            }
            var performanceMeasure = new PerformanceMeasure(performanceMeasureDto.PerformanceMeasureDisplayName,
                                                            measurementUnitType.MeasurementUnitTypeID, performanceMeasureType.PerformanceMeasureTypeID,
                                                            performanceMeasureDto.IsSummable, performanceMeasureDataSourceType.PerformanceMeasureDataSourceTypeID, performanceMeasureDto.CanBeChartedCumulatively, false);

            performanceMeasure.CriticalDefinitions          = performanceMeasureDto.CriticalDefinitions;
            performanceMeasure.PerformanceMeasureDefinition = performanceMeasureDto.PerformanceMeasureDefinition;
            performanceMeasure.ProjectReporting             = performanceMeasureDto.ProjectReporting;
            performanceMeasure.Importance            = performanceMeasureDto.Importance;
            performanceMeasure.AdditionalInformation = performanceMeasureDto.AdditionalInformation;

            // create file resources for images in the Importance rich text
            var fileResourceDtos      = performanceMeasureDto.FileResources;
            var fileResourceMimeTypes = fileResourceDtos.ToDictionary(x => new { x.FileResourceGUID, x.FileResourceMimeTypeName },
                                                                      x => MapFileResourceMimeTypeNameToFileResourceMimeType(x.FileResourceMimeTypeName));

            if (fileResourceMimeTypes.Values.Any(x => x == null))
            {
                var errors =
                    fileResourceMimeTypes.Where(x => x.Value == null).Select(x =>
                                                                             $"Invalid File Resource Mime Type '{x.Key.FileResourceMimeTypeName}' for '{x.Key.FileResourceGUID}'").ToList();
                return(BadRequest(string.Join("\r\n", errors)));
            }
            var peopleDictionary         = _databaseEntities.People.ToDictionary(x => x.Email);
            var performanceMeasureImages = fileResourceDtos.Select(x =>
            {
                var fileResourceMimeTypeID = fileResourceMimeTypes.Single(y => y.Key.FileResourceGUID == x.FileResourceGUID).Value.FileResourceMimeTypeID;
                var personID         = peopleDictionary.ContainsKey(x.Email) ? peopleDictionary[x.Email].PersonID : 5278;
                var fileResourceInfo = new FileResourceInfo(fileResourceMimeTypeID, x.OriginalBaseFilename, x.OriginalFileExtension, x.FileResourceGUID, personID, x.CreateDate);
                fileResourceInfo.FileResourceDatas.Add(new FileResourceData(fileResourceInfo.FileResourceInfoID, x.FileResourceData));
                var performanceMeasureImage = new PerformanceMeasureImage(performanceMeasure, fileResourceInfo);
                return(performanceMeasureImage);
            }).ToList();

            var tenantID = Tenant.ActionAgendaForPugetSound.TenantID;

            foreach (var performanceMeasureSubcategoryDto in performanceMeasureDto.PerformanceMeasureSubcategories)
            {
                var googleChartType = MapGoogleChartTypeNameToGoogleChartType(performanceMeasureSubcategoryDto.GoogleChartTypeName);
                if (googleChartType == null)
                {
                    return(BadRequest($"Invalid Google Chart Type '{performanceMeasureSubcategoryDto.GoogleChartTypeName}' for Subcategory '{performanceMeasureSubcategoryDto.PerformanceMeasureSubcategoryName}'"));
                }
                var performanceMeasureSubcategory = new PerformanceMeasureSubcategory(performanceMeasure, performanceMeasureSubcategoryDto.PerformanceMeasureSubcategoryName)
                {
                    ChartConfigurationJson = performanceMeasureSubcategoryDto.ChartConfigurationJson,
                    GoogleChartTypeID      = googleChartType.GoogleChartTypeID,
                    TenantID = tenantID
                };
                foreach (var performanceMeasureSubcategoryOptionDto in performanceMeasureSubcategoryDto.PerformanceMeasureSubcategoryOptions)
                {
                    var performanceMeasureSubcategoryOption = new PerformanceMeasureSubcategoryOption(performanceMeasureSubcategory, performanceMeasureSubcategoryOptionDto.PerformanceMeasureSubcategoryOptionName, false)
                    {
                        TenantID = tenantID
                    };
                }
            }
            _databaseEntities.AllPerformanceMeasures.Add(performanceMeasure);
            _databaseEntities.SaveChangesWithNoAuditing(tenantID);
            var performanceMeasureReloaded = new PerformanceMeasureDto(performanceMeasure);

            return(Ok(performanceMeasureReloaded));
        }
Esempio n. 15
0
 public PdfResult(FileResourceInfo fileResourceInfo) : base(fileResourceInfo.GetOriginalCompleteFileName(), fileResourceInfo.FileResourceData.Data, FileResourceMimeType.PDF)
 {
     Check.Require(fileResourceInfo.FileResourceMimeType == FileResourceMimeType.PDF, "Only a real PDF file can be saved off as PDF");
     ConstructorImpl(fileResourceInfo.GetOriginalCompleteFileName());
 }
 public static string GetFileResourceUrl(this FileResourceInfo fileResourceInfo)
 {
     return(FileResourceByGuidUrlTemplate.ParameterReplace(fileResourceInfo.GetFileResourceGUIDAsString()));
 }
 public static string FileResourceUrlScaledThumbnail(this FileResourceInfo fileResourceInfo, int maxHeight)
 {
     return(SitkaRoute <FileResourceController> .BuildUrlFromExpression(x => x.GetFileResourceResized(fileResourceInfo.GetFileResourceGUIDAsString(), maxHeight, maxHeight)));
 }
Esempio n. 18
0
 public void DeleteFullWithFileResource(DatabaseEntities dbContext)
 {
     // Looks kind of weird but it will cascade delete the ReportTemplate
     FileResourceInfo.DeleteFull(dbContext);
 }
 public static string GetFileResourceDataLengthString(this FileResourceInfo fileResourceInfo)
 {
     return($"(~{(fileResourceInfo.FileResourceData.Data.Length / 1000).ToGroupedNumeric()} KB)");
 }