diff --git a/products/ASC.Files/Core/Core/Dao/TeamlabDao/FolderDao.cs b/products/ASC.Files/Core/Core/Dao/TeamlabDao/FolderDao.cs index 85774565b2..6073c3efa3 100644 --- a/products/ASC.Files/Core/Core/Dao/TeamlabDao/FolderDao.cs +++ b/products/ASC.Files/Core/Core/Dao/TeamlabDao/FolderDao.cs @@ -325,7 +325,7 @@ namespace ASC.Files.Core.Data var newFolder = new DbFolder { Id = 0, - ParentId = folder.ParentFolderID, + ParentId = folder.FolderID, Title = folder.Title, CreateOn = TenantUtil.DateTimeToUtc(folder.CreateOn), CreateBy = folder.CreateBy, @@ -353,7 +353,7 @@ namespace ASC.Files.Core.Data //full path to root var oldTree = FilesDbContext.Tree - .Where(r => r.FolderId == folder.ParentFolderID); + .Where(r => r.FolderId == folder.FolderID); foreach (var o in oldTree) { @@ -569,7 +569,7 @@ namespace ASC.Files.Core.Data folder.FolderType = FolderType.DEFAULT; var copy = ServiceProvider.GetService>(); - copy.ParentFolderID = toFolderId; + copy.FolderID = toFolderId; copy.RootFolderId = toFolder.RootFolderId; copy.RootFolderCreator = toFolder.RootFolderCreator; copy.RootFolderType = toFolder.RootFolderType; @@ -912,7 +912,7 @@ namespace ASC.Files.Core.Data if (createIfNotExists) { var folder = ServiceProvider.GetService>(); - folder.ParentFolderID = 0; + folder.FolderID = 0; switch (bunch) { case my: @@ -1080,7 +1080,7 @@ namespace ASC.Files.Core.Data if (r == null) return null; var result = ServiceProvider.GetService>(); result.ID = r.Folder.Id; - result.ParentFolderID = r.Folder.ParentId; + result.FolderID = r.Folder.ParentId; result.Title = r.Folder.Title; result.CreateOn = TenantUtil.DateTimeFromUtc(r.Folder.CreateOn); result.CreateBy = r.Folder.CreateBy; @@ -1132,7 +1132,7 @@ namespace ASC.Files.Core.Data break; } - if (result.FolderType != FolderType.DEFAULT && 0.Equals(result.ParentFolderID)) result.RootFolderType = result.FolderType; + if (result.FolderType != FolderType.DEFAULT && 0.Equals(result.FolderID)) result.RootFolderType = result.FolderType; if (result.FolderType != FolderType.DEFAULT && result.RootFolderCreator == default) result.RootFolderCreator = result.CreateBy; if (result.FolderType != FolderType.DEFAULT && 0.Equals(result.RootFolderId)) result.RootFolderId = result.ID; diff --git a/products/ASC.Files/Core/Core/Entries/File.cs b/products/ASC.Files/Core/Core/Entries/File.cs index eec26b2c87..6b7e42fd3a 100644 --- a/products/ASC.Files/Core/Core/Entries/File.cs +++ b/products/ASC.Files/Core/Core/Entries/File.cs @@ -77,8 +77,6 @@ namespace ASC.Files.Core FileConverter = fileConverter; } - public T FolderID { get; set; } - public int Version { get; set; } [JsonPropertyName("version_group")] @@ -242,19 +240,5 @@ namespace ASC.Files.Core [NonSerialized] private readonly FileConverter FileConverter; - - private T _folderIdDisplay; - - [JsonPropertyName("folder_id")] - public override T FolderIdDisplay - { - get - { - if (_folderIdDisplay != null) return _folderIdDisplay; - - return FolderID; - } - set { _folderIdDisplay = value; } - } } } \ No newline at end of file diff --git a/products/ASC.Files/Core/Core/Entries/FileEntry.cs b/products/ASC.Files/Core/Core/Entries/FileEntry.cs index 0c260bd9c3..920af3968b 100644 --- a/products/ASC.Files/Core/Core/Entries/FileEntry.cs +++ b/products/ASC.Files/Core/Core/Entries/FileEntry.cs @@ -129,13 +129,22 @@ namespace ASC.Files.Core { } - public T ID { get; set; } + public T ID { get; set; } + + public T FolderID { get; set; } + + private T _folderIdDisplay; [JsonPropertyName("folder_id")] - public abstract T FolderIdDisplay + public T FolderIdDisplay { - get; - set; + get + { + if (_folderIdDisplay != null) return _folderIdDisplay; + + return FolderID; + } + set { _folderIdDisplay = value; } } public T RootFolderId { get; set; } diff --git a/products/ASC.Files/Core/Core/Entries/Folder.cs b/products/ASC.Files/Core/Core/Entries/Folder.cs index 542e31f511..5927a8a0d9 100644 --- a/products/ASC.Files/Core/Core/Entries/Folder.cs +++ b/products/ASC.Files/Core/Core/Entries/Folder.cs @@ -68,8 +68,6 @@ namespace ASC.Files.Core { public FolderType FolderType { get; set; } - public T ParentFolderID { get; set; } - public int TotalFiles { get; set; } public int TotalSubFolders { get; set; } @@ -86,19 +84,6 @@ namespace ASC.Files.Core set { NewForMe = Convert.ToInt32(value); } } - private T _folderIdDisplay; - - public override T FolderIdDisplay - { - get - { - if (_folderIdDisplay != null) return _folderIdDisplay; - - return ParentFolderID; - } - set { _folderIdDisplay = value; } - } - public Folder(Global global) : base(global) { diff --git a/products/ASC.Files/Core/Core/FileStorageService.cs b/products/ASC.Files/Core/Core/FileStorageService.cs index 334fc349c0..53857be65b 100644 --- a/products/ASC.Files/Core/Core/FileStorageService.cs +++ b/products/ASC.Files/Core/Core/FileStorageService.cs @@ -300,8 +300,8 @@ namespace ASC.Web.Files.Services.WCFService var prevVisible = breadCrumbs.ElementAtOrDefault(breadCrumbs.Count() - 2); if (prevVisible != null) { - if (prevVisible is Folder f1) parent.ParentFolderID = (T)Convert.ChangeType(f1.ID, typeof(T)); - if (prevVisible is Folder f2) parent.ParentFolderID = (T)Convert.ChangeType(f2.ID, typeof(T)); + if (prevVisible is Folder f1) parent.FolderID = (T)Convert.ChangeType(f1.ID, typeof(T)); + if (prevVisible is Folder f2) parent.FolderID = (T)Convert.ChangeType(f2.ID, typeof(T)); } parent.Shareable = FileSharing.CanSetAccess(parent) @@ -398,7 +398,7 @@ namespace ASC.Web.Files.Services.WCFService { var newFolder = ServiceProvider.GetService>(); newFolder.Title = title; - newFolder.ParentFolderID = parent.ID; + newFolder.FolderID = parent.ID; var folderId = folderDao.SaveFolder(newFolder); var folder = folderDao.GetFolder(folderId); @@ -446,7 +446,7 @@ namespace ASC.Web.Files.Services.WCFService if (folder.RootFolderType == FolderType.USER && !Equals(folder.RootFolderCreator, AuthContext.CurrentAccount.ID) - && !FileSecurity.CanRead(folderDao.GetFolder(folder.ParentFolderID))) + && !FileSecurity.CanRead(folderDao.GetFolder(folder.FolderID))) { folder.FolderIdDisplay = GlobalFolderHelper.GetFolderShare(); } @@ -1556,7 +1556,7 @@ namespace ASC.Web.Files.Services.WCFService var folderIdToMy = folderDao.GetFolderIDUser(true, userTo.ID); var newFolder = ServiceProvider.GetService>(); newFolder.Title = string.Format(CustomNamingPeople.Substitute("TitleDeletedUserFolder"), userFrom.DisplayUserName(false, DisplayUserSettingsHelper)); - newFolder.ParentFolderID = folderIdToMy; + newFolder.FolderID = folderIdToMy; var newFolderTo = folderDao.SaveFolder(newFolder); diff --git a/products/ASC.Files/Core/Core/Security/FileSecurity.cs b/products/ASC.Files/Core/Core/Security/FileSecurity.cs index eb8206c758..943bba80b4 100644 --- a/products/ASC.Files/Core/Core/Security/FileSecurity.cs +++ b/products/ASC.Files/Core/Core/Security/FileSecurity.cs @@ -110,6 +110,11 @@ namespace ASC.Files.Core.Security public List, bool>> CanRead(IEnumerable> entry, Guid userId) { return Can(entry, userId, FilesSecurityActions.Read); + } + + public List, bool>> CanRead(IEnumerable> entry) + { + return Can(entry, AuthContext.CurrentAccount.ID, FilesSecurityActions.Read); } public bool CanRead(FileEntry entry, Guid userId) diff --git a/products/ASC.Files/Core/Core/Thirdparty/Box/BoxDaoBase.cs b/products/ASC.Files/Core/Core/Thirdparty/Box/BoxDaoBase.cs index a0f6412895..d812b62f92 100644 --- a/products/ASC.Files/Core/Core/Thirdparty/Box/BoxDaoBase.cs +++ b/products/ASC.Files/Core/Core/Thirdparty/Box/BoxDaoBase.cs @@ -128,7 +128,7 @@ namespace ASC.Files.Thirdparty.Box var folder = GetFolder(); folder.ID = MakeId(boxFolder.Id); - folder.ParentFolderID = isRoot ? null : MakeId(GetParentFolderId(boxFolder)); + folder.FolderID = isRoot ? null : MakeId(GetParentFolderId(boxFolder)); folder.CreateOn = isRoot ? ProviderInfo.CreateOn : (boxFolder.CreatedAt ?? default); folder.ModifiedOn = isRoot ? ProviderInfo.CreateOn : (boxFolder.ModifiedAt ?? default); diff --git a/products/ASC.Files/Core/Core/Thirdparty/Box/BoxFolderDao.cs b/products/ASC.Files/Core/Core/Thirdparty/Box/BoxFolderDao.cs index 5cc078257e..d62651270b 100644 --- a/products/ASC.Files/Core/Core/Thirdparty/Box/BoxFolderDao.cs +++ b/products/ASC.Files/Core/Core/Thirdparty/Box/BoxFolderDao.cs @@ -184,9 +184,9 @@ namespace ASC.Files.Thirdparty.Box return RenameFolder(folder, folder.Title); } - if (folder.ParentFolderID != null) + if (folder.FolderID != null) { - var boxFolderId = MakeBoxId(folder.ParentFolderID); + var boxFolderId = MakeBoxId(folder.FolderID); folder.Title = GetAvailableTitle(folder.Title, boxFolderId, IsExist); diff --git a/products/ASC.Files/Core/Core/Thirdparty/CrossDao.cs b/products/ASC.Files/Core/Core/Thirdparty/CrossDao.cs index ba9db453b6..446ddf5f8a 100644 --- a/products/ASC.Files/Core/Core/Thirdparty/CrossDao.cs +++ b/products/ASC.Files/Core/Core/Thirdparty/CrossDao.cs @@ -111,7 +111,7 @@ namespace ASC.Files.Core.Thirdparty var toFolder1 = ServiceProvider.GetService>(); toFolder1.Title = fromFolder.Title; - toFolder1.ParentFolderID = toConverter(toRootFolderId); + toFolder1.FolderID = toConverter(toRootFolderId); var toFolder = toFolderDao.GetFolder(fromFolder.Title, toConverter(toRootFolderId)); var toFolderId = toFolder != null diff --git a/products/ASC.Files/Core/Core/Thirdparty/Dropbox/DropboxDaoBase.cs b/products/ASC.Files/Core/Core/Thirdparty/Dropbox/DropboxDaoBase.cs index e8f0b430ec..75734c7826 100644 --- a/products/ASC.Files/Core/Core/Thirdparty/Dropbox/DropboxDaoBase.cs +++ b/products/ASC.Files/Core/Core/Thirdparty/Dropbox/DropboxDaoBase.cs @@ -123,7 +123,7 @@ namespace ASC.Files.Thirdparty.Dropbox var folder = GetFolder(); folder.ID = MakeId(dropboxFolder); - folder.ParentFolderID = isRoot ? null : MakeId(GetParentFolderPath(dropboxFolder)); + folder.FolderID = isRoot ? null : MakeId(GetParentFolderPath(dropboxFolder)); folder.CreateOn = isRoot ? ProviderInfo.CreateOn : default; folder.ModifiedOn = isRoot ? ProviderInfo.CreateOn : default; folder.Title = MakeFolderTitle(dropboxFolder); diff --git a/products/ASC.Files/Core/Core/Thirdparty/Dropbox/DropboxFolderDao.cs b/products/ASC.Files/Core/Core/Thirdparty/Dropbox/DropboxFolderDao.cs index e3b50b8e72..a857d46032 100644 --- a/products/ASC.Files/Core/Core/Thirdparty/Dropbox/DropboxFolderDao.cs +++ b/products/ASC.Files/Core/Core/Thirdparty/Dropbox/DropboxFolderDao.cs @@ -185,9 +185,9 @@ namespace ASC.Files.Thirdparty.Dropbox return RenameFolder(folder, folder.Title); } - if (folder.ParentFolderID != null) + if (folder.FolderID != null) { - var dropboxFolderPath = MakeDropboxPath(folder.ParentFolderID); + var dropboxFolderPath = MakeDropboxPath(folder.FolderID); folder.Title = GetAvailableTitle(folder.Title, dropboxFolderPath, IsExist); diff --git a/products/ASC.Files/Core/Core/Thirdparty/GoogleDrive/GoogleDriveDaoBase.cs b/products/ASC.Files/Core/Core/Thirdparty/GoogleDrive/GoogleDriveDaoBase.cs index 0e75c4e9d7..49a45297d5 100644 --- a/products/ASC.Files/Core/Core/Thirdparty/GoogleDrive/GoogleDriveDaoBase.cs +++ b/products/ASC.Files/Core/Core/Thirdparty/GoogleDrive/GoogleDriveDaoBase.cs @@ -137,7 +137,7 @@ namespace ASC.Files.Thirdparty.GoogleDrive var folder = GetFolder(); folder.ID = MakeId(driveEntry); - folder.ParentFolderID = isRoot ? null : MakeId(GetParentDriveId(driveEntry)); + folder.FolderID = isRoot ? null : MakeId(GetParentDriveId(driveEntry)); folder.CreateOn = isRoot ? ProviderInfo.CreateOn : (driveEntry.CreatedTime ?? default); folder.ModifiedOn = isRoot ? ProviderInfo.CreateOn : (driveEntry.ModifiedTime ?? default); diff --git a/products/ASC.Files/Core/Core/Thirdparty/GoogleDrive/GoogleDriveFolderDao.cs b/products/ASC.Files/Core/Core/Thirdparty/GoogleDrive/GoogleDriveFolderDao.cs index 7fa83abcd2..a0ecd5341d 100644 --- a/products/ASC.Files/Core/Core/Thirdparty/GoogleDrive/GoogleDriveFolderDao.cs +++ b/products/ASC.Files/Core/Core/Thirdparty/GoogleDrive/GoogleDriveFolderDao.cs @@ -181,9 +181,9 @@ namespace ASC.Files.Thirdparty.GoogleDrive return RenameFolder(folder, folder.Title); } - if (folder.ParentFolderID != null) + if (folder.FolderID != null) { - var driveFolderId = MakeDriveId(folder.ParentFolderID); + var driveFolderId = MakeDriveId(folder.FolderID); var driveFolder = ProviderInfo.Storage.InsertEntry(null, folder.Title, driveFolderId, true); diff --git a/products/ASC.Files/Core/Core/Thirdparty/IThirdPartyProviderDao.cs b/products/ASC.Files/Core/Core/Thirdparty/IThirdPartyProviderDao.cs index 942399e478..886a82f89f 100644 --- a/products/ASC.Files/Core/Core/Thirdparty/IThirdPartyProviderDao.cs +++ b/products/ASC.Files/Core/Core/Thirdparty/IThirdPartyProviderDao.cs @@ -280,7 +280,7 @@ namespace ASC.Files.Thirdparty InitFileEntryError(folder, entry); - folder.ParentFolderID = null; + folder.FolderID = null; return folder; } diff --git a/products/ASC.Files/Core/Core/Thirdparty/OneDrive/OneDriveDaoBase.cs b/products/ASC.Files/Core/Core/Thirdparty/OneDrive/OneDriveDaoBase.cs index aefab62c21..c2384647a1 100644 --- a/products/ASC.Files/Core/Core/Thirdparty/OneDrive/OneDriveDaoBase.cs +++ b/products/ASC.Files/Core/Core/Thirdparty/OneDrive/OneDriveDaoBase.cs @@ -123,7 +123,7 @@ namespace ASC.Files.Thirdparty.OneDrive var folder = GetFolder(); folder.ID = MakeId(isRoot ? string.Empty : onedriveFolder.Id); - folder.ParentFolderID = isRoot ? null : MakeId(GetParentFolderId(onedriveFolder)); + folder.FolderID = isRoot ? null : MakeId(GetParentFolderId(onedriveFolder)); folder.CreateOn = isRoot ? ProviderInfo.CreateOn : (onedriveFolder.CreatedDateTime.HasValue ? TenantUtil.DateTimeFromUtc(onedriveFolder.CreatedDateTime.Value.DateTime) : default); folder.ModifiedOn = isRoot ? ProviderInfo.CreateOn : (onedriveFolder.LastModifiedDateTime.HasValue ? TenantUtil.DateTimeFromUtc(onedriveFolder.LastModifiedDateTime.Value.DateTime) : default); diff --git a/products/ASC.Files/Core/Core/Thirdparty/OneDrive/OneDriveFolderDao.cs b/products/ASC.Files/Core/Core/Thirdparty/OneDrive/OneDriveFolderDao.cs index 4a9ac2c480..f1889c6940 100644 --- a/products/ASC.Files/Core/Core/Thirdparty/OneDrive/OneDriveFolderDao.cs +++ b/products/ASC.Files/Core/Core/Thirdparty/OneDrive/OneDriveFolderDao.cs @@ -181,9 +181,9 @@ namespace ASC.Files.Thirdparty.OneDrive return RenameFolder(folder, folder.Title); } - if (folder.ParentFolderID != null) + if (folder.FolderID != null) { - var onedriveFolderId = MakeOneDriveId(folder.ParentFolderID); + var onedriveFolderId = MakeOneDriveId(folder.FolderID); folder.Title = GetAvailableTitle(folder.Title, onedriveFolderId, IsExist); diff --git a/products/ASC.Files/Core/Core/Thirdparty/ProviderDao/ProviderFolderDao.cs b/products/ASC.Files/Core/Core/Thirdparty/ProviderDao/ProviderFolderDao.cs index 665e53651d..5e62b58943 100644 --- a/products/ASC.Files/Core/Core/Thirdparty/ProviderDao/ProviderFolderDao.cs +++ b/products/ASC.Files/Core/Core/Thirdparty/ProviderDao/ProviderFolderDao.cs @@ -156,14 +156,14 @@ filterType, subjectGroup, subjectID, searchText, searchSubfolders, checkShare); folder.ID = folderId; return newFolderId; } - if (folder.ParentFolderID != null) + if (folder.FolderID != null) { - var folderId = folder.ParentFolderID; + var folderId = folder.FolderID; var selector = GetSelector(folderId); - folder.ParentFolderID = selector.ConvertId(folderId); + folder.FolderID = selector.ConvertId(folderId); var folderDao = selector.GetFolderDao(folderId); var newFolderId = folderDao.SaveFolder(folder); - folder.ParentFolderID = folderId; + folder.FolderID = folderId; return newFolderId; } @@ -277,7 +277,7 @@ filterType, subjectGroup, subjectID, searchText, searchSubfolders, checkShare); var folderId = folder.ID; var selector = GetSelector(folderId); folder.ID = selector.ConvertId(folderId); - folder.ParentFolderID = selector.ConvertId(folder.ParentFolderID); + folder.FolderID = selector.ConvertId(folder.FolderID); var folderDao = selector.GetFolderDao(folderId); return folderDao.RenameFolder(folder, newTitle); } diff --git a/products/ASC.Files/Core/Core/Thirdparty/SharePoint/SharePointFolderDao.cs b/products/ASC.Files/Core/Core/Thirdparty/SharePoint/SharePointFolderDao.cs index aab9293251..353bf9c2a3 100644 --- a/products/ASC.Files/Core/Core/Thirdparty/SharePoint/SharePointFolderDao.cs +++ b/products/ASC.Files/Core/Core/Thirdparty/SharePoint/SharePointFolderDao.cs @@ -183,9 +183,9 @@ namespace ASC.Files.Thirdparty.SharePoint return ProviderInfo.ToFolder(savedfolder).ID; } - if (folder.ParentFolderID != null) + if (folder.FolderID != null) { - var parentFolder = ProviderInfo.GetFolderById(folder.ParentFolderID); + var parentFolder = ProviderInfo.GetFolderById(folder.FolderID); folder.Title = GetAvailableTitle(folder.Title, parentFolder, IsExist); diff --git a/products/ASC.Files/Core/Core/Thirdparty/SharePoint/SharePointProviderInfo.cs b/products/ASC.Files/Core/Core/Thirdparty/SharePoint/SharePointProviderInfo.cs index 3c2b072e16..2665cd06fd 100644 --- a/products/ASC.Files/Core/Core/Thirdparty/SharePoint/SharePointProviderInfo.cs +++ b/products/ASC.Files/Core/Core/Thirdparty/SharePoint/SharePointProviderInfo.cs @@ -500,7 +500,7 @@ namespace ASC.Files.Thirdparty.SharePoint if (folder is SharePointFolderErrorEntry errorFolder) { result.ID = MakeId(errorFolder.ID); - result.ParentFolderID = null; + result.FolderID = null; result.CreateBy = Owner; result.CreateOn = DateTime.UtcNow; result.FolderType = FolderType.DEFAULT; @@ -523,7 +523,7 @@ namespace ASC.Files.Thirdparty.SharePoint var isRoot = folder.ServerRelativeUrl == SpRootFolderId; result.ID = MakeId(isRoot ? "" : folder.ServerRelativeUrl); - result.ParentFolderID = isRoot ? null : MakeId(GetParentFolderId(folder.ServerRelativeUrl)); + result.FolderID = isRoot ? null : MakeId(GetParentFolderId(folder.ServerRelativeUrl)); result.CreateBy = Owner; result.CreateOn = CreateOn; result.FolderType = FolderType.DEFAULT; diff --git a/products/ASC.Files/Core/Core/Thirdparty/Sharpbox/SharpBoxDaoBase.cs b/products/ASC.Files/Core/Core/Thirdparty/Sharpbox/SharpBoxDaoBase.cs index dbb932b29d..4139bbc201 100644 --- a/products/ASC.Files/Core/Core/Thirdparty/Sharpbox/SharpBoxDaoBase.cs +++ b/products/ASC.Files/Core/Core/Thirdparty/Sharpbox/SharpBoxDaoBase.cs @@ -281,7 +281,7 @@ namespace ASC.Files.Thirdparty.Sharpbox var folder = GetFolder(); folder.ID = MakeId(fsEntry); - folder.ParentFolderID = isRoot ? null : MakeId(fsEntry.Parent); + folder.FolderID = isRoot ? null : MakeId(fsEntry.Parent); folder.CreateOn = isRoot ? ProviderInfo.CreateOn : fsEntry.Modified; folder.ModifiedOn = isRoot ? ProviderInfo.CreateOn : fsEntry.Modified; folder.RootFolderId = MakeId(RootFolder()); diff --git a/products/ASC.Files/Core/Core/Thirdparty/Sharpbox/SharpBoxFolderDao.cs b/products/ASC.Files/Core/Core/Thirdparty/Sharpbox/SharpBoxFolderDao.cs index fedc0ce2a2..b7bc204679 100644 --- a/products/ASC.Files/Core/Core/Thirdparty/Sharpbox/SharpBoxFolderDao.cs +++ b/products/ASC.Files/Core/Core/Thirdparty/Sharpbox/SharpBoxFolderDao.cs @@ -186,9 +186,9 @@ namespace ASC.Files.Thirdparty.Sharpbox var savedfolder = ProviderInfo.Storage.CreateFolder(MakePath(folder.ID)); return MakeId(savedfolder); } - if (folder.ParentFolderID != null) + if (folder.FolderID != null) { - var parentFolder = GetFolderById(folder.ParentFolderID); + var parentFolder = GetFolderById(folder.FolderID); folder.Title = GetAvailableTitle(folder.Title, parentFolder, IsExist); @@ -390,7 +390,7 @@ namespace ASC.Files.Thirdparty.Sharpbox } else { - var parentFolder = GetFolderById(folder.ParentFolderID); + var parentFolder = GetFolderById(folder.FolderID); newTitle = GetAvailableTitle(newTitle, parentFolder, IsExist); //rename folder diff --git a/products/ASC.Files/Core/Helpers/Global.cs b/products/ASC.Files/Core/Helpers/Global.cs index 47f3d64350..dc51782511 100644 --- a/products/ASC.Files/Core/Helpers/Global.cs +++ b/products/ASC.Files/Core/Helpers/Global.cs @@ -566,7 +566,7 @@ namespace ASC.Web.Files.Classes { var folder = ServiceProvider.GetService>(); folder.Title = folderName; - folder.ParentFolderID = folderId; + folder.FolderID = folderId; var subFolderId = folderDao.SaveFolder(folder); diff --git a/products/ASC.Files/Core/Model/FileOperationWraper.cs b/products/ASC.Files/Core/Model/FileOperationWraper.cs index a61fc76423..5114be0ff9 100644 --- a/products/ASC.Files/Core/Model/FileOperationWraper.cs +++ b/products/ASC.Files/Core/Model/FileOperationWraper.cs @@ -199,7 +199,7 @@ namespace ASC.Api.Documents { var folderDao = DaoFactory.GetFolderDao(); return folderDao.GetFolders(folders.ToArray()) - .Select(FolderWrapperHelper.Get) + .Select(r => FolderWrapperHelper.Get(r)) .Cast(); } @@ -207,7 +207,7 @@ namespace ASC.Api.Documents { var fileDao = DaoFactory.GetFileDao(); return fileDao.GetFiles(files.ToArray()) - .Select(FilesWrapperHelper.Get) + .Select(r => FilesWrapperHelper.Get(r)) .Cast(); } } diff --git a/products/ASC.Files/Core/Model/FileWrapper.cs b/products/ASC.Files/Core/Model/FileWrapper.cs index c159fe4768..51db2954a2 100644 --- a/products/ASC.Files/Core/Model/FileWrapper.cs +++ b/products/ASC.Files/Core/Model/FileWrapper.cs @@ -25,8 +25,10 @@ using System; +using System.Collections.Generic; using System.Globalization; - +using System.Linq; + using ASC.Api.Core; using ASC.Api.Utils; using ASC.Common; @@ -171,47 +173,68 @@ namespace ASC.Api.Documents FileUtility = fileUtility; } - public FileWrapper Get(File file) + public FileWrapper Get(File file, List, bool>> folders = null) { - var result = Get, T>(file); + var result = GetFileWrapper(file); + result.FolderId = file.FolderID; if (file.RootFolderType == FolderType.USER && !Equals(file.RootFolderCreator, AuthContext.CurrentAccount.ID)) { result.RootFolderType = FolderType.SHARE; - var folderDao = DaoFactory.GetFolderDao(); - var parentFolder = folderDao.GetFolder(file.FolderID); - if (!FileSecurity.CanRead(parentFolder)) - { - result.FolderId = GlobalFolderHelper.GetFolderShare(); + var folderDao = DaoFactory.GetFolderDao(); + FileEntry parentFolder; + + if(folders != null) + { + var folderWithRight = folders.FirstOrDefault(f => f.Item1.ID.Equals(file.FolderID)); + if (folderWithRight == null || !folderWithRight.Item2) + { + result.FolderId = GlobalFolderHelper.GetFolderShare(); + } + } + else + { + parentFolder = folderDao.GetFolder(file.FolderID); + if (!FileSecurity.CanRead(parentFolder)) + { + result.FolderId = GlobalFolderHelper.GetFolderShare(); + } } - } + } + - result.FileExst = FileUtility.GetFileExtension(file.Title); - result.FileType = FileUtility.GetFileTypeByExtention(result.FileExst); - - result.Version = file.Version; - result.VersionGroup = file.VersionGroup; - result.ContentLength = file.ContentLengthString; - result.FileStatus = file.FileStatus; - result.PureContentLength = file.ContentLength.NullIfDefault(); - result.Comment = file.Comment; + return result; + } + + private FileWrapper GetFileWrapper(File file) + { + var result = Get, T>(file); + + result.FileExst = FileUtility.GetFileExtension(file.Title); + result.FileType = FileUtility.GetFileTypeByExtention(result.FileExst); + result.Version = file.Version; + result.VersionGroup = file.VersionGroup; + result.ContentLength = file.ContentLengthString; + result.FileStatus = file.FileStatus; + result.PureContentLength = file.ContentLength.NullIfDefault(); + result.Comment = file.Comment; result.Encrypted = file.Encrypted.NullIfDefault(); result.Locked = file.Locked.NullIfDefault(); result.LockedBy = file.LockedBy; - - try - { - result.ViewUrl = CommonLinkUtility.GetFullAbsolutePath(file.DownloadUrl); - - result.WebUrl = CommonLinkUtility.GetFullAbsolutePath(FilesLinkUtility.GetFileWebPreviewUrl(FileUtility, file.Title, file.ID)); - } - catch (Exception) - { - //Don't catch anything here because of httpcontext - } - - return result; + + try + { + result.ViewUrl = CommonLinkUtility.GetFullAbsolutePath(file.DownloadUrl); + + result.WebUrl = CommonLinkUtility.GetFullAbsolutePath(FilesLinkUtility.GetFileWebPreviewUrl(FileUtility, file.Title, file.ID)); + } + catch (Exception) + { + //Don't catch anything here because of httpcontext + } + + return result; } } } \ No newline at end of file diff --git a/products/ASC.Files/Core/Model/FolderContentWrapper.cs b/products/ASC.Files/Core/Model/FolderContentWrapper.cs index 8ee26e9bb1..3b24b77f6b 100644 --- a/products/ASC.Files/Core/Model/FolderContentWrapper.cs +++ b/products/ASC.Files/Core/Model/FolderContentWrapper.cs @@ -32,6 +32,7 @@ using System.Text.Json.Serialization; using ASC.Common; using ASC.Files.Core; +using ASC.Files.Core.Security; using ASC.Web.Files.Services.WCFService; namespace ASC.Api.Documents @@ -104,20 +105,29 @@ namespace ASC.Api.Documents [Scope] public class FolderContentWrapperHelper - { + { + private FileSecurity FileSecurity { get; } + private IDaoFactory DaoFactory { get; } private FileWrapperHelper FileWrapperHelper { get; } private FolderWrapperHelper FolderWrapperHelper { get; } - public FolderContentWrapperHelper( + public FolderContentWrapperHelper( + FileSecurity fileSecurity, + IDaoFactory daoFactory, FileWrapperHelper fileWrapperHelper, FolderWrapperHelper folderWrapperHelper) - { + { + FileSecurity = fileSecurity; + DaoFactory = daoFactory; FileWrapperHelper = fileWrapperHelper; FolderWrapperHelper = folderWrapperHelper; } public FolderContentWrapper Get(DataWrapper folderItems, int startIndex) - { + { + var foldersIntWithRights = GetFoldersIntWithRights(); + var foldersStringWithRights = GetFoldersIntWithRights(); + var result = new FolderContentWrapper { Files = folderItems.Entries @@ -127,11 +137,11 @@ namespace ASC.Api.Documents FileEntryWrapper wrapper = null; if (r is File fol1) { - wrapper = FileWrapperHelper.Get(fol1); + wrapper = FileWrapperHelper.Get(fol1, foldersIntWithRights); } if (r is File fol2) { - wrapper = FileWrapperHelper.Get(fol2); + wrapper = FileWrapperHelper.Get(fol2, foldersStringWithRights); } return wrapper; @@ -145,11 +155,11 @@ namespace ASC.Api.Documents FileEntryWrapper wrapper = null; if (r is Folder fol1) { - wrapper = FolderWrapperHelper.Get(fol1); + wrapper = FolderWrapperHelper.Get(fol1, foldersIntWithRights); } if (r is Folder fol2) { - wrapper = FolderWrapperHelper.Get(fol2); + wrapper = FolderWrapperHelper.Get(fol2, foldersStringWithRights); } return wrapper; @@ -164,7 +174,15 @@ namespace ASC.Api.Documents result.Total = folderItems.Total; result.New = folderItems.New; - return result; + return result; + + + List, bool>> GetFoldersIntWithRights() + { + var folderDao = DaoFactory.GetFolderDao(); + var folders = folderDao.GetFolders(folderItems.Entries.OfType>().Select(r => r.FolderID).ToArray()); + return FileSecurity.CanRead(folders); + } } } diff --git a/products/ASC.Files/Core/Model/FolderWrapper.cs b/products/ASC.Files/Core/Model/FolderWrapper.cs index c0080d17a8..dadcfc6656 100644 --- a/products/ASC.Files/Core/Model/FolderWrapper.cs +++ b/products/ASC.Files/Core/Model/FolderWrapper.cs @@ -25,7 +25,9 @@ using System; - +using System.Collections.Generic; +using System.Linq; + using ASC.Api.Core; using ASC.Api.Utils; using ASC.Common; @@ -113,27 +115,49 @@ namespace ASC.Api.Documents GlobalFolderHelper = globalFolderHelper; } - public FolderWrapper Get(Folder folder) + public FolderWrapper Get(Folder folder, List, bool>> folders = null) { - var result = Get, T>(folder); - result.ParentId = folder.ParentFolderID; + var result = GetFolderWrapper(folder); + + result.ParentId = folder.FolderID; + if (folder.RootFolderType == FolderType.USER && !Equals(folder.RootFolderCreator, AuthContext.CurrentAccount.ID)) { result.RootFolderType = FolderType.SHARE; - var folderDao = DaoFactory.GetFolderDao(); - var parentFolder = folderDao.GetFolder(folder.ParentFolderID); - if (!FileSecurity.CanRead(parentFolder)) - result.ParentId = GlobalFolderHelper.GetFolderShare(); + var folderDao = DaoFactory.GetFolderDao(); + FileEntry parentFolder; + + if (folders != null) + { + var folderWithRight = folders.FirstOrDefault(f => f.Item1.ID.Equals(folder.FolderID)); + if (folderWithRight == null || !folderWithRight.Item2) + { + result.ParentId = GlobalFolderHelper.GetFolderShare(); + } + } + else + { + parentFolder = folderDao.GetFolder(folder.FolderID); + if (!FileSecurity.CanRead(parentFolder)) + { + result.ParentId = GlobalFolderHelper.GetFolderShare(); + } + } } + return result; + } + + private FolderWrapper GetFolderWrapper(Folder folder) + { + var result = Get, T>(folder); result.FilesCount = folder.TotalFiles; result.FoldersCount = folder.TotalSubFolders; result.IsShareable = folder.Shareable.NullIfDefault(); - result.New = folder.NewForMe; - - return result; + result.New = folder.NewForMe; + return result; } } } \ No newline at end of file diff --git a/products/ASC.Files/Core/Services/WCFService/FileOperations/FileMoveCopyOperation.cs b/products/ASC.Files/Core/Services/WCFService/FileOperations/FileMoveCopyOperation.cs index d6eab1308a..de1b85bc6a 100644 --- a/products/ASC.Files/Core/Services/WCFService/FileOperations/FileMoveCopyOperation.cs +++ b/products/ASC.Files/Core/Services/WCFService/FileOperations/FileMoveCopyOperation.cs @@ -199,7 +199,7 @@ namespace ASC.Web.Files.Services.WCFService.FileOperations { Error = FilesCommonResource.ErrorMassage_SecurityException_MoveFolder; } - else if (!Equals((folder.ParentFolderID ?? default).ToString(), toFolderId.ToString()) || _resolveType == FileConflictResolveType.Duplicate) + else if (!Equals((folder.FolderID ?? default).ToString(), toFolderId.ToString()) || _resolveType == FileConflictResolveType.Duplicate) { try { diff --git a/products/ASC.Files/Core/Utils/EntryManager.cs b/products/ASC.Files/Core/Utils/EntryManager.cs index 36730f658e..8c242b479b 100644 --- a/products/ASC.Files/Core/Utils/EntryManager.cs +++ b/products/ASC.Files/Core/Utils/EntryManager.cs @@ -697,7 +697,7 @@ namespace ASC.Web.Files.Utils //Fake folder. Don't send request to third party var folder = ServiceProvider.GetService>(); - folder.ParentFolderID = parentFolderId; + folder.FolderID = parentFolderId; folder.ID = providerInfo.RootFolderId; folder.CreateBy = providerInfo.Owner; diff --git a/products/ASC.Files/Core/Utils/FileMarker.cs b/products/ASC.Files/Core/Utils/FileMarker.cs index d2507c1d6b..807a8c27e6 100644 --- a/products/ASC.Files/Core/Utils/FileMarker.cs +++ b/products/ASC.Files/Core/Utils/FileMarker.cs @@ -569,7 +569,7 @@ namespace ASC.Web.Files.Utils var parentId = entry.FileEntryType == FileEntryType.File ? ((File)entry).FolderID - : ((Folder)entry).ParentFolderID; + : ((Folder)entry).FolderID; var parentEntry = entryTags.Keys.FirstOrDefault(entryCountTag => Equals(entryCountTag.ID, parentId)); if (parentEntry != null) diff --git a/products/ASC.Files/Core/Utils/FileUploader.cs b/products/ASC.Files/Core/Utils/FileUploader.cs index d17df5883a..908cc13760 100644 --- a/products/ASC.Files/Core/Utils/FileUploader.cs +++ b/products/ASC.Files/Core/Utils/FileUploader.cs @@ -213,7 +213,7 @@ namespace ASC.Web.Files.Utils { var newFolder = ServiceProvider.GetService>(); newFolder.Title = subFolderTitle; - newFolder.ParentFolderID = folderId; + newFolder.FolderID = folderId; folderId = folderDao.SaveFolder(newFolder); diff --git a/products/ASC.Files/Server/Controllers/FilesController.cs b/products/ASC.Files/Server/Controllers/FilesController.cs index 9aea079d8e..631a2f9113 100644 --- a/products/ASC.Files/Server/Controllers/FilesController.cs +++ b/products/ASC.Files/Server/Controllers/FilesController.cs @@ -1799,7 +1799,7 @@ namespace ASC.Api.Documents public IEnumerable> GetCommonThirdPartyFolders() { var parent = FileStorageServiceInt.GetFolder(GlobalFolderHelper.FolderCommon); - return EntryManager.GetThirpartyFolders(parent).Select(FolderWrapperHelper.Get).ToList(); + return EntryManager.GetThirpartyFolders(parent).Select(r => FolderWrapperHelper.Get(r)).ToList(); } /// diff --git a/products/ASC.Files/Server/Helpers/FilesControllerHelper.cs b/products/ASC.Files/Server/Helpers/FilesControllerHelper.cs index 7bd47e0a7e..77f254a722 100644 --- a/products/ASC.Files/Server/Helpers/FilesControllerHelper.cs +++ b/products/ASC.Files/Server/Helpers/FilesControllerHelper.cs @@ -489,13 +489,13 @@ namespace ASC.Files.Helpers public IEnumerable> GetFileVersionInfo(T fileId) { var files = FileStorageService.GetFileHistory(fileId); - return files.Select(FileWrapperHelper.Get); + return files.Select(r=> FileWrapperHelper.Get(r)); } public IEnumerable> ChangeHistory(T fileId, int version, bool continueVersion) { var history = FileStorageService.CompleteVersion(fileId, version, continueVersion).Value; - return history.Select(FileWrapperHelper.Get); + return history.Select(r=> FileWrapperHelper.Get(r)); } public FileWrapper LockFile(T fileId, bool lockFile) diff --git a/products/ASC.Files/Service/Core/FoldersModule.cs b/products/ASC.Files/Service/Core/FoldersModule.cs index 3247b1b5cf..5a9612990a 100644 --- a/products/ASC.Files/Service/Core/FoldersModule.cs +++ b/products/ASC.Files/Service/Core/FoldersModule.cs @@ -87,10 +87,10 @@ namespace ASC.Files.Service.Core .Where(f => f.Item1.RootFolderType != FolderType.TRASH && f.Item1.RootFolderType != FolderType.BUNCH) .ToList(); - var parentFolderIDs = folders.Select(r => r.Item1.ParentFolderID).ToArray(); + var parentFolderIDs = folders.Select(r => r.Item1.FolderID).ToArray(); var parentFolders = FolderDao.GetFolders(parentFolderIDs, checkShare: false); - return folders.Select(f => new Tuple(ToFeed(f, parentFolders.FirstOrDefault(r => r.ID.Equals(f.Item1.ParentFolderID))), f)); + return folders.Select(f => new Tuple(ToFeed(f, parentFolders.FirstOrDefault(r => r.ID.Equals(f.Item1.FolderID))), f)); } private Feed.Aggregator.Feed ToFeed((Folder, SmallShareRecord) tuple, Folder rootFolder) @@ -109,12 +109,12 @@ namespace ASC.Files.Service.Core Module = Name, Title = folder.Title, ExtraLocation = rootFolder.FolderType == FolderType.DEFAULT ? rootFolder.Title : string.Empty, - ExtraLocationUrl = rootFolder.FolderType == FolderType.DEFAULT ? FilesLinkUtility.GetFileRedirectPreviewUrl(folder.ParentFolderID, false) : string.Empty, + ExtraLocationUrl = rootFolder.FolderType == FolderType.DEFAULT ? FilesLinkUtility.GetFileRedirectPreviewUrl(folder.FolderID, false) : string.Empty, Keywords = string.Format("{0}", folder.Title), HasPreview = false, CanComment = false, Target = shareRecord.ShareTo, - GroupId = GetGroupId(sharedFolderItem, shareRecord.ShareBy, folder.ParentFolderID.ToString()) + GroupId = GetGroupId(sharedFolderItem, shareRecord.ShareBy, folder.FolderID.ToString()) }; return feed; @@ -129,12 +129,12 @@ namespace ASC.Files.Service.Core Module = Name, Title = folder.Title, ExtraLocation = rootFolder.FolderType == FolderType.DEFAULT ? rootFolder.Title : string.Empty, - ExtraLocationUrl = rootFolder.FolderType == FolderType.DEFAULT ? FilesLinkUtility.GetFileRedirectPreviewUrl(folder.ParentFolderID, false) : string.Empty, + ExtraLocationUrl = rootFolder.FolderType == FolderType.DEFAULT ? FilesLinkUtility.GetFileRedirectPreviewUrl(folder.FolderID, false) : string.Empty, Keywords = string.Format("{0}", folder.Title), HasPreview = false, CanComment = false, Target = null, - GroupId = GetGroupId(folderItem, folder.CreateBy, folder.ParentFolderID.ToString()) + GroupId = GetGroupId(folderItem, folder.CreateBy, folder.FolderID.ToString()) }; } }