Merge branch 'master' into feature/crm-migrate

This commit is contained in:
Alexey Bannov 2020-03-16 12:00:45 +03:00
commit d078909a78
16 changed files with 2833 additions and 2860 deletions

View File

@ -26,6 +26,7 @@
using System;
using System.Linq;
using Newtonsoft.Json;
namespace ASC.Common.Threading
@ -44,7 +45,7 @@ namespace ASC.Common.Threading
}
set
{
DistributedTaskCache.InstanceId = value;
DistributedTaskCache.InstanceId = value?.ToString() ?? "";
}
}
public string Id
@ -55,7 +56,7 @@ namespace ASC.Common.Threading
}
private set
{
DistributedTaskCache.Id = value;
DistributedTaskCache.Id = value?.ToString() ?? "";
}
}
@ -79,7 +80,7 @@ namespace ASC.Common.Threading
}
internal set
{
DistributedTaskCache.Exception = value.ToString();
DistributedTaskCache.Exception = value?.ToString() ?? "";
}
}
@ -90,6 +91,10 @@ namespace ASC.Common.Threading
Id = Guid.NewGuid().ToString()
};
}
public DistributedTask(DistributedTaskCache distributedTaskCache)
{
DistributedTaskCache = distributedTaskCache;
}
public T GetProperty<T>(string name)
@ -106,15 +111,17 @@ namespace ASC.Common.Threading
Key = name,
Value = JsonConvert.SerializeObject(value)
};
var current = DistributedTaskCache.Props.SingleOrDefault(r => r.Key == name);
if (current != null)
{
DistributedTaskCache.Props.Remove(current);
}
if (value != null)
{
DistributedTaskCache.Props.Add(prop);
}
else
{
DistributedTaskCache.Props.Remove(prop);
}
}
public void PublishChanges()

View File

@ -28,6 +28,7 @@ using System;
using System.Collections.Concurrent;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Threading;
using System.Threading.Tasks;
@ -46,6 +47,8 @@ namespace ASC.Common.Threading
{
Cancelations = new ConcurrentDictionary<string, CancellationTokenSource>();
Cache = AscCache.Memory;
this.notify = notify;
notify.Subscribe((c) =>
@ -155,8 +158,8 @@ namespace ASC.Common.Threading
}
public IEnumerable<DistributedTask> GetTasks()
{
var tasks = new List<DistributedTask>(cache.HashGetAll<DistributedTask>(key).Values);
{
var tasks = cache.HashGetAll<DistributedTaskCache>(key).Values.Select(r => new DistributedTask(r)).ToList();
tasks.ForEach(t =>
{
if (t.Publication == null)
@ -169,7 +172,7 @@ namespace ASC.Common.Threading
public DistributedTask GetTask(string id)
{
var task = cache.HashGet<DistributedTask>(key, id);
var task = new DistributedTask(cache.HashGet<DistributedTaskCache>(key, id));
if (task != null && task.Publication == null)
{
task.Publication = GetPublication();

View File

@ -101,6 +101,8 @@ namespace ASC.Core
internal HttpContext HttpContext { get; set; }
internal CoreBaseSettings CoreBaseSettings { get; set; }
internal CoreSettings CoreSettings { get; set; }
public Tenant CurrentTenant { get; set; }
static TenantManager()
{
@ -214,7 +216,12 @@ namespace ASC.Core
public Tenant GetCurrentTenant(bool throwIfNotFound, HttpContext context)
{
Tenant tenant = null;
Tenant tenant = null;
if (CurrentTenant != null)
{
return CurrentTenant;
}
if (context != null)
{
tenant = context.Items[CURRENT_TENANT] as Tenant;
@ -248,8 +255,8 @@ namespace ASC.Core
public void SetCurrentTenant(Tenant tenant)
{
if (tenant != null)
{
CallContext.SetData(CURRENT_TENANT, tenant);
{
CurrentTenant = tenant;
if (HttpContext != null)
{
HttpContext.Items[CURRENT_TENANT] = tenant;

View File

@ -9,7 +9,7 @@
"ConnectionStrings": {
"default": {
"name": "default",
"connectionString": "Server=172.18.0.5;Port=3306;Database=onlyoffice;User ID=onlyoffice_user;Password=onlyoffice_pass;Pooling=true;Character Set=utf8;AutoEnlist=false;SSL Mode=none",
"connectionString": "Server=172.18.0.5;Port=3306;Database=onlyoffice;User ID=onlyoffice_user;Password=onlyoffice_pass;Pooling=true;Character Set=utf8;AutoEnlist=false;SSL Mode=none;AllowPublicKeyRetrieval=True",
"providerName": "MySql.Data.MySqlClient"
}
},

File diff suppressed because it is too large Load Diff

View File

@ -1536,7 +1536,7 @@ namespace ASC.Api.Documents
var startIndex = Convert.ToInt32(ApiContext.StartIndex);
return FolderContentWrapperHelper.Get(FileStorageService.GetFolderItems(folderId.ToString(),
startIndex,
Convert.ToInt32(ApiContext.Count) - 1, //NOTE: in ApiContext +1
Convert.ToInt32(ApiContext.Count), //NOTE: last value: Convert.ToInt32(ApiContext.Count) - 1; in ApiContext +1
filterType,
filterType == FilterType.ByUser,
userIdOrGroupId.ToString(),

View File

@ -174,16 +174,16 @@ namespace ASC.Files.Core.Data
return MappingID(id, false);
}
internal static bool BuildSearch(IDbSearch dbSearch, string text, SearhTypeEnum searhTypeEnum)
internal static IQueryable<T> BuildSearch<T>(IQueryable<T> query, string text, SearhTypeEnum searhTypeEnum) where T : IDbSearch
{
var lowerTitle = dbSearch.Title.ToLower();
var lowerText = text.ToLower().Trim().Replace("%", "\\%").Replace("_", "\\_");
return searhTypeEnum switch
{
SearhTypeEnum.Start => lowerTitle.StartsWith(lowerText),
SearhTypeEnum.End => lowerTitle.EndsWith(lowerText),
SearhTypeEnum.Any => lowerTitle.Contains(lowerText),
_ => lowerTitle.EndsWith(lowerText),
SearhTypeEnum.Start => query.Where(r => r.Title.ToLower().StartsWith(lowerText)),
SearhTypeEnum.End => query.Where(r => r.Title.ToLower().EndsWith(lowerText)),
SearhTypeEnum.Any => query.Where(r => r.Title.ToLower().Contains(lowerText)),
_ => query,
};
}

View File

@ -108,13 +108,15 @@ namespace ASC.Files.Core.Data
public File GetFile(object fileId)
{
var query = GetFileQuery(r => r.Id.ToString() == fileId.ToString() && r.CurrentVersion);
var fileIdString = fileId.ToString();
var query = GetFileQuery(r => r.Id.ToString() == fileIdString && r.CurrentVersion);
return FromQueryWithShared(query).SingleOrDefault();
}
public File GetFile(object fileId, int fileVersion)
{
var query = GetFileQuery(r => r.Id.ToString() == fileId.ToString() && r.Version == fileVersion);
var fileIdString = fileId.ToString();
var query = GetFileQuery(r => r.Id.ToString() == fileIdString && r.Version == fileVersion);
return FromQueryWithShared(query).SingleOrDefault();
}
@ -122,7 +124,8 @@ namespace ASC.Files.Core.Data
{
if (string.IsNullOrEmpty(title)) throw new ArgumentNullException(title);
var query = GetFileQuery(r => r.Title == title && r.CurrentVersion == true && r.FolderId.ToString() == parentId.ToString())
var parentIdString = parentId.ToString();
var query = GetFileQuery(r => r.Title == title && r.CurrentVersion == true && r.FolderId.ToString() == parentIdString)
.OrderBy(r => r.CreateOn);
return FromQueryWithShared(query).FirstOrDefault();
@ -130,7 +133,8 @@ namespace ASC.Files.Core.Data
public File GetFileStable(object fileId, int fileVersion = -1)
{
var query = GetFileQuery(r => r.Id.ToString() == fileId.ToString() && r.Forcesave == ForcesaveType.None);
var fileIdString = fileId.ToString();
var query = GetFileQuery(r => r.Id.ToString() == fileIdString && r.Forcesave == ForcesaveType.None);
if (fileVersion >= 0)
{
@ -144,7 +148,8 @@ namespace ASC.Files.Core.Data
public List<File> GetFileHistory(object fileId)
{
var query = GetFileQuery(r => r.Id.ToString() == fileId.ToString()).OrderByDescending(r => r.Version);
var fileIdString = fileId.ToString();
var query = GetFileQuery(r => r.Id.ToString() == fileIdString).OrderByDescending(r => r.Version);
return FromQueryWithShared(query);
}
@ -153,7 +158,8 @@ namespace ASC.Files.Core.Data
{
if (fileIds == null || fileIds.Length == 0) return new List<File>();
var query = GetFileQuery(r => fileIds.Any(a => a.ToString() == r.Id.ToString()) && r.CurrentVersion);
var fileIdsString = fileIds.Select(r => r.ToString()).ToList();
var query = GetFileQuery(r => fileIdsString.Any(a => a == r.Id.ToString()) && r.CurrentVersion);
return FromQueryWithShared(query);
}
@ -175,7 +181,7 @@ namespace ASC.Files.Core.Data
}
else
{
query = query.Where(r => BuildSearch(r, searchText, SearhTypeEnum.Any));
query = BuildSearch(query, searchText, SearhTypeEnum.Any);
}
}
@ -205,7 +211,7 @@ namespace ASC.Files.Core.Data
case FilterType.ByExtension:
if (!string.IsNullOrEmpty(searchText))
{
query = query.Where(r => BuildSearch(r, searchText, SearhTypeEnum.End));
query = BuildSearch(query, searchText, SearhTypeEnum.End);
}
break;
}
@ -255,7 +261,7 @@ namespace ASC.Files.Core.Data
}
else
{
q = q.Where(r => BuildSearch(r, searchText, SearhTypeEnum.Any));
q = BuildSearch(q, searchText, SearhTypeEnum.Any);
}
}
@ -307,7 +313,7 @@ namespace ASC.Files.Core.Data
case FilterType.ByExtension:
if (!string.IsNullOrEmpty(searchText))
{
q = q.Where(r => BuildSearch(r, searchText, SearhTypeEnum.End));
q = BuildSearch(q, searchText, SearhTypeEnum.End);
}
break;
}
@ -384,8 +390,9 @@ namespace ASC.Files.Core.Data
if (file.CreateBy == default) file.CreateBy = AuthContext.CurrentAccount.ID;
if (file.CreateOn == default) file.CreateOn = TenantUtil.DateTimeNow();
var fileIdString = file.ID.ToString();
var toUpdate = FilesDbContext.Files
.Where(r => r.Id.ToString() == file.ID.ToString() && r.CurrentVersion && r.TenantId == TenantID)
.Where(r => r.Id.ToString() == fileIdString && r.CurrentVersion && r.TenantId == TenantID)
.FirstOrDefault();
if (toUpdate != null)
@ -658,9 +665,10 @@ namespace ASC.Files.Core.Data
public bool IsExist(string title, object folderId)
{
var folderIdString = folderId.ToString();
return Query(FilesDbContext.Files)
.Where(r => r.Title == title)
.Where(r => r.FolderId == (int)folderId)
.Where(r => r.FolderId.ToString() == folderIdString)
.Where(r => r.CurrentVersion)
.Any();
}
@ -669,17 +677,18 @@ namespace ASC.Files.Core.Data
{
if (fileId == null) return null;
var fileIdString = fileId.ToString();
using (var tx = FilesDbContext.Database.BeginTransaction())
{
var fromFolders = Query(FilesDbContext.Files)
.Where(r => r.Id == (int)fileId)
.GroupBy(r => r.Id)
.SelectMany(r => r.Select(a => a.FolderId))
.Where(r => r.Id.ToString() == fileIdString)
.Select(r => r.FolderId)
.Distinct()
.ToList();
var toUpdate = Query(FilesDbContext.Files)
.Where(r => r.Id == (int)fileId);
.Where(r => r.Id.ToString() == fileIdString)
.ToList();
foreach (var f in toUpdate)
{
@ -699,9 +708,10 @@ namespace ASC.Files.Core.Data
RecalculateFilesCount(toFolderId);
}
var toFolderIdString = toFolderId.ToString();
var parentFoldersIds =
FilesDbContext.Tree
.Where(r => r.FolderId == (int)toFolderId)
.Where(r => r.FolderId.ToString() == toFolderIdString)
.OrderByDescending(r => r.Level)
.Select(r => r.ParentId)
.ToList();
@ -743,9 +753,10 @@ namespace ASC.Files.Core.Data
public object FileRename(File file, string newTitle)
{
var fileIdString = file.ID.ToString();
newTitle = Global.ReplaceInvalidCharsAndTruncate(newTitle);
var toUpdate = Query(FilesDbContext.Files)
.Where(r => r.Id == (int)file.ID)
.Where(r => r.Id.ToString() == fileIdString)
.Where(r => r.CurrentVersion)
.FirstOrDefault();
@ -926,9 +937,10 @@ namespace ASC.Files.Core.Data
public void ReassignFiles(object[] fileIds, Guid newOwnerId)
{
var fileIdsStrings = fileIds.Select(r => r.ToString()).ToList();
var toUpdate = Query(FilesDbContext.Files)
.Where(r => r.CurrentVersion)
.Where(r => fileIds.Any(a => a.ToString() == r.Id.ToString()));
.Where(r => fileIdsStrings.Any(a => a == r.Id.ToString()));
foreach (var f in toUpdate)
{
@ -942,9 +954,10 @@ namespace ASC.Files.Core.Data
{
if (parentIds == null || parentIds.Length == 0 || filterType == FilterType.FoldersOnly) return new List<File>();
var parentIdsStrings = parentIds.Select(r => r.ToString()).ToList();
var q = GetFileQuery(r => r.CurrentVersion)
.Join(FilesDbContext.Tree, a => a.FolderId, t => t.FolderId, (file, tree) => new { file, tree })
.Where(r => parentIds.Any(a => a.ToString() == r.tree.ParentId.ToString()))
.Where(r => parentIdsStrings.Any(a => a == r.tree.ParentId.ToString()))
.Select(r => r.file);
if (!string.IsNullOrEmpty(searchText))
@ -957,7 +970,7 @@ namespace ASC.Files.Core.Data
}
else
{
q = q.Where(r => BuildSearch(r, searchText, SearhTypeEnum.Any));
q = BuildSearch(q, searchText, SearhTypeEnum.Any);
}
}
@ -987,7 +1000,7 @@ namespace ASC.Files.Core.Data
case FilterType.ByExtension:
if (!string.IsNullOrEmpty(searchText))
{
q = q.Where(r => BuildSearch(r, searchText, SearhTypeEnum.End));
q = BuildSearch(q, searchText, SearhTypeEnum.End);
}
break;
}
@ -1010,7 +1023,7 @@ namespace ASC.Files.Core.Data
}
else
{
var query = GetFileQuery(r => r.CurrentVersion && BuildSearch(r, searchText, SearhTypeEnum.Any));
var query = BuildSearch(GetFileQuery(r => r.CurrentVersion), searchText, SearhTypeEnum.Any);
return FromQueryWithShared(query)
.Where(f =>
bunch

View File

@ -115,8 +115,9 @@ namespace ASC.Files.Core.Data
public Folder GetRootFolder(object folderId)
{
var folderIdString = folderId.ToString();
var id = FilesDbContext.Tree
.Where(r => r.FolderId == (int)folderId)
.Where(r => r.FolderId.ToString() == folderIdString)
.OrderByDescending(r => r.Level)
.Select(r => r.ParentId)
.FirstOrDefault();
@ -128,8 +129,9 @@ namespace ASC.Files.Core.Data
public Folder GetRootFolderByFile(object fileId)
{
var fileIdString = fileId.ToString();
var subq = Query(FilesDbContext.Files)
.Where(r => r.Id == (int)fileId && r.CurrentVersion)
.Where(r => r.Id.ToString() == fileIdString && r.CurrentVersion)
.Select(r => r.FolderId)
.Distinct();
@ -158,13 +160,14 @@ namespace ASC.Files.Core.Data
if (orderBy == null) orderBy = new OrderBy(SortedByType.DateAndTime, false);
var q = GetFolderQuery(r => r.ParentId.ToString() == parentId.ToString());
var parentIdString = parentId.ToString();
var q = GetFolderQuery(r => r.ParentId.ToString() == parentIdString);
if (withSubfolders)
{
q = GetFolderQuery()
.Join(FilesDbContext.Tree, r => r.Id, a => a.FolderId, (folder, tree) => new { folder, tree })
.Where(r => r.tree.ParentId.ToString() == parentId.ToString() && r.tree.Level != 0)
.Where(r => r.tree.ParentId.ToString() == parentIdString && r.tree.Level != 0)
.Select(r => r.folder);
}
@ -176,7 +179,7 @@ namespace ASC.Files.Core.Data
}
else
{
q = q.Where(r => BuildSearch(r, searchText, SearhTypeEnum.Any));
q = BuildSearch(q, searchText, SearhTypeEnum.Any);
}
}
@ -246,7 +249,7 @@ namespace ASC.Files.Core.Data
}
else
{
q = q.Where(r => BuildSearch(r, searchText, SearhTypeEnum.Any));
q = BuildSearch(q, searchText, SearhTypeEnum.Any);
}
}
@ -595,8 +598,9 @@ namespace ASC.Files.Core.Data
private int GetFoldersCount(object parentId)
{
var parentIdString = parentId.ToString();
var count = FilesDbContext.Tree
.Where(r => r.ParentId == (int)parentId)
.Where(r => r.ParentId.ToString() == parentIdString)
.Where(r => r.Level >= 0)
.Count();
@ -605,9 +609,10 @@ namespace ASC.Files.Core.Data
private int GetFilesCount(object folderId)
{
var folderIdString = folderId.ToString();
var count = Query(FilesDbContext.Files)
.Distinct()
.Where(r => FilesDbContext.Tree.Where(r => r.ParentId == (int)folderId).Select(r => r.FolderId).Any(b => b == r.FolderId))
.Where(r => FilesDbContext.Tree.Where(r => r.ParentId.ToString() == folderIdString).Select(r => r.FolderId).Any(b => b == r.FolderId))
.Count();
return count;
@ -690,7 +695,7 @@ namespace ASC.Files.Core.Data
return FromQueryWithShared(q1);
}
var q = GetFolderQuery(r => BuildSearch(r, text, SearhTypeEnum.Any));
var q = BuildSearch(GetFolderQuery(), text, SearhTypeEnum.Any);
return FromQueryWithShared(q);
}

View File

@ -123,7 +123,7 @@ namespace ASC.Web.Files.Services.WCFService.FileOperations
protected FileOperation(IServiceProvider serviceProvider, T fileOperationData)
{
principal = Thread.CurrentPrincipal;
principal = serviceProvider.GetService<Microsoft.AspNetCore.Http.IHttpContextAccessor>()?.HttpContext?.User ?? Thread.CurrentPrincipal;
culture = Thread.CurrentThread.CurrentCulture.Name;
TaskInfo = new DistributedTask();
@ -204,7 +204,7 @@ namespace ASC.Web.Files.Services.WCFService.FileOperations
TaskInfo.SetProperty(FileOperation.SOURCE, string.Join(FileOperation.SPLIT_CHAR, Folders.Select(f => "folder_" + f).Concat(Files.Select(f => "file_" + f)).ToArray()));
TaskInfo.SetProperty(FileOperation.OPERATION_TYPE, OperationType);
TaskInfo.SetProperty(FileOperation.OWNER, ((IAccount)Thread.CurrentPrincipal.Identity).ID);
TaskInfo.SetProperty(FileOperation.OWNER, ((IAccount)(principal ?? Thread.CurrentPrincipal).Identity).ID);
TaskInfo.SetProperty(FileOperation.PROGRESS, progress < 100 ? progress : 100);
TaskInfo.SetProperty(FileOperation.RESULT, Status);
TaskInfo.SetProperty(FileOperation.ERROR, Error);

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -1,6 +1,6 @@
{
"name": "asc-web-common",
"version": "1.0.92",
"version": "1.0.93",
"description": "Ascensio System SIA common components and solutions library",
"license": "AGPL-3.0",
"files": [

File diff suppressed because it is too large Load Diff

View File

@ -1,6 +1,6 @@
{
"name": "asc-web-components",
"version": "1.0.361",
"version": "1.0.362",
"description": "Ascensio System SIA component library",
"license": "AGPL-3.0",
"main": "dist/asc-web-components.js",
@ -30,10 +30,10 @@
},
"peerDependencies": {
"prop-types": "^15.7.2",
"react": "^16.9.0",
"react-dom": "^16.9.0",
"react": "^16.12.0",
"react-dom": "^16.12.0",
"react-values": "^0.3.3",
"styled-components": "^4.3.2"
"styled-components": "^5.0.0"
},
"devDependencies": {
"@babel/cli": "^7.8.3",

File diff suppressed because it is too large Load Diff