diff --git a/common/ASC.Common/ASC.Common.csproj b/common/ASC.Common/ASC.Common.csproj index 27543bf4ce..789486810d 100644 --- a/common/ASC.Common/ASC.Common.csproj +++ b/common/ASC.Common/ASC.Common.csproj @@ -61,7 +61,6 @@ runtime; build; native; contentfiles; analyzers; buildtransitive --> - diff --git a/products/ASC.Files/Core/Core/Dao/TeamlabDao/FileDao.cs b/products/ASC.Files/Core/Core/Dao/TeamlabDao/FileDao.cs index 51d326a2a6..2e8b3e4990 100644 --- a/products/ASC.Files/Core/Core/Dao/TeamlabDao/FileDao.cs +++ b/products/ASC.Files/Core/Core/Dao/TeamlabDao/FileDao.cs @@ -123,13 +123,18 @@ namespace ASC.Files.Core.Data public File GetFile(int fileId) { var query = GetFileQuery(r => r.Id == fileId && r.CurrentVersion).AsNoTracking(); - return ToFile(FromQueryWithShared(query).SingleOrDefault()); + return ToFile( + FromQueryWithShared(query) + .Take(1) + .SingleOrDefault()); } public File GetFile(int fileId, int fileVersion) { var query = GetFileQuery(r => r.Id == fileId && r.Version == fileVersion).AsNoTracking(); - return ToFile(FromQueryWithShared(query).SingleOrDefault()); + return ToFile(FromQueryWithShared(query) + .Take(1) + .SingleOrDefault()); } public File GetFile(int parentId, string title) @@ -1328,9 +1333,11 @@ namespace ASC.Files.Core.Data .Where(x => x.tree.FolderId == r.FolderId) .OrderByDescending(r => r.tree.Level) .Select(r => r.folder) + .Take(1) .FirstOrDefault(), Shared = FilesDbContext.Security + .Where(x=> x.TenantId == TenantID) .Where(x => x.EntryType == FileEntryType.File) .Where(x => x.EntryId == r.Id.ToString()) .Any() @@ -1349,6 +1356,7 @@ namespace ASC.Files.Core.Data .Where(x => x.tree.FolderId == r.FolderId) .OrderByDescending(r => r.tree.Level) .Select(r => r.folder) + .Take(1) .FirstOrDefault(), Shared = true }); diff --git a/products/ASC.Files/Core/Core/Dao/TeamlabDao/FolderDao.cs b/products/ASC.Files/Core/Core/Dao/TeamlabDao/FolderDao.cs index e771c42f9f..85774565b2 100644 --- a/products/ASC.Files/Core/Core/Dao/TeamlabDao/FolderDao.cs +++ b/products/ASC.Files/Core/Core/Dao/TeamlabDao/FolderDao.cs @@ -353,13 +353,13 @@ namespace ASC.Files.Core.Data //full path to root var oldTree = FilesDbContext.Tree - .Where(r => r.FolderId == (int)folder.ParentFolderID); + .Where(r => r.FolderId == folder.ParentFolderID); foreach (var o in oldTree) { var treeToAdd = new DbFolderTree { - FolderId = (int)folder.ID, + FolderId = folder.ID, ParentId = o.ParentId, Level = o.Level + 1 }; @@ -1049,7 +1049,8 @@ namespace ASC.Files.Core.Data .Select(r => r.folder) .Take(1) .FirstOrDefault(), - Shared = FilesDbContext.Security + Shared = FilesDbContext.Security + .Where(x => x.TenantId == TenantID) .Where(r => r.EntryType == FileEntryType.Folder) .Where(x => x.EntryId == r.Id.ToString()) .Any() diff --git a/products/ASC.Files/Core/Core/Dao/TeamlabDao/TagDao.cs b/products/ASC.Files/Core/Core/Dao/TeamlabDao/TagDao.cs index ab17dc56c5..8b400a7eb3 100644 --- a/products/ASC.Files/Core/Core/Dao/TeamlabDao/TagDao.cs +++ b/products/ASC.Files/Core/Core/Dao/TeamlabDao/TagDao.cs @@ -28,7 +28,8 @@ using System; using System.Collections.Generic; using System.Globalization; using System.Linq; - +using System.Text.RegularExpressions; + using ASC.Common; using ASC.Core; using ASC.Core.Common.EF; @@ -457,15 +458,15 @@ namespace ASC.Files.Core.Data var shareQuery = new Func>(() => getBaseSqlQuery().Where( r => FilesDbContext.Security - .Where(a => a.TenantId == r.Link.TenantId) + .Where(a => a.TenantId == TenantID) .Where(a => a.EntryId == r.Link.EntryId) .Where(a => a.EntryType == r.Link.EntryType) .Any())); var tmpShareFileTags = shareQuery() - .Join(FilesDbContext.Files, r => r.Link.EntryId, f => f.Id.ToString(), (tagLink, file) => new { tagLink, file }) - .Where(r => r.file.TenantId == r.tagLink.Link.TenantId) + .Join(FilesDbContext.Files, r => Regex.IsMatch(r.Link.EntryId, "^[0-9]+$") ? Convert.ToInt32(r.Link.EntryId) : -1, f => f.Id, (tagLink, file) => new { tagLink, file }) + .Where(r => r.file.TenantId == TenantID) .Where(r => r.file.CreateBy != subject) .Where(r => r.tagLink.Link.EntryType == FileEntryType.File) .Select(r => new @@ -473,10 +474,11 @@ namespace ASC.Files.Core.Data r.tagLink, root = FilesDbContext.Folders .Join(FilesDbContext.Tree, a => a.Id, b => b.ParentId, (folder, tree) => new { folder, tree }) - .Where(x => x.folder.TenantId == r.file.TenantId) + .Where(x => x.folder.TenantId == TenantID) .Where(x => x.tree.FolderId == r.file.FolderId) .OrderByDescending(r => r.tree.Level) - .Select(r => r.folder) + .Select(r => r.folder) + .Take(1) .FirstOrDefault() }) .Where(r => r.root.FolderType == FolderType.USER) @@ -487,8 +489,8 @@ namespace ASC.Files.Core.Data var tmpShareFolderTags = shareQuery() - .Join(FilesDbContext.Folders, r => r.Link.EntryId, f => f.Id.ToString(), (tagLink, folder) => new { tagLink, folder }) - .Where(r => r.folder.TenantId == r.tagLink.Link.TenantId) + .Join(FilesDbContext.Folders, r => Regex.IsMatch(r.Link.EntryId, "^[0-9]+$") ? Convert.ToInt32(r.Link.EntryId) : -1, f => f.Id, (tagLink, folder) => new { tagLink, folder }) + .Where(r => r.folder.TenantId == TenantID) .Where(r => r.folder.CreateBy != subject) .Where(r => r.tagLink.Link.EntryType == FileEntryType.Folder) .Select(r => new @@ -496,10 +498,11 @@ namespace ASC.Files.Core.Data r.tagLink, root = FilesDbContext.Folders .Join(FilesDbContext.Tree, a => a.Id, b => b.ParentId, (folder, tree) => new { folder, tree }) - .Where(x => x.folder.TenantId == r.folder.TenantId) + .Where(x => x.folder.TenantId ==TenantID) .Where(x => x.tree.FolderId == r.folder.ParentId) .OrderByDescending(r => r.tree.Level) - .Select(r => r.folder) + .Select(r => r.folder) + .Take(1) .FirstOrDefault() }) .Where(r => r.root.FolderType == FolderType.USER) @@ -531,15 +534,15 @@ namespace ASC.Files.Core.Data var shareQuery = new Func>(() => getBaseSqlQuery().Where( r => FilesDbContext.Security - .Where(a => a.TenantId == r.Link.TenantId) + .Where(a => a.TenantId == TenantID) .Where(a => a.EntryId == r.Link.EntryId) .Where(a => a.EntryType == r.Link.EntryType) .Any())); var tmpShareFileTags = shareQuery() - .Join(FilesDbContext.Files, r => r.Link.EntryId, f => f.Id.ToString(), (tagLink, file) => new { tagLink, file }) - .Where(r => r.file.TenantId == r.tagLink.Link.TenantId) + .Join(FilesDbContext.Files, r => Regex.IsMatch(r.Link.EntryId, "^[0-9]+$") ? Convert.ToInt32(r.Link.EntryId) : -1, f => f.Id, (tagLink, file) => new { tagLink, file }) + .Where(r => r.file.TenantId == TenantID) .Where(r => r.file.CreateBy != subject) .Where(r => r.tagLink.Link.EntryType == FileEntryType.File) .Select(r => new @@ -547,10 +550,11 @@ namespace ASC.Files.Core.Data r.tagLink, root = FilesDbContext.Folders .Join(FilesDbContext.Tree, a => a.Id, b => b.ParentId, (folder, tree) => new { folder, tree }) - .Where(x => x.folder.TenantId == r.file.TenantId) + .Where(x => x.folder.TenantId == TenantID) .Where(x => x.tree.FolderId == r.file.FolderId) .OrderByDescending(r => r.tree.Level) - .Select(r => r.folder) + .Select(r => r.folder) + .Take(1) .FirstOrDefault() }) .Where(r => r.root.FolderType == FolderType.Privacy) @@ -561,8 +565,8 @@ namespace ASC.Files.Core.Data var tmpShareFolderTags = shareQuery() - .Join(FilesDbContext.Folders, r => r.Link.EntryId, f => f.Id.ToString(), (tagLink, folder) => new { tagLink, folder }) - .Where(r => r.folder.TenantId == r.tagLink.Link.TenantId) + .Join(FilesDbContext.Folders, r => Regex.IsMatch(r.Link.EntryId, "^[0-9]+$") ? Convert.ToInt32(r.Link.EntryId) : -1, f => f.Id, (tagLink, folder) => new { tagLink, folder }) + .Where(r => r.folder.TenantId == TenantID) .Where(r => r.folder.CreateBy != subject) .Where(r => r.tagLink.Link.EntryType == FileEntryType.Folder) .Select(r => new @@ -570,10 +574,11 @@ namespace ASC.Files.Core.Data r.tagLink, root = FilesDbContext.Folders .Join(FilesDbContext.Tree, a => a.Id, b => b.ParentId, (folder, tree) => new { folder, tree }) - .Where(x => x.folder.TenantId == r.folder.TenantId) + .Where(x => x.folder.TenantId == TenantID) .Where(x => x.tree.FolderId == r.folder.ParentId) .OrderByDescending(r => r.tree.Level) .Select(r => r.folder) + .Take(1) .FirstOrDefault() }) .Where(r => r.root.FolderType == FolderType.Privacy) @@ -626,7 +631,7 @@ namespace ASC.Files.Core.Data var newTagsForFiles = getBaseSqlQuery() - .Join(FilesDbContext.Files, r => r.Link.EntryId, r => r.Id.ToString(), (tagLink, file) => new { tagLink, file }) + .Join(FilesDbContext.Files, r => Regex.IsMatch(r.Link.EntryId, "^[0-9]+$") ? Convert.ToInt32(r.Link.EntryId) : -1, r => r.Id, (tagLink, file) => new { tagLink, file }) .Where(r => r.file.TenantId == r.tagLink.Link.TenantId) .Where(r => where.Any(a => r.file.FolderId.ToString() == a)) .Where(r => r.tagLink.Link.EntryType == FileEntryType.File) @@ -657,7 +662,7 @@ namespace ASC.Files.Core.Data var newTagsForSBox = getBaseSqlQuery() .Join(FilesDbContext.ThirdpartyIdMapping, r => r.Link.EntryId, r => r.HashId, (tagLink, mapping) => new { tagLink, mapping }) - .Where(r => r.mapping.TenantId == r.tagLink.Link.TenantId) + .Where(r => r.mapping.TenantId == TenantID) .Where(r => thirdpartyFolderIds.Any(a => r.mapping.Id == a)) .Where(r => r.tagLink.Tag.Owner == subject) .Where(r => r.tagLink.Link.EntryType == FileEntryType.Folder) @@ -672,7 +677,7 @@ namespace ASC.Files.Core.Data protected List FromQuery(IQueryable dbFilesTags) { return dbFilesTags - //.ToList() + .ToList() .Select(ToTag) .ToList(); } diff --git a/products/ASC.Files/Core/Core/EF/DbFilesTagLink.cs b/products/ASC.Files/Core/Core/EF/DbFilesTagLink.cs index 8aac237b2d..d31e0d3121 100644 --- a/products/ASC.Files/Core/Core/EF/DbFilesTagLink.cs +++ b/products/ASC.Files/Core/Core/EF/DbFilesTagLink.cs @@ -24,10 +24,10 @@ namespace ASC.Files.Core.EF public string EntryId { get; set; } [Column("create_by")] - public Guid CreateBy { get; set; } + public Guid? CreateBy { get; set; } [Column("create_on")] - public DateTime CreateOn { get; set; } + public DateTime? CreateOn { get; set; } [Column("tag_count")] public int TagCount { get; set; }