diff --git a/common/ASC.Core.Common/Context/WorkContext.cs b/common/ASC.Core.Common/Context/WorkContext.cs index f54d5d77a8..43294bcbe4 100644 --- a/common/ASC.Core.Common/Context/WorkContext.cs +++ b/common/ASC.Core.Common/Context/WorkContext.cs @@ -123,7 +123,7 @@ public class WorkContext INotifySender emailSender = _notifyServiceSender; INotifySender telegramSender = _telegramSender; INotifySender pushSender = _pushSender; - + var postman = _configuration["core:notify:postman"]; @@ -161,6 +161,11 @@ public class WorkContext } } + public void RegisterSendMethod(Func method, string cron) + { + NotifyEngine.RegisterSendMethod(method, cron); + } + public void RegisterSendMethod(Action method, string cron) { NotifyEngine.RegisterSendMethod(method, cron); diff --git a/common/ASC.Core.Common/Notify/Engine/NotifyEngine.cs b/common/ASC.Core.Common/Notify/Engine/NotifyEngine.cs index 302b026449..172115bf95 100644 --- a/common/ASC.Core.Common/Notify/Engine/NotifyEngine.cs +++ b/common/ASC.Core.Common/Notify/Engine/NotifyEngine.cs @@ -100,6 +100,25 @@ public class NotifyEngine : INotifyEngine, IDisposable _methodsEvent.Set(); } + internal void RegisterSendMethod(Func method, string cron) + { + ArgumentNullException.ThrowIfNull(method); + ArgumentNullOrEmptyException.ThrowIfNullOrEmpty(cron); + + var w = new SendMethodWrapper(method, cron, _logger); + lock (_sendMethods) + { + if (!_notifyScheduler.IsAlive) + { + _notifyScheduler.Start(); + } + + _sendMethods.Remove(w); + _sendMethods.Add(w); + } + _methodsEvent.Set(); + } + internal void UnregisterSendMethod(Action method) { ArgumentNullException.ThrowIfNull(method); @@ -124,7 +143,7 @@ public class NotifyEngine : INotifyEngine, IDisposable copy = _sendMethods.ToList(); } - foreach(var w in copy) + foreach (var w in copy) { if (!w.ScheduleDate.HasValue) { @@ -590,6 +609,7 @@ public class NotifyEngine : INotifyEngine, IDisposable private readonly SemaphoreSlim _semaphore; private readonly CronExpression _cronExpression; private readonly Action _method; + private readonly Func _asyncMethod; private readonly ILogger _logger; public DateTime? ScheduleDate { get; private set; } @@ -608,6 +628,11 @@ public class NotifyEngine : INotifyEngine, IDisposable UpdateScheduleDate(DateTime.UtcNow); } + public SendMethodWrapper(Func method, string cron, ILogger log) : this((Action)null, cron, log) + { + _asyncMethod = method; + } + public void UpdateScheduleDate(DateTime d) { try @@ -626,11 +651,18 @@ public class NotifyEngine : INotifyEngine, IDisposable public async Task InvokeSendMethod(DateTime d) { await _semaphore.WaitAsync(); - await Task.Run(() => + await Task.Run(async () => { try { - _method(d); + if (_method != null) + { + _method(d); + } + else if (_asyncMethod != null) + { + await _asyncMethod(d); + } } catch (Exception e) { @@ -642,7 +674,7 @@ public class NotifyEngine : INotifyEngine, IDisposable public override bool Equals(object obj) { - return obj is SendMethodWrapper w && _method.Equals(w._method); + return obj is SendMethodWrapper w && ((_method != null && _method.Equals(w._method)) || (_asyncMethod != null && _asyncMethod.Equals(w._asyncMethod))); } public override int GetHashCode() diff --git a/packages/client/src/store/FilesActionsStore.js b/packages/client/src/store/FilesActionsStore.js index f0e7f88928..6e86e6da4e 100644 --- a/packages/client/src/store/FilesActionsStore.js +++ b/packages/client/src/store/FilesActionsStore.js @@ -446,6 +446,8 @@ class FilesActionStore { const folderIds = roomsForDelete.map((f) => f.id); if (isArchiveFolder) addActiveItems(null, folderIds); + const operationId = uniqueid("operation_"); + setSecondaryProgressBarData({ icon: "trash", visible: true, @@ -455,8 +457,6 @@ class FilesActionStore { operationId, }); - const operationId = uniqueid("operation_"); - try { await removeFiles(folderIds, [], true, true).then(async (res) => { if (res[0]?.error) return Promise.reject(res[0].error); diff --git a/packages/client/src/store/FilesStore.js b/packages/client/src/store/FilesStore.js index e1e4387312..273c941439 100644 --- a/packages/client/src/store/FilesStore.js +++ b/packages/client/src/store/FilesStore.js @@ -376,10 +376,16 @@ class FilesStore { const folder = JSON.parse(opt?.data); if (!folder || !folder.id) return; - this.getFolderInfo(folder.id); + api.files + .getFolderInfo(folder.id) + .then(() => this.setFolder(folderInfo)) + .catch(() => { + // console.log("Folder deleted") + }); + console.log("[WS] update folder", folder.id, folder.title); - if (this.selection) { + if (this.selection?.length) { const foundIndex = this.selection?.findIndex((x) => x.id === folder.id); if (foundIndex > -1) { runInAction(() => { diff --git a/products/ASC.Files/Core/Core/FileStorageService.cs b/products/ASC.Files/Core/Core/FileStorageService.cs index eb93aed20e..048b593f61 100644 --- a/products/ASC.Files/Core/Core/FileStorageService.cs +++ b/products/ASC.Files/Core/Core/FileStorageService.cs @@ -2976,7 +2976,14 @@ public class FileStorageService //: IFileStorageService message = message.Substring(0, maxMessageLength) + "..."; } - _ = _notifyClient.SendEditorMentions(file, fileLink, recipients, message); + try + { + await _notifyClient.SendEditorMentions(file, fileLink, recipients, message); + } + catch(Exception ex) + { + _logger.ErrorWithException(ex); + } return showSharingSettings ? await GetSharedInfoShortFileAsync(fileId) : null; } diff --git a/web/ASC.Web.Core/Notify/StudioNotifyService.cs b/web/ASC.Web.Core/Notify/StudioNotifyService.cs index 0d8af20559..bd67ef8646 100644 --- a/web/ASC.Web.Core/Notify/StudioNotifyService.cs +++ b/web/ASC.Web.Core/Notify/StudioNotifyService.cs @@ -786,7 +786,8 @@ public class StudioNotifyService notifyAction = Actions.SaasAdminActivationV1; } - var confirmationUrl = _commonLinkUtility.GetConfirmationEmailUrl(u.Email, ConfirmType.EmailActivation); + var userId = _authContext.CurrentAccount.ID; + var confirmationUrl = _commonLinkUtility.GetConfirmationEmailUrl(u.Email, ConfirmType.EmailActivation, null, userId); confirmationUrl += "&first=true"; static string greenButtonText() => WebstudioNotifyPatternResource.ButtonConfirmEmail; diff --git a/web/ASC.Web.Core/Notify/StudioNotifyServiceSender.cs b/web/ASC.Web.Core/Notify/StudioNotifyServiceSender.cs index 5c47d6927f..12700f579c 100644 --- a/web/ASC.Web.Core/Notify/StudioNotifyServiceSender.cs +++ b/web/ASC.Web.Core/Notify/StudioNotifyServiceSender.cs @@ -123,16 +123,16 @@ public class StudioNotifyServiceSender scope.ServiceProvider.GetService().SendPersonalLetters(EMailSenderName, scheduleDate); } - public void SendMsgWhatsNew(DateTime scheduleDate) + public async Task SendMsgWhatsNew(DateTime scheduleDate) { using var scope = _serviceProvider.CreateScope(); - scope.ServiceProvider.GetRequiredService().SendMsgWhatsNew(scheduleDate, WhatsNewType.DailyFeed); + await scope.ServiceProvider.GetRequiredService().SendMsgWhatsNew(scheduleDate, WhatsNewType.DailyFeed); } - public void SendRoomsActivity(DateTime scheduleDate) + public async Task SendRoomsActivity(DateTime scheduleDate) { using var scope = _serviceProvider.CreateScope(); - scope.ServiceProvider.GetRequiredService().SendMsgWhatsNew(scheduleDate, WhatsNewType.RoomsActivity); + await scope.ServiceProvider.GetRequiredService().SendMsgWhatsNew(scheduleDate, WhatsNewType.RoomsActivity); } } diff --git a/web/ASC.Web.Core/Notify/StudioWhatsNewNotify.cs b/web/ASC.Web.Core/Notify/StudioWhatsNewNotify.cs index b459f05657..9a2d2044c1 100644 --- a/web/ASC.Web.Core/Notify/StudioWhatsNewNotify.cs +++ b/web/ASC.Web.Core/Notify/StudioWhatsNewNotify.cs @@ -45,7 +45,7 @@ public class StudioWhatsNewNotify private readonly WorkContext _workContext; private readonly DisplayUserSettingsHelper _displayUserSettingsHelper; - public readonly static List DailyActions = new List() + public static readonly List DailyActions = new List() { MessageAction.FileCreated, MessageAction.FileUpdatedRevisionComment, @@ -57,7 +57,7 @@ public class StudioWhatsNewNotify MessageAction.UserUpdated }; - public readonly static List RoomsActivityActions = new List() + public static readonly List RoomsActivityActions = new List() { MessageAction.FileUploaded, MessageAction.UserFileUpdated, @@ -101,7 +101,7 @@ public class StudioWhatsNewNotify } - public void SendMsgWhatsNew(DateTime scheduleDate, WhatsNewType whatsNewType) + public async Task SendMsgWhatsNew(DateTime scheduleDate, WhatsNewType whatsNewType) { var products = _webItemManager.GetItemsAll(); @@ -117,7 +117,7 @@ public class StudioWhatsNewNotify foreach (var tenantid in tenants) { - SendMsgWhatsNew(tenantid, scheduleDate, whatsNewType, products); + await SendMsgWhatsNew(tenantid, scheduleDate, whatsNewType, products); } } @@ -134,7 +134,7 @@ public class StudioWhatsNewNotify } } - private void SendMsgWhatsNew(int tenantid, DateTime scheduleDate, WhatsNewType whatsNewType, List products) + private async Task SendMsgWhatsNew(int tenantid, DateTime scheduleDate, WhatsNewType whatsNewType, List products) { try { @@ -153,11 +153,15 @@ public class StudioWhatsNewNotify _log.InformationStartSendWhatsNewIn(tenant.GetTenantDomain(_coreSettings), tenantid); foreach (var user in _userManager.GetUsers()) { + _log.Debug($"SendMsgWhatsNew start checking subscription: {user.Email}");//temp + if (!CheckSubscription(user, whatsNewType)) { continue; } + _log.Debug($"SendMsgWhatsNew checking subscription complete: {user.Email}");//temp + _securityContext.AuthenticateMeWithoutCookie(_authManager.GetAccountByID(tenant.Id, user.Id)); var culture = string.IsNullOrEmpty(user.CultureName) ? tenant.GetCulture() : user.GetCulture(); @@ -169,9 +173,11 @@ public class StudioWhatsNewNotify foreach (var p in products) { - auditEvents.AddRange(p.GetAuditEventsAsync(scheduleDate, user.Id, tenant, whatsNewType).Result); + auditEvents.AddRange(await p.GetAuditEventsAsync(scheduleDate, user.Id, tenant, whatsNewType)); } + _log.Debug($"SendMsgWhatsNew auditEvents count : {auditEvents.Count}");//temp + var userActivities = new List(); foreach (var e in auditEvents) @@ -182,6 +188,8 @@ public class StudioWhatsNewNotify } } + _log.Debug($"SendMsgWhatsNew userActivities count : {userActivities.Count}");//temp + if (userActivities.Any()) { _log.InformationSendWhatsNewTo(user.Email); diff --git a/web/ASC.Web.Core/PublicResources/CustomModeResource.Designer.cs b/web/ASC.Web.Core/PublicResources/CustomModeResource.Designer.cs index b615648732..c515116ebc 100644 --- a/web/ASC.Web.Core/PublicResources/CustomModeResource.Designer.cs +++ b/web/ASC.Web.Core/PublicResources/CustomModeResource.Designer.cs @@ -65,11 +65,11 @@ namespace ASC.Web.Core.PublicResources { /// ///Welcome to ONLYOFFICE DocSpace! Your user profile has been successfully added to "${__VirtualRootPath}":"${__VirtualRootPath}". Now you can: /// - ///*#* Work with other users in the room you are invited to: *collaboration rooms for real-time co-authoring or custom rooms with flexible settings for any purpose*. + ///*# Work with other users in the room you are invited to*: collaboration rooms for real-time co-authoring or custom rooms with flexible settings for any purpose*. /// ///*# Work with files of different formats*: text documents, spreadsheets, presentations, digital forms, PDFs, e-books, multimedia. /// - ///*# Collaborate on documents* with two co-editing [rest of string was truncated]";. + ///*# Collaborate on documents* with two co-editing m [rest of string was truncated]";. /// public static string pattern_enterprise_whitelabel_user_welcome_custom_mode_v1 { get { diff --git a/web/ASC.Web.Core/PublicResources/CustomModeResource.resx b/web/ASC.Web.Core/PublicResources/CustomModeResource.resx index 60727d86df..820ad55b11 100644 --- a/web/ASC.Web.Core/PublicResources/CustomModeResource.resx +++ b/web/ASC.Web.Core/PublicResources/CustomModeResource.resx @@ -122,7 +122,7 @@ Welcome to ONLYOFFICE DocSpace! Your user profile has been successfully added to "${__VirtualRootPath}":"${__VirtualRootPath}". Now you can: -*#* Work with other users in the room you are invited to: *collaboration rooms for real-time co-authoring or custom rooms with flexible settings for any purpose*. +*# Work with other users in the room you are invited to*: collaboration rooms for real-time co-authoring or custom rooms with flexible settings for any purpose*. *# Work with files of different formats*: text documents, spreadsheets, presentations, digital forms, PDFs, e-books, multimedia. diff --git a/web/ASC.Web.Core/PublicResources/WebstudioNotifyPatternResource.Designer.cs b/web/ASC.Web.Core/PublicResources/WebstudioNotifyPatternResource.Designer.cs index 93b2c4aa02..bba2225c6e 100644 --- a/web/ASC.Web.Core/PublicResources/WebstudioNotifyPatternResource.Designer.cs +++ b/web/ASC.Web.Core/PublicResources/WebstudioNotifyPatternResource.Designer.cs @@ -880,11 +880,11 @@ namespace ASC.Web.Core.PublicResources { /// ///Welcome to ONLYOFFICE DocSpace! Your user profile has been successfully added to "${__VirtualRootPath}":"${__VirtualRootPath}". Now you can: /// - ///*#* Work with other users in the room you are invited to: *collaboration rooms for real-time co-authoring or custom rooms with flexible settings for any purpose*. + ///*# Work with other users in the room you are invited to*: collaboration rooms for real-time co-authoring or custom rooms with flexible settings for any purpose*. /// ///*# Work with files of different formats*: text documents, spreadsheets, presentations, digital forms, PDFs, e-books, multimedia. /// - ///*# Collaborate on documents* with two co-editing [rest of string was truncated]";. + ///*# Collaborate on documents* with two co-editing m [rest of string was truncated]";. /// public static string pattern_enterprise_guest_welcome_v1 { get { @@ -914,11 +914,11 @@ namespace ASC.Web.Core.PublicResources { /// ///Welcome to ONLYOFFICE DocSpace! Your user profile has been successfully added to "${__VirtualRootPath}":"${__VirtualRootPath}". Now you can: /// - ///*#* Work with other users in the room you are invited to: *collaboration rooms for real-time co-authoring or custom rooms with flexible settings for any purpose*. + ///*# Work with other users in the room you are invited to*: collaboration rooms for real-time co-authoring or custom rooms with flexible settings for any purpose*. /// ///*# Work with files of different formats*: text documents, spreadsheets, presentations, digital forms, PDFs, e-books, multimedia. /// - ///*# Collaborate on documents* with two co-editing [rest of string was truncated]";. + ///*# Collaborate on documents* with two co-editing m [rest of string was truncated]";. /// public static string pattern_enterprise_user_welcome_v1 { get { @@ -993,11 +993,11 @@ namespace ASC.Web.Core.PublicResources { /// ///Welcome to ONLYOFFICE DocSpace! Your user profile has been successfully added to "${__VirtualRootPath}":"${__VirtualRootPath}". Now you can: /// - ///*#* Work with other users in the room you are invited to: *collaboration rooms for real-time co-authoring or custom rooms with flexible settings for any purpose*. + ///*# Work with other users in the room you are invited to*: collaboration rooms for real-time co-authoring or custom rooms with flexible settings for any purpose*. /// ///*# Work with files of different formats*: text documents, spreadsheets, presentations, digital forms, PDFs, e-books, multimedia. /// - ///*# Collaborate on documents* with two co-editing [rest of string was truncated]";. + ///*# Collaborate on documents* with two co-editing m [rest of string was truncated]";. /// public static string pattern_enterprise_whitelabel_guest_welcome_v1 { get { @@ -1027,11 +1027,11 @@ namespace ASC.Web.Core.PublicResources { /// ///Welcome to ONLYOFFICE DocSpace! Your user profile has been successfully added to "${__VirtualRootPath}":"${__VirtualRootPath}". Now you can: /// - ///*#* Work with other users in the room you are invited to: *collaboration rooms for real-time co-authoring or custom rooms with flexible settings for any purpose*. + ///*# Work with other users in the room you are invited to*: collaboration rooms for real-time co-authoring or custom rooms with flexible settings for any purpose*. /// ///*# Work with files of different formats*: text documents, spreadsheets, presentations, digital forms, PDFs, e-books, multimedia. /// - ///*# Collaborate on documents* with two co-editing [rest of string was truncated]";. + ///*# Collaborate on documents* with two co-editing m [rest of string was truncated]";. /// public static string pattern_enterprise_whitelabel_user_welcome_v1 { get { @@ -1314,11 +1314,11 @@ namespace ASC.Web.Core.PublicResources { /// ///Welcome to ONLYOFFICE DocSpace! Your user profile has been successfully added to "${__VirtualRootPath}":"${__VirtualRootPath}". Now you can: /// - ///*#* Work with other users in the room you are invited to: *collaboration rooms for real-time co-authoring or custom rooms with flexible settings for any purpose*. + ///*# Work with other users in the room you are invited to*: collaboration rooms for real-time co-authoring or custom rooms with flexible settings for any purpose*. /// ///*# Work with files of different formats*: text documents, spreadsheets, presentations, digital forms, PDFs, e-books, multimedia. /// - ///*# Collaborate on documents* with two co-editing [rest of string was truncated]";. + ///*# Collaborate on documents* with two co-editing m [rest of string was truncated]";. /// public static string pattern_opensource_guest_welcome_v1 { get { @@ -1363,11 +1363,11 @@ namespace ASC.Web.Core.PublicResources { /// ///Welcome to ONLYOFFICE DocSpace! Your user profile has been successfully added to "${__VirtualRootPath}":"${__VirtualRootPath}". Now you can: /// - ///*#* Work with other users in the room you are invited to: *collaboration rooms for real-time co-authoring or custom rooms with flexible settings for any purpose*. + ///*# Work with other users in the room you are invited to*: collaboration rooms for real-time co-authoring or custom rooms with flexible settings for any purpose*. /// ///*# Work with files of different formats*: text documents, spreadsheets, presentations, digital forms, PDFs, e-books, multimedia. /// - ///*# Collaborate on documents* with two co-editing [rest of string was truncated]";. + ///*# Collaborate on documents* with two co-editing m [rest of string was truncated]";. /// public static string pattern_opensource_user_welcome_v1 { get { @@ -2019,11 +2019,11 @@ namespace ASC.Web.Core.PublicResources { /// ///Welcome to ONLYOFFICE DocSpace! Your user profile has been successfully added to "${__VirtualRootPath}":"${__VirtualRootPath}". Now you can: /// - ///*#* Work with other users in the room you are invited to: *collaboration rooms for real-time co-authoring or custom rooms with flexible settings for any purpose*. + ///*# Work with other users in the room you are invited to*: collaboration rooms for real-time co-authoring or custom rooms with flexible settings for any purpose. /// ///*# Work with files of different formats*: text documents, spreadsheets, presentations, digital forms, PDFs, e-books, multimedia. /// - ///*# Collaborate on documents* with two co-editing [rest of string was truncated]";. + ///*# Collaborate on documents* with two co-editing mo [rest of string was truncated]";. /// public static string pattern_saas_guest_welcome_v1 { get { @@ -2148,11 +2148,11 @@ namespace ASC.Web.Core.PublicResources { /// ///Welcome to ONLYOFFICE DocSpace! Your user profile has been successfully added to "${__VirtualRootPath}":"${__VirtualRootPath}". Now you can: /// - ///*#* Work with other users in the room you are invited to: *collaboration rooms for real-time co-authoring or custom rooms with flexible settings for any purpose*. + ///*# Work with other users in the room you are invited to*: collaboration rooms for real-time co-authoring or custom rooms with flexible settings for any purpose*. /// ///*# Work with files of different formats*: text documents, spreadsheets, presentations, digital forms, PDFs, e-books, multimedia. /// - ///*# Collaborate on documents* with two co-editing [rest of string was truncated]";. + ///*# Collaborate on documents* with two co-editing m [rest of string was truncated]";. /// public static string pattern_saas_user_welcome_v1 { get { diff --git a/web/ASC.Web.Core/PublicResources/WebstudioNotifyPatternResource.resx b/web/ASC.Web.Core/PublicResources/WebstudioNotifyPatternResource.resx index 5ad87e81e6..d66b4007e4 100644 --- a/web/ASC.Web.Core/PublicResources/WebstudioNotifyPatternResource.resx +++ b/web/ASC.Web.Core/PublicResources/WebstudioNotifyPatternResource.resx @@ -349,7 +349,7 @@ You will get more tips on how to use your web-office. You can cancel the subscri Welcome to ONLYOFFICE DocSpace! Your user profile has been successfully added to "${__VirtualRootPath}":"${__VirtualRootPath}". Now you can: -*#* Work with other users in the room you are invited to: *collaboration rooms for real-time co-authoring or custom rooms with flexible settings for any purpose*. +*# Work with other users in the room you are invited to*: collaboration rooms for real-time co-authoring or custom rooms with flexible settings for any purpose*. *# Work with files of different formats*: text documents, spreadsheets, presentations, digital forms, PDFs, e-books, multimedia. @@ -381,7 +381,7 @@ You will get more tips on how to use your web-office. You can cancel the subscri Welcome to ONLYOFFICE DocSpace! Your user profile has been successfully added to "${__VirtualRootPath}":"${__VirtualRootPath}". Now you can: -*#* Work with other users in the room you are invited to: *collaboration rooms for real-time co-authoring or custom rooms with flexible settings for any purpose*. +*# Work with other users in the room you are invited to*: collaboration rooms for real-time co-authoring or custom rooms with flexible settings for any purpose*. *# Work with files of different formats*: text documents, spreadsheets, presentations, digital forms, PDFs, e-books, multimedia. @@ -537,7 +537,7 @@ You will get more tips on how to use your web-office. You can cancel the subscri Welcome to ONLYOFFICE DocSpace! Your user profile has been successfully added to "${__VirtualRootPath}":"${__VirtualRootPath}". Now you can: -*#* Work with other users in the room you are invited to: *collaboration rooms for real-time co-authoring or custom rooms with flexible settings for any purpose*. +*# Work with other users in the room you are invited to*: collaboration rooms for real-time co-authoring or custom rooms with flexible settings for any purpose*. *# Work with files of different formats*: text documents, spreadsheets, presentations, digital forms, PDFs, e-books, multimedia. @@ -916,7 +916,7 @@ ONLYOFFICE Team Welcome to ONLYOFFICE DocSpace! Your user profile has been successfully added to "${__VirtualRootPath}":"${__VirtualRootPath}". Now you can: -*#* Work with other users in the room you are invited to: *collaboration rooms for real-time co-authoring or custom rooms with flexible settings for any purpose*. +*# Work with other users in the room you are invited to*: collaboration rooms for real-time co-authoring or custom rooms with flexible settings for any purpose. *# Work with files of different formats*: text documents, spreadsheets, presentations, digital forms, PDFs, e-books, multimedia. @@ -1528,7 +1528,7 @@ ONLYOFFICE Team Welcome to ONLYOFFICE DocSpace! Your user profile has been successfully added to "${__VirtualRootPath}":"${__VirtualRootPath}". Now you can: -*#* Work with other users in the room you are invited to: *collaboration rooms for real-time co-authoring or custom rooms with flexible settings for any purpose*. +*# Work with other users in the room you are invited to*: collaboration rooms for real-time co-authoring or custom rooms with flexible settings for any purpose*. *# Work with files of different formats*: text documents, spreadsheets, presentations, digital forms, PDFs, e-books, multimedia. @@ -1549,7 +1549,7 @@ ONLYOFFICE Team Welcome to ONLYOFFICE DocSpace! Your user profile has been successfully added to "${__VirtualRootPath}":"${__VirtualRootPath}". Now you can: -*#* Work with other users in the room you are invited to: *collaboration rooms for real-time co-authoring or custom rooms with flexible settings for any purpose*. +*# Work with other users in the room you are invited to*: collaboration rooms for real-time co-authoring or custom rooms with flexible settings for any purpose*. *# Work with files of different formats*: text documents, spreadsheets, presentations, digital forms, PDFs, e-books, multimedia. @@ -1570,7 +1570,7 @@ ONLYOFFICE Team Welcome to ONLYOFFICE DocSpace! Your user profile has been successfully added to "${__VirtualRootPath}":"${__VirtualRootPath}". Now you can: -*#* Work with other users in the room you are invited to: *collaboration rooms for real-time co-authoring or custom rooms with flexible settings for any purpose*. +*# Work with other users in the room you are invited to*: collaboration rooms for real-time co-authoring or custom rooms with flexible settings for any purpose*. *# Work with files of different formats*: text documents, spreadsheets, presentations, digital forms, PDFs, e-books, multimedia. @@ -1619,7 +1619,7 @@ ONLYOFFICE Team Welcome to ONLYOFFICE DocSpace! Your user profile has been successfully added to "${__VirtualRootPath}":"${__VirtualRootPath}". Now you can: -*#* Work with other users in the room you are invited to: *collaboration rooms for real-time co-authoring or custom rooms with flexible settings for any purpose*. +*# Work with other users in the room you are invited to*: collaboration rooms for real-time co-authoring or custom rooms with flexible settings for any purpose*. *# Work with files of different formats*: text documents, spreadsheets, presentations, digital forms, PDFs, e-books, multimedia.