Merge branch 'release/v1.0.0' of github.com:ONLYOFFICE/DocSpace into release/v1.0.0
This commit is contained in:
commit
bf659c6d82
40
.github/workflows/build-ffvideo.yml
vendored
Normal file
40
.github/workflows/build-ffvideo.yml
vendored
Normal file
@ -0,0 +1,40 @@
|
||||
name: ffvideo build
|
||||
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
- release/v1.0.0
|
||||
paths:
|
||||
- 'build/install/docker/**.ffvideo'
|
||||
|
||||
jobs:
|
||||
build:
|
||||
runs-on: ubuntu-latest
|
||||
strategy:
|
||||
matrix:
|
||||
platform: [linux/amd64]
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v3
|
||||
|
||||
- name: Set up QEMU
|
||||
uses: docker/setup-qemu-action@v2
|
||||
|
||||
- name: Set up Docker Buildx
|
||||
id: buildx
|
||||
uses: docker/setup-buildx-action@v2
|
||||
|
||||
- name: Login to DockerHub
|
||||
uses: docker/login-action@v2
|
||||
with:
|
||||
username: ${{ secrets.DOCKERHUB_USERNAME }}
|
||||
password: ${{ secrets.DOCKERHUB_TOKEN }}
|
||||
|
||||
- name: Build and push
|
||||
uses: docker/build-push-action@v4
|
||||
with:
|
||||
context: .
|
||||
file: ./build/install/docker/Dockerfile.ffvideo
|
||||
push: true
|
||||
tags: onlyoffice/ffvideo:6.0
|
||||
|
@ -227,14 +227,12 @@ CMD ["ASC.Files.dll", "ASC.Files"]
|
||||
|
||||
## ASC.Files.Service ##
|
||||
FROM dotnetrun AS files_services
|
||||
RUN apt-get -y update && \
|
||||
apt-get install -yq ffmpeg &&\
|
||||
rm -rf /var/lib/apt/lists/*
|
||||
|
||||
ENV LD_LIBRARY_PATH=/usr/local/lib:/usr/local/lib64
|
||||
WORKDIR ${BUILD_PATH}/products/ASC.Files/service/
|
||||
|
||||
COPY --chown=onlyoffice:onlyoffice docker-entrypoint.py ./docker-entrypoint.py
|
||||
COPY --from=base --chown=onlyoffice:onlyoffice ${BUILD_PATH}/services/ASC.Files.Service/service/ .
|
||||
COPY --from=onlyoffice/ffvideo:6.0 --chown=onlyoffice:onlyoffice /usr/local /usr/local/
|
||||
|
||||
CMD ["ASC.Files.Service.dll", "ASC.Files.Service", "core:eventBus:subscriptionClientName=asc_event_bus_files_service_queue"]
|
||||
|
||||
|
@ -225,7 +225,6 @@ CMD ["ASC.Files.dll", "ASC.Files"]
|
||||
FROM dotnetrun AS files_services
|
||||
RUN apt-get -y update && \
|
||||
apt-get install -yq ffmpeg
|
||||
|
||||
WORKDIR ${BUILD_PATH}/products/ASC.Files/service/
|
||||
|
||||
COPY --chown=onlyoffice:onlyoffice docker-entrypoint.py ./docker-entrypoint.py
|
||||
|
107
build/install/docker/Dockerfile.ffvideo
Normal file
107
build/install/docker/Dockerfile.ffvideo
Normal file
@ -0,0 +1,107 @@
|
||||
FROM ubuntu:20.04 AS base
|
||||
ENV DEBIAN_FRONTEND="noninteractive"
|
||||
ENV TZ="Etc/UTC"
|
||||
|
||||
WORKDIR /tmp/workdir
|
||||
|
||||
RUN apt-get -yqq update && \
|
||||
apt-get install -yq --no-install-recommends ca-certificates expat libgomp1 && \
|
||||
apt-get autoremove -y && \
|
||||
apt-get clean -y
|
||||
|
||||
FROM base as build
|
||||
|
||||
ENV FFMPEG_VERSION=6.0 \
|
||||
X264_VERSION=20170226-2245-stable \
|
||||
X265_VERSION=3.4 \
|
||||
VPX_VERSION=1.8.0 \
|
||||
SRC=/usr/local
|
||||
|
||||
ARG LD_LIBRARY_PATH=/opt/ffmpeg/lib
|
||||
ARG MAKEFLAGS="-j2"
|
||||
ARG PKG_CONFIG_PATH="/opt/ffmpeg/share/pkgconfig:/opt/ffmpeg/lib/pkgconfig:/opt/ffmpeg/lib64/pkgconfig"
|
||||
ARG PREFIX=/opt/ffmpeg
|
||||
ARG LD_LIBRARY_PATH="/opt/ffmpeg/lib:/opt/ffmpeg/lib64"
|
||||
|
||||
RUN buildDeps="autoconf \
|
||||
automake \
|
||||
cmake \
|
||||
curl \
|
||||
bzip2 \
|
||||
libexpat1-dev \
|
||||
g++ \
|
||||
gcc \
|
||||
git \
|
||||
gperf \
|
||||
libtool \
|
||||
make \
|
||||
meson \
|
||||
nasm \
|
||||
perl \
|
||||
pkg-config \
|
||||
python \
|
||||
libssl-dev \
|
||||
yasm \
|
||||
zlib1g-dev" && \
|
||||
apt-get -yqq update && \
|
||||
apt-get install -yq --no-install-recommends ${buildDeps}
|
||||
### libvpx
|
||||
RUN \
|
||||
DIR=/tmp/vpx && \
|
||||
mkdir -p ${DIR} && \
|
||||
cd ${DIR} && \
|
||||
curl -sL https://codeload.github.com/webmproject/libvpx/tar.gz/v${VPX_VERSION} | \
|
||||
tar -zx --strip-components=1 && \
|
||||
./configure --prefix="${PREFIX}" --enable-vp8 --enable-vp9 --enable-vp9-highbitdepth --enable-pic --enable-shared \
|
||||
--disable-debug --disable-examples --disable-docs --disable-install-bins && \
|
||||
make && \
|
||||
make install && \
|
||||
rm -rf ${DIR}
|
||||
## Download ffmpeg
|
||||
RUN \
|
||||
DIR=/tmp/ffmpeg && mkdir -p ${DIR} && cd ${DIR} && \
|
||||
curl -sLO https://ffmpeg.org/releases/ffmpeg-${FFMPEG_VERSION}.tar.bz2 && \
|
||||
tar -jx --strip-components=1 -f ffmpeg-${FFMPEG_VERSION}.tar.bz2 && \
|
||||
./configure --disable-debug --disable-doc --disable-ffplay --enable-shared --enable-gpl --extra-libs=-ldl && \
|
||||
make ; make install
|
||||
## Build ffmpeg
|
||||
RUN \
|
||||
DIR=/tmp/ffmpeg && cd ${DIR} && \
|
||||
./configure \
|
||||
--disable-debug \
|
||||
--disable-doc \
|
||||
--disable-ffplay \
|
||||
--enable-gpl \
|
||||
--enable-libvpx \
|
||||
--extra-cflags="-I${PREFIX}/include" \
|
||||
--extra-ldflags="-L${PREFIX}/lib" \
|
||||
--extra-libs=-ldl \
|
||||
--extra-libs=-lpthread \
|
||||
--prefix="${PREFIX}" && \
|
||||
make clean && \
|
||||
make && \
|
||||
make install && \
|
||||
make distclean && \
|
||||
hash -r && \
|
||||
cd tools && \
|
||||
make qt-faststart && cp qt-faststart ${PREFIX}/bin/
|
||||
|
||||
## cleanup
|
||||
RUN \
|
||||
ldd ${PREFIX}/bin/ffmpeg | grep opt/ffmpeg | cut -d ' ' -f 3 | xargs -i cp {} /usr/local/lib/ && \
|
||||
for lib in /usr/local/lib/*.so.*; do ln -s "${lib##*/}" "${lib%%.so.*}".so; done && \
|
||||
cp ${PREFIX}/bin/* /usr/local/bin/ && \
|
||||
cp -r ${PREFIX}/share/ffmpeg /usr/local/share/ && \
|
||||
LD_LIBRARY_PATH=/usr/local/lib ffmpeg -buildconf && \
|
||||
cp -r ${PREFIX}/include/libav* ${PREFIX}/include/libpostproc ${PREFIX}/include/libsw* /usr/local/include && \
|
||||
mkdir -p /usr/local/lib/pkgconfig && \
|
||||
for pc in ${PREFIX}/lib/pkgconfig/libav*.pc ${PREFIX}/lib/pkgconfig/libpostproc.pc ${PREFIX}/lib/pkgconfig/libsw*.pc; do \
|
||||
sed "s:${PREFIX}:/usr/local:g" <"$pc" >/usr/local/lib/pkgconfig/"${pc##*/}"; \
|
||||
done
|
||||
|
||||
FROM base AS release
|
||||
ENV LD_LIBRARY_PATH=/usr/local/lib:/usr/local/lib64
|
||||
|
||||
COPY --from=build /usr/local /usr/local/
|
||||
|
||||
ENTRYPOINT ["bash"]
|
@ -40,7 +40,7 @@ public class WarmupServicesStartupTask : IStartupTask
|
||||
}
|
||||
|
||||
public Task ExecuteAsync(CancellationToken cancellationToken)
|
||||
{
|
||||
{
|
||||
var processedFailed = 0;
|
||||
var processedSuccessed = 0;
|
||||
var startTime = DateTime.UtcNow;
|
||||
@ -52,13 +52,13 @@ public class WarmupServicesStartupTask : IStartupTask
|
||||
|
||||
logger.TraceWarmupStarted();
|
||||
|
||||
tenantManager.SetCurrentTenant("localhost");
|
||||
|
||||
tenantManager.SetCurrentTenant("localhost");
|
||||
|
||||
foreach (var service in GetServices(_services))
|
||||
{
|
||||
try
|
||||
{
|
||||
scope.ServiceProvider.GetServices(service);
|
||||
{
|
||||
scope.ServiceProvider.GetService(service);
|
||||
|
||||
processedSuccessed++;
|
||||
}
|
||||
@ -72,9 +72,9 @@ public class WarmupServicesStartupTask : IStartupTask
|
||||
|
||||
var processed = processedSuccessed + processedFailed;
|
||||
|
||||
logger.TraceWarmupFinished(processed,
|
||||
processedSuccessed,
|
||||
processedFailed,
|
||||
logger.TraceWarmupFinished(processed,
|
||||
processedSuccessed,
|
||||
processedFailed,
|
||||
(DateTime.UtcNow - startTime).TotalMilliseconds);
|
||||
}
|
||||
|
||||
@ -86,7 +86,7 @@ public class WarmupServicesStartupTask : IStartupTask
|
||||
return services
|
||||
.Where(descriptor => descriptor.ImplementationType != typeof(WarmupServicesStartupTask))
|
||||
.Where(descriptor => descriptor.ServiceType.ContainsGenericParameters == false)
|
||||
.Select(descriptor => descriptor.ServiceType)
|
||||
.Select(descriptor => descriptor.ServiceType)
|
||||
.Distinct();
|
||||
}
|
||||
}
|
@ -146,7 +146,7 @@ public static class ServiceCollectionExtension
|
||||
var logger = sp.GetRequiredService<ILogger<DefaultActiveMQPersistentConnection>>();
|
||||
|
||||
var factory = new Apache.NMS.NMSConnectionFactory(activeMQConfiguration.Uri);
|
||||
|
||||
|
||||
var retryCount = 5;
|
||||
|
||||
if (!string.IsNullOrEmpty(cfg["core:eventBus:connectRetryCount"]))
|
||||
@ -195,10 +195,8 @@ public static class ServiceCollectionExtension
|
||||
/// Add a IHostedService for given type.
|
||||
/// Only one copy of this instance type will active in multi process architecture.
|
||||
/// </remarks>
|
||||
public static void AddActivePassiveHostedService<T>(this IServiceCollection services) where T : class, IHostedService
|
||||
public static void AddActivePassiveHostedService<T>(this IServiceCollection services, DIHelper diHelper) where T : class, IHostedService
|
||||
{
|
||||
var diHelper = new DIHelper(services);
|
||||
|
||||
diHelper.TryAdd<IRegisterInstanceDao<T>, RegisterInstanceDao<T>>();
|
||||
diHelper.TryAdd<IRegisterInstanceManager<T>, RegisterInstanceManager<T>>();
|
||||
|
||||
|
@ -156,7 +156,6 @@ public class TariffService : ITariffService
|
||||
}
|
||||
|
||||
var tariff = refresh ? null : GetTariffFromCache(tenantId);
|
||||
int? tariffId = null;
|
||||
|
||||
if (tariff == null)
|
||||
{
|
||||
@ -165,11 +164,13 @@ public class TariffService : ITariffService
|
||||
|
||||
if (string.IsNullOrEmpty(_cache.Get<string>(GetTariffNeedToUpdateCacheKey(tenantId))))
|
||||
{
|
||||
tariffId = tariff.Id;
|
||||
UpdateCache(tariff.Id);
|
||||
}
|
||||
|
||||
if (_billingClient.Configured && withRequestToPaymentSystem)
|
||||
{
|
||||
var paymentFound = false;
|
||||
|
||||
try
|
||||
{
|
||||
var currentPayments = _billingClient.GetCurrentPayments(GetPortalId(tenantId));
|
||||
@ -221,24 +222,21 @@ public class TariffService : ITariffService
|
||||
{
|
||||
asynctariff = CalculateTariff(tenantId, asynctariff);
|
||||
tariff = asynctariff;
|
||||
tariffId = asynctariff.Id;
|
||||
}
|
||||
|
||||
UpdateCache(tariff.Id);
|
||||
|
||||
paymentFound = true;
|
||||
}
|
||||
catch (Exception error)
|
||||
{
|
||||
if (tariff.Id != 0)
|
||||
{
|
||||
tariffId = tariff.Id;
|
||||
}
|
||||
|
||||
if (error is not BillingNotFoundException)
|
||||
{
|
||||
LogError(error, tenantId.ToString());
|
||||
}
|
||||
}
|
||||
|
||||
if (!tariffId.HasValue || tariffId.Value == 0)
|
||||
if (!paymentFound)
|
||||
{
|
||||
var freeTariff = tariff.Quotas.FirstOrDefault(tariffRow =>
|
||||
{
|
||||
@ -262,12 +260,9 @@ public class TariffService : ITariffService
|
||||
{
|
||||
asynctariff = CalculateTariff(tenantId, asynctariff);
|
||||
tariff = asynctariff;
|
||||
tariffId = asynctariff.Id;
|
||||
}
|
||||
else
|
||||
{
|
||||
tariffId = tariff.Id;
|
||||
}
|
||||
|
||||
UpdateCache(tariff.Id);
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -276,12 +271,12 @@ public class TariffService : ITariffService
|
||||
tariff = CalculateTariff(tenantId, tariff);
|
||||
}
|
||||
|
||||
if (tariffId.HasValue && tariffId.Value != 0)
|
||||
{
|
||||
_notify.Publish(new TariffCacheItem { TenantId = tenantId, TariffId = tariffId.Value }, CacheNotifyAction.Insert);
|
||||
}
|
||||
|
||||
return tariff;
|
||||
|
||||
void UpdateCache(int tariffId)
|
||||
{
|
||||
_notify.Publish(new TariffCacheItem { TenantId = tenantId, TariffId = tariffId }, CacheNotifyAction.Insert);
|
||||
}
|
||||
}
|
||||
|
||||
public async Task<bool> PaymentChange(int tenantId, Dictionary<string, int> quantity)
|
||||
@ -755,6 +750,7 @@ public class TariffService : ITariffService
|
||||
if (efTariff.Id == default)
|
||||
{
|
||||
efTariff.Id = (-tenant);
|
||||
tariffInfo.Id = efTariff.Id;
|
||||
}
|
||||
|
||||
if (efTariff.CustomerId == default)
|
||||
|
@ -271,6 +271,7 @@ public class CachedUserService : IUserService, ICachedService
|
||||
{
|
||||
Service.SetUserPhoto(tenant, id, photo);
|
||||
CacheUserPhotoItem.Publish(new UserPhotoCacheItem { Key = UserServiceCache.GetUserPhotoCacheKey(tenant, id) }, CacheNotifyAction.Remove);
|
||||
CacheUserInfoItem.Publish(new UserInfoCacheItem { Id = id.ToString(), Tenant = tenant }, CacheNotifyAction.Any);
|
||||
}
|
||||
|
||||
public DateTime GetUserPasswordStamp(int tenant, Guid id)
|
||||
|
@ -24,6 +24,8 @@
|
||||
// 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 ASC.Core.Common.EF;
|
||||
|
||||
namespace ASC.Core.Data;
|
||||
|
||||
[Scope]
|
||||
@ -227,7 +229,7 @@ public class EFUserService : IUserService
|
||||
if (sortBy == "type")
|
||||
{
|
||||
var q1 = from user in q
|
||||
join userGroup in userDbContext.UserGroups.Where(g => !g.Removed && (g.UserGroupId == Users.Constants.GroupAdmin.ID || g.UserGroupId == Users.Constants.GroupUser.ID
|
||||
join userGroup in userDbContext.UserGroups.Where(g => !g.Removed && (g.UserGroupId == Users.Constants.GroupAdmin.ID || g.UserGroupId == Users.Constants.GroupUser.ID
|
||||
|| g.UserGroupId == Users.Constants.GroupCollaborator.ID))
|
||||
on user.Id equals userGroup.Userid into joinedGroup
|
||||
from @group in joinedGroup.DefaultIfEmpty()
|
||||
@ -317,8 +319,8 @@ public class EFUserService : IUserService
|
||||
|
||||
if (immediate)
|
||||
{
|
||||
await userGroups.ExecuteDeleteAsync();
|
||||
await groups.ExecuteDeleteAsync();
|
||||
await userGroups.ExecuteDeleteAsync();
|
||||
await groups.ExecuteDeleteAsync();
|
||||
}
|
||||
else
|
||||
{
|
||||
@ -372,15 +374,15 @@ public class EFUserService : IUserService
|
||||
.SetProperty(p => p.Removed, true)
|
||||
.SetProperty(p => p.LastModified, DateTime.UtcNow));
|
||||
|
||||
await users.ExecuteUpdateAsync(ug => ug
|
||||
.SetProperty(p => p.Removed, true)
|
||||
.SetProperty(p => p.LastModified, DateTime.UtcNow)
|
||||
.SetProperty(p => p.TerminatedDate, DateTime.UtcNow)
|
||||
.SetProperty(p => p.Status, EmployeeStatus.Terminated)
|
||||
);
|
||||
await users.ExecuteUpdateAsync(ug => ug
|
||||
.SetProperty(p => p.Removed, true)
|
||||
.SetProperty(p => p.LastModified, DateTime.UtcNow)
|
||||
.SetProperty(p => p.TerminatedDate, DateTime.UtcNow)
|
||||
.SetProperty(p => p.Status, EmployeeStatus.Terminated)
|
||||
);
|
||||
}
|
||||
|
||||
await tr.CommitAsync();
|
||||
await tr.CommitAsync();
|
||||
}).GetAwaiter()
|
||||
.GetResult();
|
||||
}
|
||||
@ -403,7 +405,7 @@ public class EFUserService : IUserService
|
||||
var userGroups = userDbContext.UserGroups.Where(r => r.Tenant == tenant && r.Userid == userId && r.UserGroupId == groupId && r.RefType == refType);
|
||||
if (immediate)
|
||||
{
|
||||
await userGroups.ExecuteDeleteAsync();
|
||||
await userGroups.ExecuteDeleteAsync();
|
||||
}
|
||||
else
|
||||
{
|
||||
@ -517,7 +519,7 @@ public class EFUserService : IUserService
|
||||
if (user != null)
|
||||
{
|
||||
user.LastModified = userGroupRef.LastModified;
|
||||
await userDbContext.AddOrUpdateAsync(r => userDbContext.UserGroups, _mapper.Map<UserGroupRef, UserGroup>(userGroupRef));
|
||||
await userDbContext.AddOrUpdateAsync(r => userDbContext.UserGroups, _mapper.Map<UserGroupRef, UserGroup>(userGroupRef));
|
||||
}
|
||||
|
||||
await userDbContext.SaveChangesAsync();
|
||||
@ -573,7 +575,18 @@ public class EFUserService : IUserService
|
||||
userPhoto.Photo = photo;
|
||||
}
|
||||
|
||||
|
||||
await userDbContext.AddOrUpdateAsync(r => userDbContext.Photos, userPhoto);
|
||||
|
||||
var userEntity = new User
|
||||
{
|
||||
Id = id,
|
||||
LastModified = DateTime.UtcNow,
|
||||
Tenant = tenant
|
||||
};
|
||||
|
||||
userDbContext.Entry(userEntity).Property(x => x.LastModified).IsModified = true;
|
||||
|
||||
}
|
||||
else if (userPhoto != null)
|
||||
{
|
||||
|
@ -61,6 +61,7 @@ public class LocalesTest
|
||||
public List<JavaScriptFile> JavaScriptFiles { get; set; }
|
||||
public List<ModuleFolder> ModuleFolders { get; set; }
|
||||
public List<KeyValuePair<string, string>> NotTranslatedToasts { get; set; }
|
||||
public List<KeyValuePair<string, string>> NotTranslatedProps { get; set; }
|
||||
public List<LanguageItem> CommonTranslations { get; set; }
|
||||
public List<ParseJsonError> ParseJsonErrors { get; set; }
|
||||
public static string ConvertPathToOS { get; private set; }
|
||||
@ -201,7 +202,10 @@ public class LocalesTest
|
||||
"|(?<=toastr.success\\([\"`\'])(.*)(?=[\"\'`])" +
|
||||
"|(?<=toastr.warn\\([\"`\'])(.*)(?=[\"\'`])", RegexOptions.Multiline | RegexOptions.ECMAScript);
|
||||
|
||||
var notTranslatedPropsRegex = new Regex("<[\\w\\n][^>]* (title|placeholder|label|text)={?[\\\"\\'](.*)[\\\"\\']}?", RegexOptions.Multiline | RegexOptions.ECMAScript);
|
||||
|
||||
NotTranslatedToasts = new List<KeyValuePair<string, string>>();
|
||||
NotTranslatedProps = new List<KeyValuePair<string, string>>();
|
||||
|
||||
foreach (var path in javascriptFiles)
|
||||
{
|
||||
@ -219,6 +223,18 @@ public class LocalesTest
|
||||
}
|
||||
}
|
||||
|
||||
var propsMatches = notTranslatedPropsRegex.Matches(jsFileText).ToList();
|
||||
|
||||
if (propsMatches.Any())
|
||||
{
|
||||
foreach (var propsMatch in propsMatches)
|
||||
{
|
||||
var found = propsMatch.Value;
|
||||
if (!string.IsNullOrEmpty(found) && !NotTranslatedProps.Exists(t => t.Value == found))
|
||||
NotTranslatedProps.Add(new KeyValuePair<string, string>(path, found));
|
||||
}
|
||||
}
|
||||
|
||||
var matches = regexp.Matches(jsFileText);
|
||||
|
||||
var translationKeys = matches
|
||||
@ -1079,6 +1095,29 @@ public class LocalesTest
|
||||
Assert.AreEqual(0, NotTranslatedToasts.Count, message);
|
||||
}
|
||||
|
||||
[Test]
|
||||
[Category("Locales")]
|
||||
public void NotTranslatedPropsTest()
|
||||
{
|
||||
var message = $"Next text not translated props (title, placeholder, label, text):\r\n\r\n";
|
||||
|
||||
var i = 0;
|
||||
|
||||
NotTranslatedProps.GroupBy(t => t.Key)
|
||||
.Select(g => new
|
||||
{
|
||||
FilePath = g.Key,
|
||||
Values = g.ToList()
|
||||
})
|
||||
.ToList()
|
||||
.ForEach(t =>
|
||||
{
|
||||
message += $"{++i}. Path='{t.FilePath}'\r\n\r\n{string.Join("\r\n", t.Values.Select(v => v.Value))}\r\n\r\n";
|
||||
});
|
||||
|
||||
Assert.AreEqual(0, NotTranslatedProps.Count, message);
|
||||
}
|
||||
|
||||
[Test]
|
||||
[Category("Locales")]
|
||||
public void WrongTranslationVariablesTest()
|
||||
|
@ -102,15 +102,15 @@ public class PortalController : ControllerBase
|
||||
[HttpPost("register")]
|
||||
[AllowCrossSiteJson]
|
||||
[Authorize(AuthenticationSchemes = "auth:allowskip:registerportal")]
|
||||
public Task<IActionResult> RegisterAsync(TenantModel model)
|
||||
public async Task<IActionResult> RegisterAsync(TenantModel model)
|
||||
{
|
||||
if (model == null)
|
||||
{
|
||||
return Task.FromResult<IActionResult>(BadRequest(new
|
||||
return BadRequest(new
|
||||
{
|
||||
error = "portalNameEmpty",
|
||||
message = "PortalName is required"
|
||||
}));
|
||||
});
|
||||
}
|
||||
|
||||
if (!ModelState.IsValid)
|
||||
@ -122,11 +122,11 @@ public class PortalController : ControllerBase
|
||||
message.Add(ModelState[k].Errors.FirstOrDefault().ErrorMessage);
|
||||
}
|
||||
|
||||
return Task.FromResult<IActionResult>(BadRequest(new
|
||||
return BadRequest(new
|
||||
{
|
||||
error = "params",
|
||||
message
|
||||
}));
|
||||
});
|
||||
}
|
||||
|
||||
var sw = Stopwatch.StartNew();
|
||||
@ -136,7 +136,7 @@ public class PortalController : ControllerBase
|
||||
if (!CheckPasswordPolicy(model.Password, out var error1))
|
||||
{
|
||||
sw.Stop();
|
||||
return Task.FromResult<IActionResult>(BadRequest(error1));
|
||||
return BadRequest(error1);
|
||||
}
|
||||
|
||||
if (!string.IsNullOrEmpty(model.Password))
|
||||
@ -152,16 +152,11 @@ public class PortalController : ControllerBase
|
||||
{
|
||||
sw.Stop();
|
||||
|
||||
return Task.FromResult<IActionResult>(BadRequest(error));
|
||||
return BadRequest(error);
|
||||
}
|
||||
|
||||
return InternalRegisterAsync(model, error, sw);
|
||||
}
|
||||
|
||||
private async Task<IActionResult> InternalRegisterAsync(TenantModel model, object error, Stopwatch sw)
|
||||
{
|
||||
model.PortalName = (model.PortalName ?? "").Trim();
|
||||
var (exists, _) = await CheckExistingNamePortalAsync(model.PortalName);
|
||||
(var exists, error) = await CheckExistingNamePortalAsync(model.PortalName);
|
||||
|
||||
if (!exists)
|
||||
{
|
||||
|
@ -66,8 +66,8 @@ public class Startup : BaseStartup
|
||||
services.AddHostedService<BackupCleanerTempFileService>();
|
||||
|
||||
services.AddHostedService<BackupWorkerService>();
|
||||
services.AddActivePassiveHostedService<BackupCleanerService>();
|
||||
services.AddActivePassiveHostedService<BackupSchedulerService>();
|
||||
services.AddActivePassiveHostedService<BackupCleanerService>(DIHelper);
|
||||
services.AddActivePassiveHostedService<BackupSchedulerService>(DIHelper);
|
||||
|
||||
services.AddBaseDbContextPool<BackupsContext>();
|
||||
services.AddBaseDbContextPool<FilesDbContext>();
|
||||
|
@ -53,8 +53,8 @@ public class Startup : BaseWorkerStartup
|
||||
DIHelper.TryAdd<NotifyInvokeSendMethodRequestedIntegrationEventHandler>();
|
||||
DIHelper.TryAdd<NotifySendMessageRequestedIntegrationEventHandler>();
|
||||
|
||||
services.AddActivePassiveHostedService<NotifySenderService>();
|
||||
services.AddActivePassiveHostedService<NotifyCleanerService>();
|
||||
services.AddActivePassiveHostedService<NotifySenderService>(DIHelper);
|
||||
services.AddActivePassiveHostedService<NotifyCleanerService>(DIHelper);
|
||||
|
||||
services.AddBaseDbContextPool<NotifyDbContext>();
|
||||
}
|
||||
|
2325
i18next/client.babel
2325
i18next/client.babel
File diff suppressed because it is too large
Load Diff
22
packages/client/public/locales/az/JavascriptSdk.json
Normal file
22
packages/client/public/locales/az/JavascriptSdk.json
Normal file
@ -0,0 +1,22 @@
|
||||
{
|
||||
"Ascending": "Artan",
|
||||
"CopyWindowCode": "Pəncərə yerləşdirmə kodunu kopyalayın",
|
||||
"DataDisplay": "Məlumatların göstərilməsi parametrləri",
|
||||
"Descending": "Azalan",
|
||||
"Destroy": "Məhv etmək",
|
||||
"EnterCount": "Sayını daxil edin",
|
||||
"EnterHeight": "Hündürlüyü daxil edin",
|
||||
"EnterId": "ID daxil edin",
|
||||
"EnterPage": "Nömrə səhifəsini daxil edin",
|
||||
"EnterWidth": "Genişliyi daxil edin",
|
||||
"FolderId": "Qovluq id",
|
||||
"FrameId": "Çərçivə id",
|
||||
"Header": "Başlıq",
|
||||
"ItemsCount": "Maddələr sayılır",
|
||||
"JavascriptSdk": "Javascript SDK",
|
||||
"Menu": "Menyu",
|
||||
"Page": "Səhifə",
|
||||
"SearchTerm": "Axtarış termini",
|
||||
"SortOrder": "Sırala",
|
||||
"WindowParameters": "Pəncərə parametrləri"
|
||||
}
|
@ -109,6 +109,7 @@
|
||||
"LogoDocsEditorEmbedded": "Redaktor başlığı - quraşdırılmış rejim üçün loqo",
|
||||
"LogoFavicon": "Favicon",
|
||||
"LogoLightSmall": "Portal başlığı üçün loqo",
|
||||
"LogoLogin": "Giriş səhifəsi və e-məktublar üçün loqo",
|
||||
"ManagementCategoryDataManagement": "Məlumatların idarə olunması",
|
||||
"ManagementCategoryIntegration": "İnteqrasiya",
|
||||
"ManagementCategorySecurity": "Təhlükəsizlik",
|
||||
|
22
packages/client/public/locales/bg/JavascriptSdk.json
Normal file
22
packages/client/public/locales/bg/JavascriptSdk.json
Normal file
@ -0,0 +1,22 @@
|
||||
{
|
||||
"Ascending": "Възходящ",
|
||||
"CopyWindowCode": "Копирайте кода за вграждане на прозорец",
|
||||
"DataDisplay": "Настройки за показване на данни",
|
||||
"Descending": "Низходящ",
|
||||
"Destroy": "Унищожи",
|
||||
"EnterCount": "Въведете броя",
|
||||
"EnterHeight": "Въведете височина",
|
||||
"EnterId": "Въведете id",
|
||||
"EnterPage": "Въведете номер на страницата",
|
||||
"EnterWidth": "Въведете ширина",
|
||||
"FolderId": "ID на папка",
|
||||
"FrameId": "ID на рамката",
|
||||
"Header": "Удар с глава",
|
||||
"ItemsCount": "Елементите се броят",
|
||||
"JavascriptSdk": "Javascript SDK",
|
||||
"Menu": "Меню",
|
||||
"Page": "Страница",
|
||||
"SearchTerm": "Термин за търсене",
|
||||
"SortOrder": "Ред на сортиране",
|
||||
"WindowParameters": "Параметри на прозореца"
|
||||
}
|
@ -9,6 +9,6 @@
|
||||
"StorageAndUserHeader": "На път сте да превишите ограниченията за съхранение и администратори/опитни потребители.",
|
||||
"StorageQuotaDescription": "Можете да премахнете ненужните файлове или <1>{{clickHere}}</1>, за да намерите по-подходящ ценови план за вашия DocSpace.",
|
||||
"StorageQuotaHeader": "Размерът на пространството за съхранение е на път да бъде надвишен: {{currentValue}} / {{maxValue}}",
|
||||
"UserQuotaDescription": "<1>{{clickHere}}</1>, за да намерите по-добър абонаментен план за вашия портал.",
|
||||
"UserQuotaDescription": "<1>{{clickHere}}</1>, за да намерите по-добър абонаментен план за вашия DocSpace.",
|
||||
"UserQuotaHeader": "На път сте да превишите броят на администраторите/опитните потребители: {{currentValue}} / {{maxValue}}."
|
||||
}
|
||||
|
22
packages/client/public/locales/cs/JavascriptSdk.json
Normal file
22
packages/client/public/locales/cs/JavascriptSdk.json
Normal file
@ -0,0 +1,22 @@
|
||||
{
|
||||
"Ascending": "Vzestupně",
|
||||
"CopyWindowCode": "Kopírovat kód pro vložení okna",
|
||||
"DataDisplay": "Nastavení zobrazení dat",
|
||||
"Descending": "Klesající",
|
||||
"Destroy": "Zničit",
|
||||
"EnterCount": "Zadejte počet",
|
||||
"EnterHeight": "Zadejte výšku",
|
||||
"EnterId": "Zadejte ID",
|
||||
"EnterPage": "Zadejte číselnou stránku",
|
||||
"EnterWidth": "Zadejte šířku",
|
||||
"FolderId": "ID složky",
|
||||
"FrameId": "ID snímku",
|
||||
"Header": "Záhlaví",
|
||||
"ItemsCount": "Položky se počítají",
|
||||
"JavascriptSdk": "Javascript sdk",
|
||||
"Menu": "Jídelní lístek",
|
||||
"Page": "Stránka",
|
||||
"SearchTerm": "Hledaný výraz",
|
||||
"SortOrder": "Seřadit objednávku",
|
||||
"WindowParameters": "Parametry okna"
|
||||
}
|
@ -9,6 +9,6 @@
|
||||
"StorageAndUserHeader": "Limity pro úložiště a správce/oprávněné uživatele budou brzy překročeny.",
|
||||
"StorageQuotaDescription": "Nepotřebné soubory můžete odstranit nebo <1>{{clickHere}}}</1> pro nalezení vhodnějšího cenového tarifu pro váš DocSpace.",
|
||||
"StorageQuotaHeader": "Množství úložného prostoru bude brzy překročeno: {{currentValue}} / {{maxValue}}.",
|
||||
"UserQuotaDescription": "<1>{{clickHere}}</1> a najděte lepší cenový tarif pro svůj portál.",
|
||||
"UserQuotaDescription": "<1>{{clickHere}}</1> a najděte lepší cenový tarif pro svůj DocSpace.",
|
||||
"UserQuotaHeader": "Počet administrátorů/přístupných uživatelů bude brzy překročen: {{currentValue}} / {{maxValue}}."
|
||||
}
|
||||
|
22
packages/client/public/locales/de/JavascriptSdk.json
Normal file
22
packages/client/public/locales/de/JavascriptSdk.json
Normal file
@ -0,0 +1,22 @@
|
||||
{
|
||||
"Ascending": "Aufsteigend",
|
||||
"CopyWindowCode": "Fenster-Einbettungscode kopieren",
|
||||
"DataDisplay": "Einstellungen für die Datenanzeige",
|
||||
"Descending": "Absteigend",
|
||||
"Destroy": "Zerstören",
|
||||
"EnterCount": "Anzahl eingeben",
|
||||
"EnterHeight": "Höhe eingeben",
|
||||
"EnterId": "ID eingeben",
|
||||
"EnterPage": "Nummernseite eingeben",
|
||||
"EnterWidth": "Breite eingeben",
|
||||
"FolderId": "Ordner-ID",
|
||||
"FrameId": "Frame-ID",
|
||||
"Header": "Header",
|
||||
"ItemsCount": "Artikel zählen",
|
||||
"JavascriptSdk": "Javascript-SDK",
|
||||
"Menu": "Speisekarte",
|
||||
"Page": "Seite",
|
||||
"SearchTerm": "Suchbegriff",
|
||||
"SortOrder": "Sortierreihenfolge",
|
||||
"WindowParameters": "Fensterparameter"
|
||||
}
|
@ -9,6 +9,6 @@
|
||||
"StorageAndUserHeader": "Limits für Speicherplatz und Admins/Power-User werden bald überschritten sein.",
|
||||
"StorageQuotaDescription": "Sie können die unerwünschten Dateien entfernen oder <1>{{{clickHere}}</1> einen geeigneteren Preisplan für Ihren DocSpace finden.",
|
||||
"StorageQuotaHeader": "Das Speicherplatzlimit wird bald überschritten: {{currentValue}} / {{maxValue}}",
|
||||
"UserQuotaDescription": "<1>{{clickHere}}</1>, um einen besseren Preisplan für Ihr Portal zu finden.",
|
||||
"UserQuotaDescription": "<1>{{clickHere}}</1>, um einen besseren Preisplan für Ihr DocSpace zu finden.",
|
||||
"UserQuotaHeader": "Die Anzahl der Admins/Power-User wird bald überschritten sein: {{currentValue}} / {{maxValue}}."
|
||||
}
|
||||
|
22
packages/client/public/locales/el-GR/JavascriptSdk.json
Normal file
22
packages/client/public/locales/el-GR/JavascriptSdk.json
Normal file
@ -0,0 +1,22 @@
|
||||
{
|
||||
"Ascending": "Ανερχόμενος",
|
||||
"CopyWindowCode": "Αντιγραφή κώδικα ενσωμάτωσης παραθύρου",
|
||||
"DataDisplay": "Ρυθμίσεις εμφάνισης δεδομένων",
|
||||
"Descending": "Φθίνων",
|
||||
"Destroy": "Καταστρέφω",
|
||||
"EnterCount": "Εισαγάγετε τον αριθμό",
|
||||
"EnterHeight": "Εισαγάγετε ύψος",
|
||||
"EnterId": "Εισαγάγετε το αναγνωριστικό",
|
||||
"EnterPage": "Εισαγάγετε τη σελίδα αριθμού",
|
||||
"EnterWidth": "Εισαγάγετε πλάτος",
|
||||
"FolderId": "Αναγνωριστικό φακέλου",
|
||||
"FrameId": "Ταυτότητα πλαισίου",
|
||||
"Header": "Επί κεφαλής",
|
||||
"ItemsCount": "Τα στοιχεία μετράνε",
|
||||
"JavascriptSdk": "Javascript sdk",
|
||||
"Menu": "Μενού",
|
||||
"Page": "Σελίδα",
|
||||
"SearchTerm": "Ορος αναζήτησης",
|
||||
"SortOrder": "Σειρά ταξινόμησης",
|
||||
"WindowParameters": "Παράμετροι παραθύρου"
|
||||
}
|
22
packages/client/public/locales/en/JavascriptSdk.json
Normal file
22
packages/client/public/locales/en/JavascriptSdk.json
Normal file
@ -0,0 +1,22 @@
|
||||
{
|
||||
"Ascending": "Ascending",
|
||||
"CopyWindowCode": "Copy window embed code",
|
||||
"DataDisplay": "Data display settings",
|
||||
"Descending": "Descending",
|
||||
"Destroy": "Destroy",
|
||||
"EnterCount": "Enter count",
|
||||
"EnterHeight": "Enter height",
|
||||
"EnterId": "Enter id",
|
||||
"EnterPage": "Enter number page",
|
||||
"EnterWidth": "Enter width",
|
||||
"FolderId": "Folder id",
|
||||
"FrameId": "Frame id",
|
||||
"Header": "Header",
|
||||
"ItemsCount": "Items count",
|
||||
"JavascriptSdk": "Javascript sdk",
|
||||
"Menu": "Menu",
|
||||
"Page": "Page",
|
||||
"SearchTerm": "Search term",
|
||||
"SortOrder": "Sort order",
|
||||
"WindowParameters": "Window parameters"
|
||||
}
|
@ -9,6 +9,6 @@
|
||||
"StorageAndUserHeader": "Storage and admins/power users limits are about to be exceeded.",
|
||||
"StorageQuotaDescription": "You can remove the unnecessary files or <1>{{clickHere}}</1> to find a more suitable pricing plan for your DocSpace.",
|
||||
"StorageQuotaHeader": "Storage space amount is about to be exceeded: {{currentValue}} / {{maxValue}}",
|
||||
"UserQuotaDescription": "<1>{{clickHere}}</1> to find a better pricing plan for your portal.",
|
||||
"UserQuotaDescription": "<1>{{clickHere}}</1> to find a better pricing plan for your DocSpace.",
|
||||
"UserQuotaHeader": "The number of admins/power users is about to be exceeded: {{currentValue}} / {{maxValue}}."
|
||||
}
|
||||
|
22
packages/client/public/locales/es/JavascriptSdk.json
Normal file
22
packages/client/public/locales/es/JavascriptSdk.json
Normal file
@ -0,0 +1,22 @@
|
||||
{
|
||||
"Ascending": "Ascendente",
|
||||
"CopyWindowCode": "Copiar el código de incrustación de la ventana",
|
||||
"DataDisplay": "Configuración de visualización de datos",
|
||||
"Descending": "Descendiendo",
|
||||
"Destroy": "Destruir",
|
||||
"EnterCount": "Ingresar cuenta",
|
||||
"EnterHeight": "Ingrese la altura",
|
||||
"EnterId": "Ingrese ID",
|
||||
"EnterPage": "Introduzca el número de página",
|
||||
"EnterWidth": "Introducir ancho",
|
||||
"FolderId": "Identificación de la carpeta",
|
||||
"FrameId": "Identificación del marco",
|
||||
"Header": "Encabezamiento",
|
||||
"ItemsCount": "Cuenta de artículos",
|
||||
"JavascriptSdk": "SDK de Javascript",
|
||||
"Menu": "Menú",
|
||||
"Page": "Página",
|
||||
"SearchTerm": "Término de búsqueda",
|
||||
"SortOrder": "Orden de clasificación",
|
||||
"WindowParameters": "Parámetros de la ventana"
|
||||
}
|
@ -9,6 +9,6 @@
|
||||
"StorageAndUserHeader": "Los límites de almacenamiento y de administradores/usuarios avanzados están a punto de excederse.",
|
||||
"StorageQuotaDescription": "Puede eliminar los archivos innecesarios o <1>{{clickHere}}</1> para encontrar un plan de precios más adecuado para su DocSpace.",
|
||||
"StorageQuotaHeader": "La cantidad de espacio de almacenamiento está a punto de excederse: {{currentValue}} / {{maxValue}}",
|
||||
"UserQuotaDescription": "<1>{{clickHere}}</1> para encontrar un mejor plan de precios para su portal.",
|
||||
"UserQuotaDescription": "<1>{{clickHere}}</1> para encontrar un mejor plan de precios para su DocSpace.",
|
||||
"UserQuotaHeader": "El número de administradores/usuarios avanzados está a punto de excederse: {{currentValue}} / {{maxValue}}."
|
||||
}
|
||||
|
22
packages/client/public/locales/fi/JavascriptSdk.json
Normal file
22
packages/client/public/locales/fi/JavascriptSdk.json
Normal file
@ -0,0 +1,22 @@
|
||||
{
|
||||
"Ascending": "Nouseva",
|
||||
"CopyWindowCode": "Kopioi ikkunan upotuskoodi",
|
||||
"DataDisplay": "Tietojen näyttöasetukset",
|
||||
"Descending": "Laskeva",
|
||||
"Destroy": "Tuhota",
|
||||
"EnterCount": "Anna määrä",
|
||||
"EnterHeight": "Syötä korkeus",
|
||||
"EnterId": "Anna tunnus",
|
||||
"EnterPage": "Anna numerosivu",
|
||||
"EnterWidth": "Anna leveys",
|
||||
"FolderId": "Kansion tunnus",
|
||||
"FrameId": "Kehyksen tunnus",
|
||||
"Header": "Ylätunniste",
|
||||
"ItemsCount": "Kohteet laskevat",
|
||||
"JavascriptSdk": "Javascript sdk",
|
||||
"Menu": "Valikko",
|
||||
"Page": "Sivu",
|
||||
"SearchTerm": "Hakusana",
|
||||
"SortOrder": "Lajittelujärjestys",
|
||||
"WindowParameters": "Ikkunan parametrit"
|
||||
}
|
22
packages/client/public/locales/fr/JavascriptSdk.json
Normal file
22
packages/client/public/locales/fr/JavascriptSdk.json
Normal file
@ -0,0 +1,22 @@
|
||||
{
|
||||
"Ascending": "Ascendant",
|
||||
"CopyWindowCode": "Copier le code d'intégration de la fenêtre",
|
||||
"DataDisplay": "Paramètres d'affichage des données",
|
||||
"Descending": "Descendant",
|
||||
"Destroy": "Détruire",
|
||||
"EnterCount": "Entrez le nombre",
|
||||
"EnterHeight": "Entrez la hauteur",
|
||||
"EnterId": "Entrer l'ID",
|
||||
"EnterPage": "Entrez le numéro de la page",
|
||||
"EnterWidth": "Entrez la largeur",
|
||||
"FolderId": "Identifiant du dossier",
|
||||
"FrameId": "Identifiant du cadre",
|
||||
"Header": "Entête",
|
||||
"ItemsCount": "Nombre d'Articles",
|
||||
"JavascriptSdk": "SDK Javascript",
|
||||
"Menu": "Menu",
|
||||
"Page": "Page",
|
||||
"SearchTerm": "Terme de recherche",
|
||||
"SortOrder": "Ordre de tri",
|
||||
"WindowParameters": "Paramètres de la fenêtre"
|
||||
}
|
@ -9,6 +9,6 @@
|
||||
"StorageAndUserHeader": "Les limites de stockage et d'administrateurs/utilisateurs avancés sont sur le point d'être dépassées.",
|
||||
"StorageQuotaDescription": "Vous pouvez supprimer les fichiers inutiles ou <1>{{clickHere}}</1> pour trouver un plan tarifaire plus adapté à votre DocSpace.",
|
||||
"StorageQuotaHeader": "L’espace de stockage est sur le point d’être dépassé : {{currentValue}} / {{maxValue}}",
|
||||
"UserQuotaDescription": "<1>{{clickHere}}</1> pour trouver un meilleur plan tarifaire pour votre portail.",
|
||||
"UserQuotaDescription": "<1>{{clickHere}}</1> pour trouver un meilleur plan tarifaire pour votre DocSpace.",
|
||||
"UserQuotaHeader": "Le nombre d'administrateurs/utilisateurs avancés est sur le point d'être dépassé : {{currentValue}} / {{maxValue}}."
|
||||
}
|
||||
|
22
packages/client/public/locales/hy-AM/JavascriptSdk.json
Normal file
22
packages/client/public/locales/hy-AM/JavascriptSdk.json
Normal file
@ -0,0 +1,22 @@
|
||||
{
|
||||
"Ascending": "Բարձրանալով",
|
||||
"CopyWindowCode": "Պատճենել պատուհանի ներդրման կոդը",
|
||||
"DataDisplay": "Տվյալների ցուցադրման կարգավորումներ",
|
||||
"Descending": "Նվազող",
|
||||
"Destroy": "Ոչնչացնել",
|
||||
"EnterCount": "Մուտքագրեք հաշվարկը",
|
||||
"EnterHeight": "Մուտքագրեք բարձրությունը",
|
||||
"EnterId": "Մուտքագրեք ID-ն",
|
||||
"EnterPage": "Մուտքագրեք համարի էջը",
|
||||
"EnterWidth": "Մուտքագրեք լայնությունը",
|
||||
"FolderId": "Թղթապանակի ID",
|
||||
"FrameId": "Շրջանակի ID",
|
||||
"Header": "Վերնագիր",
|
||||
"ItemsCount": "Նյութերը հաշվում են",
|
||||
"JavascriptSdk": "Javascript sdk",
|
||||
"Menu": "ՄԵՆՈՒ",
|
||||
"Page": "Էջ",
|
||||
"SearchTerm": "Որոնման տերմին",
|
||||
"SortOrder": "Տեսակավորելու կարգը",
|
||||
"WindowParameters": "Պատուհանների պարամետրեր"
|
||||
}
|
@ -127,6 +127,7 @@
|
||||
"PortalAccessSubTitle": "Այս բաժինը թույլ է տալիս օգտվողներին տրամադրել կայքէջ մուտք գործելու անվտանգ և հարմար եղանակներ:",
|
||||
"PortalDeactivation": "Ապագործունացնել DocSpace-ը",
|
||||
"PortalDeactivationDescription": "Օգտագործեք այս տարբերակը՝ ձեր տարածքը ժամանակավորապես անջատելու համար:",
|
||||
"PortalDeactivationHelper": "Եթե ցանկանում եք ապաակտիվացնել այս DocSpace-ը, ձեր տարածքը և դրա հետ կապված բոլոր տեղեկությունները կարգելափակվեն, որպեսզի ոչ ոք որոշակի ժամանակահատվածում մուտք չունենա այն: Դա անելու համար սեղմեք «Անջատել» կոճակը: Գործողությունը հաստատելու հղումը կուղարկվի տարածքի սեփականատիրոջ էլ.փոստի հասցեին:\nԵթե ցանկանում եք վերադառնալ տարածք և շարունակել օգտագործել այն, դուք պետք է օգտագործեք հաստատման նամակում նշված երկրորդ հղումը: Այսպիսով, խնդրում եմ, պահեք այս էլփոստը ապահով տեղում:",
|
||||
"PortalDeletion": "Պորտալի ջնջում",
|
||||
"PortalDeletionDescription": "Օգտագործեք այս տարբերակը՝ ձեր տարածքը ընդմիշտ ջնջելու համար:",
|
||||
"PortalDeletionEmailSended": "Գործողությունը հաստատող հղում է ուղարկվել {{ownerEmail}} (տարածքի սեփականատիրոջ էլ.փոստի հասցեն).",
|
||||
|
22
packages/client/public/locales/it/JavascriptSdk.json
Normal file
22
packages/client/public/locales/it/JavascriptSdk.json
Normal file
@ -0,0 +1,22 @@
|
||||
{
|
||||
"Ascending": "Ascendente",
|
||||
"CopyWindowCode": "Copia il codice di incorporamento della finestra",
|
||||
"DataDisplay": "Impostazioni di visualizzazione dei dati",
|
||||
"Descending": "Discendente",
|
||||
"Destroy": "Distruggere",
|
||||
"EnterCount": "Inserisci conteggio",
|
||||
"EnterHeight": "Immettere l'altezza",
|
||||
"EnterId": "Immettere l'ID",
|
||||
"EnterPage": "Inserisci il numero di pagina",
|
||||
"EnterWidth": "Inserisci la larghezza",
|
||||
"FolderId": "Id Cartella",
|
||||
"FrameId": "ID telaio",
|
||||
"Header": "Intestazione",
|
||||
"ItemsCount": "Gli elementi contano",
|
||||
"JavascriptSdk": "SDK Javascript",
|
||||
"Menu": "Menu",
|
||||
"Page": "Pagina",
|
||||
"SearchTerm": "Termine di ricerca",
|
||||
"SortOrder": "Ordinamento",
|
||||
"WindowParameters": "Parametri della finestra"
|
||||
}
|
@ -9,6 +9,6 @@
|
||||
"StorageAndUserHeader": "I limiti di spazio di archiviazione e amministratori/utenti esperti stanno per essere superati.",
|
||||
"StorageQuotaDescription": "Puoi rimuovere i file non necessari o <1>{{clickHere}}</1> per trovare un piano tariffario più adatto per il tuo DocSpace.",
|
||||
"StorageQuotaHeader": "Lo spazio di archiviazione sta per essere esaurito: {{currentValue}} / {{maxValue}}",
|
||||
"UserQuotaDescription": "<1>{{clickHere}}</1> per trovare un piano tariffario migliore per il tuo portale.",
|
||||
"UserQuotaDescription": "<1>{{clickHere}}</1> per trovare un piano tariffario migliore per il tuo DocSpace.",
|
||||
"UserQuotaHeader": "Il numero di amministratori/utenti esperti sta per essere superato: {{currentValue}} / {{maxValue}}."
|
||||
}
|
||||
|
22
packages/client/public/locales/ja-JP/JavascriptSdk.json
Normal file
22
packages/client/public/locales/ja-JP/JavascriptSdk.json
Normal file
@ -0,0 +1,22 @@
|
||||
{
|
||||
"Ascending": "上昇",
|
||||
"CopyWindowCode": "ウィンドウの埋め込みコードをコピーする",
|
||||
"DataDisplay": "データ表示設定",
|
||||
"Descending": "降順",
|
||||
"Destroy": "破壊する",
|
||||
"EnterCount": "カウントを入力してください",
|
||||
"EnterHeight": "高さを入力してください",
|
||||
"EnterId": "IDを入力してください",
|
||||
"EnterPage": "ページ番号を入力してください",
|
||||
"EnterWidth": "幅を入力してください",
|
||||
"FolderId": "フォルダ ID",
|
||||
"FrameId": "フレーム ID",
|
||||
"Header": "ヘッダ",
|
||||
"ItemsCount": "アイテム数",
|
||||
"JavascriptSdk": "JavaScript SDK",
|
||||
"Menu": "メニュー",
|
||||
"Page": "ページ",
|
||||
"SearchTerm": "検索語",
|
||||
"SortOrder": "並べ替え順序",
|
||||
"WindowParameters": "ウィンドウ パラメータ"
|
||||
}
|
@ -9,6 +9,6 @@
|
||||
"StorageAndUserHeader": "ストレージと管理者/パワーユーザーの制限を超えそうです。",
|
||||
"StorageQuotaDescription": "不要なファイルを削除するか、<1>{{clickHere}}</1>して、DocSpaceに適した料金プランを見つけることができます。",
|
||||
"StorageQuotaHeader": "ストレージのスペースは、もうすぐサイズ上限を超えます:{{currentValue}} / {{maxValue}}",
|
||||
"UserQuotaDescription": "お使いのポータルに適した料金プランを探すには、<1>{{clickHere}}</1>。",
|
||||
"UserQuotaDescription": "お使いのDocSpaceに適した料金プランを選択するには、<1>{{clickHere}}</1>。",
|
||||
"UserQuotaHeader": "管理者/パワーユーザー数を超えそうです:{{currentValue}} / {{maxValue}}"
|
||||
}
|
||||
|
@ -26,7 +26,7 @@
|
||||
"Payer": "支払人",
|
||||
"PayerDescription": "このユーザーは、支払いの詳細へのアクセス権を持ち、クォータの調整と支払いを行うことができる唯一のユーザーです。DocSpaceの所有者だけでなく、支払いマネージャー自身も、Stripeカスタマーポータルを使用してペイイングマネージャーの役割を再割り当てすることができます。",
|
||||
"PaymentOverdue": "新しいユーザーを追加することができません。",
|
||||
"PowerUserDescription": "パワーユーザーは、ルーム内のファイルの作成と編集はできますが、ルームの作成、ユーザーの管理、設定へのアクセスはできません",
|
||||
"PowerUserDescription": "パワーユーザーは、ルーム内のファイルの作成と編集はできますが、ルームの作成、ユーザーの管理、設定へのアクセスはできません。",
|
||||
"PriceCalculation": "価格を計算する",
|
||||
"QuotaPaidUserLimitError": "有料ユーザー数の上限に達しました。<1>支払額</1>",
|
||||
"RenewSubscription": "{{planName}}プランの契約を更新する",
|
||||
|
22
packages/client/public/locales/ko-KR/JavascriptSdk.json
Normal file
22
packages/client/public/locales/ko-KR/JavascriptSdk.json
Normal file
@ -0,0 +1,22 @@
|
||||
{
|
||||
"Ascending": "오름차순",
|
||||
"CopyWindowCode": "창 임베드 코드 복사",
|
||||
"DataDisplay": "데이터 표시 설정",
|
||||
"Descending": "내림차순",
|
||||
"Destroy": "파괴하다",
|
||||
"EnterCount": "개수 입력",
|
||||
"EnterHeight": "높이 입력",
|
||||
"EnterId": "아이디 입력",
|
||||
"EnterPage": "번호 입력 페이지",
|
||||
"EnterWidth": "폭 입력",
|
||||
"FolderId": "폴더 아이디",
|
||||
"FrameId": "프레임 ID",
|
||||
"Header": "머리글",
|
||||
"ItemsCount": "항목 수",
|
||||
"JavascriptSdk": "자바스크립트 SDK",
|
||||
"Menu": "메뉴",
|
||||
"Page": "페이지",
|
||||
"SearchTerm": "검색어",
|
||||
"SortOrder": "정렬 순서",
|
||||
"WindowParameters": "창 매개변수"
|
||||
}
|
@ -2,5 +2,6 @@
|
||||
"ChangeUserStatusDialog": "ສະຖານະຂອງຜູ້ໃຊ້ທີ່ມີ '{{ userStatus }}' ຈະເປັນ {{ status }}.",
|
||||
"ChangeUserStatusDialogHeader": "ປ່ຽນສະຖານະຜູ້ໃຊ້",
|
||||
"ChangeUserStatusDialogMessage": "ທ່ານບໍ່ສາມາດປ່ຽນສະຖານະພາບສຳລັບເຈົ້າຂອງ DocSpace ແລະ ສຳລັບທ່ານເອງ.",
|
||||
"ChangeUsersActiveStatus": "ເປີດໃຊ້ແລ້ວ"
|
||||
"ChangeUsersActiveStatus": "ເປີດໃຊ້ແລ້ວ",
|
||||
"ChangeUsersDisableStatus": "ປິດການໃຊ້ງານ"
|
||||
}
|
||||
|
22
packages/client/public/locales/lo-LA/JavascriptSdk.json
Normal file
22
packages/client/public/locales/lo-LA/JavascriptSdk.json
Normal file
@ -0,0 +1,22 @@
|
||||
{
|
||||
"Ascending": "ຕັ້ງຊັນຂຶ້ນ",
|
||||
"CopyWindowCode": "ສຳເນົາລະຫັດຝັງໜ້າຕ່າງ",
|
||||
"DataDisplay": "ການຕັ້ງຄ່າການສະແດງຂໍ້ມູນ",
|
||||
"Descending": "ລົງມາ",
|
||||
"Destroy": "ທໍາລາຍ",
|
||||
"EnterCount": "ເຂົ້ານັບ",
|
||||
"EnterHeight": "ໃສ່ຄວາມສູງ",
|
||||
"EnterId": "ໃສ່ id",
|
||||
"EnterPage": "ໃສ່ໜ້າເລກ",
|
||||
"EnterWidth": "ໃສ່ຄວາມກວ້າງ",
|
||||
"FolderId": "ID ໂຟນເດີ",
|
||||
"FrameId": "ID ກອບ",
|
||||
"Header": "ຫົວ",
|
||||
"ItemsCount": "ຈໍານວນລາຍການ",
|
||||
"JavascriptSdk": "Javascript sdk",
|
||||
"Menu": "ເມນູ",
|
||||
"Page": "ໜ້າ",
|
||||
"SearchTerm": "ຄຳສັບຊອກຫາ",
|
||||
"SortOrder": "ຮຽງລຳດັບ",
|
||||
"WindowParameters": "ຕົວກໍານົດການປ່ອງຢ້ຽມ"
|
||||
}
|
22
packages/client/public/locales/lv/JavascriptSdk.json
Normal file
22
packages/client/public/locales/lv/JavascriptSdk.json
Normal file
@ -0,0 +1,22 @@
|
||||
{
|
||||
"Ascending": "Augošā",
|
||||
"CopyWindowCode": "Kopējiet loga iegulšanas kodu",
|
||||
"DataDisplay": "Datu displeja iestatījumi",
|
||||
"Descending": "Dilstošā",
|
||||
"Destroy": "Iznīcināt",
|
||||
"EnterCount": "Ievadiet skaitu",
|
||||
"EnterHeight": "Ievadiet augstumu",
|
||||
"EnterId": "Ievadiet id",
|
||||
"EnterPage": "Ievadiet numuru lapu",
|
||||
"EnterWidth": "Ievadiet platumu",
|
||||
"FolderId": "Mapes ID",
|
||||
"FrameId": "Rāmja ID",
|
||||
"Header": "Galvene",
|
||||
"ItemsCount": "Preču skaits",
|
||||
"JavascriptSdk": "Javascript sdk",
|
||||
"Menu": "Izvēlne",
|
||||
"Page": "Lappuse",
|
||||
"SearchTerm": "Meklēšanas vienums",
|
||||
"SortOrder": "Šķirošanas secība",
|
||||
"WindowParameters": "Logu parametri"
|
||||
}
|
22
packages/client/public/locales/nl/JavascriptSdk.json
Normal file
22
packages/client/public/locales/nl/JavascriptSdk.json
Normal file
@ -0,0 +1,22 @@
|
||||
{
|
||||
"Ascending": "Oplopend",
|
||||
"CopyWindowCode": "Kopieer de insluitcode van het venster",
|
||||
"DataDisplay": "Instellingen voor gegevensweergave",
|
||||
"Descending": "Aflopend",
|
||||
"Destroy": "Vernietigen",
|
||||
"EnterCount": "Voer het aantal in",
|
||||
"EnterHeight": "Voer Hoogte in",
|
||||
"EnterId": "Voer ID in",
|
||||
"EnterPage": "Voer nummerpagina in",
|
||||
"EnterWidth": "Voer de breedte in",
|
||||
"FolderId": "Map-ID",
|
||||
"FrameId": "Frame-ID",
|
||||
"Header": "Hoofd",
|
||||
"ItemsCount": "Artikelen tellen",
|
||||
"JavascriptSdk": "Javascript-sdk",
|
||||
"Menu": "Menu",
|
||||
"Page": "Pagina",
|
||||
"SearchTerm": "Zoekterm",
|
||||
"SortOrder": "Sorteervolgorde",
|
||||
"WindowParameters": "Venster parameters"
|
||||
}
|
@ -9,6 +9,6 @@
|
||||
"StorageAndUserHeader": "De beperkingen voor opslag en beheerders/power users worden binnenkort overschreden.",
|
||||
"StorageQuotaDescription": "U kunt de overbodige bestanden verwijderen of <1>{clickHere}}</1> om een meer geschikt prijsplan voor uw DocSpace te vinden.",
|
||||
"StorageQuotaHeader": "De hoeveelheid opslagruimte staat op het punt overschreden te worden: {{currentValue}} / {{maxValue}}",
|
||||
"UserQuotaDescription": "<1>{{clickHere}}</1> om een beter prijsplan voor uw portaal te vinden.",
|
||||
"UserQuotaDescription": "<1>{{clickHere}}</1> om een beter prijsplan voor uw DocSpace te vinden.",
|
||||
"UserQuotaHeader": "Het aantal beheerders/power users staan op het punt overschreden te worden: {{currentValue}} / {{maxValue}}."
|
||||
}
|
||||
|
@ -17,6 +17,8 @@
|
||||
"ErrorNotification": "Niet gelukt om tariefplan bij te werken. Probeer het later nog eens of neem contact op met de verkoopafdeling.",
|
||||
"GracePeriodActivatedDescription": "Tijdens de wachtperiode kunnen beheerders geen nieuwe ruimtes aanmaken en geen nieuwe gebruikers toevoegen. Na de vervaldatum van de wachtperiode wordt DocSpace onbeschikbaar totdat de betaling is verricht.",
|
||||
"GracePeriodActivatedInfo": "De wachtperiode is van kracht <1>van {{fromDate}} tot {{byDate}}</1> (resterende dagen: {{delayDaysCount}}).",
|
||||
"InvalidEmailWithActiveSubscription": "Uw abonnement blijft actief, maar wij raden u aan een nieuwe betaler te kiezen die toegang krijgt tot de abonnementsinstellingen in DocSpace.",
|
||||
"InvalidEmailWithActiveSubscriptionForAdmin": "Uw abonnement blijft actief, maar wij raden u aan contact op te nemen met de DocSpace eigenaar om een nieuwe Betaler te kiezen.",
|
||||
"InvalidEmailWithoutActiveSubscription": "Wij raden aan een nieuwe Betaler te kiezen die toegang krijgt tot de abonnementsinstellingen in DocSpace.",
|
||||
"InvalidEmailWithoutActiveSubscriptionByAdmin": "Wij raden u aan contact op te nemen met de DocSpace eigenaar om een nieuwe Betaler te kiezen.",
|
||||
"ManagerTypesDescription": "Beheerder accounts en hun rechten",
|
||||
|
22
packages/client/public/locales/pl/JavascriptSdk.json
Normal file
22
packages/client/public/locales/pl/JavascriptSdk.json
Normal file
@ -0,0 +1,22 @@
|
||||
{
|
||||
"Ascending": "Rosnąco",
|
||||
"CopyWindowCode": "Skopiuj kod osadzania okna",
|
||||
"DataDisplay": "Ustawienia wyświetlania danych",
|
||||
"Descending": "Malejąco",
|
||||
"Destroy": "Zniszczyć",
|
||||
"EnterCount": "Wpisz liczbę",
|
||||
"EnterHeight": "Wprowadź wysokość",
|
||||
"EnterId": "Wprowadź identyfikator",
|
||||
"EnterPage": "Wprowadź numer strony",
|
||||
"EnterWidth": "Wprowadź szerokość",
|
||||
"FolderId": "Identyfikator folderu",
|
||||
"FrameId": "Identyfikator ramki",
|
||||
"Header": "Nagłówek",
|
||||
"ItemsCount": "Liczba przedmiotów",
|
||||
"JavascriptSdk": "SDK JavaScript",
|
||||
"Menu": "Menu",
|
||||
"Page": "Strona",
|
||||
"SearchTerm": "Szukany termin",
|
||||
"SortOrder": "Kolejność sortowania",
|
||||
"WindowParameters": "Parametry okna"
|
||||
}
|
@ -9,6 +9,6 @@
|
||||
"StorageAndUserHeader": "Limity pamięci/użytkowników z większą liczbą uprawnień zostaną wkrótce przekroczone.",
|
||||
"StorageQuotaDescription": "Możesz usunąć niepotrzebne pliki lub <1>{{clickHere}}</1>, aby znaleźć bardziej odpowiedni plan cenowy dla swojego konta DocSpace.",
|
||||
"StorageQuotaHeader": "Ilość miejsca w pamięci zostanie wkrótce przekroczona: {{currentValue}} / {{maxValue}}",
|
||||
"UserQuotaDescription": "<1>{{clickHere}}</1>, aby znaleźć lepszy plan cenowy dla swojego portalu.",
|
||||
"UserQuotaDescription": "<1>{{clickHere}}</1>, aby znaleźć lepszy plan cenowy dla swojego DocSpace.",
|
||||
"UserQuotaHeader": "Liczba administratorów/użytkowników z większą liczbą uprawnień zostanie wkrótce przekroczona: {{currentValue}} / {{maxValue}}."
|
||||
}
|
||||
|
@ -1,4 +1,5 @@
|
||||
{
|
||||
"DeleteOwnerRestrictionText": "Sendo proprietário deste DocSpace, você deve transferir a propriedade para outro usuário antes de excluir sua conta. Escolha um novo proprietário para continuar.",
|
||||
"DeleteProfileInfo": "Enviar as instruções de exclusão de perfil para o endereço de e-mail",
|
||||
"DeleteProfileTitle": "Excluir diálogo do perfil"
|
||||
}
|
||||
|
@ -26,6 +26,7 @@
|
||||
"FeedUpdateUser": "foi atribuído o papel {{role}}",
|
||||
"FileExtension": "Extensão de arquivo",
|
||||
"FilesEmptyScreenText": "Veja os detalhes do arquivo e da pasta aqui",
|
||||
"HistoryEmptyScreenText": "O histórico de atividades será mostrado aqui",
|
||||
"ItemsSelected": "Itens selecionados",
|
||||
"LastModifiedBy": "Última Modificação Por",
|
||||
"PendingInvitations": "Convites pendentes",
|
||||
|
22
packages/client/public/locales/pt-BR/JavascriptSdk.json
Normal file
22
packages/client/public/locales/pt-BR/JavascriptSdk.json
Normal file
@ -0,0 +1,22 @@
|
||||
{
|
||||
"Ascending": "Ascendente",
|
||||
"CopyWindowCode": "Copiar código de incorporação da janela",
|
||||
"DataDisplay": "Configurações de exibição de dados",
|
||||
"Descending": "Descendente",
|
||||
"Destroy": "Destruir",
|
||||
"EnterCount": "Inserir contagem",
|
||||
"EnterHeight": "Insira a altura",
|
||||
"EnterId": "Digite o ID",
|
||||
"EnterPage": "Insira a página do número",
|
||||
"EnterWidth": "Insira a largura",
|
||||
"FolderId": "ID da pasta",
|
||||
"FrameId": "ID do quadro",
|
||||
"Header": "Cabeçalho",
|
||||
"ItemsCount": "Contagem de itens",
|
||||
"JavascriptSdk": "Javascript SDK",
|
||||
"Menu": "Cardápio",
|
||||
"Page": "Página",
|
||||
"SearchTerm": "Termo de pesquisa",
|
||||
"SortOrder": "Ordem de classificação",
|
||||
"WindowParameters": "Parâmetros da janela"
|
||||
}
|
@ -9,6 +9,6 @@
|
||||
"StorageAndUserHeader": "Os limites de armazenamento e administradores/usuários avançados estão prestes a ser excedidos.",
|
||||
"StorageQuotaDescription": "Você pode remover os arquivos desnecessários ou <1>{{clickHere}}</1> para encontrar um plano de preços mais adequado para o seu DocSpace.",
|
||||
"StorageQuotaHeader": "A quantidade de espaço de armazenamento está prestes a ser excedida: {{currentValue}} / {{maxValue}}",
|
||||
"UserQuotaDescription": "<1>{{clickHere}}</1> para encontrar um plano de preços melhor para o seu portal.",
|
||||
"UserQuotaDescription": "<1>{{clickHere}}</1> para encontrar um plano de preços melhor para o seu DocSpace.",
|
||||
"UserQuotaHeader": "O número de administradores/usuários avançados está prestes a ser excedido: {{currentValue}} / {{maxValue}}."
|
||||
}
|
||||
|
@ -66,6 +66,7 @@
|
||||
"MoveToFolderMessage": "Não pode mover a pasta para a sua subpasta",
|
||||
"New": "Novo",
|
||||
"NewRoom": "Nova sala",
|
||||
"NoAccessRoomDescription": "Será redirecionado para As Minhas Salas automaticamente em 5 segundos.",
|
||||
"NoAccessRoomTitle": "Lamentamos, mas não tem acesso a esta sala.",
|
||||
"NoFilesHereYet": "Ainda não há ficheiros aqui",
|
||||
"Open": "Abrir",
|
||||
|
22
packages/client/public/locales/pt/JavascriptSdk.json
Normal file
22
packages/client/public/locales/pt/JavascriptSdk.json
Normal file
@ -0,0 +1,22 @@
|
||||
{
|
||||
"Ascending": "Ascendente",
|
||||
"CopyWindowCode": "Copiar código de incorporação da janela",
|
||||
"DataDisplay": "Configurações de exibição de dados",
|
||||
"Descending": "Descendente",
|
||||
"Destroy": "Destruir",
|
||||
"EnterCount": "Inserir contagem",
|
||||
"EnterHeight": "Insira a altura",
|
||||
"EnterId": "Digite o ID",
|
||||
"EnterPage": "Insira a página do número",
|
||||
"EnterWidth": "Insira a largura",
|
||||
"FolderId": "ID da pasta",
|
||||
"FrameId": "ID do quadro",
|
||||
"Header": "Cabeçalho",
|
||||
"ItemsCount": "Contagem de itens",
|
||||
"JavascriptSdk": "Javascript SDK",
|
||||
"Menu": "Cardápio",
|
||||
"Page": "Página",
|
||||
"SearchTerm": "Termo de pesquisa",
|
||||
"SortOrder": "Ordem de classificação",
|
||||
"WindowParameters": "Parâmetros da janela"
|
||||
}
|
@ -9,6 +9,6 @@
|
||||
"StorageAndUserHeader": "Os limites para o armazenamento e para o número de administradores/utilizadores com poder estão prestes a ser excedidos.",
|
||||
"StorageQuotaDescription": "Pode remover os ficheiros desnecessários ou <1>{{{clickHere}}</1> para encontrar um plano de preços mais adequado para o seu DocSpace.",
|
||||
"StorageQuotaHeader": "A capacidade de armazenamento do espaço está prestes a ser excedida: {{currentValue}} / {{maxValue}}",
|
||||
"UserQuotaDescription": "<1>{{clickHere}}</1> para encontrar um plano de preços melhor para o seu portal.",
|
||||
"UserQuotaDescription": "<1>{{clickHere}}</1> para encontrar um plano de preços melhor para o seu DocSpace.",
|
||||
"UserQuotaHeader": "O número de administradores/utilizadores com poder está prestes a ser excedido: {{currentValue}} / {{maxValue}}."
|
||||
}
|
||||
|
@ -3,5 +3,5 @@
|
||||
"ChangePricingPlan": "Schimbare abonament",
|
||||
"PlanStorageLimit": "O limită la abonamentul nou este <1>{{storageValue}}</1> de spațiu de stocare, și spațiul de stocare ocupat este de <1>{{currentStorageValue}}</1>.",
|
||||
"PlanUsersLimit": "Doriți să retrogradați echipa la <1>{{usersCount}}</1> administratori/utilizatori avansați, numărul curent astfel de utilizatori din spațiul dvs DocSpace este <1>{{currentUsersCount}}</1>.",
|
||||
"SaveOrChange": "Diminuați valoarea parametrului necesar sau păstraţi tariful actual."
|
||||
"SaveOrChange": "Eliminați nepotrivirea în parametrul de conflict pentru a continua sau mențineți abonamentul dvs actual."
|
||||
}
|
||||
|
22
packages/client/public/locales/ro/JavascriptSdk.json
Normal file
22
packages/client/public/locales/ro/JavascriptSdk.json
Normal file
@ -0,0 +1,22 @@
|
||||
{
|
||||
"Ascending": "Ascendent",
|
||||
"CopyWindowCode": "Copiați codul de încorporare a ferestrei",
|
||||
"DataDisplay": "Setări de afișare a datelor",
|
||||
"Descending": "Descendentă",
|
||||
"Destroy": "Distruge",
|
||||
"EnterCount": "Introduceți numărul",
|
||||
"EnterHeight": "Introduceți înălțimea",
|
||||
"EnterId": "Introduceți id",
|
||||
"EnterPage": "Introduceți pagina cu numărul",
|
||||
"EnterWidth": "Introduceți lățimea",
|
||||
"FolderId": "ID dosar",
|
||||
"FrameId": "ID cadru",
|
||||
"Header": "Antet",
|
||||
"ItemsCount": "Articolele contează",
|
||||
"JavascriptSdk": "Javascript sdk",
|
||||
"Menu": "Meniul",
|
||||
"Page": "Pagină",
|
||||
"SearchTerm": "Termen de căutare",
|
||||
"SortOrder": "Ordinea de sortare",
|
||||
"WindowParameters": "Parametrii ferestrei"
|
||||
}
|
@ -9,6 +9,6 @@
|
||||
"StorageAndUserHeader": "Limite de stocare pentru administratori/utilizatori avansați sunt pe punctul de a fi depăşiti.",
|
||||
"StorageQuotaDescription": "Puteţi elimina fişierele inutile sau <1>{{{clickHere}}</1> pentru a găsi un abonament mai potrivit pentru spaţiul dvs DocSpace.",
|
||||
"StorageQuotaHeader": "Cota spaţiului de stocare este pe punctul de a fi depăşită: {{currentValue}} / {{maxValue}}",
|
||||
"UserQuotaDescription": "<1>{{clickHere}}</1> pentru a găsi cea mai bună ofertă pentru portalul dvs.",
|
||||
"UserQuotaDescription": "<1>{{clickHere}}</1> pentru a găsi cea mai bună ofertă pentru spațiul dvs DocSpace.",
|
||||
"UserQuotaHeader": "Numărul maxim de administratori/utilizatori avansați este pe punctul de a fi depăşit. {{currentValue}} / {{maxValue}}."
|
||||
}
|
||||
|
22
packages/client/public/locales/ru/JavascriptSdk.json
Normal file
22
packages/client/public/locales/ru/JavascriptSdk.json
Normal file
@ -0,0 +1,22 @@
|
||||
{
|
||||
"Ascending": "По возрастанию",
|
||||
"CopyWindowCode": "Скопировать код встраивания окна",
|
||||
"DataDisplay": "Настройки отображения данных",
|
||||
"Descending": "По убыванию",
|
||||
"Destroy": "Уничтожить",
|
||||
"EnterCount": "Введите количество",
|
||||
"EnterHeight": "Введите высоту",
|
||||
"EnterId": "Введите идентификатор",
|
||||
"EnterPage": "Введите номер страницы",
|
||||
"EnterWidth": "Введите ширину",
|
||||
"FolderId": "Идентификатор папки",
|
||||
"FrameId": "Идентификатор кадра",
|
||||
"Header": "Заголовок",
|
||||
"ItemsCount": "Количество предметов",
|
||||
"JavascriptSdk": "Пакет SDK для Javascript",
|
||||
"Menu": "Меню",
|
||||
"Page": "Страница",
|
||||
"SearchTerm": "Искать термин",
|
||||
"SortOrder": "Порядок сортировки",
|
||||
"WindowParameters": "Параметры окна"
|
||||
}
|
@ -28,5 +28,6 @@
|
||||
"SetAppTitle": "Nakonfigurujte si aplikáciu autentifikátora",
|
||||
"SuccessDeactivate": "Váš účet bol úspešne deaktivovaný. Po 10 sekundách budete presmerovaní na <1>webovú stránku</1>.",
|
||||
"SuccessReactivate": "Váš účet bol úspešne znovu aktivovaný. Po 10 sekundách budete presmerovaní na <1>portál</1>.",
|
||||
"SuccessRemoved": "Váš účet bol úspešne odstránený. O 10 sekúnd budete presmerovaní na <1>webovú stránku</1>.",
|
||||
"WelcomeUser": "Vitajte na našom DocSpace!\nAk chcete začať, zaregistrujte sa alebo sa prihláste cez sociálne siete."
|
||||
}
|
||||
|
@ -37,13 +37,19 @@
|
||||
"EnableNotifications": "Vypnúť upozornenia",
|
||||
"ExcludeSubfolders": "Vylúčiť podpriečinky",
|
||||
"FavoritesEmptyContainerDescription": "Ak chcete označiť súbory ako obľúbené alebo ich odstrániť zo zoznamu, použite kontextovú ponuku.",
|
||||
"FileContents": "Obsah súboru",
|
||||
"FileRemoved": "Súbor bol presunutý do koša",
|
||||
"FileRenamed": "Dokument „{{oldTitle}}“ bol premenovaný na „{{newTitle}}“",
|
||||
"FillingFormRooms": "Formulár na vyplnenie",
|
||||
"Filter": "Filter",
|
||||
"FinalizeVersion": "Dokončiť verziu",
|
||||
"Folder": "Priečinok",
|
||||
"FolderRemoved": "Priečinok bol presunutý do koša",
|
||||
"FolderRenamed": "Priečinok '{{folderTitle}}' bol premenovaný na '{{newFoldedTitle}}'",
|
||||
"Forms": "Formuláre",
|
||||
"FormsTemplates": "Šablóny formulárov",
|
||||
"GoToMyRooms": "Prejdite do Moje miestnosti",
|
||||
"GoToPersonal": "Prejdite do Moje dokumenty",
|
||||
"Images": "Obrázky",
|
||||
"LinkForPortalUsers": "Odkaz pre užívateľov portálu",
|
||||
"MarkAsFavorite": "Označiť ako obľúbené",
|
||||
@ -54,10 +60,17 @@
|
||||
"MoveItems": "<strong>{{qty}}</strong> prvkov bolo presunutých",
|
||||
"MoveOrCopy": "Presunúť alebo Kopírovať",
|
||||
"MoveTo": "Presunúť do",
|
||||
"MoveToArchive": "Presunúť do archívu",
|
||||
"MoveToFolderMessage": "Priečinok nemôžete presunúť do jeho podpriečinka",
|
||||
"New": "Nový",
|
||||
"NewRoom": "Nová miestnosť",
|
||||
"NoAccessRoomDescription": "O 5 sekúnd budete automaticky presmerovaní na Moje miestnosti.",
|
||||
"NoAccessRoomTitle": "Do tejto miestnosti bohužiaľ nemáte prístup.",
|
||||
"NoFilesHereYet": "Zatiaľ tu nie sú žiadne súbory",
|
||||
"Open": "Otvoriť",
|
||||
"OpenLocation": "Otvoriť umiestnenie",
|
||||
"Pin": "Pripnúť",
|
||||
"PinToTop": "Pripnúť hore",
|
||||
"Presentation": "Prezentácia",
|
||||
"PrivateRoomDescriptionEncrypted": "Šifrované úpravy a spolupráca v reálnom čase.",
|
||||
"PrivateRoomDescriptionSafest": "Najbezpečnejšie úložisko pre docx, xlsx a pptx .",
|
||||
@ -65,10 +78,23 @@
|
||||
"PrivateRoomDescriptionUnbreakable": "Neprelomiteľný algoritmus AES-256.",
|
||||
"PrivateRoomHeader": "Vitajte v súkromnej miestnosti ONLYOFFICE, kde je každý vami zadaný symbol šifrovaný",
|
||||
"PrivateRoomSupport": "Práca v súkromnej miestnosti je k dispozícii prostredníctvom počítačovej aplikácie {{organizationName}}. <3>Pokyny</3>",
|
||||
"RecentEmptyContainerDescription": "V tejto časti sa zobrazia vaše naposledy zobrazené alebo upravené dokumenty.",
|
||||
"RecycleBinAction": "Vyprázdniť smetný kôš",
|
||||
"RemoveFromFavorites": "Odstrániť z obľúbených",
|
||||
"RemoveFromList": "Odstrániť zo zoznamu",
|
||||
"RemovedFromFavorites": "Odstránené z obľúbených",
|
||||
"Rename": "Premenovať",
|
||||
"RestoreAll": "Obnoviť všetko",
|
||||
"RoomCreated": "Miestnosť vytvorená",
|
||||
"RoomEmptyContainerDescription": "Prosím vytvorte prvú miestnosť.",
|
||||
"RoomEmptyContainerDescriptionUser": "Tu sa zobrazia miestnosti, ktoré s vami niekto zdieľa.",
|
||||
"RoomNotificationsDisabled": "Upozornenia o miestnosti sú vypnuté",
|
||||
"RoomNotificationsEnabled": "Upozornenia o miestnosti sú zapnuté",
|
||||
"RoomPinned": "Miestnosť je pripnutá",
|
||||
"RoomRemoved": "Miestnosť bola odstránená",
|
||||
"RoomUnpinned": "Miestnosť je odopnutá",
|
||||
"RoomsRemoved": "Miestnosti boli odstránené",
|
||||
"SearchByContent": "Vyhľadávanie podľa obsahu súboru",
|
||||
"SendByEmail": "Poslať e-mailom",
|
||||
"Share": "Zdieľať",
|
||||
"ShowVersionHistory": "Zobraziť históriu verzií",
|
||||
@ -77,9 +103,15 @@
|
||||
"TooltipElementsCopyMessage": "Kopírovať prvky {{element}}",
|
||||
"TooltipElementsMoveMessage": "Presunúť prvky {{element}}",
|
||||
"TrashEmptyDescription": "Do sekcie 'Kôš' sa presúvajú všetky zmazané súbory. V prípade chyby ich môžete obnoviť. Ak zmažete súbory zo sekcie 'Kôš', tak ich nebudete vedieť obnoviť.",
|
||||
"TrashErasureWarning": "Položky v smetnom koši sa automaticky vymažú po 30 dňoch.",
|
||||
"UnarchivedRoomAction": "Miestnosť '{{name}}' bola rozbalená z archívu.",
|
||||
"UnarchivedRoomsAction": "Miestnosti nie sú archivované.",
|
||||
"UnblockVersion": "Odblokovať/nahlásiť sa",
|
||||
"Unpin": "Odopnúť",
|
||||
"VersionBadge": "V.{{version}}",
|
||||
"VersionHistory": "História verzií",
|
||||
"ViewList": "Zoznam",
|
||||
"ViewTiles": "Dlaždice"
|
||||
"ViewOnlyRooms": "Iba prezeranie",
|
||||
"ViewTiles": "Dlaždice",
|
||||
"WithSubfolders": "S podpriečinkami"
|
||||
}
|
||||
|
22
packages/client/public/locales/sk/JavascriptSdk.json
Normal file
22
packages/client/public/locales/sk/JavascriptSdk.json
Normal file
@ -0,0 +1,22 @@
|
||||
{
|
||||
"Ascending": "Stúpajúca",
|
||||
"CopyWindowCode": "Kopírovať kód na vloženie okna",
|
||||
"DataDisplay": "Nastavenia zobrazovania údajov",
|
||||
"Descending": "Zostupne",
|
||||
"Destroy": "Zničiť",
|
||||
"EnterCount": "Zadajte počet",
|
||||
"EnterHeight": "Zadajte výšku",
|
||||
"EnterId": "Zadajte ID",
|
||||
"EnterPage": "Zadajte stránku s číslom",
|
||||
"EnterWidth": "Zadajte šírku",
|
||||
"FolderId": "ID priečinka",
|
||||
"FrameId": "ID rámu",
|
||||
"Header": "Hlavička",
|
||||
"ItemsCount": "Položky sa počítajú",
|
||||
"JavascriptSdk": "Javascript sdk",
|
||||
"Menu": "Ponuka",
|
||||
"Page": "Strana",
|
||||
"SearchTerm": "Hľadaný výraz",
|
||||
"SortOrder": "Zoradiť objednávku",
|
||||
"WindowParameters": "Parametre okna"
|
||||
}
|
@ -5,6 +5,10 @@
|
||||
"RequestActivation": "Požiadať o aktiváciu ešte raz",
|
||||
"RoomQuotaDescription": "Miestnosti, ktore nepotrebujete môžete archivovať alebo <1>{{clickHere}}</1> nájsť lepší plán pre svoj DocSpace.",
|
||||
"RoomQuotaHeader": "Počet miestností bude čoskoro prekročený: {{currentValue}} / {{maxValue}}",
|
||||
"StorageAndRoomHeader": "Limity úložísk a miestností budú čoskoro prekročené.",
|
||||
"StorageAndUserHeader": "Objem úložísk a maximálny počet administrátorov/pokročilých používateľov budú čoskoro prekročené.",
|
||||
"StorageQuotaDescription": "Môžete odstrániť súbory, ktore nepotrebujete alebo <1>{{clickHere}}</1> nájsť lepší plán pre svoj DocSpace.",
|
||||
"StorageQuotaHeader": "Veľkosť úložného priestoru bude čoskoro prekročená: {{currentValue}} / {{maxValue}}"
|
||||
"StorageQuotaHeader": "Veľkosť úložného priestoru bude čoskoro prekročená: {{currentValue}} / {{maxValue}}",
|
||||
"UserQuotaDescription": "<1>{{clickHere}}</1> a nájdite najlepší cenový plán pre váš DocSpace.",
|
||||
"UserQuotaHeader": "Maximálny počet administrátorov/pokročilých používateľov bude čoskoro prekročený: {{currentValue}} / {{maxValue}}."
|
||||
}
|
||||
|
@ -1,4 +1,5 @@
|
||||
{
|
||||
"ActionsWithFilesDescription": "Označenia vás budú upozorňovať na akcie, ako je nahrávanie, vytváranie a úprava súborov.",
|
||||
"Badges": "Menovky",
|
||||
"DailyFeed": "Denný informačný kanál DocSpace",
|
||||
"DailyFeedDescription": "Prečítajte si správy a udalosti z vášho DocSpace v dennom prehľade.",
|
||||
|
@ -5,9 +5,11 @@
|
||||
"BusinessExpired": "Platnosť vášho plánu {{planName}} vypršala dňa {{date}}",
|
||||
"BusinessFinalDateInfo": "Predplatné bude automaticky obnovené dňa {{finalDate}} s aktualizovanými cenami a špecifikáciami. Môžete ho zrušiť alebo zmeniť svoje fakturačné údaje na zákazníckom portáli Stripe.",
|
||||
"BusinessPlanPaymentOverdue": "Nie je možné pridávať nových používateľov a vytvárať nové miestnosti. Splátka plánu {{planName}} je po splatnosti.",
|
||||
"BusinessRequestDescription": "Cenové plány s viac ako {{peopleNumber}} administrátormi/pokročilými používateľmi sú dostupné len na požiadanie.",
|
||||
"BusinessSuggestion": "Prispôsobte si svoj plán {{planName}}",
|
||||
"BusinessTitle": "Používate plán {{planName}}",
|
||||
"BusinessUpdated": "Plán {{planName}} bol aktualizovaný",
|
||||
"ChooseNewPayer": "Vyberte si nového platiteľa",
|
||||
"ChooseNewPlan": "Chcete si vybrať nový tarifný program?",
|
||||
"ContactUs": "V prípade otázok týkajúcich sa predaja nás kontaktujte na",
|
||||
"DelayedPayment": "Oneskorená platba za plán {{planName}} zo dňa {{date}}",
|
||||
@ -15,11 +17,16 @@
|
||||
"ErrorNotification": "Aktualizácia tarifného plánu zlyhala. Skúste to znova neskôr alebo kontaktujte obchodné oddelenie.",
|
||||
"GracePeriodActivatedDescription": "Počas doby odkladu platby nemôžu administrátori vytvárať nové miestnosti ani pridávať nových používateľov. Po uplynutí doby odkladu platby bude DocSpace nedostupný až do zaplatenia.",
|
||||
"GracePeriodActivatedInfo": "Doba odkladu platby bude aktívna <1>od {{fromDate}} do {{byDate}}</1> (zostávajúce dni: {{delayDaysCount}}).",
|
||||
"InvalidEmailWithActiveSubscription": "Vaše predplatné zostáva aktívne, ale odporúčame vybrať nového platiteľa, ktorý bude mať prístup k nastaveniam predplatného v DocSpace.",
|
||||
"InvalidEmailWithActiveSubscriptionForAdmin": "Vaše predplatné zostáva aktívne, ale odporúčame vám kontaktovať vlastníka DocSpace a vybrať nového platcu.",
|
||||
"InvalidEmailWithoutActiveSubscription": "Odporúčame vybrať nového platiteľa, ktorý bude mať prístup k nastaveniam predplatného v DocSpace.",
|
||||
"InvalidEmailWithoutActiveSubscriptionByAdmin": "Odporúčame vám kontaktovať vlastníka DocSpace pred výberom nového platiteľa.",
|
||||
"ManagerTypesDescription": "Typy účtov administrátorov a ich oprávnenia",
|
||||
"Pay": "Zaplatiť",
|
||||
"Payer": "Platiteľ",
|
||||
"PayerDescription": "Tento používateľ má prístup k detailom platby a je jediným používateľom, ktorý môže nastaviť kvótu a vykonávať platby. Vlastník DocSpace, ako aj samotný správca platieb, môže rolu správcu platieb zmeniť pomocou zákazníckeho portálu Stripe.",
|
||||
"PaymentOverdue": "Nie je možné pridávať nových používateľov.",
|
||||
"PowerUserDescription": "Pokročilí používatelia môžu vytvárať a upravovať súbory v miestnosti, ale nemôžu vytvárať miestnosti, spravovať používateľov ani nemajú prístup k nastaveniam.",
|
||||
"PriceCalculation": "Vypočítajte svoju cenu",
|
||||
"QuotaPaidUserLimitError": "Bol dosiahnutý limit platených používateľov. <1>Platby</1>",
|
||||
"RenewSubscription": "Obnovte predplatné plánu {{planName}}",
|
||||
@ -32,5 +39,6 @@
|
||||
"UpgradePlan": "Aktualizovať plán",
|
||||
"UpgradePlanInfo": "Pridaním nových používateľov prekročíte maximálny počet členov v miestnosti povolený vaším aktuálnym cenovým plánom.",
|
||||
"UserNotFound": "Používateľ <1>{{email}}</1> sa nenašiel.",
|
||||
"UserNotFoundMatchingEmail": "Nepodarilo sa nám nájsť používateľa so zodpovedajúcou e-mailovou adresou Stripe.",
|
||||
"YourPrice": "Vaša cena"
|
||||
}
|
||||
|
@ -108,6 +108,7 @@
|
||||
"LogoDocsEditorEmbedded": "Logo pre hlavičku editorov - vložený režim",
|
||||
"LogoFavicon": "Favicon",
|
||||
"LogoLightSmall": "Logo pre hlavičku portálu",
|
||||
"LogoLogin": "Logo pre prihlasovaciu stránku a e-maily",
|
||||
"ManagementCategoryDataManagement": "Správa dat",
|
||||
"ManagementCategoryIntegration": "Integrácia",
|
||||
"ManagementCategorySecurity": "Bezpečnosť",
|
||||
|
@ -26,7 +26,9 @@
|
||||
"FolderTitleYandex": "Priečinok Yandex",
|
||||
"FolderTitlekDrive": "Priečinok kDrive",
|
||||
"Folders": "Priečinky",
|
||||
"FormTemplates": "Šablóny formulára",
|
||||
"LinkCopySuccess": "Odkaz bol skopírovaný do schránky",
|
||||
"LinkValidTime": "Tento odkaz je platný iba {{days_count}} dní.",
|
||||
"MobileAndroid": "Stiahnite si ONLYOFFICE Documents na Google Play",
|
||||
"MobileIos": "Stiahnite si ONLYOFFICE Documents na App Store",
|
||||
"MobileLinux": "Stiahnite si ONLYOFFICE Desktop Editors pre Linux",
|
||||
@ -46,6 +48,7 @@
|
||||
"RoleEditorDescription": "Operácie s existujúcimi súbormi: prezeranie, úprava, vypĺňanie formulárov, kontrola, komentovanie.",
|
||||
"RoleFormFiller": "Vyplnenie formulára",
|
||||
"RoleFormFillerDescription": "Operácie s existujúcimi súbormi: prezeranie, vypĺňanie formulárov, kontrola, komentovanie.",
|
||||
"RolePowerUserDescription": "Pokročilí používatelia môžu vytvárať a upravovať súbory v miestnosti, ale nemôžu vytvárať miestnosti, spravovať používateľov ani nemajú prístup k nastaveniam.",
|
||||
"RoleReviewer": "Recenzent",
|
||||
"RoleReviewerDescription": "Operácie s existujúcimi súbormi: prezeranie, kontrola, komentovanie.",
|
||||
"RoleRoomAdminDescription": "Administrátori miestností môžu vytvárať a spravovať priradené miestnosti, pozývať nových používateľov a prideľovať role, ktoré sú nižšie ako pozícia administrátora. Všetci administrátori majú prístup do sekcie Osobné.",
|
||||
|
@ -1,4 +1,5 @@
|
||||
{
|
||||
"CancelUpload": "Sťahovanie bolo prerušené. Niektoré súbory neboli načítane.",
|
||||
"EnterPassword": "Zadajte heslo",
|
||||
"HideInput": "Skryť",
|
||||
"Ready": "Hotovo",
|
||||
|
22
packages/client/public/locales/sl/JavascriptSdk.json
Normal file
22
packages/client/public/locales/sl/JavascriptSdk.json
Normal file
@ -0,0 +1,22 @@
|
||||
{
|
||||
"Ascending": "Naraščajoče",
|
||||
"CopyWindowCode": "Kopiraj kodo za vdelavo okna",
|
||||
"DataDisplay": "Nastavitve prikaza podatkov",
|
||||
"Descending": "Padajoče",
|
||||
"Destroy": "Uničiti",
|
||||
"EnterCount": "Vnesite štetje",
|
||||
"EnterHeight": "Vnesite višino",
|
||||
"EnterId": "Vnesite id",
|
||||
"EnterPage": "Vnesite številko strani",
|
||||
"EnterWidth": "Vnesite širino",
|
||||
"FolderId": "ID mape",
|
||||
"FrameId": "ID okvirja",
|
||||
"Header": "Glava",
|
||||
"ItemsCount": "Predmeti štejejo",
|
||||
"JavascriptSdk": "Javascript sdk",
|
||||
"Menu": "MENU",
|
||||
"Page": "Stran",
|
||||
"SearchTerm": "Iskalni izraz",
|
||||
"SortOrder": "Vrstni red",
|
||||
"WindowParameters": "Parametri oken"
|
||||
}
|
@ -9,6 +9,6 @@
|
||||
"StorageAndUserHeader": "Omejitve prostora za shranjevanje in število skrbnikov/naprednih uporabnikov bodo kmalu presežene.",
|
||||
"StorageQuotaDescription": "Nepotrebne datoteke lahko odstranite ali <1>{{clickHere}}</1> poiščete primernejši finančni paket za vaš DocSpace.",
|
||||
"StorageQuotaHeader": "Dovoljen prostor za shranjevanje bo kmalu presežen: {{currentValue}} / {{maxValue}}",
|
||||
"UserQuotaDescription": "<1>{{clickHere}}</1> Poiščite primernejši finančni načrt za svoj portal.",
|
||||
"UserQuotaDescription": "<1>{{clickHere}}</1> Poiščite primernejši finančni načrt za svoj DocSpace.",
|
||||
"UserQuotaHeader": "Število skrbnikov/naprednih uporabnikov bo kmalu preseženo: {{currentValue}} / {{maxValue}}."
|
||||
}
|
||||
|
22
packages/client/public/locales/tr/JavascriptSdk.json
Normal file
22
packages/client/public/locales/tr/JavascriptSdk.json
Normal file
@ -0,0 +1,22 @@
|
||||
{
|
||||
"Ascending": "Artan",
|
||||
"CopyWindowCode": "Pencere yerleştirme kodunu kopyala",
|
||||
"DataDisplay": "Veri görüntüleme ayarları",
|
||||
"Descending": "Azalan",
|
||||
"Destroy": "Yıkmak",
|
||||
"EnterCount": "Sayı girin",
|
||||
"EnterHeight": "Yüksekliği girin",
|
||||
"EnterId": "Kimliği girin",
|
||||
"EnterPage": "Numara sayfasını girin",
|
||||
"EnterWidth": "Genişliği girin",
|
||||
"FolderId": "Klasör kimliği",
|
||||
"FrameId": "Çerçeve kimliği",
|
||||
"Header": "Başlık",
|
||||
"ItemsCount": "Ürün sayısı",
|
||||
"JavascriptSdk": "Javascript SDK'sı",
|
||||
"Menu": "Menü",
|
||||
"Page": "Sayfa",
|
||||
"SearchTerm": "Arama terimi",
|
||||
"SortOrder": "Sıralama düzeni",
|
||||
"WindowParameters": "Pencere parametreleri"
|
||||
}
|
22
packages/client/public/locales/uk-UA/JavascriptSdk.json
Normal file
22
packages/client/public/locales/uk-UA/JavascriptSdk.json
Normal file
@ -0,0 +1,22 @@
|
||||
{
|
||||
"Ascending": "Висхідний",
|
||||
"CopyWindowCode": "Скопіюйте код вбудовування вікна",
|
||||
"DataDisplay": "Налаштування відображення даних",
|
||||
"Descending": "Спускається",
|
||||
"Destroy": "Знищити",
|
||||
"EnterCount": "Введіть кількість",
|
||||
"EnterHeight": "Введіть висоту",
|
||||
"EnterId": "Введіть id",
|
||||
"EnterPage": "Введіть номер сторінки",
|
||||
"EnterWidth": "Введіть ширину",
|
||||
"FolderId": "Ідентифікатор папки",
|
||||
"FrameId": "Ідентифікатор кадру",
|
||||
"Header": "Заголовок",
|
||||
"ItemsCount": "Кількість елементів",
|
||||
"JavascriptSdk": "Javascript SDK",
|
||||
"Menu": "Меню",
|
||||
"Page": "Сторінка",
|
||||
"SearchTerm": "Пошуковий термін",
|
||||
"SortOrder": "Порядок сортування",
|
||||
"WindowParameters": "Параметри вікна"
|
||||
}
|
@ -9,6 +9,6 @@
|
||||
"StorageAndUserHeader": "Обмеження сховища та обмеження для адміністраторів / досвідчених користувачів скоро буде перевищено.",
|
||||
"StorageQuotaDescription": "Ви можете видалити непотрібні файли, або <1>{{clickHere}}</1>, щоб знайти більш підходящий тарифний план для вашого DocSpace.",
|
||||
"StorageQuotaHeader": "Обсяг сховища скоро буде перевищено: {{currentValue}}/{{maxValue}}",
|
||||
"UserQuotaDescription": "<1>{{clickHere}}</1>, щоб знайти кращий тарифний план для вашого порталу.",
|
||||
"UserQuotaDescription": "<1>{{clickHere}}</1>, щоб знайти кращий тарифний план для вашого DocSpace.",
|
||||
"UserQuotaHeader": "Кількість адміністраторів / досвідчених користувачів скоро буде перевищено: {{currentValue}}/{{maxValue}}."
|
||||
}
|
||||
|
22
packages/client/public/locales/vi/JavascriptSdk.json
Normal file
22
packages/client/public/locales/vi/JavascriptSdk.json
Normal file
@ -0,0 +1,22 @@
|
||||
{
|
||||
"Ascending": "Tăng dần",
|
||||
"CopyWindowCode": "Sao chép mã nhúng cửa sổ",
|
||||
"DataDisplay": "Cài đặt hiển thị dữ liệu",
|
||||
"Descending": "Giảm dần",
|
||||
"Destroy": "Hủy hoại",
|
||||
"EnterCount": "Nhập số lượng",
|
||||
"EnterHeight": "Nhập chiều cao",
|
||||
"EnterId": "Nhập ID",
|
||||
"EnterPage": "Nhập số trang",
|
||||
"EnterWidth": "Nhập chiều rộng",
|
||||
"FolderId": "ID thư mục",
|
||||
"FrameId": "Id khung",
|
||||
"Header": "Tiêu đề",
|
||||
"ItemsCount": "Số lượng mặt hàng",
|
||||
"JavascriptSdk": "Sdk Javascript",
|
||||
"Menu": "Thực đơn",
|
||||
"Page": "Trắng",
|
||||
"SearchTerm": "Cụm từ tìm kiếm",
|
||||
"SortOrder": "Thứ tự sắp xếp",
|
||||
"WindowParameters": "Thông số cửa sổ"
|
||||
}
|
22
packages/client/public/locales/zh-CN/JavascriptSdk.json
Normal file
22
packages/client/public/locales/zh-CN/JavascriptSdk.json
Normal file
@ -0,0 +1,22 @@
|
||||
{
|
||||
"Ascending": "上升",
|
||||
"CopyWindowCode": "复制窗口嵌入代码",
|
||||
"DataDisplay": "数据显示设置",
|
||||
"Descending": "降序",
|
||||
"Destroy": "破坏",
|
||||
"EnterCount": "输入计数",
|
||||
"EnterHeight": "输入身高",
|
||||
"EnterId": "输入ID",
|
||||
"EnterPage": "输入号码页面",
|
||||
"EnterWidth": "输入宽度",
|
||||
"FolderId": "文件夹编号",
|
||||
"FrameId": "框架编号",
|
||||
"Header": "头",
|
||||
"ItemsCount": "项目计数",
|
||||
"JavascriptSdk": "Javascript SDK",
|
||||
"Menu": "菜单",
|
||||
"Page": "页",
|
||||
"SearchTerm": "搜索词",
|
||||
"SortOrder": "排序",
|
||||
"WindowParameters": "窗口参数"
|
||||
}
|
@ -9,6 +9,6 @@
|
||||
"StorageAndUserHeader": "存储和管理员/高级用户的数量限制即将被超过。",
|
||||
"StorageQuotaDescription": "您可移除不需要的文件或<1>{{clickHere}}</1>了解更适合您协作空间的定价版本。",
|
||||
"StorageQuotaHeader": "存储空间数量即将超出限制:{{currentValue}}/{{maxValue}}",
|
||||
"UserQuotaDescription": "<1>{{clickHere}}</1>,选择更适合您的定价方案。",
|
||||
"UserQuotaDescription": "<1>{{clickHere}}</1>,选择更合适的协作空间定价方案。",
|
||||
"UserQuotaHeader": "管理员/高级用户的数量限制即将被超过。 {{currentValue}} / {{maxValue}}"
|
||||
}
|
||||
|
@ -174,7 +174,7 @@ const ChangePortalOwnerDialog = ({
|
||||
<Text className="display-name" noSelect title={displayName}>
|
||||
{displayName}
|
||||
</Text>
|
||||
<Text className="owner" noSelect title={"Owner"}>
|
||||
<Text className="owner" noSelect title={t("Common:Owner")}>
|
||||
{t("Common:Owner")}
|
||||
</Text>
|
||||
</div>
|
||||
|
@ -37,7 +37,6 @@ const FilesListRow = ({
|
||||
fontSize="13px"
|
||||
fontWeight="400"
|
||||
name={`${index}`}
|
||||
label=""
|
||||
isChecked={isChecked}
|
||||
onClick={onFileClick}
|
||||
value=""
|
||||
|
@ -70,7 +70,6 @@ class PureVersionHistoryPanel extends React.Component {
|
||||
className="loader-version-history"
|
||||
height="28"
|
||||
width="688"
|
||||
title="version-history-header-loader"
|
||||
/>
|
||||
)}
|
||||
</StyledHeaderContent>
|
||||
|
@ -96,6 +96,7 @@ const TfaActivationForm = withLoader((props) => {
|
||||
loginWithCodeAndCookie,
|
||||
history,
|
||||
location,
|
||||
currentColorScheme,
|
||||
} = props;
|
||||
|
||||
const [code, setCode] = useState("");
|
||||
@ -153,15 +154,27 @@ const TfaActivationForm = withLoader((props) => {
|
||||
portal security. Configure your authenticator application to
|
||||
continue work on the portal. For example you could use Google
|
||||
Authenticator for
|
||||
<Link isHovered href={props.tfaAndroidAppUrl} target="_blank">
|
||||
<Link
|
||||
color={currentColorScheme?.main?.accent}
|
||||
href={props.tfaAndroidAppUrl}
|
||||
target="_blank"
|
||||
>
|
||||
Android
|
||||
</Link>
|
||||
and{" "}
|
||||
<Link isHovered href={props.tfaIosAppUrl} target="_blank">
|
||||
<Link
|
||||
color={currentColorScheme?.main?.accent}
|
||||
href={props.tfaIosAppUrl}
|
||||
target="_blank"
|
||||
>
|
||||
iOS
|
||||
</Link>{" "}
|
||||
or Authenticator for{" "}
|
||||
<Link isHovered href={props.tfaWinAppUrl} target="_blank">
|
||||
<Link
|
||||
color={currentColorScheme?.main?.accent}
|
||||
href={props.tfaWinAppUrl}
|
||||
target="_blank"
|
||||
>
|
||||
Windows Phone
|
||||
</Link>{" "}
|
||||
.
|
||||
@ -252,7 +265,7 @@ const TfaActivationWrapper = (props) => {
|
||||
const [qrCode, setQrCode] = useState("");
|
||||
const [error, setError] = useState(null);
|
||||
|
||||
useEffect(async () => {
|
||||
const fetchData = async () => {
|
||||
try {
|
||||
setIsLoading(true);
|
||||
const confirmKey = linkData.confirmHeader;
|
||||
@ -265,9 +278,12 @@ const TfaActivationWrapper = (props) => {
|
||||
setError(e.error);
|
||||
toastr.error(e);
|
||||
}
|
||||
|
||||
setIsLoaded(true);
|
||||
setIsLoading(false);
|
||||
};
|
||||
|
||||
useEffect(() => {
|
||||
fetchData();
|
||||
}, []);
|
||||
|
||||
return error ? (
|
||||
@ -286,6 +302,7 @@ export default inject(({ auth, confirm }) => ({
|
||||
tfaAndroidAppUrl: auth.tfaStore.tfaAndroidAppUrl,
|
||||
tfaIosAppUrl: auth.tfaStore.tfaIosAppUrl,
|
||||
tfaWinAppUrl: auth.tfaStore.tfaWinAppUrl,
|
||||
currentColorScheme: auth.settingsStore.currentColorScheme,
|
||||
}))(
|
||||
withRouter(
|
||||
withTranslation(["Confirm", "Common"])(observer(TfaActivationWrapper))
|
||||
|
@ -161,7 +161,7 @@ const TfaAuthForm = withLoader((props) => {
|
||||
const TfaAuthFormWrapper = (props) => {
|
||||
const { setIsLoaded, setIsLoading } = props;
|
||||
|
||||
useEffect(async () => {
|
||||
useEffect(() => {
|
||||
setIsLoaded(true);
|
||||
setIsLoading(false);
|
||||
}, []);
|
||||
|
@ -89,7 +89,7 @@ const History = ({
|
||||
return { ...fetchedHistory, feedsByDays: parsedFeeds };
|
||||
};
|
||||
|
||||
useEffect(async () => {
|
||||
useEffect(() => {
|
||||
if (!isMount.current) return;
|
||||
|
||||
if (selection.history) {
|
||||
@ -101,7 +101,8 @@ const History = ({
|
||||
}, [selection]);
|
||||
|
||||
if (showLoader) return <Loaders.InfoPanelViewLoader view="history" />;
|
||||
if (!history || history?.feeds.length === 0) return <NoHistory t={t} />;
|
||||
if (!history) return <></>;
|
||||
if (history?.feeds?.length === 0) return <NoHistory t={t} />;
|
||||
|
||||
return (
|
||||
<>
|
||||
|
@ -164,7 +164,6 @@ const FilesRowContent = ({
|
||||
className="row-content-text"
|
||||
fontSize="12px"
|
||||
fontWeight={400}
|
||||
title=""
|
||||
truncate={true}
|
||||
>
|
||||
{isRooms
|
||||
|
@ -9,15 +9,17 @@ const SizeCell = ({ t, item, sideColor }) => {
|
||||
filesCount,
|
||||
foldersCount,
|
||||
} = item;
|
||||
const date = fileExst || contentLength ? contentLength : "—";
|
||||
|
||||
return (
|
||||
<StyledText
|
||||
color={sideColor}
|
||||
fontSize="12px"
|
||||
fontWeight={600}
|
||||
title=""
|
||||
title={date}
|
||||
truncate
|
||||
>
|
||||
{fileExst || contentLength ? contentLength : "—"}
|
||||
{date}
|
||||
</StyledText>
|
||||
);
|
||||
};
|
||||
|
@ -49,10 +49,17 @@ const TypeCell = ({ t, item, sideColor }) => {
|
||||
|
||||
const type = item.isRoom ? getRoomType() : getItemType();
|
||||
const Exst = fileExst ? fileExst.slice(1).toUpperCase() : "";
|
||||
const data = `${type} ${Exst}`;
|
||||
|
||||
return (
|
||||
<StyledText fontSize="12px" fontWeight="600" color={sideColor} truncate>
|
||||
{type} {Exst}
|
||||
<StyledText
|
||||
fontSize="12px"
|
||||
fontWeight="600"
|
||||
color={sideColor}
|
||||
truncate
|
||||
title={data}
|
||||
>
|
||||
{data}
|
||||
</StyledText>
|
||||
);
|
||||
};
|
||||
|
@ -48,7 +48,6 @@ const BackupListBody = ({
|
||||
fontSize="13px"
|
||||
fontWeight="400"
|
||||
value=""
|
||||
label=""
|
||||
isChecked={isChecked}
|
||||
onClick={onSelectFile}
|
||||
name={`${index}_${fileId}`}
|
||||
|
@ -76,43 +76,22 @@ const Preview = styled(Box)`
|
||||
const PortalIntegration = (props) => {
|
||||
const { t, setDocumentTitle } = props;
|
||||
|
||||
setDocumentTitle(t("PortalIntegration"));
|
||||
setDocumentTitle(t("JavascriptSdk"));
|
||||
|
||||
const scriptUrl = `${window.location.origin}/static/scripts/api.js`;
|
||||
|
||||
const dataSortBy = [
|
||||
{ key: "DateAndTime", label: "Last modified date", default: true },
|
||||
{ key: "AZ", label: "Title" },
|
||||
{ key: "Type", label: "Type" },
|
||||
{ key: "Size", label: "Size" },
|
||||
{ key: "DateAndTimeCreation", label: "Creation date" },
|
||||
{ key: "Author", label: "Author" },
|
||||
];
|
||||
|
||||
const dataFilterType = [
|
||||
{ key: 0, label: "None", default: true },
|
||||
{ key: 1, label: "Files" },
|
||||
{ key: 2, label: "Folders" },
|
||||
{ key: 3, label: "Documents" },
|
||||
{ key: 4, label: "Presentations" },
|
||||
{ key: 5, label: "Spreadsheets" },
|
||||
{ key: 7, label: "Images" },
|
||||
{ key: 8, label: "By user" },
|
||||
{ key: 9, label: "By department" },
|
||||
{ key: 10, label: "Archive" },
|
||||
{ key: 11, label: "By Extension" },
|
||||
{ key: 12, label: "Media" },
|
||||
{ key: "DateAndTime", label: t("Common:LastModifiedDate"), default: true },
|
||||
{ key: "AZ", label: t("Common:Title") },
|
||||
{ key: "Type", label: t("Common:Type") },
|
||||
{ key: "Size", label: t("Common:Size") },
|
||||
{ key: "DateAndTimeCreation", label: t("Files:ByCreation") },
|
||||
{ key: "Author", label: t("Files:ByAuthor") },
|
||||
];
|
||||
|
||||
const dataSortOrder = [
|
||||
{ key: "descending", label: "Descending", default: true },
|
||||
{ key: "ascending", label: "Ascending" },
|
||||
];
|
||||
|
||||
const dataDisplayType = [
|
||||
{ key: "row", label: "Row", default: true },
|
||||
{ key: "table", label: "Table" },
|
||||
{ key: "tile", label: "Tile" },
|
||||
{ key: "descending", label: t("Descending"), default: true },
|
||||
{ key: "ascending", label: t("Ascending") },
|
||||
];
|
||||
|
||||
const [config, setConfig] = useState({
|
||||
@ -127,8 +106,6 @@ const PortalIntegration = (props) => {
|
||||
|
||||
const [sortBy, setSortBy] = useState(dataSortBy[0]);
|
||||
const [sortOrder, setSortOrder] = useState(dataSortOrder[0]);
|
||||
const [filterType, setFilterType] = useState(dataFilterType[0]);
|
||||
const [displayType, setDisplayType] = useState(dataDisplayType[0]);
|
||||
const [withSubfolders, setWithSubfolders] = useState(false);
|
||||
|
||||
const params = objectToGetParams(config);
|
||||
@ -269,141 +246,119 @@ const PortalIntegration = (props) => {
|
||||
return (
|
||||
<>
|
||||
{isMobile ? (
|
||||
<BreakpointWarning sectionName={t("Settings:Branding")} />
|
||||
<BreakpointWarning sectionName={t("JavascriptSdk")} />
|
||||
) : (
|
||||
<Container>
|
||||
<Controls>
|
||||
<Heading level={1} size="small">
|
||||
Frame options
|
||||
{t("WindowParameters")}
|
||||
</Heading>
|
||||
<ControlsGroup>
|
||||
<Label className="label" text="Frame id" />
|
||||
<Label className="label" text={t("FrameId")} />
|
||||
<TextInput
|
||||
scale={true}
|
||||
onChange={onChangeFrameId}
|
||||
placeholder="Frame id"
|
||||
placeholder={t("EnterId")}
|
||||
value={config.frameId}
|
||||
/>
|
||||
</ControlsGroup>
|
||||
<ControlsGroup>
|
||||
<Label className="label" text="Frame width" />
|
||||
<Label className="label" text={t("EmbeddingPanel:Width")} />
|
||||
<TextInput
|
||||
scale={true}
|
||||
onChange={onChangeWidth}
|
||||
placeholder="Frame width"
|
||||
placeholder={t("EnterWidth")}
|
||||
value={config.width}
|
||||
/>
|
||||
</ControlsGroup>
|
||||
<ControlsGroup>
|
||||
<Label className="label" text="Frame height" />
|
||||
<Label className="label" text={t("EmbeddingPanel:Height")} />
|
||||
<TextInput
|
||||
scale={true}
|
||||
onChange={onChangeHeight}
|
||||
placeholder="Frame height"
|
||||
placeholder={t("EnterHeight")}
|
||||
value={config.height}
|
||||
/>
|
||||
</ControlsGroup>
|
||||
{/* <ControlsGroup>
|
||||
<Label className="label" text="Display mode: " />
|
||||
<ComboBox
|
||||
scale={true}
|
||||
onSelect={onChangeDisplayType}
|
||||
options={dataDisplayType}
|
||||
scaled={true}
|
||||
selectedOption={displayType}
|
||||
displaySelectedOption
|
||||
/>
|
||||
</ControlsGroup> */}
|
||||
<Checkbox
|
||||
label="Show header"
|
||||
label={t("Header")}
|
||||
onChange={onChangeShowHeader}
|
||||
isChecked={config.showHeader}
|
||||
/>
|
||||
<Checkbox
|
||||
label="Show title"
|
||||
label={t("Common:Title")}
|
||||
onChange={onChangeShowTitle}
|
||||
isChecked={config.showTitle}
|
||||
/>
|
||||
<Checkbox
|
||||
label="Show article"
|
||||
label={t("Menu")}
|
||||
onChange={onChangeShowArticle}
|
||||
isChecked={config.showArticle}
|
||||
/>
|
||||
<Checkbox
|
||||
label="Show filter"
|
||||
label={t("Files:Filter")}
|
||||
onChange={onChangeShowFilter}
|
||||
isChecked={config.showFilter}
|
||||
/>
|
||||
<Heading level={1} size="small">
|
||||
Filter options
|
||||
{t("DataDisplay")}
|
||||
</Heading>
|
||||
<ControlsGroup>
|
||||
<Label className="label" text="Folder id" />
|
||||
<Label className="label" text={t("FolderId")} />
|
||||
<TextInput
|
||||
scale={true}
|
||||
onChange={onChangeFolderId}
|
||||
placeholder="Folder id"
|
||||
placeholder={t("EnterId")}
|
||||
value={config.folder}
|
||||
/>
|
||||
</ControlsGroup>
|
||||
<ControlsGroup>
|
||||
<Label className="label" text="Items count" />
|
||||
<Label className="label" text={t("ItemsCount")} />
|
||||
<TextInput
|
||||
scale={true}
|
||||
onChange={onChangeCount}
|
||||
placeholder="Items count"
|
||||
placeholder={t("EnterCount")}
|
||||
value={config.count}
|
||||
/>
|
||||
</ControlsGroup>
|
||||
<ControlsGroup>
|
||||
<Label className="label" text="Page" />
|
||||
<Label className="label" text={t("Page")} />
|
||||
<TextInput
|
||||
scale={true}
|
||||
onChange={onChangePage}
|
||||
placeholder="Page"
|
||||
placeholder={t("EnterPage")}
|
||||
value={config.page}
|
||||
/>
|
||||
</ControlsGroup>
|
||||
<ControlsGroup>
|
||||
<Label className="label" text="Search term" />
|
||||
<Label className="label" text={t("SearchTerm")} />
|
||||
<Box
|
||||
style={{ flexDirection: "row", display: "flex", gap: "16px" }}
|
||||
>
|
||||
<TextInput
|
||||
scale={true}
|
||||
onChange={onChangeSearch}
|
||||
placeholder="Search term"
|
||||
placeholder={t("Common:Search")}
|
||||
value={config.search}
|
||||
/>
|
||||
<Checkbox
|
||||
label="With subfolders"
|
||||
label={t("Files:WithSubfolders")}
|
||||
onChange={onChangeWithSubfolders}
|
||||
isChecked={withSubfolders}
|
||||
/>
|
||||
</Box>
|
||||
</ControlsGroup>
|
||||
<ControlsGroup>
|
||||
<Label className="label" text="Author" />
|
||||
<Label className="label" text={t("Files:ByAuthor")} />
|
||||
<TextInput
|
||||
scale={true}
|
||||
onChange={onChangeAuthor}
|
||||
placeholder="Author"
|
||||
placeholder={t("Common:EnterName")}
|
||||
value={config.authorType}
|
||||
/>
|
||||
</ControlsGroup>
|
||||
<ControlsGroup>
|
||||
<Label className="label" text="Filter type:" />
|
||||
<ComboBox
|
||||
onSelect={onChangeFilterType}
|
||||
options={dataFilterType}
|
||||
scaled={true}
|
||||
selectedOption={filterType}
|
||||
displaySelectedOption
|
||||
directionY="top"
|
||||
/>
|
||||
</ControlsGroup>
|
||||
<ControlsGroup>
|
||||
<Label className="label" text="Sort by:" />
|
||||
<Label className="label" text={t("Common:SortBy")} />
|
||||
<ComboBox
|
||||
onSelect={onChangeSortBy}
|
||||
options={dataSortBy}
|
||||
@ -414,7 +369,7 @@ const PortalIntegration = (props) => {
|
||||
/>
|
||||
</ControlsGroup>
|
||||
<ControlsGroup>
|
||||
<Label className="label" text="Sort order:" />
|
||||
<Label className="label" text={t("SortOrder")} />
|
||||
<ComboBox
|
||||
onSelect={onChangeSortOrder}
|
||||
options={dataSortOrder}
|
||||
@ -428,7 +383,7 @@ const PortalIntegration = (props) => {
|
||||
<Preview>
|
||||
<Frame>
|
||||
<Box id={frameId} className="frameStyle">
|
||||
Frame content
|
||||
{t("Common:Preview")}
|
||||
</Box>
|
||||
</Frame>
|
||||
|
||||
@ -442,13 +397,13 @@ const PortalIntegration = (props) => {
|
||||
<Button
|
||||
primary
|
||||
size="normal"
|
||||
label="Destroy"
|
||||
label={t("Destroy")}
|
||||
onClick={destroyFrame}
|
||||
/>
|
||||
</Buttons>
|
||||
|
||||
<Heading level={1} size="xsmall">
|
||||
Paste this code block on page:
|
||||
{t("CopyWindowCode")}
|
||||
</Heading>
|
||||
|
||||
<Textarea value={codeBlock} />
|
||||
@ -467,4 +422,8 @@ export default inject(({ setup, auth }) => {
|
||||
theme,
|
||||
setDocumentTitle,
|
||||
};
|
||||
})(withTranslation(["Settings", "Common"])(observer(PortalIntegration)));
|
||||
})(
|
||||
withTranslation(["JavascriptSdk", "Files", "EmbeddingPanel", "Common"])(
|
||||
observer(PortalIntegration)
|
||||
)
|
||||
);
|
||||
|
@ -12,7 +12,7 @@ import UploadXML from "./sub-components/UploadXML";
|
||||
import { bindingOptions, nameIdOptions } from "./sub-components/constants";
|
||||
|
||||
const IdpSettings = (props) => {
|
||||
const { t } = useTranslation("SingleSignOn");
|
||||
const { t } = useTranslation(["SingleSignOn", "Settings"]);
|
||||
const {
|
||||
ssoBinding,
|
||||
enableSso,
|
||||
@ -40,7 +40,7 @@ const IdpSettings = (props) => {
|
||||
<SsoFormField
|
||||
labelText={t("CustomEntryButton")}
|
||||
name="spLoginLabel"
|
||||
placeholder="Single Sign-on"
|
||||
placeholder={t("Settings:SingleSignOn")}
|
||||
tabIndex={4}
|
||||
tooltipContent={t("CustomEntryTooltip")}
|
||||
value={spLoginLabel}
|
||||
|
@ -142,7 +142,7 @@ const StyledSsoPage = styled.div`
|
||||
width: 350px;
|
||||
}
|
||||
|
||||
p > div {
|
||||
.label > div {
|
||||
display: inline-flex;
|
||||
margin-left: 4px;
|
||||
}
|
||||
|
@ -1,456 +0,0 @@
|
||||
import React, { useState, useEffect } from "react";
|
||||
import { withTranslation } from "react-i18next";
|
||||
import styled from "styled-components";
|
||||
import Box from "@docspace/components/box";
|
||||
import TextInput from "@docspace/components/text-input";
|
||||
import Textarea from "@docspace/components/textarea";
|
||||
import Label from "@docspace/components/label";
|
||||
import Checkbox from "@docspace/components/checkbox";
|
||||
import Button from "@docspace/components/button";
|
||||
import ComboBox from "@docspace/components/combobox";
|
||||
import Heading from "@docspace/components/heading";
|
||||
import toastr from "@docspace/components/toast/toastr";
|
||||
import { tablet } from "@docspace/components/utils/device";
|
||||
import { objectToGetParams, loadScript } from "@docspace/common/utils";
|
||||
import { inject, observer } from "mobx-react";
|
||||
|
||||
const Controls = styled(Box)`
|
||||
width: 500px;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
gap: 16px;
|
||||
|
||||
@media ${tablet} {
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.label {
|
||||
min-width: fit-content;
|
||||
}
|
||||
`;
|
||||
|
||||
const ControlsGroup = styled(Box)`
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
gap: 8px;
|
||||
`;
|
||||
|
||||
const Frame = styled(Box)`
|
||||
margin-top: 16px;
|
||||
|
||||
> div {
|
||||
border: 1px dashed gray;
|
||||
border-radius: 3px;
|
||||
min-width: 100%;
|
||||
min-height: 400px;
|
||||
}
|
||||
`;
|
||||
|
||||
const Buttons = styled(Box)`
|
||||
margin-top: 16px;
|
||||
button {
|
||||
margin-right: 16px;
|
||||
}
|
||||
`;
|
||||
|
||||
const Container = styled(Box)`
|
||||
width: 100%;
|
||||
display: flex;
|
||||
gap: 16px;
|
||||
`;
|
||||
|
||||
const Preview = styled(Box)`
|
||||
width: 50%;
|
||||
flex-direction: row;
|
||||
|
||||
.frameStyle {
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
flex-wrap: wrap;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
}
|
||||
`;
|
||||
|
||||
const PortalIntegration = (props) => {
|
||||
const { t, setDocumentTitle } = props;
|
||||
|
||||
setDocumentTitle(`Portal integration`);
|
||||
|
||||
const scriptUrl = `${window.location.origin}/static/scripts/api.js`;
|
||||
|
||||
const dataSortBy = [
|
||||
{ key: "DateAndTime", label: "Last modified date", default: true },
|
||||
{ key: "AZ", label: "Title" },
|
||||
{ key: "Type", label: "Type" },
|
||||
{ key: "Size", label: "Size" },
|
||||
{ key: "DateAndTimeCreation", label: "Creation date" },
|
||||
{ key: "Author", label: "Author" },
|
||||
];
|
||||
|
||||
const dataFilterType = [
|
||||
{ key: 0, label: "None", default: true },
|
||||
{ key: 1, label: "Files" },
|
||||
{ key: 2, label: "Folders" },
|
||||
{ key: 3, label: "Documents" },
|
||||
{ key: 4, label: "Presentations" },
|
||||
{ key: 5, label: "Spreadsheets" },
|
||||
{ key: 7, label: "Images" },
|
||||
{ key: 8, label: "By user" },
|
||||
{ key: 9, label: "By department" },
|
||||
{ key: 10, label: "Archive" },
|
||||
{ key: 11, label: "By Extension" },
|
||||
{ key: 12, label: "Media" },
|
||||
];
|
||||
|
||||
const dataSortOrder = [
|
||||
{ key: "descending", label: "Descending", default: true },
|
||||
{ key: "ascending", label: "Ascending" },
|
||||
];
|
||||
|
||||
const dataDisplayType = [
|
||||
{ key: "row", label: "Row", default: true },
|
||||
{ key: "table", label: "Table" },
|
||||
{ key: "tile", label: "Tile" },
|
||||
];
|
||||
|
||||
const [config, setConfig] = useState({
|
||||
width: "100%",
|
||||
height: "400px",
|
||||
frameId: "ds-frame",
|
||||
showHeader: false,
|
||||
showTitle: true,
|
||||
showArticle: false,
|
||||
showFilter: false,
|
||||
});
|
||||
|
||||
const [sortBy, setSortBy] = useState(dataSortBy[0]);
|
||||
const [sortOrder, setSortOrder] = useState(dataSortOrder[0]);
|
||||
const [filterType, setFilterType] = useState(dataFilterType[0]);
|
||||
const [displayType, setDisplayType] = useState(dataDisplayType[0]);
|
||||
const [withSubfolders, setWithSubfolders] = useState(false);
|
||||
|
||||
const params = objectToGetParams(config);
|
||||
|
||||
const frameId = config.frameId || "ds-frame";
|
||||
|
||||
const destroyFrame = () => {
|
||||
DocSpace.destroyFrame();
|
||||
};
|
||||
|
||||
const loadFrame = () => {
|
||||
const script = document.getElementById("integration");
|
||||
|
||||
if (script) {
|
||||
destroyFrame();
|
||||
script.remove();
|
||||
}
|
||||
|
||||
const params = objectToGetParams(config);
|
||||
|
||||
loadScript(`${scriptUrl}${params}`, "integration");
|
||||
};
|
||||
|
||||
const onChangeWidth = (e) => {
|
||||
setConfig((config) => {
|
||||
return { ...config, width: e.target.value };
|
||||
});
|
||||
};
|
||||
|
||||
const onChangeHeight = (e) => {
|
||||
setConfig((config) => {
|
||||
return { ...config, height: e.target.value };
|
||||
});
|
||||
};
|
||||
|
||||
const onChangeFolderId = (e) => {
|
||||
setConfig((config) => {
|
||||
return { ...config, folder: e.target.value };
|
||||
});
|
||||
};
|
||||
|
||||
const onChangeFrameId = (e) => {
|
||||
setConfig((config) => {
|
||||
return { ...config, frameId: e.target.value };
|
||||
});
|
||||
};
|
||||
|
||||
const onChangeWithSubfolders = (e) => {
|
||||
setConfig((config) => {
|
||||
return { ...config, withSubfolders: !withSubfolders };
|
||||
});
|
||||
|
||||
setWithSubfolders(!withSubfolders);
|
||||
};
|
||||
|
||||
const onChangeSortBy = (item) => {
|
||||
setConfig((config) => {
|
||||
return { ...config, sortby: item.key };
|
||||
});
|
||||
|
||||
setSortBy(item);
|
||||
};
|
||||
|
||||
const onChangeSortOrder = (item) => {
|
||||
setConfig((config) => {
|
||||
return { ...config, sortorder: item.key };
|
||||
});
|
||||
|
||||
setSortOrder(item);
|
||||
};
|
||||
|
||||
const onChangeFilterType = (item) => {
|
||||
setConfig((config) => {
|
||||
return { ...config, filterType: item.key };
|
||||
});
|
||||
|
||||
setFilterType(item);
|
||||
};
|
||||
|
||||
const onChangeDisplayType = (item) => {
|
||||
setConfig((config) => {
|
||||
return { ...config, viewAs: item.key };
|
||||
});
|
||||
|
||||
setDisplayType(item);
|
||||
};
|
||||
|
||||
const onChangeShowHeader = (e) => {
|
||||
setConfig((config) => {
|
||||
return { ...config, showHeader: !config.showHeader };
|
||||
});
|
||||
};
|
||||
|
||||
const onChangeShowTitle = () => {
|
||||
setConfig((config) => {
|
||||
return { ...config, showTitle: !config.showTitle };
|
||||
});
|
||||
};
|
||||
|
||||
const onChangeShowArticle = (e) => {
|
||||
setConfig((config) => {
|
||||
return { ...config, showArticle: !config.showArticle };
|
||||
});
|
||||
};
|
||||
|
||||
const onChangeShowFilter = (e) => {
|
||||
setConfig((config) => {
|
||||
return { ...config, showFilter: !config.showFilter };
|
||||
});
|
||||
};
|
||||
|
||||
const onChangeCount = (e) => {
|
||||
setConfig((config) => {
|
||||
return { ...config, count: e.target.value };
|
||||
});
|
||||
};
|
||||
|
||||
const onChangePage = (e) => {
|
||||
setConfig((config) => {
|
||||
return { ...config, page: e.target.value };
|
||||
});
|
||||
};
|
||||
|
||||
const onChangeSearch = (e) => {
|
||||
setConfig((config) => {
|
||||
return { ...config, search: e.target.value };
|
||||
});
|
||||
};
|
||||
|
||||
const onChangeAuthor = (e) => {
|
||||
setConfig((config) => {
|
||||
return { ...config, authorType: e.target.value };
|
||||
});
|
||||
};
|
||||
|
||||
const codeBlock = `<div id="${frameId}">Fallback text</div>\n<script src="${scriptUrl}${params}"></script>`;
|
||||
|
||||
return (
|
||||
<Container>
|
||||
<Controls>
|
||||
<Heading level={1} size="small">
|
||||
Frame options
|
||||
</Heading>
|
||||
<ControlsGroup>
|
||||
<Label className="label" text="Frame id" />
|
||||
<TextInput
|
||||
scale={true}
|
||||
onChange={onChangeFrameId}
|
||||
placeholder="Frame id"
|
||||
value={config.frameId}
|
||||
/>
|
||||
</ControlsGroup>
|
||||
<ControlsGroup>
|
||||
<Label className="label" text="Frame width" />
|
||||
<TextInput
|
||||
scale={true}
|
||||
onChange={onChangeWidth}
|
||||
placeholder="Frame width"
|
||||
value={config.width}
|
||||
/>
|
||||
</ControlsGroup>
|
||||
<ControlsGroup>
|
||||
<Label className="label" text="Frame height" />
|
||||
<TextInput
|
||||
scale={true}
|
||||
onChange={onChangeHeight}
|
||||
placeholder="Frame height"
|
||||
value={config.height}
|
||||
/>
|
||||
</ControlsGroup>
|
||||
{/* <ControlsGroup>
|
||||
<Label className="label" text="Display mode: " />
|
||||
<ComboBox
|
||||
scale={true}
|
||||
onSelect={onChangeDisplayType}
|
||||
options={dataDisplayType}
|
||||
scaled={true}
|
||||
selectedOption={displayType}
|
||||
displaySelectedOption
|
||||
/>
|
||||
</ControlsGroup> */}
|
||||
<Checkbox
|
||||
label="Show header"
|
||||
onChange={onChangeShowHeader}
|
||||
isChecked={config.showHeader}
|
||||
/>
|
||||
<Checkbox
|
||||
label="Show title"
|
||||
onChange={onChangeShowTitle}
|
||||
isChecked={config.showTitle}
|
||||
/>
|
||||
<Checkbox
|
||||
label="Show article"
|
||||
onChange={onChangeShowArticle}
|
||||
isChecked={config.showArticle}
|
||||
/>
|
||||
<Checkbox
|
||||
label="Show filter"
|
||||
onChange={onChangeShowFilter}
|
||||
isChecked={config.showFilter}
|
||||
/>
|
||||
<Heading level={1} size="small">
|
||||
Filter options
|
||||
</Heading>
|
||||
<ControlsGroup>
|
||||
<Label className="label" text="Folder id" />
|
||||
<TextInput
|
||||
scale={true}
|
||||
onChange={onChangeFolderId}
|
||||
placeholder="Folder id"
|
||||
value={config.folder}
|
||||
/>
|
||||
</ControlsGroup>
|
||||
<ControlsGroup>
|
||||
<Label className="label" text="Items count" />
|
||||
<TextInput
|
||||
scale={true}
|
||||
onChange={onChangeCount}
|
||||
placeholder="Items count"
|
||||
value={config.count}
|
||||
/>
|
||||
</ControlsGroup>
|
||||
<ControlsGroup>
|
||||
<Label className="label" text="Page" />
|
||||
<TextInput
|
||||
scale={true}
|
||||
onChange={onChangePage}
|
||||
placeholder="Page"
|
||||
value={config.page}
|
||||
/>
|
||||
</ControlsGroup>
|
||||
<ControlsGroup>
|
||||
<Label className="label" text="Search term" />
|
||||
<Box style={{ flexDirection: "row", display: "flex", gap: "16px" }}>
|
||||
<TextInput
|
||||
scale={true}
|
||||
onChange={onChangeSearch}
|
||||
placeholder="Search term"
|
||||
value={config.search}
|
||||
/>
|
||||
<Checkbox
|
||||
label="With subfolders"
|
||||
onChange={onChangeWithSubfolders}
|
||||
isChecked={withSubfolders}
|
||||
/>
|
||||
</Box>
|
||||
</ControlsGroup>
|
||||
<ControlsGroup>
|
||||
<Label className="label" text="Author" />
|
||||
<TextInput
|
||||
scale={true}
|
||||
onChange={onChangeAuthor}
|
||||
placeholder="Author"
|
||||
value={config.authorType}
|
||||
/>
|
||||
</ControlsGroup>
|
||||
<ControlsGroup>
|
||||
<Label className="label" text="Filter type:" />
|
||||
<ComboBox
|
||||
onSelect={onChangeFilterType}
|
||||
options={dataFilterType}
|
||||
scaled={true}
|
||||
selectedOption={filterType}
|
||||
displaySelectedOption
|
||||
directionY="top"
|
||||
/>
|
||||
</ControlsGroup>
|
||||
<ControlsGroup>
|
||||
<Label className="label" text="Sort by:" />
|
||||
<ComboBox
|
||||
onSelect={onChangeSortBy}
|
||||
options={dataSortBy}
|
||||
scaled={true}
|
||||
selectedOption={sortBy}
|
||||
displaySelectedOption
|
||||
directionY="top"
|
||||
/>
|
||||
</ControlsGroup>
|
||||
<ControlsGroup>
|
||||
<Label className="label" text="Sort order:" />
|
||||
<ComboBox
|
||||
onSelect={onChangeSortOrder}
|
||||
options={dataSortOrder}
|
||||
scaled={true}
|
||||
selectedOption={sortOrder}
|
||||
displaySelectedOption
|
||||
directionY="top"
|
||||
/>
|
||||
</ControlsGroup>
|
||||
</Controls>
|
||||
<Preview>
|
||||
<Frame>
|
||||
<Box id={frameId} className="frameStyle">
|
||||
Frame content
|
||||
</Box>
|
||||
</Frame>
|
||||
|
||||
<Buttons>
|
||||
<Button primary size="normal" label={t("Common:Preview")} onClick={loadFrame} />
|
||||
<Button
|
||||
primary
|
||||
size="normal"
|
||||
label="Destroy"
|
||||
onClick={destroyFrame}
|
||||
/>
|
||||
</Buttons>
|
||||
|
||||
<Heading level={1} size="xsmall">
|
||||
Paste this code block on page:
|
||||
</Heading>
|
||||
|
||||
<Textarea value={codeBlock} />
|
||||
</Preview>
|
||||
</Container>
|
||||
);
|
||||
};
|
||||
|
||||
export default inject(({ setup, auth }) => {
|
||||
const { settingsStore, setDocumentTitle } = auth;
|
||||
const { theme } = settingsStore;
|
||||
|
||||
return {
|
||||
theme,
|
||||
setDocumentTitle,
|
||||
};
|
||||
})(withTranslation(["Settings", "Common"])(observer(PortalIntegration)));
|
@ -83,6 +83,7 @@ const PersonalSettings = ({
|
||||
[setIsLoadingRecent, setRecentSetting]
|
||||
);
|
||||
|
||||
const thumbnailsSizeLabel = "Thumbnails 1280x720";
|
||||
return (
|
||||
<StyledSettings
|
||||
showTitle={showTitle}
|
||||
@ -96,7 +97,7 @@ const PersonalSettings = ({
|
||||
)}
|
||||
<ToggleButton
|
||||
className="toggle-btn"
|
||||
label={"Thumbnails 1280x720"}
|
||||
label={thumbnailsSizeLabel}
|
||||
onChange={onChangeThumbnailsSize}
|
||||
isChecked={thumbnails1280x720}
|
||||
style={{ display: "none" }}
|
||||
|
@ -128,7 +128,7 @@ class SectionBodyContent extends React.Component {
|
||||
</div>
|
||||
) : (
|
||||
<div className="loader-history-rows">
|
||||
<Loaders.HistoryRows title="version-history-body-loader" />
|
||||
<Loaders.HistoryRows />
|
||||
</div>
|
||||
)}
|
||||
</StyledBody>
|
||||
|
@ -29,7 +29,7 @@ class PureVersionHistory extends React.Component {
|
||||
onClickBack={this.redirectToHomepage}
|
||||
/>
|
||||
) : (
|
||||
<Loaders.SectionHeader title="version-history-title-loader" />
|
||||
<Loaders.SectionHeader />
|
||||
)}
|
||||
</Section.SectionHeader>
|
||||
|
||||
|
@ -1,5 +1,6 @@
|
||||
import styled, { css } from "styled-components";
|
||||
import Base from "../themes/base";
|
||||
import { isMobileOnly } from "react-device-detect";
|
||||
|
||||
const StyledDropdown = styled.div`
|
||||
@media (orientation: landscape) {
|
||||
@ -58,6 +59,14 @@ const StyledDropdown = styled.div`
|
||||
box-shadow: ${(props) => props.theme.dropDown.boxShadow};
|
||||
-moz-box-shadow: ${(props) => props.theme.dropDown.boxShadow};
|
||||
-webkit-box-shadow: ${(props) => props.theme.dropDown.boxShadow};
|
||||
${(props) =>
|
||||
(props.isMobileView || isMobileOnly) &&
|
||||
css`
|
||||
box-shadow: ${(props) => props.theme.dropDown.boxShadowMobile};
|
||||
-moz-box-shadow: ${(props) => props.theme.dropDown.boxShadowMobile};
|
||||
-webkit-box-shadow: ${(props) => props.theme.dropDown.boxShadowMobile};
|
||||
`}
|
||||
|
||||
padding: ${(props) => !props.maxHeight && props.itemCount > 1 && `4px 0px`};
|
||||
${(props) =>
|
||||
props.columnCount &&
|
||||
|
@ -162,7 +162,7 @@ class GroupButton extends React.Component {
|
||||
{label}
|
||||
</StyledDropdownToggle>
|
||||
)}
|
||||
{isSeparator && <Separator title="" />}
|
||||
{isSeparator && <Separator />}
|
||||
</StyledGroupButton>
|
||||
);
|
||||
}
|
||||
|
@ -84,7 +84,9 @@ const Caret = styled.div`
|
||||
`}
|
||||
`;
|
||||
|
||||
const Separator = styled.div`
|
||||
const Separator = styled.div.attrs(() => ({
|
||||
title: "",
|
||||
}))`
|
||||
vertical-align: middle;
|
||||
border: ${(props) => props.theme.groupButton.separator.border};
|
||||
width: ${(props) => props.theme.groupButton.separator.width};
|
||||
|
@ -14,6 +14,8 @@ import DropDown from "@docspace/components/drop-down";
|
||||
import DropDownItem from "@docspace/components/drop-down-item";
|
||||
import Text from "@docspace/components/text";
|
||||
|
||||
const PLUS = "+";
|
||||
|
||||
const InputPhone = ({
|
||||
defaultCountry,
|
||||
onChange,
|
||||
@ -138,7 +140,7 @@ const InputPhone = ({
|
||||
fillIcon={true}
|
||||
selectedOption={country}
|
||||
/>
|
||||
<Label text="+" className="prefix" />
|
||||
<Label text={PLUS} className="prefix" />
|
||||
<TextInput
|
||||
type="tel"
|
||||
className="input-phone"
|
||||
|
@ -116,6 +116,7 @@ RadioButton.propTypes = {
|
||||
RadioButton.defaultProps = {
|
||||
isChecked: false,
|
||||
isDisabled: false,
|
||||
label: "",
|
||||
};
|
||||
|
||||
export default RadioButton;
|
||||
|
@ -1376,6 +1376,7 @@ const Dark = {
|
||||
borderRadius: "6px",
|
||||
boxShadow:
|
||||
"0px 16px 16px rgba(0, 0, 0, 0.16), 0px 8.1px 6.975px rgba(0, 0, 0, 0.108), 0px 3.2px 2.6px rgba(0, 0, 0, 0.08), 0px 0.7px 0.925px rgba(0, 0, 0, 0.052)",
|
||||
boxShadowMobile: "0px -4px 60px rgba(0, 0, 0, 0.25)",
|
||||
border: "1px solid #474747",
|
||||
},
|
||||
|
||||
|
@ -24,8 +24,6 @@
|
||||
// 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.Threading.Channels;
|
||||
|
||||
namespace ASC.Files.Service;
|
||||
public class Startup : BaseWorkerStartup
|
||||
{
|
||||
@ -66,12 +64,12 @@ public class Startup : BaseWorkerStartup
|
||||
DIHelper.TryAdd<FeedAggregatorService>();
|
||||
|
||||
services.AddHostedService<FeedCleanerService>();
|
||||
DIHelper.TryAdd<FeedCleanerService>();
|
||||
|
||||
services.AddActivePassiveHostedService<FileConverterService<int>>();
|
||||
DIHelper.TryAdd<FeedCleanerService>();
|
||||
|
||||
services.AddActivePassiveHostedService<FileConverterService<int>>(DIHelper);
|
||||
DIHelper.TryAdd<FileConverterService<int>>();
|
||||
|
||||
services.AddActivePassiveHostedService<FileConverterService<string>>();
|
||||
services.AddActivePassiveHostedService<FileConverterService<string>>(DIHelper);
|
||||
DIHelper.TryAdd<FileConverterService<string>>();
|
||||
|
||||
services.AddHostedService<ThumbnailBuilderService>();
|
||||
|
@ -103,7 +103,7 @@ public class PhotoController : PeopleControllerBase
|
||||
|
||||
await _userManager.UpdateUserInfoWithSyncCardDavAsync(user);
|
||||
_messageService.Send(MessageAction.UserUpdatedAvatarThumbnails, _messageTarget.Create(user.Id), user.DisplayUserName(false, _displayUserSettingsHelper));
|
||||
return await ThumbnailsDataDto.Create(user.Id, _userPhotoManager);
|
||||
return await ThumbnailsDataDto.Create(user, _userPhotoManager);
|
||||
}
|
||||
|
||||
[HttpDelete("{userid}/photo")]
|
||||
@ -122,7 +122,7 @@ public class PhotoController : PeopleControllerBase
|
||||
await _userManager.UpdateUserInfoWithSyncCardDavAsync(user);
|
||||
_messageService.Send(MessageAction.UserDeletedAvatar, _messageTarget.Create(user.Id), user.DisplayUserName(false, _displayUserSettingsHelper));
|
||||
|
||||
return await ThumbnailsDataDto.Create(user.Id, _userPhotoManager);
|
||||
return await ThumbnailsDataDto.Create(user, _userPhotoManager);
|
||||
}
|
||||
|
||||
[HttpGet("{userid}/photo")]
|
||||
@ -135,7 +135,7 @@ public class PhotoController : PeopleControllerBase
|
||||
throw new SecurityException();
|
||||
}
|
||||
|
||||
return await ThumbnailsDataDto.Create(user.Id, _userPhotoManager);
|
||||
return await ThumbnailsDataDto.Create(user, _userPhotoManager);
|
||||
}
|
||||
|
||||
[HttpPut("{userid}/photo")]
|
||||
@ -156,7 +156,7 @@ public class PhotoController : PeopleControllerBase
|
||||
await _userManager.UpdateUserInfoWithSyncCardDavAsync(user);
|
||||
_messageService.Send(MessageAction.UserAddedAvatar, _messageTarget.Create(user.Id), user.DisplayUserName(false, _displayUserSettingsHelper));
|
||||
|
||||
return await ThumbnailsDataDto.Create(user.Id, _userPhotoManager);
|
||||
return await ThumbnailsDataDto.Create(user, _userPhotoManager);
|
||||
}
|
||||
|
||||
[HttpPost("{userid}/photo")]
|
||||
@ -207,17 +207,19 @@ public class PhotoController : PeopleControllerBase
|
||||
throw new ImageSizeLimitException();
|
||||
}
|
||||
|
||||
var mainPhoto = _userPhotoManager.SaveOrUpdatePhoto(userId, data);
|
||||
var mainPhoto = _userPhotoManager.SaveOrUpdatePhoto(userId, data);
|
||||
var userInfo = _userManager.GetUsers(userId);
|
||||
var cacheKey = Math.Abs(userInfo.LastModified.GetHashCode());
|
||||
|
||||
result.Data =
|
||||
new
|
||||
{
|
||||
main = mainPhoto,
|
||||
retina = _userPhotoManager.GetRetinaPhotoURL(userId),
|
||||
max = _userPhotoManager.GetMaxPhotoURL(userId),
|
||||
big = _userPhotoManager.GetBigPhotoURL(userId),
|
||||
medium = _userPhotoManager.GetMediumPhotoURL(userId),
|
||||
small = _userPhotoManager.GetSmallPhotoURL(userId),
|
||||
main = mainPhoto + $"?hash={cacheKey}",
|
||||
retina = _userPhotoManager.GetRetinaPhotoURL(userId) + $"?hash={cacheKey}",
|
||||
max = _userPhotoManager.GetMaxPhotoURL(userId) + $"?hash={cacheKey}",
|
||||
big = _userPhotoManager.GetBigPhotoURL(userId) + $"?hash={cacheKey}",
|
||||
medium = _userPhotoManager.GetMediumPhotoURL(userId) + $"?hash={cacheKey}",
|
||||
small = _userPhotoManager.GetSmallPhotoURL(userId) + $"?hash={cacheKey}"
|
||||
};
|
||||
}
|
||||
else
|
||||
|
@ -30,16 +30,18 @@ public class ThumbnailsDataDto
|
||||
{
|
||||
private ThumbnailsDataDto() { }
|
||||
|
||||
public static async Task<ThumbnailsDataDto> Create(Guid userId, UserPhotoManager userPhotoManager)
|
||||
public static async Task<ThumbnailsDataDto> Create(UserInfo userInfo, UserPhotoManager userPhotoManager)
|
||||
{
|
||||
var cacheKey = Math.Abs(userInfo.LastModified.GetHashCode());
|
||||
|
||||
return new ThumbnailsDataDto
|
||||
{
|
||||
Original = await userPhotoManager.GetPhotoAbsoluteWebPath(userId),
|
||||
Retina = await userPhotoManager.GetRetinaPhotoURL(userId),
|
||||
Max = await userPhotoManager.GetMaxPhotoURL(userId),
|
||||
Big = await userPhotoManager.GetBigPhotoURL(userId),
|
||||
Medium = await userPhotoManager.GetMediumPhotoURL(userId),
|
||||
Small = await userPhotoManager.GetSmallPhotoURL(userId)
|
||||
Original = await userPhotoManager.GetPhotoAbsoluteWebPath(userInfo.Id) + $"?hash={cacheKey}",
|
||||
Retina = await userPhotoManager.GetRetinaPhotoURL(userInfo.Id) + $"?hash={cacheKey}",
|
||||
Max = await userPhotoManager.GetMaxPhotoURL(userInfo.Id) + $"?hash={cacheKey}",
|
||||
Big = await userPhotoManager.GetBigPhotoURL(userInfo.Id) + $"?hash={cacheKey}",
|
||||
Medium = await userPhotoManager.GetMediumPhotoURL(userInfo.Id) + $"?hash={cacheKey}",
|
||||
Small = await userPhotoManager.GetSmallPhotoURL(userInfo.Id) + $"?hash={cacheKey}"
|
||||
};
|
||||
}
|
||||
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user