Merge branch 'feature/virtual-rooms-1.2' of github.com:ONLYOFFICE/AppServer into feature/virtual-rooms-1.2
This commit is contained in:
commit
f30cb432f7
@ -2,7 +2,7 @@
|
||||
|
||||
<PropertyGroup>
|
||||
<OutputType>Exe</OutputType>
|
||||
<TargetFramework>net5.0-windows</TargetFramework>
|
||||
<TargetFramework>net6.0-windows</TargetFramework>
|
||||
<UseWindowsForms>true</UseWindowsForms>
|
||||
</PropertyGroup>
|
||||
|
||||
@ -13,12 +13,13 @@
|
||||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="CommandLineParser" Version="2.8.0" />
|
||||
<PackageReference Include="Microsoft.EntityFrameworkCore" Version="5.0.5" />
|
||||
<PackageReference Include="Microsoft.Extensions.Configuration" Version="5.0.0" />
|
||||
<PackageReference Include="Microsoft.Extensions.Configuration.CommandLine" Version="5.0.0" />
|
||||
<PackageReference Include="Microsoft.Extensions.Configuration.Json" Version="5.0.0" />
|
||||
<PackageReference Include="Microsoft.Extensions.DependencyInjection" Version="5.0.1" />
|
||||
<PackageReference Include="Microsoft.Extensions.Options" Version="5.0.0" />
|
||||
<PackageReference Include="Microsoft.EntityFrameworkCore" Version="6.0.2" />
|
||||
<PackageReference Include="Microsoft.Extensions.Configuration" Version="6.0.0" />
|
||||
<PackageReference Include="Microsoft.Extensions.Configuration.CommandLine" Version="6.0.0" />
|
||||
<PackageReference Include="Microsoft.Extensions.Configuration.Json" Version="6.0.0" />
|
||||
<PackageReference Include="Microsoft.Extensions.DependencyInjection" Version="6.0.0" />
|
||||
<PackageReference Include="Microsoft.Extensions.Hosting" Version="6.0.1" />
|
||||
<PackageReference Include="Microsoft.Extensions.Options" Version="6.0.0" />
|
||||
<PackageReference Include="Newtonsoft.Json" Version="13.0.1" />
|
||||
</ItemGroup>
|
||||
|
||||
|
@ -2,6 +2,8 @@
|
||||
|
||||
using Microsoft.Extensions.Configuration;
|
||||
using Microsoft.Extensions.DependencyInjection;
|
||||
using Microsoft.Extensions.Hosting;
|
||||
using Microsoft.Extensions.Hosting.Internal;
|
||||
|
||||
namespace ASC.Resource.Manager
|
||||
{
|
||||
@ -24,6 +26,8 @@ namespace ASC.Resource.Manager
|
||||
services.AddLogging();
|
||||
diHelper.Configure(services);
|
||||
services.AddSingleton(Configuration);
|
||||
services.AddSingleton<IHostEnvironment, HostingEnvironment>();
|
||||
|
||||
diHelper.TryAdd<ProgramScope>();
|
||||
//LogNLogExtension.ConfigureLog(diHelper);
|
||||
}
|
||||
|
@ -26,7 +26,7 @@
|
||||
"ConnectionStrings": {
|
||||
"default": {
|
||||
"name": "default",
|
||||
"connectionString": "Server=localhost;Database=teamlab_translate;User ID=dev;Password=dev;Pooling=true;Character Set=utf8;AutoEnlist=false;SSL Mode=none",
|
||||
"connectionString": "Server=localhost;Database=teamlab_translate;User ID=root;Password=root;Pooling=true;Character Set=utf8;AutoEnlist=false;SSL Mode=none",
|
||||
"providerName": "MySql.Data.MySqlClient"
|
||||
}
|
||||
},
|
||||
|
@ -17,9 +17,12 @@ using ASC.Web.Api.Models;
|
||||
using ASC.Web.Api.Routing;
|
||||
using ASC.Web.Core;
|
||||
using ASC.Web.Core.Files;
|
||||
using ASC.Web.Core.Helpers;
|
||||
using ASC.Web.Core.Mobile;
|
||||
using ASC.Web.Core.PublicResources;
|
||||
using ASC.Web.Core.Utility;
|
||||
using ASC.Web.Studio.Core;
|
||||
using ASC.Web.Studio.Core.Notify;
|
||||
using ASC.Web.Studio.UserControls.Management;
|
||||
using ASC.Web.Studio.Utility;
|
||||
|
||||
@ -55,6 +58,10 @@ namespace ASC.Web.Api.Controllers
|
||||
private LicenseReader LicenseReader { get; }
|
||||
private SetupInfo SetupInfo { get; }
|
||||
private DocumentServiceLicense DocumentServiceLicense { get; }
|
||||
private CoreSettings CoreSettings { get; }
|
||||
private PermissionContext PermissionContext { get; }
|
||||
private ApiSystemHelper ApiSystemHelper { get; }
|
||||
private StudioNotifyService StudioNotifyService { get; }
|
||||
private TenantExtra TenantExtra { get; set; }
|
||||
public ILog Log { get; }
|
||||
public IHttpClientFactory ClientFactory { get; }
|
||||
@ -79,6 +86,10 @@ namespace ASC.Web.Api.Controllers
|
||||
LicenseReader licenseReader,
|
||||
SetupInfo setupInfo,
|
||||
DocumentServiceLicense documentServiceLicense,
|
||||
CoreSettings coreSettings,
|
||||
PermissionContext permissionContext,
|
||||
ApiSystemHelper apiSystemHelper,
|
||||
StudioNotifyService studioNotifyService,
|
||||
IHttpClientFactory clientFactory
|
||||
)
|
||||
{
|
||||
@ -99,6 +110,10 @@ namespace ASC.Web.Api.Controllers
|
||||
LicenseReader = licenseReader;
|
||||
SetupInfo = setupInfo;
|
||||
DocumentServiceLicense = documentServiceLicense;
|
||||
CoreSettings = coreSettings;
|
||||
PermissionContext = permissionContext;
|
||||
ApiSystemHelper = apiSystemHelper;
|
||||
StudioNotifyService = studioNotifyService;
|
||||
TenantExtra = tenantExtra;
|
||||
ClientFactory = clientFactory;
|
||||
}
|
||||
@ -279,5 +294,79 @@ namespace ASC.Web.Api.Controllers
|
||||
var currentUser = UserManager.GetUsers(SecurityContext.CurrentAccount.ID);
|
||||
MobileAppInstallRegistrator.RegisterInstall(currentUser.Email, type);
|
||||
}
|
||||
|
||||
[Update("portalrename")]
|
||||
public object UpdatePortalName(PortalRenameModel model)
|
||||
{
|
||||
var enabled = SetupInfo.IsVisibleSettings("PortalRename");
|
||||
|
||||
if (!enabled)
|
||||
throw new SecurityException(Resource.PortalAccessSettingsTariffException);
|
||||
|
||||
if (CoreBaseSettings.Personal)
|
||||
throw new Exception(Resource.ErrorAccessDenied);
|
||||
|
||||
PermissionContext.DemandPermissions(SecutiryConstants.EditPortalSettings);
|
||||
|
||||
var alias = model.Alias;
|
||||
if (string.IsNullOrEmpty(alias)) throw new ArgumentException();
|
||||
|
||||
var tenant = TenantManager.GetCurrentTenant();
|
||||
var user = UserManager.GetUsers(SecurityContext.CurrentAccount.ID);
|
||||
|
||||
var localhost = CoreSettings.BaseDomain == "localhost" || tenant.TenantAlias == "localhost";
|
||||
|
||||
var newAlias = alias.ToLowerInvariant();
|
||||
var oldAlias = tenant.TenantAlias;
|
||||
var oldVirtualRootPath = CommonLinkUtility.GetFullAbsolutePath("~").TrimEnd('/');
|
||||
|
||||
if (!string.Equals(newAlias, oldAlias, StringComparison.InvariantCultureIgnoreCase))
|
||||
{
|
||||
if (!string.IsNullOrEmpty(ApiSystemHelper.ApiSystemUrl))
|
||||
{
|
||||
ApiSystemHelper.ValidatePortalName(newAlias, user.ID);
|
||||
}
|
||||
else
|
||||
{
|
||||
TenantManager.CheckTenantAddress(newAlias.Trim());
|
||||
}
|
||||
|
||||
|
||||
if (!string.IsNullOrEmpty(ApiSystemHelper.ApiCacheUrl))
|
||||
{
|
||||
ApiSystemHelper.AddTenantToCache(newAlias, user.ID);
|
||||
}
|
||||
|
||||
tenant.TenantAlias = alias;
|
||||
tenant = TenantManager.SaveTenant(tenant);
|
||||
|
||||
|
||||
if (!string.IsNullOrEmpty(ApiSystemHelper.ApiCacheUrl))
|
||||
{
|
||||
ApiSystemHelper.RemoveTenantFromCache(oldAlias, user.ID);
|
||||
}
|
||||
|
||||
if (!localhost || string.IsNullOrEmpty(tenant.MappedDomain))
|
||||
{
|
||||
StudioNotifyService.PortalRenameNotify(tenant, oldVirtualRootPath);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
return null;
|
||||
}
|
||||
|
||||
var reference = string.Format("{0}{1}{2}/{3}",
|
||||
ApiContext.HttpContextAccessor.HttpContext.Request?.Scheme ?? Uri.UriSchemeHttp,
|
||||
Uri.SchemeDelimiter,
|
||||
tenant.GetTenantDomain(CoreSettings),
|
||||
CommonLinkUtility.GetConfirmationUrlRelative(tenant.TenantId, user.Email, ConfirmType.Auth));
|
||||
|
||||
return new
|
||||
{
|
||||
message = Resource.SuccessfullyPortalRenameMessage,
|
||||
reference = reference
|
||||
};
|
||||
}
|
||||
}
|
||||
}
|
@ -63,6 +63,7 @@ using ASC.FederatedLogin.LoginProviders;
|
||||
using ASC.IPSecurity;
|
||||
using ASC.MessagingSystem;
|
||||
using ASC.Security.Cryptography;
|
||||
using ASC.Web.Api.Core;
|
||||
using ASC.Web.Api.Models;
|
||||
using ASC.Web.Api.Routing;
|
||||
using ASC.Web.Core;
|
||||
@ -174,6 +175,7 @@ namespace ASC.Api.Settings
|
||||
private InstanceCrypto InstanceCrypto { get; }
|
||||
private Signature Signature { get; }
|
||||
private DbWorker WebhookDbWorker { get; }
|
||||
private DnsSettings DnsSettings { get; }
|
||||
public IHttpClientFactory ClientFactory { get; }
|
||||
|
||||
public SettingsController(
|
||||
@ -240,6 +242,7 @@ namespace ASC.Api.Settings
|
||||
InstanceCrypto instanceCrypto,
|
||||
Signature signature,
|
||||
DbWorker dbWorker,
|
||||
DnsSettings dnsSettings,
|
||||
IHttpClientFactory clientFactory)
|
||||
{
|
||||
Log = option.Get("ASC.Api");
|
||||
@ -302,6 +305,7 @@ namespace ASC.Api.Settings
|
||||
TelegramHelper = telegramHelper;
|
||||
PaymentManager = paymentManager;
|
||||
WebhookDbWorker = dbWorker;
|
||||
DnsSettings = dnsSettings;
|
||||
Constants = constants;
|
||||
InstanceCrypto = instanceCrypto;
|
||||
Signature = signature;
|
||||
@ -730,6 +734,13 @@ namespace ASC.Api.Settings
|
||||
return Dns.GetHostName().ToLowerInvariant();
|
||||
}
|
||||
|
||||
[Update("dns")]
|
||||
public object SaveDnsSettings(DnsSettingsModel model)
|
||||
{
|
||||
return DnsSettings.SaveDnsSettings(model.DnsName, model.Enable);
|
||||
}
|
||||
|
||||
|
||||
[Read("greetingsettings")]
|
||||
public ContentResult GetGreetingSettings()
|
||||
{
|
||||
@ -889,11 +900,29 @@ namespace ASC.Api.Settings
|
||||
|
||||
[Read("security/password", Check = false)]
|
||||
[Authorize(AuthenticationSchemes = "confirm", Roles = "Everyone")]
|
||||
public object GetPasswordSettings()
|
||||
public PasswordSettings GetPasswordSettings()
|
||||
{
|
||||
var UserPasswordSettings = SettingsManager.Load<PasswordSettings>();
|
||||
return SettingsManager.Load<PasswordSettings>();
|
||||
}
|
||||
|
||||
[Update("security/password")]
|
||||
public PasswordSettings UpdatePasswordSettings(PasswordSettingsModel model)
|
||||
{
|
||||
PermissionContext.DemandPermissions(SecutiryConstants.EditPortalSettings);
|
||||
|
||||
var userPasswordSettings = SettingsManager.Load<PasswordSettings>();
|
||||
|
||||
userPasswordSettings.MinLength = model.MinLength;
|
||||
userPasswordSettings.UpperCase = model.UpperCase;
|
||||
userPasswordSettings.Digits = model.Digits;
|
||||
userPasswordSettings.SpecSymbols = model.SpecSymbols;
|
||||
|
||||
SettingsManager.Save(userPasswordSettings);
|
||||
|
||||
MessageService.Send(MessageAction.PasswordStrengthSettingsUpdated);
|
||||
|
||||
return userPasswordSettings;
|
||||
|
||||
return UserPasswordSettings;
|
||||
}
|
||||
|
||||
[Update("security")]
|
||||
@ -1113,7 +1142,7 @@ namespace ASC.Api.Settings
|
||||
{
|
||||
var logoDict = new Dictionary<int, string>();
|
||||
|
||||
foreach(var l in model.Logo)
|
||||
foreach (var l in model.Logo)
|
||||
{
|
||||
logoDict.Add(Int32.Parse(l.Key), l.Value);
|
||||
}
|
||||
|
165
web/ASC.Web.Api/Core/DnsSettings.cs
Normal file
165
web/ASC.Web.Api/Core/DnsSettings.cs
Normal file
@ -0,0 +1,165 @@
|
||||
using System;
|
||||
using System.Text;
|
||||
|
||||
using ASC.Common;
|
||||
using ASC.Core;
|
||||
using ASC.Core.Tenants;
|
||||
using ASC.MessagingSystem;
|
||||
using ASC.Web.Core.PublicResources;
|
||||
using ASC.Web.Studio.Core;
|
||||
using ASC.Web.Studio.Core.Notify;
|
||||
using ASC.Web.Studio.Utility;
|
||||
|
||||
namespace ASC.Web.Api.Core
|
||||
{
|
||||
[Scope]
|
||||
public class DnsSettings
|
||||
{
|
||||
private readonly PermissionContext _permissionContext;
|
||||
private readonly TenantManager _tenantManager;
|
||||
private readonly UserManager _userManager;
|
||||
private readonly CoreBaseSettings _coreBaseSettings;
|
||||
private readonly CoreSettings _coreSettings;
|
||||
private readonly StudioNotifyService _studioNotifyService;
|
||||
private readonly CommonLinkUtility _commonLinkUtility;
|
||||
private readonly MessageService _messageService;
|
||||
private readonly TenantExtra _tenantExtra;
|
||||
|
||||
public DnsSettings(
|
||||
PermissionContext permissionContext,
|
||||
TenantManager tenantManager,
|
||||
UserManager userManager,
|
||||
CoreBaseSettings coreBaseSettings,
|
||||
CoreSettings coreSettings,
|
||||
StudioNotifyService studioNotifyService,
|
||||
CommonLinkUtility commonLinkUtility,
|
||||
MessageService messageService,
|
||||
TenantExtra tenantExtra)
|
||||
{
|
||||
_permissionContext = permissionContext;
|
||||
_tenantManager = tenantManager;
|
||||
_userManager = userManager;
|
||||
_coreBaseSettings = coreBaseSettings;
|
||||
_coreSettings = coreSettings;
|
||||
_studioNotifyService = studioNotifyService;
|
||||
_commonLinkUtility = commonLinkUtility;
|
||||
_messageService = messageService;
|
||||
_tenantExtra = tenantExtra;
|
||||
}
|
||||
|
||||
protected bool EnableDomain
|
||||
{
|
||||
get { return _coreBaseSettings.Standalone || _tenantExtra.GetTenantQuota().HasDomain; }
|
||||
}
|
||||
|
||||
public string SaveDnsSettings(string dnsName, bool enableDns)
|
||||
{
|
||||
try
|
||||
{
|
||||
if (!EnableDomain || !SetupInfo.IsVisibleSettings<DnsSettings>()) throw new Exception(Resource.ErrorNotAllowedOption);
|
||||
|
||||
_permissionContext.DemandPermissions(SecutiryConstants.EditPortalSettings);
|
||||
|
||||
var tenant = _tenantManager.GetCurrentTenant();
|
||||
|
||||
if (!enableDns || string.IsNullOrEmpty(dnsName))
|
||||
{
|
||||
dnsName = null;
|
||||
}
|
||||
|
||||
if (dnsName == null || CheckCustomDomain(dnsName))
|
||||
{
|
||||
if (_coreBaseSettings.Standalone)
|
||||
{
|
||||
tenant.MappedDomain = dnsName;
|
||||
_tenantManager.SaveTenant(tenant);
|
||||
return null;
|
||||
}
|
||||
|
||||
if (tenant.MappedDomain != dnsName)
|
||||
{
|
||||
var portalAddress = $"http://{tenant.TenantAlias ?? string.Empty}.{ _coreSettings.BaseDomain}";
|
||||
|
||||
var u = _userManager.GetUsers(tenant.OwnerId);
|
||||
_studioNotifyService.SendMsgDnsChange(tenant, GenerateDnsChangeConfirmUrl(u.Email, dnsName, tenant.TenantAlias, ConfirmType.DnsChange), portalAddress, dnsName);
|
||||
|
||||
_messageService.Send(MessageAction.DnsSettingsUpdated);
|
||||
return string.Format(Resource.DnsChangeMsg, string.Format("<a href=\"mailto:{0}\">{0}</a>", u.Email.HtmlEncode()));
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
throw new Exception(Resource.ErrorNotCorrectTrustedDomain);
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
throw new Exception(e.Message.HtmlEncode());
|
||||
}
|
||||
}
|
||||
|
||||
private bool CheckCustomDomain(string domain)
|
||||
{
|
||||
if (string.IsNullOrEmpty(domain))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
if (!string.IsNullOrEmpty(TenantBaseDomain) &&
|
||||
(domain.EndsWith(TenantBaseDomain, StringComparison.InvariantCultureIgnoreCase) || domain.Equals(TenantBaseDomain.TrimStart('.'), StringComparison.InvariantCultureIgnoreCase)))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
Uri test;
|
||||
if (Uri.TryCreate(domain.Contains(Uri.SchemeDelimiter) ? domain : Uri.UriSchemeHttp + Uri.SchemeDelimiter + domain, UriKind.Absolute, out test))
|
||||
{
|
||||
try
|
||||
{
|
||||
_tenantManager.CheckTenantAddress(test.Host);
|
||||
}
|
||||
catch (TenantTooShortException ex)
|
||||
{
|
||||
var minLength = ex.MinLength;
|
||||
var maxLength = ex.MaxLength;
|
||||
if (minLength > 0 && maxLength > 0)
|
||||
{
|
||||
throw new TenantTooShortException(string.Format(Resource.ErrorTenantTooShortFormat, minLength, maxLength));
|
||||
}
|
||||
|
||||
throw new TenantTooShortException(Resource.ErrorTenantTooShort);
|
||||
}
|
||||
catch (TenantIncorrectCharsException)
|
||||
{
|
||||
}
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
private string GenerateDnsChangeConfirmUrl(string email, string dnsName, string tenantAlias, ConfirmType confirmType)
|
||||
{
|
||||
var postfix = string.Join(string.Empty, new[] { dnsName, tenantAlias });
|
||||
|
||||
var sb = new StringBuilder();
|
||||
sb.Append(_commonLinkUtility.GetConfirmationUrl(email, confirmType, postfix));
|
||||
if (!string.IsNullOrEmpty(dnsName))
|
||||
{
|
||||
sb.AppendFormat("&dns={0}", dnsName);
|
||||
}
|
||||
if (!string.IsNullOrEmpty(tenantAlias))
|
||||
{
|
||||
sb.AppendFormat("&alias={0}", tenantAlias);
|
||||
}
|
||||
return sb.ToString();
|
||||
}
|
||||
|
||||
protected string TenantBaseDomain
|
||||
{
|
||||
get
|
||||
{
|
||||
return string.IsNullOrEmpty(_coreSettings.BaseDomain)
|
||||
? string.Empty
|
||||
: $".{_coreSettings.BaseDomain}";
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
8
web/ASC.Web.Api/Models/DnsSettingsModel.cs
Normal file
8
web/ASC.Web.Api/Models/DnsSettingsModel.cs
Normal file
@ -0,0 +1,8 @@
|
||||
namespace ASC.Web.Api.Models
|
||||
{
|
||||
public class DnsSettingsModel
|
||||
{
|
||||
public string DnsName { get; set; }
|
||||
public bool Enable { get; set; }
|
||||
}
|
||||
}
|
25
web/ASC.Web.Api/Models/PasswordSettingsModel.cs
Normal file
25
web/ASC.Web.Api/Models/PasswordSettingsModel.cs
Normal file
@ -0,0 +1,25 @@
|
||||
namespace ASC.Web.Api.Models
|
||||
{
|
||||
public class PasswordSettingsModel
|
||||
{
|
||||
/// <summary>
|
||||
/// Minimal length password has
|
||||
/// </summary>
|
||||
public int MinLength { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Password must contains upper case
|
||||
/// </summary>
|
||||
public bool UpperCase { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Password must contains digits
|
||||
/// </summary>
|
||||
public bool Digits { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Password must contains special symbols
|
||||
/// </summary>
|
||||
public bool SpecSymbols { get; set; }
|
||||
}
|
||||
}
|
7
web/ASC.Web.Api/Models/PortalRenameModel.cs
Normal file
7
web/ASC.Web.Api/Models/PortalRenameModel.cs
Normal file
@ -0,0 +1,7 @@
|
||||
namespace ASC.Web.Api.Models
|
||||
{
|
||||
public class PortalRenameModel
|
||||
{
|
||||
public string Alias { get; set; }
|
||||
}
|
||||
}
|
@ -14,6 +14,7 @@ import { AppServerConfig } from "@appserver/common/constants";
|
||||
import withCultureNames from "@appserver/common/hoc/withCultureNames";
|
||||
import LanguageAndTimeZone from "./language-and-time-zone";
|
||||
import CustomTitles from "./custom-titles";
|
||||
import PortalRenaming from "./portal-renaming";
|
||||
import { Base } from "@appserver/components/themes";
|
||||
import { Consumer } from "@appserver/components/utils/context";
|
||||
|
||||
@ -218,36 +219,7 @@ class Customization extends React.Component {
|
||||
<CustomTitles sectionWidth={context.sectionWidth} />
|
||||
</div>
|
||||
<div className="category-item-wrapper">
|
||||
<div className="category-item-heading">
|
||||
<Link
|
||||
truncate={true}
|
||||
className="inherit-title-link header"
|
||||
onClick={this.onClickLink}
|
||||
href={combineUrl(
|
||||
AppServerConfig.proxyURL,
|
||||
"/settings/common/customization/team-template"
|
||||
)}
|
||||
>
|
||||
{t("TeamTemplate")}
|
||||
</Link>
|
||||
<StyledArrowRightIcon size="small" />
|
||||
</div>
|
||||
<Box marginProp="4px 0 6px 0">
|
||||
<Text fontWeight="600">{`${customNames.name}`}</Text>
|
||||
</Box>
|
||||
<Text className="category-item-description">
|
||||
{t("TeamTemplateSettingsDescription")}
|
||||
</Text>
|
||||
<Box marginProp="16px 0 0 0">
|
||||
<Link
|
||||
color={theme.studio.settings.common.linkColorHelp}
|
||||
target="_blank"
|
||||
isHovered={true}
|
||||
href={helpUrlCommonSettings}
|
||||
>
|
||||
{t("Common:LearnMore")}
|
||||
</Link>
|
||||
</Box>
|
||||
<PortalRenaming sectionWidth={context.sectionWidth} />
|
||||
</div>
|
||||
</StyledComponent>
|
||||
)}
|
||||
|
@ -79,7 +79,9 @@ const StyledComponent = styled.div`
|
||||
`;
|
||||
|
||||
let languageFromSessionStorage = "";
|
||||
let languageDefaultFromSessionStorage = "";
|
||||
let timezoneFromSessionStorage = "";
|
||||
let timezoneDefaultFromSessionStorage = "";
|
||||
|
||||
const settingNames = ["language", "timezone"];
|
||||
|
||||
@ -108,8 +110,13 @@ class LanguageAndTimeZone extends React.Component {
|
||||
);
|
||||
|
||||
languageFromSessionStorage = getFromSessionStorage("language");
|
||||
languageDefaultFromSessionStorage = getFromSessionStorage(
|
||||
"languageDefault"
|
||||
);
|
||||
timezoneFromSessionStorage = getFromSessionStorage("timezone");
|
||||
|
||||
timezoneDefaultFromSessionStorage = getFromSessionStorage(
|
||||
"timezoneDefault"
|
||||
);
|
||||
setDocumentTitle(t("Customization"));
|
||||
|
||||
this.state = {
|
||||
@ -117,9 +124,9 @@ class LanguageAndTimeZone extends React.Component {
|
||||
isLoading: false,
|
||||
timezones,
|
||||
timezone: timezoneFromSessionStorage || timezone,
|
||||
timezoneDefault: timezone,
|
||||
timezoneDefault: timezoneDefaultFromSessionStorage || timezone,
|
||||
language: languageFromSessionStorage || language,
|
||||
languageDefault: language,
|
||||
languageDefault: languageDefaultFromSessionStorage || language,
|
||||
isLoadingGreetingSave: false,
|
||||
isLoadingGreetingRestore: false,
|
||||
hasChanged: false,
|
||||
@ -134,16 +141,7 @@ class LanguageAndTimeZone extends React.Component {
|
||||
portalTimeZoneId,
|
||||
getPortalTimezones,
|
||||
} = this.props;
|
||||
const { timezones, isLoadedData, showReminder } = this.state;
|
||||
|
||||
if (
|
||||
(languageFromSessionStorage || timezoneFromSessionStorage) &&
|
||||
!showReminder
|
||||
) {
|
||||
this.setState({
|
||||
showReminder: true,
|
||||
});
|
||||
}
|
||||
const { timezones, isLoadedData } = this.state;
|
||||
|
||||
if (!timezones.length) {
|
||||
getPortalTimezones().then(() => {
|
||||
@ -225,11 +223,9 @@ class LanguageAndTimeZone extends React.Component {
|
||||
this.setState({ language });
|
||||
if (this.settingIsEqualInitialValue("language", language)) {
|
||||
saveToSessionStorage("language", "");
|
||||
saveToSessionStorage("languageDefault", "");
|
||||
} else {
|
||||
saveToSessionStorage("language", language);
|
||||
this.setState({
|
||||
showReminder: true,
|
||||
});
|
||||
}
|
||||
this.checkChanges();
|
||||
};
|
||||
@ -238,11 +234,9 @@ class LanguageAndTimeZone extends React.Component {
|
||||
this.setState({ timezone });
|
||||
if (this.settingIsEqualInitialValue("timezone", timezone)) {
|
||||
saveToSessionStorage("timezone", "");
|
||||
saveToSessionStorage("timezoneDefault", "");
|
||||
} else {
|
||||
saveToSessionStorage("timezone", timezone);
|
||||
this.setState({
|
||||
showReminder: true,
|
||||
});
|
||||
}
|
||||
|
||||
this.checkChanges();
|
||||
@ -272,6 +266,9 @@ class LanguageAndTimeZone extends React.Component {
|
||||
timezoneDefault: this.state.timezone,
|
||||
languageDefault: this.state.language,
|
||||
});
|
||||
|
||||
saveToSessionStorage("languageDefault", language);
|
||||
saveToSessionStorage("timezoneDefault", timezone);
|
||||
};
|
||||
|
||||
onCancelClick = () => {
|
||||
@ -317,6 +314,7 @@ class LanguageAndTimeZone extends React.Component {
|
||||
if (hasChanged !== this.state.hasChanged) {
|
||||
this.setState({
|
||||
hasChanged: hasChanged,
|
||||
showReminder: hasChanged,
|
||||
});
|
||||
}
|
||||
};
|
||||
|
@ -0,0 +1,7 @@
|
||||
import React from "react";
|
||||
|
||||
const PortalRenaming = () => {
|
||||
return <div></div>;
|
||||
};
|
||||
|
||||
export default PortalRenaming;
|
@ -1509,6 +1509,15 @@ namespace ASC.Web.Core.PublicResources {
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Ищет локализованную строку, похожую на A link to confirm the operation has been sent to {0} (the email address of the portal owner)..
|
||||
/// </summary>
|
||||
public static string DnsChangeMsg {
|
||||
get {
|
||||
return ResourceManager.GetString("DnsChangeMsg", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Ищет локализованную строку, похожую на Incorrect Instance id..
|
||||
/// </summary>
|
||||
@ -1752,6 +1761,24 @@ namespace ASC.Web.Core.PublicResources {
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Ищет локализованную строку, похожую на The tenant domain can not be empty..
|
||||
/// </summary>
|
||||
public static string ErrorTenantTooShort {
|
||||
get {
|
||||
return ResourceManager.GetString("ErrorTenantTooShort", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Ищет локализованную строку, похожую на The domain name must be between {0} and {1} characters long..
|
||||
/// </summary>
|
||||
public static string ErrorTenantTooShortFormat {
|
||||
get {
|
||||
return ResourceManager.GetString("ErrorTenantTooShortFormat", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Ищет локализованную строку, похожую на The user could not be found.
|
||||
/// </summary>
|
||||
@ -1950,6 +1977,15 @@ namespace ASC.Web.Core.PublicResources {
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Ищет локализованную строку, похожую на This feature enabled on free tariff only.
|
||||
/// </summary>
|
||||
public static string PortalAccessSettingsTariffException {
|
||||
get {
|
||||
return ResourceManager.GetString("PortalAccessSettingsTariffException", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Ищет локализованную строку, похожую на Portal Access.
|
||||
/// </summary>
|
||||
@ -2076,6 +2112,15 @@ namespace ASC.Web.Core.PublicResources {
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Ищет локализованную строку, похожую на Portal has been renamed successfully.
|
||||
/// </summary>
|
||||
public static string SuccessfullyPortalRenameMessage {
|
||||
get {
|
||||
return ResourceManager.GetString("SuccessfullyPortalRenameMessage", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Ищет локализованную строку, похожую на Welcome Page settings have been successfully saved.
|
||||
/// </summary>
|
||||
|
@ -53,10 +53,10 @@
|
||||
<value>2.0</value>
|
||||
</resheader>
|
||||
<resheader name="reader">
|
||||
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=5.0.9.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=6.0.2.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<resheader name="writer">
|
||||
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=5.0.9.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=6.0.2.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<data name="ActivateMobilePhoneEmptyCode" xml:space="preserve">
|
||||
<value>Das Feld mit dem Prüfcode darf nicht leer sein</value>
|
||||
@ -545,6 +545,9 @@
|
||||
<data name="CustomNamingPeopleSchema" xml:space="preserve">
|
||||
<value>Einstellbar</value>
|
||||
</data>
|
||||
<data name="DnsChangeMsg" xml:space="preserve">
|
||||
<value>Der Link zum Bestätigen der Operation wurde an {0} verschickt (die E-Mail-Adresse des Portalbesitzers).</value>
|
||||
</data>
|
||||
<data name="EmailAndPasswordIncorrectAmiId" xml:space="preserve">
|
||||
<value>Falsche Instanz-ID.</value>
|
||||
</data>
|
||||
@ -626,6 +629,12 @@
|
||||
<data name="ErrorRequestLimitExceeded" xml:space="preserve">
|
||||
<value>Anforderungslimit wurde überschritten</value>
|
||||
</data>
|
||||
<data name="ErrorTenantTooShort" xml:space="preserve">
|
||||
<value>Die Mandantendomäne darf nicht leer sein.</value>
|
||||
</data>
|
||||
<data name="ErrorTenantTooShortFormat" xml:space="preserve">
|
||||
<value>Der Domänenname muss zwischen {0} und {1} Zeichen lang sein.</value>
|
||||
</data>
|
||||
<data name="ErrorUserNotFound" xml:space="preserve">
|
||||
<value>Der Benutzer konnte nicht gefunden werden</value>
|
||||
</data>
|
||||
@ -692,6 +701,9 @@
|
||||
<data name="PersonalFreeSpaceException" xml:space="preserve">
|
||||
<value>Der verfügbare Speicherplatz ist überschritten</value>
|
||||
</data>
|
||||
<data name="PortalAccessSettingsTariffException" xml:space="preserve">
|
||||
<value>Diese Funktion ist nur für den kostenlosen Tarif verfügbar</value>
|
||||
</data>
|
||||
<data name="PortalSecurity" xml:space="preserve">
|
||||
<value>Zugang zum Portal</value>
|
||||
</data>
|
||||
@ -734,6 +746,9 @@
|
||||
<data name="SsoSettingsInvalidMapping" xml:space="preserve">
|
||||
<value>Ungültige Feldzuordnung</value>
|
||||
</data>
|
||||
<data name="SuccessfullyPortalRenameMessage" xml:space="preserve">
|
||||
<value>Portal wurde erfolgreich umbenannt </value>
|
||||
</data>
|
||||
<data name="SuccessfullySaveGreetingSettingsMessage" xml:space="preserve">
|
||||
<value>Die Begrüßungseinstellungen wurden erfolgreich gespeichert</value>
|
||||
</data>
|
||||
|
@ -53,10 +53,10 @@
|
||||
<value>2.0</value>
|
||||
</resheader>
|
||||
<resheader name="reader">
|
||||
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=5.0.9.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=6.0.2.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<resheader name="writer">
|
||||
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=5.0.9.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=6.0.2.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<data name="ActivateMobilePhoneEmptyCode" xml:space="preserve">
|
||||
<value>Campo de código de validación no puede estar vacío</value>
|
||||
@ -508,6 +508,9 @@
|
||||
<data name="CustomNamingPeopleSchema" xml:space="preserve">
|
||||
<value>Personalizado</value>
|
||||
</data>
|
||||
<data name="DnsChangeMsg" xml:space="preserve">
|
||||
<value>Un enlace para confirmar la operación ha sido enviada al :correo electrónico (la dirección del correo electrónico del propietario del portal).</value>
|
||||
</data>
|
||||
<data name="EmailAndPasswordIncorrectAmiId" xml:space="preserve">
|
||||
<value>Id. incorrecta de instancia</value>
|
||||
</data>
|
||||
@ -589,6 +592,12 @@
|
||||
<data name="ErrorRequestLimitExceeded" xml:space="preserve">
|
||||
<value>Límite de solicitudes es excedido</value>
|
||||
</data>
|
||||
<data name="ErrorTenantTooShort" xml:space="preserve">
|
||||
<value>El dominio de espacio empresarial no puede estar vacío.</value>
|
||||
</data>
|
||||
<data name="ErrorTenantTooShortFormat" xml:space="preserve">
|
||||
<value>El nombre del dominio debe tener entre {0} y {1} caracteres.</value>
|
||||
</data>
|
||||
<data name="ErrorUserNotFound" xml:space="preserve">
|
||||
<value>Usuario no ha sido encontrado</value>
|
||||
</data>
|
||||
@ -655,6 +664,9 @@
|
||||
<data name="PersonalFreeSpaceException" xml:space="preserve">
|
||||
<value>Cuota de espacio en disco excedida </value>
|
||||
</data>
|
||||
<data name="PortalAccessSettingsTariffException" xml:space="preserve">
|
||||
<value>Esta característica se proporciona sólo en portales gratuitos</value>
|
||||
</data>
|
||||
<data name="PortalSecurity" xml:space="preserve">
|
||||
<value>Acceso a portal</value>
|
||||
</data>
|
||||
@ -697,6 +709,9 @@
|
||||
<data name="SsoSettingsInvalidMapping" xml:space="preserve">
|
||||
<value>Cartografía de campos no válida</value>
|
||||
</data>
|
||||
<data name="SuccessfullyPortalRenameMessage" xml:space="preserve">
|
||||
<value>El portal ha sido renombrado con éxito </value>
|
||||
</data>
|
||||
<data name="SuccessfullySaveGreetingSettingsMessage" xml:space="preserve">
|
||||
<value>Los ajustes de bienvenida han sido guardados con éxito</value>
|
||||
</data>
|
||||
|
@ -53,10 +53,10 @@
|
||||
<value>2.0</value>
|
||||
</resheader>
|
||||
<resheader name="reader">
|
||||
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=5.0.9.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=6.0.2.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<resheader name="writer">
|
||||
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=5.0.9.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=6.0.2.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<data name="ActivateMobilePhoneEmptyCode" xml:space="preserve">
|
||||
<value>Le champ du code de validation ne peut pas être vide</value>
|
||||
@ -541,6 +541,9 @@
|
||||
<data name="CustomNamingPeopleSchema" xml:space="preserve">
|
||||
<value>Personnel</value>
|
||||
</data>
|
||||
<data name="DnsChangeMsg" xml:space="preserve">
|
||||
<value>Un lien pour confirmer l'opération a été envoyé à {0}(l'adresse e-mail du propriétaire du portail).</value>
|
||||
</data>
|
||||
<data name="EmailAndPasswordIncorrectAmiId" xml:space="preserve">
|
||||
<value>Identifiant de l'instance n'est pas valide.</value>
|
||||
</data>
|
||||
@ -622,6 +625,12 @@
|
||||
<data name="ErrorRequestLimitExceeded" xml:space="preserve">
|
||||
<value>Le délai de requête est dépassé</value>
|
||||
</data>
|
||||
<data name="ErrorTenantTooShort" xml:space="preserve">
|
||||
<value>L'hôte du domaine ne peut pas être vide</value>
|
||||
</data>
|
||||
<data name="ErrorTenantTooShortFormat" xml:space="preserve">
|
||||
<value>Le nom de domaine doit contenir de {0} à {1} caractères.</value>
|
||||
</data>
|
||||
<data name="ErrorUserNotFound" xml:space="preserve">
|
||||
<value>Il est impossible de trouver l'utilisateur</value>
|
||||
</data>
|
||||
@ -690,6 +699,9 @@
|
||||
<data name="PersonalFreeSpaceException" xml:space="preserve">
|
||||
<value>Quota d'espace disque est dépassé</value>
|
||||
</data>
|
||||
<data name="PortalAccessSettingsTariffException" xml:space="preserve">
|
||||
<value>Cette fonctionalité n'est activée que pour le tarif gratuit</value>
|
||||
</data>
|
||||
<data name="PortalSecurity" xml:space="preserve">
|
||||
<value>Accès au portail</value>
|
||||
</data>
|
||||
@ -732,6 +744,9 @@
|
||||
<data name="SsoSettingsInvalidMapping" xml:space="preserve">
|
||||
<value>Mappage des champs non valides</value>
|
||||
</data>
|
||||
<data name="SuccessfullyPortalRenameMessage" xml:space="preserve">
|
||||
<value>Le portail a été renommé avec succès</value>
|
||||
</data>
|
||||
<data name="SuccessfullySaveGreetingSettingsMessage" xml:space="preserve">
|
||||
<value>Les paramètres de la page d'accueil ont été enregistrés avec succès</value>
|
||||
</data>
|
||||
|
@ -53,10 +53,10 @@
|
||||
<value>2.0</value>
|
||||
</resheader>
|
||||
<resheader name="reader">
|
||||
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=5.0.9.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=6.0.2.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<resheader name="writer">
|
||||
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=5.0.9.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=6.0.2.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<data name="ActivateMobilePhoneEmptyCode" xml:space="preserve">
|
||||
<value>Il campo Valida codice non può essere vuoto</value>
|
||||
@ -503,6 +503,9 @@
|
||||
<data name="CustomNamingPeopleSchema" xml:space="preserve">
|
||||
<value>Personalizzato</value>
|
||||
</data>
|
||||
<data name="DnsChangeMsg" xml:space="preserve">
|
||||
<value>Un collegamento per confermare l'operazione è stato inviato all'indirizzo {0} (l'indirizzo email del proprietario del portale).</value>
|
||||
</data>
|
||||
<data name="EmailAndPasswordIncorrectAmiId" xml:space="preserve">
|
||||
<value>ID istanza errato.</value>
|
||||
</data>
|
||||
@ -584,6 +587,12 @@
|
||||
<data name="ErrorRequestLimitExceeded" xml:space="preserve">
|
||||
<value>Il limite di richieste è stato superato</value>
|
||||
</data>
|
||||
<data name="ErrorTenantTooShort" xml:space="preserve">
|
||||
<value>Il dominio Tenant non può essere vuoto.</value>
|
||||
</data>
|
||||
<data name="ErrorTenantTooShortFormat" xml:space="preserve">
|
||||
<value>Il nome del dominio deve essere composto da {0} a {1} caratteri.</value>
|
||||
</data>
|
||||
<data name="ErrorUserNotFound" xml:space="preserve">
|
||||
<value>L'utente non è stato trovato</value>
|
||||
</data>
|
||||
@ -647,6 +656,9 @@
|
||||
<data name="PersonalFreeSpaceException" xml:space="preserve">
|
||||
<value>Quota di spazio su disco superata</value>
|
||||
</data>
|
||||
<data name="PortalAccessSettingsTariffException" xml:space="preserve">
|
||||
<value>Questa funzione è attiva solo per il piano tariffario gratuito</value>
|
||||
</data>
|
||||
<data name="PortalSecurity" xml:space="preserve">
|
||||
<value>Accesso al portale</value>
|
||||
</data>
|
||||
@ -689,6 +701,9 @@
|
||||
<data name="SsoSettingsInvalidMapping" xml:space="preserve">
|
||||
<value>Mappatura campi non valida</value>
|
||||
</data>
|
||||
<data name="SuccessfullyPortalRenameMessage" xml:space="preserve">
|
||||
<value>Il portale è stato rinominato con successo.</value>
|
||||
</data>
|
||||
<data name="SuccessfullySaveGreetingSettingsMessage" xml:space="preserve">
|
||||
<value>Le impostazioni della pagina di saluto sono state salvate con successo</value>
|
||||
</data>
|
||||
|
@ -53,10 +53,10 @@
|
||||
<value>2.0</value>
|
||||
</resheader>
|
||||
<resheader name="reader">
|
||||
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=5.0.9.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=6.0.2.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<resheader name="writer">
|
||||
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=5.0.9.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=6.0.2.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<data name="ActivateMobilePhoneEmptyCode" xml:space="preserve">
|
||||
<value>Validation code field cannot be empty</value>
|
||||
@ -541,6 +541,9 @@
|
||||
<data name="CustomNamingPeopleSchema" xml:space="preserve">
|
||||
<value>Custom</value>
|
||||
</data>
|
||||
<data name="DnsChangeMsg" xml:space="preserve">
|
||||
<value>A link to confirm the operation has been sent to {0} (the email address of the portal owner).</value>
|
||||
</data>
|
||||
<data name="EmailAndPasswordIncorrectAmiId" xml:space="preserve">
|
||||
<value>Incorrect Instance id.</value>
|
||||
</data>
|
||||
@ -622,6 +625,12 @@
|
||||
<data name="ErrorRequestLimitExceeded" xml:space="preserve">
|
||||
<value>Request limit is exceeded</value>
|
||||
</data>
|
||||
<data name="ErrorTenantTooShort" xml:space="preserve">
|
||||
<value>The tenant domain can not be empty.</value>
|
||||
</data>
|
||||
<data name="ErrorTenantTooShortFormat" xml:space="preserve">
|
||||
<value>The domain name must be between {0} and {1} characters long.</value>
|
||||
</data>
|
||||
<data name="ErrorUserNotFound" xml:space="preserve">
|
||||
<value>The user could not be found</value>
|
||||
</data>
|
||||
@ -688,6 +697,9 @@
|
||||
<data name="PersonalFreeSpaceException" xml:space="preserve">
|
||||
<value>Disk space quota exceeded</value>
|
||||
</data>
|
||||
<data name="PortalAccessSettingsTariffException" xml:space="preserve">
|
||||
<value>This feature enabled on free tariff only</value>
|
||||
</data>
|
||||
<data name="PortalSecurity" xml:space="preserve">
|
||||
<value>Portal Access</value>
|
||||
</data>
|
||||
@ -730,6 +742,9 @@
|
||||
<data name="SsoSettingsInvalidMapping" xml:space="preserve">
|
||||
<value>Invalid fields mapping</value>
|
||||
</data>
|
||||
<data name="SuccessfullyPortalRenameMessage" xml:space="preserve">
|
||||
<value>Portal has been renamed successfully</value>
|
||||
</data>
|
||||
<data name="SuccessfullySaveGreetingSettingsMessage" xml:space="preserve">
|
||||
<value>Welcome Page settings have been successfully saved</value>
|
||||
</data>
|
||||
|
@ -53,10 +53,10 @@
|
||||
<value>2.0</value>
|
||||
</resheader>
|
||||
<resheader name="reader">
|
||||
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=5.0.9.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=6.0.2.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<resheader name="writer">
|
||||
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=5.0.9.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=6.0.2.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<data name="ActivateMobilePhoneEmptyCode" xml:space="preserve">
|
||||
<value>Поле кода подтверждения не может быть пустым</value>
|
||||
@ -541,6 +541,9 @@
|
||||
<data name="CustomNamingPeopleSchema" xml:space="preserve">
|
||||
<value>Пользовательский</value>
|
||||
</data>
|
||||
<data name="DnsChangeMsg" xml:space="preserve">
|
||||
<value>Ссылка для подтверждения операции была отправлена на {0} (адрес электронной почты владельца портала).</value>
|
||||
</data>
|
||||
<data name="EmailAndPasswordIncorrectAmiId" xml:space="preserve">
|
||||
<value>Неправильный ID экземпляра.</value>
|
||||
</data>
|
||||
@ -622,6 +625,12 @@
|
||||
<data name="ErrorRequestLimitExceeded" xml:space="preserve">
|
||||
<value>Превышен лимит запросов</value>
|
||||
</data>
|
||||
<data name="ErrorTenantTooShort" xml:space="preserve">
|
||||
<value>Домен клиента не может быть пустым</value>
|
||||
</data>
|
||||
<data name="ErrorTenantTooShortFormat" xml:space="preserve">
|
||||
<value>Доменное имя должно содержать от {0} до {1} символов.</value>
|
||||
</data>
|
||||
<data name="ErrorUserNotFound" xml:space="preserve">
|
||||
<value>Пользователь не найден</value>
|
||||
</data>
|
||||
@ -688,6 +697,9 @@
|
||||
<data name="PersonalFreeSpaceException" xml:space="preserve">
|
||||
<value>Превышена квота на размер дискового пространства</value>
|
||||
</data>
|
||||
<data name="PortalAccessSettingsTariffException" xml:space="preserve">
|
||||
<value>Эта функция доступна только для бесплатного тарифа</value>
|
||||
</data>
|
||||
<data name="PortalSecurity" xml:space="preserve">
|
||||
<value>Доступ к порталу</value>
|
||||
</data>
|
||||
@ -730,6 +742,9 @@
|
||||
<data name="SsoSettingsInvalidMapping" xml:space="preserve">
|
||||
<value>Недопустимое сопоставление полей</value>
|
||||
</data>
|
||||
<data name="SuccessfullyPortalRenameMessage" xml:space="preserve">
|
||||
<value>Портал успешно переименован</value>
|
||||
</data>
|
||||
<data name="SuccessfullySaveGreetingSettingsMessage" xml:space="preserve">
|
||||
<value>Настройки страницы приветствия успешно сохранены</value>
|
||||
</data>
|
||||
|
Loading…
Reference in New Issue
Block a user