diff --git a/common/ASC.Core.Common/Context/SecurityContext.cs b/common/ASC.Core.Common/Context/SecurityContext.cs index 70476df0fe..f013e95251 100644 --- a/common/ASC.Core.Common/Context/SecurityContext.cs +++ b/common/ASC.Core.Common/Context/SecurityContext.cs @@ -135,7 +135,7 @@ public class SecurityContext return false; } - + if (tenant != _tenantManager.GetCurrentTenant().Id) { return false; @@ -161,9 +161,9 @@ public class SecurityContext return false; } - var loginEventById = await _dbLoginEventsManager.GetById(loginEventId); - - if (loginEventById == null) + var loginEventById = await _dbLoginEventsManager.GetById(loginEventId); + + if (loginEventById == null || !loginEventById.Active) { return false; } diff --git a/common/ASC.Core.Common/EF/Model/Tenant/DbQuota.cs b/common/ASC.Core.Common/EF/Model/Tenant/DbQuota.cs index c01ffb1151..a25c5e6ed8 100644 --- a/common/ASC.Core.Common/EF/Model/Tenant/DbQuota.cs +++ b/common/ASC.Core.Common/EF/Model/Tenant/DbQuota.cs @@ -59,7 +59,7 @@ public static class DbQuotaExtension Tenant = -1, Name = "trial", Description = null, - Features = "trial,audit,ldap,sso,whitelabel,thirdparty,restore,total_size:107374182400,file_size:100,manager:1", + Features = "trial,audit,ldap,sso,whitelabel,thirdparty,audit,restore,total_size:107374182400,file_size:100,manager:1", Price = 0, ProductId = null, Visible = false @@ -69,7 +69,7 @@ public static class DbQuotaExtension Tenant = -2, Name = "admin", Description = null, - Features = "audit,ldap,sso,whitelabel,thirdparty,restore,total_size:107374182400,file_size:1024,manager:1", + Features = "audit,ldap,sso,whitelabel,thirdparty,audit,restore,total_size:107374182400,file_size:1024,manager:1", Price = 30, ProductId = "1002", Visible = true @@ -79,7 +79,7 @@ public static class DbQuotaExtension Tenant = -3, Name = "startup", Description = null, - Features = "free,thirdparty,total_size:2147483648,manager:1,room:12,usersInRoom:3", + Features = "free,thirdparty,audit,total_size:2147483648,manager:1,room:12,usersInRoom:3", Price = 0, ProductId = null, Visible = false diff --git a/common/ASC.Data.Storage/BaseStorage.cs b/common/ASC.Data.Storage/BaseStorage.cs index f4b2ed872b..7f62d63737 100644 --- a/common/ASC.Data.Storage/BaseStorage.cs +++ b/common/ASC.Data.Storage/BaseStorage.cs @@ -149,7 +149,7 @@ public abstract class BaseStorage : IDataStore public abstract Task GetReadStreamAsync(string domain, string path); - public abstract Task GetReadStreamAsync(string domain, string path, int offset); + public abstract Task GetReadStreamAsync(string domain, string path, long offset); public abstract Task SaveAsync(string domain, string path, Stream stream); public abstract Task SaveAsync(string domain, string path, Stream stream, ACL acl); diff --git a/common/ASC.Data.Storage/DiscStorage/DiscDataStore.cs b/common/ASC.Data.Storage/DiscStorage/DiscDataStore.cs index da815ab3f8..078dd08b8c 100644 --- a/common/ASC.Data.Storage/DiscStorage/DiscDataStore.cs +++ b/common/ASC.Data.Storage/DiscStorage/DiscDataStore.cs @@ -110,7 +110,7 @@ public class DiscDataStore : BaseStorage throw new FileNotFoundException("File not found", Path.GetFullPath(target)); } - public override Task GetReadStreamAsync(string domain, string path, int offset) + public override Task GetReadStreamAsync(string domain, string path, long offset) { ArgumentNullException.ThrowIfNull(path); @@ -123,6 +123,10 @@ public class DiscDataStore : BaseStorage { stream.Seek(offset, SeekOrigin.Begin); } + else if (0 < offset) + { + throw new InvalidOperationException("Seek stream is not impossible"); + } return Task.FromResult(stream); } @@ -130,7 +134,6 @@ public class DiscDataStore : BaseStorage throw new FileNotFoundException("File not found", Path.GetFullPath(target)); } - public override Task SaveAsync(string domain, string path, Stream stream, string contentType, string contentDisposition) { return SaveAsync(domain, path, stream); diff --git a/common/ASC.Data.Storage/GoogleCloud/GoogleCloudStorage.cs b/common/ASC.Data.Storage/GoogleCloud/GoogleCloudStorage.cs index bc519376f7..0b9c547f13 100644 --- a/common/ASC.Data.Storage/GoogleCloud/GoogleCloudStorage.cs +++ b/common/ASC.Data.Storage/GoogleCloud/GoogleCloudStorage.cs @@ -142,7 +142,7 @@ public class GoogleCloudStorage : BaseStorage return GetReadStreamAsync(domain, path, 0); } - public override async Task GetReadStreamAsync(string domain, string path, int offset) + public override async Task GetReadStreamAsync(string domain, string path, long offset) { var tempStream = _tempStream.Create(); diff --git a/common/ASC.Data.Storage/IDataStore.cs b/common/ASC.Data.Storage/IDataStore.cs index 95e3afb127..68d995b7d3 100644 --- a/common/ASC.Data.Storage/IDataStore.cs +++ b/common/ASC.Data.Storage/IDataStore.cs @@ -91,7 +91,7 @@ public interface IDataStore /// /// /// - Task GetReadStreamAsync(string domain, string path, int offset); + Task GetReadStreamAsync(string domain, string path, long offset); /// /// Saves the contents of the stream in the repository. diff --git a/common/ASC.Data.Storage/RackspaceCloud/RackspaceCloudStorage.cs b/common/ASC.Data.Storage/RackspaceCloud/RackspaceCloudStorage.cs index 362f61e126..e0c9185177 100644 --- a/common/ASC.Data.Storage/RackspaceCloud/RackspaceCloudStorage.cs +++ b/common/ASC.Data.Storage/RackspaceCloud/RackspaceCloudStorage.cs @@ -162,7 +162,7 @@ public class RackspaceCloudStorage : BaseStorage return GetReadStreamAsync(domain, path, 0); } - public override Task GetReadStreamAsync(string domain, string path, int offset) + public override Task GetReadStreamAsync(string domain, string path, long offset) { return GetReadStreamAsync(domain, path, offset); } diff --git a/common/ASC.Data.Storage/S3/S3Storage.cs b/common/ASC.Data.Storage/S3/S3Storage.cs index 15f081c1a1..c473c0bdb3 100644 --- a/common/ASC.Data.Storage/S3/S3Storage.cs +++ b/common/ASC.Data.Storage/S3/S3Storage.cs @@ -148,7 +148,7 @@ public class S3Storage : BaseStorage return GetReadStreamAsync(domain, path, 0); } - public override async Task GetReadStreamAsync(string domain, string path, int offset) + public override async Task GetReadStreamAsync(string domain, string path, long offset) { var request = new GetObjectRequest { diff --git a/common/ASC.Data.Storage/StorageHandler.cs b/common/ASC.Data.Storage/StorageHandler.cs index 4da422aee1..623dfc57d5 100644 --- a/common/ASC.Data.Storage/StorageHandler.cs +++ b/common/ASC.Data.Storage/StorageHandler.cs @@ -24,6 +24,13 @@ // content are licensed under the terms of the Creative Commons Attribution-ShareAlike 4.0 // International. See the License terms at http://creativecommons.org/licenses/by-sa/4.0/legalcode +using System.IO; + +using ASC.Common.Web; + +using Microsoft.AspNetCore.Http.Features; +using Microsoft.Extensions.Primitives; + namespace ASC.Data.Storage.DiscStorage; public class StorageHandler @@ -86,8 +93,9 @@ public class StorageHandler var headers = header.Length > 0 ? header.Split('&').Select(HttpUtility.UrlDecode) : Array.Empty(); const int bigSize = 5 * 1024 * 1024; + var fileSize = await storage.GetFileSizeAsync(_domain, path); - if (storage.IsSupportInternalUri && bigSize < await storage.GetFileSizeAsync(_domain, path)) + if (storage.IsSupportInternalUri && bigSize < fileSize) { var uri = await storage.GetInternalUriAsync(_domain, path, TimeSpan.FromMinutes(15), headers); @@ -134,7 +142,7 @@ public class StorageHandler context.Response.Headers[toCopy] = h.Substring(toCopy.Length + 1); } - + try { context.Response.ContentType = MimeMapping.GetMimeMapping(path); @@ -149,8 +157,18 @@ public class StorageHandler context.Response.Headers["Content-Encoding"] = encoding; } - using (var stream = await storage.GetReadStreamAsync(_domain, path)) - { + + long offset = 0; + var length = ProcessRangeHeader(context, fileSize, ref offset); + + context.Response.Headers["Connection"] = "Keep-Alive"; + context.Response.Headers["Content-Length"] = length.ToString(CultureInfo.InvariantCulture); + + using (var stream = await storage.GetReadStreamAsync(_domain, path, offset)) + { + var responseBufferingFeature = context.Features.Get(); + responseBufferingFeature?.DisableBuffering(); + await stream.CopyToAsync(context.Response.Body); } @@ -158,6 +176,38 @@ public class StorageHandler await context.Response.CompleteAsync(); } + private long ProcessRangeHeader(HttpContext context, long fullLength, ref long offset) + { + if (context == null) throw new ArgumentNullException(); + if (context.Request.Headers["Range"] == StringValues.Empty) return fullLength; + + long endOffset = -1; + + var range = context.Request.Headers["Range"][0].Split(new[] { '=', '-' }); + offset = Convert.ToInt64(range[1]); + if (range.Count() > 2 && !string.IsNullOrEmpty(range[2])) + { + endOffset = Convert.ToInt64(range[2]); + } + if (endOffset < 0 || endOffset >= fullLength) + { + endOffset = fullLength - 1; + } + + var length = endOffset - offset + 1; + + if (length <= 0) throw new HttpException(HttpStatusCode.BadRequest, "Wrong Range header"); + + if (length < fullLength) + { + context.Response.StatusCode = (int)HttpStatusCode.PartialContent; + } + context.Response.Headers["Accept-Ranges"] = "bytes"; + context.Response.Headers["Content-Range"] = string.Format(" bytes {0}-{1}/{2}", offset, endOffset, fullLength); + + return length; + } + private string GetRouteValue(string name, HttpContext context) { return (context.GetRouteValue(name) ?? "").ToString(); diff --git a/common/Tools/ASC.MigrationPersonalToDocspace/GlobalUsings.cs b/common/Tools/ASC.MigrationPersonalToDocspace/GlobalUsings.cs index ffbd5676b1..a573cabc4c 100644 --- a/common/Tools/ASC.MigrationPersonalToDocspace/GlobalUsings.cs +++ b/common/Tools/ASC.MigrationPersonalToDocspace/GlobalUsings.cs @@ -26,6 +26,7 @@ global using System.Data; global using System.Data.Common; +global using System.Text.RegularExpressions; global using System.Xml.Linq; global using ASC.Api.Core; @@ -33,9 +34,8 @@ global using ASC.Api.Core.Core; global using ASC.Api.Core.Extensions; global using ASC.Common; global using ASC.Common.Logging; -global using ASC.Common.Utils; global using ASC.Core.Common.EF; -global using ASC.Core.Common.EF.Context; +global using ASC.Core.Common.EF.Context; global using ASC.Core.Common.Hosting; global using ASC.Core.Tenants; global using ASC.Core.Users; @@ -47,7 +47,6 @@ global using ASC.Data.Backup.Tasks; global using ASC.Data.Backup.Tasks.Data; global using ASC.Data.Backup.Tasks.Modules; global using ASC.Data.Storage; -global using ASC.Data.Storage.DiscStorage; global using ASC.EventBus.Abstractions; global using ASC.EventBus.Events; global using ASC.EventBus.Extensions.Logger; @@ -61,5 +60,8 @@ global using ASC.Webhooks.Core.EF.Context; global using Autofac.Extensions.DependencyInjection; +global using AutoMapper; +global using AutoMapper.QueryableExtensions; + global using Microsoft.EntityFrameworkCore; global using Microsoft.Extensions.Hosting.WindowsServices; diff --git a/common/Tools/ASC.MigrationPersonalToDocspace/MigrationCreator.cs b/common/Tools/ASC.MigrationPersonalToDocspace/MigrationCreator.cs index 783a5f76ea..7e4a472e7a 100644 --- a/common/Tools/ASC.MigrationPersonalToDocspace/MigrationCreator.cs +++ b/common/Tools/ASC.MigrationPersonalToDocspace/MigrationCreator.cs @@ -23,8 +23,6 @@ // All the Product's GUI elements, including illustrations and icon sets, as well as technical writing // content are licensed under the terms of the Creative Commons Attribution-ShareAlike 4.0 // International. See the License terms at http://creativecommons.org/licenses/by-sa/4.0/legalcode - -using System.Text.RegularExpressions; namespace ASC.Migration.PersonalToDocspace.Creator; @@ -37,6 +35,7 @@ public class MigrationCreator private readonly StorageFactory _storageFactory; private readonly StorageFactoryConfig _storageFactoryConfig; private readonly ModuleProvider _moduleProvider; + private readonly IMapper _mapper; private List _modules; private string _pathToSave; @@ -72,7 +71,8 @@ public class MigrationCreator DbFactory dbFactory, StorageFactory storageFactory, StorageFactoryConfig storageFactoryConfig, - ModuleProvider moduleProvider) + ModuleProvider moduleProvider, + IMapper mapper) { _tenantDomainValidator = tenantDomainValidator; _tempStream = tempStream; @@ -80,13 +80,15 @@ public class MigrationCreator _storageFactory = storageFactory; _storageFactoryConfig = storageFactoryConfig; _moduleProvider = moduleProvider; + _mapper = mapper; } public string Create(string fromAlias, string userName, string mail, string toRegion, string toAlias) { Init(fromAlias, userName, mail, toRegion, toAlias); - var id = GetUserId(); + var id = GetUserId(); + CheckCountManager(); var fileName = _userName + ".tar.gz"; var path = Path.Combine(_pathToSave, fileName); using (var writer = new ZipWriteOperator(_tempStream, path)) @@ -169,7 +171,31 @@ public class MigrationCreator { throw new ArgumentException("username was not found"); } - } + } + + private void CheckCountManager() + { + if (!string.IsNullOrEmpty(_toAlias)) { + using var dbContextTenant = _dbFactory.CreateDbContext(_toRegion); + var tenant = dbContextTenant.Tenants.SingleOrDefault(t => t.Alias == _toAlias); + + using var coreDbContext = _dbFactory.CreateDbContext(_toRegion); + var qouta = coreDbContext.Quotas + .Where(r => r.Tenant == tenant.Id) + .ProjectTo(_mapper.ConfigurationProvider) + .SingleOrDefault(); + + using var userDbContextToregion = _dbFactory.CreateDbContext(_toRegion); + var usersCount = userDbContextToregion.Users + .Join(userDbContextToregion.UserGroups, u => u.Id, ug => ug.Userid, (u, ug) => new {u, ug}) + .Where(q=> q.u.Tenant == tenant.Id && q.ug.UserGroupId == Common.Security.Authorizing.Constants.DocSpaceAdmin.ID).Count(); + if (usersCount > qouta.CountRoomAdmin) + { + throw new ArgumentException("user count exceed"); + } + } + } + private void DoMigrationDb(Guid id, IDataWriteOperator writer) { @@ -239,6 +265,11 @@ public class MigrationCreator ChangeName(data); } + if (data.TableName == "files_bunch_objects") + { + ClearCommonBunch(data); + } + WriteEnrty(data, writer, module); } } @@ -319,7 +350,19 @@ public class MigrationCreator { data.Rows[0]["name"] = ""; } - + + private void ClearCommonBunch(DataTable data) + { + for(var i = 0; i < data.Rows.Count; i++) + { + if (data.Rows[i]["right_node"].ToString().EndsWith('/')) + { + data.Rows.RemoveAt(i); + i--; + } + } + } + private void DoMigrationStorage(Guid id, IDataWriteOperator writer) { Console.WriteLine($"start backup storage"); diff --git a/migrations/mysql/CoreDbContext/20221019144347_CoreDbContextMigrate.Designer.cs b/migrations/mysql/CoreDbContext/20221019144347_CoreDbContextMigrate.Designer.cs index ebecb2b38b..1f7877d214 100644 --- a/migrations/mysql/CoreDbContext/20221019144347_CoreDbContextMigrate.Designer.cs +++ b/migrations/mysql/CoreDbContext/20221019144347_CoreDbContextMigrate.Designer.cs @@ -72,7 +72,7 @@ namespace ASC.Migrations.MySql.Migrations new { Tenant = -1, - Features = "trial,audit,ldap,sso,whitelabel,restore,thirdparty,total_size:107374182400,file_size:100,manager:1", + Features = "trial,audit,ldap,sso,whitelabel,restore,thirdparty,audit,total_size:107374182400,file_size:100,manager:1", Name = "trial", Price = 0m, Visible = false @@ -80,7 +80,7 @@ namespace ASC.Migrations.MySql.Migrations new { Tenant = -2, - Features = "audit,ldap,sso,whitelabel,restore,thirdparty,total_size:107374182400,file_size:1024,manager:1", + Features = "audit,ldap,sso,whitelabel,restore,thirdparty,audit,total_size:107374182400,file_size:1024,manager:1", Name = "admin", Price = 30m, ProductId = "1002", @@ -89,7 +89,7 @@ namespace ASC.Migrations.MySql.Migrations new { Tenant = -3, - Features = "free,thirdparty,total_size:2147483648,manager:1,room:12,usersInRoom:3", + Features = "free,thirdparty,audit,total_size:2147483648,manager:1,room:12,usersInRoom:3", Name = "startup", Price = 0m, Visible = false diff --git a/migrations/mysql/CoreDbContext/20221019144347_CoreDbContextMigrate.cs b/migrations/mysql/CoreDbContext/20221019144347_CoreDbContextMigrate.cs index 86164cbbf0..fb61b79450 100644 --- a/migrations/mysql/CoreDbContext/20221019144347_CoreDbContextMigrate.cs +++ b/migrations/mysql/CoreDbContext/20221019144347_CoreDbContextMigrate.cs @@ -118,17 +118,17 @@ public partial class CoreDbContextMigrate : Migration migrationBuilder.InsertData( table: "tenants_quota", columns: new[] { "tenant", "description", "features", "name", "product_id" }, - values: new object[] { -3, null, "free,thirdparty,total_size:2147483648,manager:1,room:12,usersInRoom:3", "startup", null }); + values: new object[] { -3, null, "free,thirdparty,audit,total_size:2147483648,manager:1,room:12,usersInRoom:3", "startup", null }); migrationBuilder.InsertData( table: "tenants_quota", columns: new[] { "tenant", "description", "features", "name", "price", "product_id", "visible" }, - values: new object[] { -2, null, "audit,ldap,sso,whitelabel,restore,thirdparty,total_size:107374182400,file_size:1024,manager:1", "admin", 30m, "1002", true }); + values: new object[] { -2, null, "audit,ldap,sso,whitelabel,restore,thirdparty,audit,total_size:107374182400,file_size:1024,manager:1", "admin", 30m, "1002", true }); migrationBuilder.InsertData( table: "tenants_quota", columns: new[] { "tenant", "description", "features", "name", "product_id" }, - values: new object[] { -1, null, "trial,audit,ldap,sso,whitelabel,restore,thirdparty,total_size:107374182400,file_size:100,manager:1", "trial", null }); + values: new object[] { -1, null, "trial,audit,ldap,sso,whitelabel,restore,thirdparty,audit,total_size:107374182400,file_size:100,manager:1", "trial", null }); migrationBuilder.CreateIndex( name: "last_modified", diff --git a/migrations/mysql/CoreDbContext/CoreDbContextModelSnapshot.cs b/migrations/mysql/CoreDbContext/CoreDbContextModelSnapshot.cs index 61c187ba72..b636a0bf51 100644 --- a/migrations/mysql/CoreDbContext/CoreDbContextModelSnapshot.cs +++ b/migrations/mysql/CoreDbContext/CoreDbContextModelSnapshot.cs @@ -70,7 +70,7 @@ namespace ASC.Migrations.MySql.Migrations new { Tenant = -1, - Features = "trial,audit,ldap,sso,whitelabel,restore,thirdparty,total_size:107374182400,file_size:100,manager:1", + Features = "trial,audit,ldap,sso,whitelabel,restore,thirdparty,audit,total_size:107374182400,file_size:100,manager:1", Name = "trial", Price = 0m, Visible = false @@ -78,7 +78,7 @@ namespace ASC.Migrations.MySql.Migrations new { Tenant = -2, - Features = "audit,ldap,sso,whitelabel,restore,thirdparty,total_size:107374182400,file_size:1024,manager:1", + Features = "audit,ldap,sso,whitelabel,restore,thirdparty,audit,total_size:107374182400,file_size:1024,manager:1", Name = "admin", Price = 30m, ProductId = "1002", @@ -87,7 +87,7 @@ namespace ASC.Migrations.MySql.Migrations new { Tenant = -3, - Features = "free,thirdparty,total_size:2147483648,manager:1,room:12,usersInRoom:3", + Features = "free,thirdparty,audit,total_size:2147483648,manager:1,room:12,usersInRoom:3", Name = "startup", Price = 0m, Visible = false diff --git a/migrations/postgre/CoreDbContext/20221019144348_CoreDbContextMigrate.Designer.cs b/migrations/postgre/CoreDbContext/20221019144348_CoreDbContextMigrate.Designer.cs index 0aeeba4007..b7d20e57e9 100644 --- a/migrations/postgre/CoreDbContext/20221019144348_CoreDbContextMigrate.Designer.cs +++ b/migrations/postgre/CoreDbContext/20221019144348_CoreDbContextMigrate.Designer.cs @@ -67,7 +67,7 @@ namespace ASC.Migrations.PostgreSql.Migrations new { Tenant = -1, - Features = "trial,audit,ldap,sso,whitelabel,restore,thirdparty,total_size:107374182400,file_size:100,manager:1", + Features = "trial,audit,ldap,sso,whitelabel,restore,thirdparty,audit,total_size:107374182400,file_size:100,manager:1", Name = "trial", Price = 0m, Visible = false @@ -75,7 +75,7 @@ namespace ASC.Migrations.PostgreSql.Migrations new { Tenant = -2, - Features = "audit,ldap,sso,whitelabel,restore,thirdparty,total_size:107374182400,file_size:1024,manager:1", + Features = "audit,ldap,sso,whitelabel,restore,thirdparty,audit,total_size:107374182400,file_size:1024,manager:1", Name = "admin", Price = 30m, ProductId = "1002", @@ -84,7 +84,7 @@ namespace ASC.Migrations.PostgreSql.Migrations new { Tenant = -3, - Features = "free,thirdparty,total_size:2147483648,manager:1,room:12,usersInRoom:3", + Features = "free,thirdparty,audit,total_size:2147483648,manager:1,room:12,usersInRoom:3", Name = "startup", Price = 0m, Visible = false diff --git a/migrations/postgre/CoreDbContext/20221019144348_CoreDbContextMigrate.cs b/migrations/postgre/CoreDbContext/20221019144348_CoreDbContextMigrate.cs index 178c959715..740f3a58cc 100644 --- a/migrations/postgre/CoreDbContext/20221019144348_CoreDbContextMigrate.cs +++ b/migrations/postgre/CoreDbContext/20221019144348_CoreDbContextMigrate.cs @@ -111,19 +111,19 @@ public partial class CoreDbContextMigrate : Migration schema: "onlyoffice", table: "tenants_quota", columns: new[] { "tenant", "description", "features", "name", "visible" }, - values: new object[] { -3, null, "free,thirdparty,total_size:2147483648,manager:1,room:12,usersInRoom:3", "startup", false }); + values: new object[] { -3, null, "free,thirdparty,audit,total_size:2147483648,manager:1,room:12,usersInRoom:3", "startup", false }); migrationBuilder.InsertData( schema: "onlyoffice", table: "tenants_quota", columns: new[] { "tenant", "description", "features", "name", "price", "product_id", "visible" }, - values: new object[] { -2, null, "audit,ldap,sso,whitelabel,restore,thirdparty,total_size:107374182400,file_size:1024,manager:1", "admin", 30m, "1002", true }); + values: new object[] { -2, null, "audit,ldap,sso,whitelabel,restore,thirdparty,audit,total_size:107374182400,file_size:1024,manager:1", "admin", 30m, "1002", true }); migrationBuilder.InsertData( schema: "onlyoffice", table: "tenants_quota", columns: new[] { "tenant", "description", "features", "name", "visible" }, - values: new object[] { -1, null, "trial,audit,ldap,sso,whitelabel,restore,thirdparty,total_size:107374182400,file_size:100,manager:1", "trial", false }); + values: new object[] { -1, null, "trial,audit,ldap,sso,whitelabel,restore,thirdparty,audit,total_size:107374182400,file_size:100,manager:1", "trial", false }); migrationBuilder.CreateIndex( name: "last_modified_tenants_quotarow", diff --git a/migrations/postgre/CoreDbContext/CoreDbContextModelSnapshot.cs b/migrations/postgre/CoreDbContext/CoreDbContextModelSnapshot.cs index b6ab4bbda9..7a1a37680c 100644 --- a/migrations/postgre/CoreDbContext/CoreDbContextModelSnapshot.cs +++ b/migrations/postgre/CoreDbContext/CoreDbContextModelSnapshot.cs @@ -65,7 +65,7 @@ namespace ASC.Migrations.PostgreSql.Migrations new { Tenant = -1, - Features = "trial,audit,ldap,sso,whitelabel,restore,thirdparty,total_size:107374182400,file_size:100,manager:1", + Features = "trial,audit,ldap,sso,whitelabel,restore,thirdparty,audit,total_size:107374182400,file_size:100,manager:1", Name = "trial", Price = 0m, Visible = false @@ -73,7 +73,7 @@ namespace ASC.Migrations.PostgreSql.Migrations new { Tenant = -2, - Features = "audit,ldap,sso,whitelabel,restore,thirdparty,total_size:107374182400,file_size:1024,manager:1", + Features = "audit,ldap,sso,whitelabel,restore,thirdparty,audit,total_size:107374182400,file_size:1024,manager:1", Name = "admin", Price = 30m, ProductId = "1002", @@ -82,7 +82,7 @@ namespace ASC.Migrations.PostgreSql.Migrations new { Tenant = -3, - Features = "free,thirdparty,total_size:2147483648,manager:1,room:12,usersInRoom:3", + Features = "free,thirdparty,audit,total_size:2147483648,manager:1,room:12,usersInRoom:3", Name = "startup", Price = 0m, Visible = false diff --git a/packages/client/public/locales/az/Settings.json b/packages/client/public/locales/az/Settings.json index 798fabd9f5..305bcd1716 100644 --- a/packages/client/public/locales/az/Settings.json +++ b/packages/client/public/locales/az/Settings.json @@ -73,7 +73,7 @@ "PortalAccessSubTitle": "Bu bölmə sizə istifadəçiləri portala təhlükəsiz və rahat giriş imkanı ilə təmin etmək imkanı verir", "PortalNameEmpty": "Hesab adı boşdur", "PortalNameIncorrect": "Yanlış hesab adı", - "PortalNameLength": "Hesab adı ən az 6, ən çox 50 işarədən ibarət ola bilər", + "PortalNameLength": "Hesab adı ən az 3, ən çox 50 işarədən ibarət ola bilər", "PortalRenaming": "Portalın Adının dəyişdirilməsi", "PortalRenamingDescription": "Burada portal ünvanınızı dəyişə bilərsiniz.", "PortalRenamingLabelText": "Yeni portal adı", diff --git a/packages/client/public/locales/bg/Settings.json b/packages/client/public/locales/bg/Settings.json index 1ce7b7ab5a..3f546a7b93 100644 --- a/packages/client/public/locales/bg/Settings.json +++ b/packages/client/public/locales/bg/Settings.json @@ -72,7 +72,7 @@ "PortalAccessSubTitle": "Този раздел Ви позволява да предоставите на потребителите безопасни и удобни начини за достъп до портала.", "PortalNameEmpty": "Името на профила е празно", "PortalNameIncorrect": "Неправилно име на профила", - "PortalNameLength": "Името на профила трябва да бъде дълго между 6 и 50 знака", + "PortalNameLength": "Името на профила трябва да бъде дълго между 3 и 50 знака", "PortalRenaming": "Преименуване на портала", "PortalRenamingDescription": "Тук можете да промените адреса на вашия портал.", "PortalRenamingLabelText": "Ново име на портала", diff --git a/packages/client/public/locales/cs/Settings.json b/packages/client/public/locales/cs/Settings.json index af0f74616b..eef675eae2 100644 --- a/packages/client/public/locales/cs/Settings.json +++ b/packages/client/public/locales/cs/Settings.json @@ -71,7 +71,7 @@ "PortalAccessSubTitle": "Tato sekce umožňuje poskytnout uživatelům bezpečný a pohodlný způsob přístupu k portálu.", "PortalNameEmpty": "Název účtu je prázdný", "PortalNameIncorrect": "Nesprávný název účtu", - "PortalNameLength": "Název účtu musí mít délku od 6 do 50 znaků", + "PortalNameLength": "Název účtu musí mít délku od 3 do 50 znaků", "PortalRenaming": "Přejmenování portálu", "PortalRenamingDescription": "Zde můžete změnit Vaši adresu portálu.", "PortalRenamingLabelText": "Nový název portálu", diff --git a/packages/client/public/locales/de/Settings.json b/packages/client/public/locales/de/Settings.json index d0d29f4e8a..088053f5df 100644 --- a/packages/client/public/locales/de/Settings.json +++ b/packages/client/public/locales/de/Settings.json @@ -73,7 +73,7 @@ "PortalAccessSubTitle": "In diesem Bereich können Sie den Benutzern einen sicheren und nahtlosen Zugang zum Portal gewähren.", "PortalNameEmpty": "Der Kontoname ist leer", "PortalNameIncorrect": "Inkorrekter Kontoname", - "PortalNameLength": "Der Kontoname muss zwischen 6 und 50 Zeichen lang sein", + "PortalNameLength": "Der Kontoname muss zwischen 3 und 50 Zeichen lang sein", "PortalRenaming": "Portalumbenennung", "PortalRenamingDescription": "Hier können Sie Ihre Portaladresse ändern.", "PortalRenamingLabelText": "Neuer Portalname", diff --git a/packages/client/public/locales/el-GR/Settings.json b/packages/client/public/locales/el-GR/Settings.json index 10f9a642e2..0461a53ff5 100644 --- a/packages/client/public/locales/el-GR/Settings.json +++ b/packages/client/public/locales/el-GR/Settings.json @@ -68,7 +68,7 @@ "PortalAccessSubTitle": "Αυτή η ενότητα σάς επιτρέπει να παρέχετε στους χρήστες ασφαλείς και βολικούς τρόπους πρόσβασης στην πύλη.", "PortalNameEmpty": "Το όνομα λογαριασμού είναι κενό", "PortalNameIncorrect": "Λανθασμένο όνομα λογαριασμού", - "PortalNameLength": "Το όνομα του λογαριασμού πρέπει να έχει μήκος μεταξύ 6 και 50 χαρακτήρων", + "PortalNameLength": "Το όνομα του λογαριασμού πρέπει να έχει μήκος μεταξύ 3 και 50 χαρακτήρων", "PortalRenaming": "Μετονομασία πύλης", "PortalRenamingDescription": "Εδώ μπορείτε να αλλάξετε τη διεύθυνση της πύλης σας.", "PortalRenamingLabelText": "Νέο όνομα πύλης", diff --git a/packages/client/public/locales/en/Settings.json b/packages/client/public/locales/en/Settings.json index 86604c1a1c..d6cf5b02fe 100644 --- a/packages/client/public/locales/en/Settings.json +++ b/packages/client/public/locales/en/Settings.json @@ -136,7 +136,7 @@ "PortalIntegration": "Space integration", "PortalNameEmpty": "Account name is empty", "PortalNameIncorrect": "Incorrect account name", - "PortalNameLength": "The account name must be between 6 and 50 characters long", + "PortalNameLength": "The account name must be between 3 and 50 characters long", "PortalRenaming": "Space Renaming", "PortalRenamingDescription": "Here you can change your space address.", "PortalRenamingLabelText": "New space name", diff --git a/packages/client/public/locales/en/Translations.json b/packages/client/public/locales/en/Translations.json index 59b500bba8..f199e6a5dd 100644 --- a/packages/client/public/locales/en/Translations.json +++ b/packages/client/public/locales/en/Translations.json @@ -28,6 +28,7 @@ "Folders": "Folders", "FormTemplates": "Form templates", "LinkCopySuccess": "Link has been copied to the clipboard", + "LinkValidTime": "This link is valid for {{days_count}} days only", "MediaLoadError": "Media file could not be loaded", "MobileAndroid": "Get ONLYOFFICE Documents on Google Play", "MobileIos": "Download ONLYOFFICE Documents on the App Store", diff --git a/packages/client/public/locales/es/Settings.json b/packages/client/public/locales/es/Settings.json index a391dd5ceb..c6dc7379b5 100644 --- a/packages/client/public/locales/es/Settings.json +++ b/packages/client/public/locales/es/Settings.json @@ -73,7 +73,7 @@ "PortalAccessSubTitle": "Esta sección le permite ofrecer a los usuarios formas seguras y cómodas de acceder al portal.", "PortalNameEmpty": "Nombre de cuenta está vacío", "PortalNameIncorrect": "Nombre de cuenta incorrecto", - "PortalNameLength": "El nombre de cuenta debe tener entre 6 y 50 caracteres de longitud", + "PortalNameLength": "El nombre de cuenta debe tener entre 3 y 50 caracteres de longitud", "PortalRenaming": "Cambio del nombre de portal", "PortalRenamingDescription": "Puede cambiar la dirección de su portal aquí.", "PortalRenamingLabelText": "Nombre de portal nuevo", diff --git a/packages/client/public/locales/fi/Settings.json b/packages/client/public/locales/fi/Settings.json index 2304800c04..9424e43ec0 100644 --- a/packages/client/public/locales/fi/Settings.json +++ b/packages/client/public/locales/fi/Settings.json @@ -71,7 +71,7 @@ "PortalAccessSubTitle": "Tämän osan avulla voit tarjota käyttäjille turvallisia ja käteviä tapoja käyttää portaalia.", "PortalNameEmpty": "Tilin nimi on tyhjä", "PortalNameIncorrect": "Virheellinen tilin nimi", - "PortalNameLength": "Tilin nimen on oltava 6-50 merkkiä pitkä", + "PortalNameLength": "Tilin nimen on oltava 3-50 merkkiä pitkä", "PortalRenaming": "Portaalin uudelleennimeäminen", "PortalRenamingDescription": "Tässä voit vaihtaa portaalisi osoitteen.", "PortalRenamingLabelText": "Uusi portaalin nimi", diff --git a/packages/client/public/locales/fr/Settings.json b/packages/client/public/locales/fr/Settings.json index f0dfcdd187..04354441c7 100644 --- a/packages/client/public/locales/fr/Settings.json +++ b/packages/client/public/locales/fr/Settings.json @@ -73,7 +73,7 @@ "PortalAccessSubTitle": "Cette section vous permet de fournir aux utilisateurs des moyens sûrs et pratiques d'accéder au portail.", "PortalNameEmpty": "Nom de compte est vide", "PortalNameIncorrect": "Nom de compte incorrect", - "PortalNameLength": "Le nom du compte doit comporter entre 6 et 50 caractères", + "PortalNameLength": "Le nom du compte doit comporter entre 3 et 50 caractères", "PortalRenaming": "Changement de nom du portail", "PortalRenamingDescription": "Ici vous pouvez changer l'adresse du portail.", "PortalRenamingLabelText": "Nouveau nom du portail", diff --git a/packages/client/public/locales/hy-AM/Settings.json b/packages/client/public/locales/hy-AM/Settings.json index 7aaf726d35..b66748cd36 100644 --- a/packages/client/public/locales/hy-AM/Settings.json +++ b/packages/client/public/locales/hy-AM/Settings.json @@ -68,7 +68,7 @@ "PortalAccessSubTitle": "Այս բաժինը թույլ է տալիս օգտվողներին տրամադրել կայքէջ մուտք գործելու անվտանգ և հարմար եղանակներ:", "PortalNameEmpty": "Հաշվի անունը դատարկ է", "PortalNameIncorrect": "Հաշվի սխալ անուն", - "PortalNameLength": "Հաշվի անունը պետք է լինի 6-ից 50 նիշ", + "PortalNameLength": "Հաշվի անունը պետք է լինի 3-ից 50 նիշ", "PortalRenaming": "Կայքէջի վերանվանում", "PortalRenamingDescription": "Այստեղ Դուք կարող եք փոխել Ձեր կայքէջի հասցեն:", "PortalRenamingLabelText": "Նոր կայքէջի անուն", diff --git a/packages/client/public/locales/it/Settings.json b/packages/client/public/locales/it/Settings.json index 86a3aee5c7..3cf903f42a 100644 --- a/packages/client/public/locales/it/Settings.json +++ b/packages/client/public/locales/it/Settings.json @@ -73,7 +73,7 @@ "PortalAccessSubTitle": "Questa sezione consente di fornire agli utenti modi sicuri e convenienti per accedere al portale.", "PortalNameEmpty": "Nome account vuoto", "PortalNameIncorrect": "Nome account errato", - "PortalNameLength": "Il nome dell'account deve contenere da 6 a 50 caratteri", + "PortalNameLength": "Il nome dell'account deve contenere da 3 a 50 caratteri", "PortalRenaming": "Ridenominazione del portale", "PortalRenamingDescription": "Qui tu puoi cambiare il tuo indirizzo portale.", "PortalRenamingLabelText": "Nome del portale nuovo", diff --git a/packages/client/public/locales/ja-JP/Settings.json b/packages/client/public/locales/ja-JP/Settings.json index a4cde1048e..b391a4ac42 100644 --- a/packages/client/public/locales/ja-JP/Settings.json +++ b/packages/client/public/locales/ja-JP/Settings.json @@ -72,7 +72,7 @@ "PortalAccessSubTitle": "このセクションでは、ユーザーがポータルにアクセスするための安全で便利な方法を提供することができます。", "PortalNameEmpty": "アカウント名が空です。", "PortalNameIncorrect": "アカウント名が無効です。", - "PortalNameLength": "アカウント名は6~50文字がある必要です。", + "PortalNameLength": "アカウント名は3~50文字がある必要です。", "PortalRenaming": "ポータル改名", "PortalRenamingDescription": "ここではポータルアドレスを変更できます。", "PortalRenamingLabelText": "新のポータル名", diff --git a/packages/client/public/locales/ko-KR/Settings.json b/packages/client/public/locales/ko-KR/Settings.json index 1335b05fd2..d05aa32d06 100644 --- a/packages/client/public/locales/ko-KR/Settings.json +++ b/packages/client/public/locales/ko-KR/Settings.json @@ -68,7 +68,7 @@ "PortalAccessSubTitle": "이 섹션에서는 사용자에게 안전하고 편리한 포털 액세스 방법을 제공할 수 있습니다.", "PortalNameEmpty": "계정 이름이 비어 있습니다", "PortalNameIncorrect": "계정 이름이 잘못되었습니다", - "PortalNameLength": "계정 이름은 6~50글자여야 합니다", + "PortalNameLength": "계정 이름은 3~50글자여야 합니다", "PortalRenaming": "포털 이름 변경", "PortalRenamingDescription": "여기에서 포털 주소를 변경할 수 있습니다.", "PortalRenamingLabelText": "새 포털 이름", diff --git a/packages/client/public/locales/lo-LA/Settings.json b/packages/client/public/locales/lo-LA/Settings.json index edbc0cc78b..8b6f314ca5 100644 --- a/packages/client/public/locales/lo-LA/Settings.json +++ b/packages/client/public/locales/lo-LA/Settings.json @@ -66,7 +66,7 @@ "PortalAccessSubTitle": "ພາກນີ້ຊ່ວຍໃຫ້ທ່ານສາມາດໃຫ້ຜູ້ໃຊ້ມີວິທີທີ່ປອດໄພແລະສະດວກໃນການເຂົ້າເຖິງປະຕູ. ", "PortalNameEmpty": "ບັນຊີ ຊື່ ແມ່ນ ເປົ່າ", "PortalNameIncorrect": "ບໍ່ຖືກຕ້ອງ ບັນຊີ ຊື່ ", - "PortalNameLength": "ຊື່ບັນຊີຕ້ອງມີຄວາມຍາວລະຫວ່າງ 6 ຫາ 50 ຕົວອັກສອນ", + "PortalNameLength": "ຊື່ບັນຊີຕ້ອງມີຄວາມຍາວລະຫວ່າງ 3 ຫາ 50 ຕົວອັກສອນ", "PortalRenaming": "ປະຕູ ການ ປ່ຽນຊື່ ", "PortalRenamingDescription": "ທີ່ນີ້ທ່ານສາມາດປ່ຽນທີ່ຢູ່ປະຕູຂອງເຈົ້າໄດ້.", "PortalRenamingLabelText": "ໃໝ່ ປະຕູ ຊື່ ", diff --git a/packages/client/public/locales/lv/Settings.json b/packages/client/public/locales/lv/Settings.json index 7dd75156a1..6070df0b12 100644 --- a/packages/client/public/locales/lv/Settings.json +++ b/packages/client/public/locales/lv/Settings.json @@ -71,7 +71,7 @@ "PortalAccessSubTitle": "Šī sadaļa ļauj lietotājiem nodrošināt drošus un ērtus veidus, kā piekļūt portālam.", "PortalNameEmpty": "Konta nosaukums ir tukšs", "PortalNameIncorrect": "Nepareizs konta nosaukums", - "PortalNameLength": "Konta nosaukumam ir jābūt no 6 līdz 50 rakstzīmēm garam", + "PortalNameLength": "Konta nosaukumam ir jābūt no 3 līdz 50 rakstzīmēm garam", "PortalRenaming": "Portāla pārdēvēšana", "PortalRenamingDescription": "Šeit jūs varat mainīt savu portāla adresi.", "PortalRenamingLabelText": "Jauns portāla nosaukums", diff --git a/packages/client/public/locales/nl/Settings.json b/packages/client/public/locales/nl/Settings.json index 87d8de732e..dcf44fcf64 100644 --- a/packages/client/public/locales/nl/Settings.json +++ b/packages/client/public/locales/nl/Settings.json @@ -71,7 +71,7 @@ "PortalAccessSubTitle": "In dit gedeelte kunt u gebruikers veilige en handige manieren bieden om toegang te krijgen tot het portaal.", "PortalNameEmpty": "Accountnaam is leeg", "PortalNameIncorrect": "Onjuiste accountnaam", - "PortalNameLength": "De naam van de account moet tussen 6 en 50 tekens lang zijn", + "PortalNameLength": "De naam van de account moet tussen 3 en 50 tekens lang zijn", "PortalRenaming": "Hernoemen Portaal", "PortalRenamingDescription": "Hier kunt u uw portaaladres veranderen.", "PortalRenamingLabelText": "Nieuwe portaalnaam", diff --git a/packages/client/public/locales/pl/Settings.json b/packages/client/public/locales/pl/Settings.json index 43dfbe1495..bfd8daeb19 100644 --- a/packages/client/public/locales/pl/Settings.json +++ b/packages/client/public/locales/pl/Settings.json @@ -71,7 +71,7 @@ "PortalAccessSubTitle": "Dana sekcja umożliwia zapewnienie użytkownikom bezpiecznych i wygodnych metod dostępu do portalu.", "PortalNameEmpty": "Nazwa konta jest pusta", "PortalNameIncorrect": "Nieprawidłowa nazwa konta", - "PortalNameLength": "Nazwa konta musi zawierać od 6 do 50 znaków", + "PortalNameLength": "Nazwa konta musi zawierać od 3 do 50 znaków", "PortalRenaming": "Zmiana nazwy portalu", "PortalRenamingDescription": "Tutaj możesz zmienić adres portalu.", "PortalRenamingLabelText": "Nowa nazwa portalu", diff --git a/packages/client/public/locales/pt-BR/Settings.json b/packages/client/public/locales/pt-BR/Settings.json index a99163f061..9187da9147 100644 --- a/packages/client/public/locales/pt-BR/Settings.json +++ b/packages/client/public/locales/pt-BR/Settings.json @@ -73,7 +73,7 @@ "PortalAccessSubTitle": "Esta seção permite que você forneça aos usuários formas seguras e convenientes de acessar o portal.", "PortalNameEmpty": "Nome da conta está vazio", "PortalNameIncorrect": "Nome da conta incorreto", - "PortalNameLength": "O nome da conta deve ter entre 6 e 50 caracteres", + "PortalNameLength": "O nome da conta deve ter entre 3 e 50 caracteres", "PortalRenaming": "Renomear portal", "PortalRenamingDescription": "Aqui, você pode alterar o endereço do seu portal.", "PortalRenamingLabelText": "Nome do novo portal", diff --git a/packages/client/public/locales/pt/Settings.json b/packages/client/public/locales/pt/Settings.json index 7df52d6b87..0f34507582 100644 --- a/packages/client/public/locales/pt/Settings.json +++ b/packages/client/public/locales/pt/Settings.json @@ -68,7 +68,7 @@ "PortalAccessSubTitle": "Esta secção permite-lhe fornecer aos utilizadores formas seguras e convenientes de aceder ao portal.", "PortalNameEmpty": "Não colocou um nome para a conta", "PortalNameIncorrect": "Nome de conta incorreto", - "PortalNameLength": "O nome da conta tem de ter entre 6 e 50 caracteres", + "PortalNameLength": "O nome da conta tem de ter entre 3 e 50 caracteres", "PortalRenaming": "Renomeação do Portal", "PortalRenamingDescription": "Aqui pode mudar o endereço do seu portal.", "PortalRenamingLabelText": "Novo nome de portal", diff --git a/packages/client/public/locales/ro/Settings.json b/packages/client/public/locales/ro/Settings.json index 3248829de3..95ce266ede 100644 --- a/packages/client/public/locales/ro/Settings.json +++ b/packages/client/public/locales/ro/Settings.json @@ -68,7 +68,7 @@ "PortalAccessSubTitle": "Această secțiune va permite să le oferă utilizatorilor accesul sigur și convenabil la portal.", "PortalNameEmpty": "Denumirea contului este necompletată", "PortalNameIncorrect": "Denumirea contului incorectă", - "PortalNameLength": "Denumirea contului trebuie să conțină de la 6 până la 50 de caractere", + "PortalNameLength": "Denumirea contului trebuie să conțină de la 3 până la 50 de caractere", "PortalRenaming": "Redenumirea portalului", "PortalRenamingDescription": "Aici puteți schimba adresa de portal dvs.", "PortalRenamingLabelText": "O nouă denumire de portal", diff --git a/packages/client/public/locales/ru/Settings.json b/packages/client/public/locales/ru/Settings.json index 7fb684f93f..3ea2fb8814 100644 --- a/packages/client/public/locales/ru/Settings.json +++ b/packages/client/public/locales/ru/Settings.json @@ -136,7 +136,7 @@ "PortalIntegration": "Интеграция с порталом", "PortalNameEmpty": "Поле имя аккаунта не заполнено", "PortalNameIncorrect": "Неверное имя портала", - "PortalNameLength": "Имя учетной записи должно быть от 6 до 50 символов", + "PortalNameLength": "Имя учетной записи должно быть от 3 до 50 символов", "PortalRenaming": "Изменение имени портала", "PortalRenamingDescription": "Здесь вы можете изменить адрес портала.", "PortalRenamingLabelText": "Новое имя портала", diff --git a/packages/client/public/locales/ru/Translations.json b/packages/client/public/locales/ru/Translations.json index 2cb367cf5e..d0ea42897f 100644 --- a/packages/client/public/locales/ru/Translations.json +++ b/packages/client/public/locales/ru/Translations.json @@ -28,6 +28,7 @@ "Folders": "Папки", "FormTemplates": "Шаблоны форм", "LinkCopySuccess": "Ссылка скопирована в буфер обмена", + "LinkValidTime": "Эта ссылка действительна только {{days_count}} дней", "MediaLoadError": "Медиа файл не может быть загружен", "MobileAndroid": "Скачать ONLYOFFICE Документы в Google Play", "MobileIos": "Скачать ONLYOFFICE Документы в App Store", diff --git a/packages/client/public/locales/sk/Settings.json b/packages/client/public/locales/sk/Settings.json index 8225f13e32..0aa309fc49 100644 --- a/packages/client/public/locales/sk/Settings.json +++ b/packages/client/public/locales/sk/Settings.json @@ -71,7 +71,7 @@ "PortalAccessSubTitle": "Tu môžete vytvoriť pre používateľov bezpečné a pohodlné spôsoby prístupu na portál.", "PortalNameEmpty": "Názov účtu je prázdny", "PortalNameIncorrect": "Nesprávny názov účtu", - "PortalNameLength": "Názov účtu musí mať 6 až 50 znakov", + "PortalNameLength": "Názov účtu musí mať 3 až 50 znakov", "PortalRenaming": "Premenovanie portálu", "PortalRenamingDescription": "Tu môžete zmeniť adresu portálu.", "PortalRenamingLabelText": "Nový názov portálu", diff --git a/packages/client/public/locales/sl/Settings.json b/packages/client/public/locales/sl/Settings.json index 1f95ae0689..e90dcd5d6b 100644 --- a/packages/client/public/locales/sl/Settings.json +++ b/packages/client/public/locales/sl/Settings.json @@ -71,7 +71,7 @@ "PortalAccessSubTitle": "Ta razdelek omogoča uporabnikom varne in udobne načine za dostop do portala.", "PortalNameEmpty": "Ime računa je prazno", "PortalNameIncorrect": "Napačno ime računa", - "PortalNameLength": "Ime računa mora imeti dolžino od 6 do 50 znakov", + "PortalNameLength": "Ime računa mora imeti dolžino od 3 do 50 znakov", "PortalRenaming": "Preimenovanje portala", "PortalRenamingDescription": "Tukaj lahko spremenite naslov vašega portala.", "PortalRenamingLabelText": "Novo ime portala", diff --git a/packages/client/public/locales/tr/Settings.json b/packages/client/public/locales/tr/Settings.json index 4d33db2785..24569c05f3 100644 --- a/packages/client/public/locales/tr/Settings.json +++ b/packages/client/public/locales/tr/Settings.json @@ -71,7 +71,7 @@ "PortalAccessSubTitle": "Bu bölüm, kullanıcılara portala erişmeleri için güvenli ve uygun yollar sağlamanıza olanak tanır.", "PortalNameEmpty": "Hesap adı boş", "PortalNameIncorrect": "Yanlış hesap adı", - "PortalNameLength": "Hesap adı 6 ila 50 karakter uzunluğunda olmalıdır", + "PortalNameLength": "Hesap adı 3 ila 50 karakter uzunluğunda olmalıdır", "PortalRenaming": "Portal Yeniden Adlandırma", "PortalRenamingDescription": "Buradan portal adresinizi değiştirebilirsiniz.", "PortalRenamingLabelText": "Yeni portal adı", diff --git a/packages/client/public/locales/uk-UA/Settings.json b/packages/client/public/locales/uk-UA/Settings.json index 03cf9bd870..8cd671bf44 100644 --- a/packages/client/public/locales/uk-UA/Settings.json +++ b/packages/client/public/locales/uk-UA/Settings.json @@ -71,7 +71,7 @@ "PortalAccessSubTitle": "У цьому розділі можна надати користувачам безпечні та зручні способи доступу до порталу.", "PortalNameEmpty": "Ім'я облікового запису порожнє", "PortalNameIncorrect": "Неправильне ім'я облікового запису", - "PortalNameLength": "Довжина імені облікового запису має бути від 6 до 50 символів", + "PortalNameLength": "Довжина імені облікового запису має бути від 3 до 50 символів", "PortalRenaming": "Перейменування порталу", "PortalRenamingDescription": "Тут ви можете змінити адресу вашого порталу.", "PortalRenamingLabelText": "Нове ім'я порталу", diff --git a/packages/client/public/locales/vi/Settings.json b/packages/client/public/locales/vi/Settings.json index 7ab0a6be78..4dbe23e9ac 100644 --- a/packages/client/public/locales/vi/Settings.json +++ b/packages/client/public/locales/vi/Settings.json @@ -71,7 +71,7 @@ "PortalAccessSubTitle": "Phần này cho phép bạn cung cấp cho người dùng những cách an toàn và thuận tiện để truy cập cổng thông tin.", "PortalNameEmpty": "Tên tài khoản trống", "PortalNameIncorrect": "Tên tài khoản không chính xác", - "PortalNameLength": "Tên tài khoản phải dài từ 6 đến 50 ký tự", + "PortalNameLength": "Tên tài khoản phải dài từ 3 đến 50 ký tự", "PortalRenaming": "Đang đổi tên cổng", "PortalRenamingDescription": "Ở đây bạn có thể thay đổi địa chỉ cổng thông tin của bạn.", "PortalRenamingLabelText": "Tên cổng thông tin mới", diff --git a/packages/client/public/locales/zh-CN/Settings.json b/packages/client/public/locales/zh-CN/Settings.json index 8789b6337d..27a0c6eebb 100644 --- a/packages/client/public/locales/zh-CN/Settings.json +++ b/packages/client/public/locales/zh-CN/Settings.json @@ -73,7 +73,7 @@ "PortalAccessSubTitle": "这一部分允许您为用户提供安全又方便的方式来访问门户网站。", "PortalNameEmpty": "账户名称为空", "PortalNameIncorrect": "账户名称不正确", - "PortalNameLength": "账户名称的长度必须在6至50个字符之间", + "PortalNameLength": "账户名称的长度必须在3至50个字符之间", "PortalRenaming": "门户重命名", "PortalRenamingDescription": "在此处,您可以更改您的门户地址。", "PortalRenamingLabelText": "新门户名称", diff --git a/packages/client/src/components/dialogs/ConvertDialog/index.js b/packages/client/src/components/dialogs/ConvertDialog/index.js index 1da1b96b4d..617e205924 100644 --- a/packages/client/src/components/dialogs/ConvertDialog/index.js +++ b/packages/client/src/components/dialogs/ConvertDialog/index.js @@ -27,6 +27,7 @@ const ConvertDialogComponent = (props) => { isRecentFolder, isFavoritesFolder, isShareFolder, + setIsConvertSingleFile, } = props; let rootFolderTitle = ""; @@ -50,6 +51,7 @@ const ConvertDialogComponent = (props) => { onClose(); if (convertSingleFile) { + setIsConvertSingleFile(true); const item = { fileId: convertItem.id, toFolderId: folderId, @@ -160,7 +162,11 @@ export default inject( isFavoritesFolder, isShareFolder, } = treeFoldersStore; - const { convertUploadedFiles, convertFile } = uploadDataStore; + const { + convertUploadedFiles, + convertFile, + setIsConvertSingleFile, + } = uploadDataStore; const { storeOriginalFiles, setStoreOriginal, @@ -187,6 +193,7 @@ export default inject( isRecentFolder, isFavoritesFolder, isShareFolder, + setIsConvertSingleFile, }; } )(withRouter(observer(ConvertDialog))); diff --git a/packages/client/src/components/panels/InvitePanel/sub-components/ExternalLinks.js b/packages/client/src/components/panels/InvitePanel/sub-components/ExternalLinks.js index 7731b27ee3..8aa180141d 100644 --- a/packages/client/src/components/panels/InvitePanel/sub-components/ExternalLinks.js +++ b/packages/client/src/components/panels/InvitePanel/sub-components/ExternalLinks.js @@ -72,7 +72,12 @@ const ExternalLinks = ({ const copyLink = (link) => { if (link) { - toastr.success(t("Translations:LinkCopySuccess")); + toastr.success( + `${t("Translations:LinkCopySuccess")}. ${t( + "Translations:LinkValidTime", + { days_count: 7 } + )}` + ); copy(link); } }; diff --git a/packages/client/src/components/panels/InvitePanel/sub-components/InviteInput.js b/packages/client/src/components/panels/InvitePanel/sub-components/InviteInput.js index 577e34b45b..c9f45b9f3b 100644 --- a/packages/client/src/components/panels/InvitePanel/sub-components/InviteInput.js +++ b/packages/client/src/components/panels/InvitePanel/sub-components/InviteInput.js @@ -196,7 +196,7 @@ const InviteInput = ({ }; const closeInviteInputPanel = (e) => { - if (e?.target.tagName.toUpperCase() == "INPUT") return; + // if (e?.target.tagName.toUpperCase() == "INPUT") return; setSearchPanelVisible(false); }; diff --git a/packages/client/src/components/panels/SelectFolderDialog/AsideView.js b/packages/client/src/components/panels/SelectFolderDialog/AsideView.js index 08ffbf3877..445bf95b2f 100644 --- a/packages/client/src/components/panels/SelectFolderDialog/AsideView.js +++ b/packages/client/src/components/panels/SelectFolderDialog/AsideView.js @@ -17,7 +17,6 @@ const StyledModalDialog = styled(ModalDialog)` } `; const SelectFolderDialogAsideView = ({ - theme, t, isPanelVisible, onClose, @@ -41,7 +40,6 @@ const SelectFolderDialogAsideView = ({ const isLoaded = folderId && resultingFolderTree; return ( - + {withFileSelectDialog && ( - - + +
{header}
@@ -86,7 +83,6 @@ const SelectFolderDialogAsideView = ({