Merge branch 'hotfix/v1.0.1' of https://github.com/ONLYOFFICE/DocSpace into hotfix/v1.0.1

This commit is contained in:
Mushka Nikita 2023-05-26 13:57:58 +03:00
commit dfccf6526e
822 changed files with 64718 additions and 34866 deletions

View File

@ -2,7 +2,14 @@ name: 4testing multiarch-build
on:
push:
branches: ["hotfix/v1.0.1"]
branches:
- 'hotfix/v**'
- 'release/v**'
env:
DOCKER_PATH: "/build/install/docker"
REPO: "onlyoffice"
DOCKER_IMAGE_PREFIX: "4testing-docspace"
DOCKERFILE: "Dockerfile.app"
jobs:
build:
@ -25,21 +32,11 @@ jobs:
password: ${{ secrets.DOCKERHUB_TOKEN }}
- name: Build 4testing
run: |
export BUILD_NUMBER="$(date "+%Y%m%d%H")"
cd ./build/install/docker
REPO="onlyoffice" \
DOCKER_IMAGE_PREFIX="4testing-docspace" \
DOCKER_TAG=v1.0.1 \
DOCKERFILE="Dockerfile.app" \
cd .${DOCKER_PATH}
export DOCKER_TAG=$(echo "${GITHUB_REF_NAME}" | sed '/^release\b\|^hotfix\b/s/release.*\/\|hotfix.*\///')
docker buildx bake -f build.yml \
--set *.args.GIT_BRANCH=$GITHUB_REF_NAME \
--set *.platform=linux/amd64 \
--push
REPO="onlyoffice" \
DOCKER_IMAGE_PREFIX="4testing-docspace" \
DOCKER_TAG=v1.0.1-$BUILD_NUMBER \
DOCKERFILE="Dockerfile.app" \
docker buildx bake -f build.yml \
--set *.args.GIT_BRANCH=$GITHUB_REF_NAME \
--push
shell: bash

View File

@ -3,7 +3,8 @@ name: ffvideo build
on:
push:
branches:
- release/v1.0.0
- 'hotfix/v**'
- 'release/v**'
paths:
- 'build/install/docker/**.ffvideo'

View File

@ -31,12 +31,12 @@
# terms at http://creativecommons.org/licenses/by-sa/4.0/legalcode
#
PARAMETERS="";
PARAMETERS="$PARAMETERS -it COMMUNITY";
DOCKER="";
LOCAL_SCRIPTS="false"
HELP="false";
product="docspace"
GIT_BRANCH="develop"
GIT_BRANCH="master"
FILE_NAME="$(basename "$0")"
while [ "$1" != "" ]; do
case $1 in
@ -56,10 +56,23 @@ while [ "$1" != "" ]; do
fi
;;
"-?" | -h | --help )
HELP="true";
docker )
DOCKER="true";
PARAMETERS="$PARAMETERS -ht install-Docker.sh";
shift && continue
;;
package )
DOCKER="false";
shift && continue
;;
"-?" | -h | --help )
if [ -z "$DOCKER" ]; then
echo "Run 'bash $FILE_NAME docker' to install docker version of application or 'bash $FILE_NAME package' to install deb/rpm version."
echo "Run 'bash $FILE_NAME docker -h' or 'bash $FILE_NAME package -h' to get more details."
exit 0;
fi
PARAMETERS="$PARAMETERS -ht $FILE_NAME";
;;
esac
PARAMETERS="$PARAMETERS ${1}";
@ -123,11 +136,10 @@ if ! command_exists curl ; then
install_curl;
fi
if [ "$HELP" == "false" ]; then
if [ -z "$DOCKER" ]; then
read_installation_method;
fi
#DOWNLOAD_URL_PREFIX="http://download.onlyoffice.com/install-appserver/"
DOWNLOAD_URL_PREFIX="https://raw.githubusercontent.com/ONLYOFFICE/${product}/${GIT_BRANCH}/build/install/OneClickInstall"
if [ "$DOCKER" == "true" ]; then

View File

@ -5,7 +5,8 @@ set -e
package_sysname="onlyoffice";
DS_COMMON_NAME="onlyoffice";
product="docspace"
GIT_BRANCH="develop"
GIT_BRANCH="master"
INSTALLATION_TYPE="ENTERPRISE"
RES_APP_INSTALLED="is already installed";
RES_APP_CHECK_PORTS="uses ports"
RES_CHECK_PORTS="please, make sure that the ports are free.";
@ -21,6 +22,27 @@ while [ "$1" != "" ]; do
shift
fi
;;
-je | --jwtenabled )
if [ "$2" != "" ]; then
DS_JWT_ENABLED=$2
shift
fi
;;
-jh | --jwtheader )
if [ "$2" != "" ]; then
DS_JWT_HEADER=$2
shift
fi
;;
-js | --jwtsecret )
if [ "$2" != "" ]; then
DS_JWT_SECRET=$2
shift
fi
;;
-gb | --gitbranch )
if [ "$2" != "" ]; then
@ -44,12 +66,23 @@ while [ "$1" != "" ]; do
fi
;;
-it | --installation_type )
if [ "$2" != "" ]; then
INSTALLATION_TYPE=$(echo "$2" | awk '{print toupper($0)}');
shift
fi
;;
-? | -h | --help )
echo " Usage $0 [PARAMETER] [[PARAMETER], ...]"
echo " Parameters:"
echo " -it, --installation_type installation type (COMMUNITY|ENTERPRISE|DEVELOPER)"
echo " -it, --installation_type installation type (community|enterprise)"
echo " -u, --update use to update existing components (true|false)"
echo " -ls, --local_scripts use 'true' to run local scripts (true|false)"
echo " -je, --jwtenabled specifies the enabling the JWT validation (true|false)"
echo " -jh, --jwtheader defines the http header that will be used to send the JWT"
echo " -js, --jwtsecret defines the secret key to validate the JWT in the request"
echo " -ls, --local_scripts use 'true' to run local scripts (true|false)"
echo " -skiphc, --skiphardwarecheck use to skip hardware check (true|false)"
echo " -?, -h, --help this help"
echo
exit 0
@ -86,7 +119,6 @@ fi
# add onlyoffice repo
mkdir -p -m 700 $HOME/.gnupg
echo "deb [signed-by=/usr/share/keyrings/onlyoffice.gpg] http://download.onlyoffice.com/repo/debian squeeze main" | tee /etc/apt/sources.list.d/onlyoffice.list
echo "deb [signed-by=/usr/share/keyrings/onlyoffice.gpg] http://static.teamlab.info.s3.amazonaws.com/repo/4testing/debian stable main" | sudo tee /etc/apt/sources.list.d/onlyoffice4testing.list
curl -fsSL https://download.onlyoffice.com/GPG-KEY-ONLYOFFICE | gpg --no-default-keyring --keyring gnupg-ring:/usr/share/keyrings/onlyoffice.gpg --import
chmod 644 /usr/share/keyrings/onlyoffice.gpg

View File

@ -11,6 +11,29 @@ cat<<EOF
EOF
apt-get -y update
if [ "$UPDATE" = "true" ] && [ "$DOCUMENT_SERVER_INSTALLED" = "true" ]; then
ds_pkg_installed_name=$(dpkg -l | grep ${package_sysname}-documentserver | tail -n1 | awk '{print $2}');
if [ "$INSTALLATION_TYPE" = "COMMUNITY" ]; then
ds_pkg_name="${package_sysname}-documentserver";
elif [ "$INSTALLATION_TYPE" = "ENTERPRISE" ]; then
ds_pkg_name="${package_sysname}-documentserver-ee";
fi
if [ -n $ds_pkg_name ]; then
if ! dpkg -l ${ds_pkg_name} &> /dev/null; then
debconf-get-selections | grep ^${ds_pkg_installed_name} | sed s/${ds_pkg_installed_name}/${ds_pkg_name}/g | debconf-set-selections
apt-get remove -yq ${ds_pkg_installed_name}
apt-get install -yq ${ds_pkg_name}
else
apt-get install -y --only-upgrade ${ds_pkg_name};
fi
fi
fi
if [ "$DOCUMENT_SERVER_INSTALLED" = "false" ]; then
DS_PORT=${DS_PORT:-8083};
@ -20,8 +43,8 @@ if [ "$DOCUMENT_SERVER_INSTALLED" = "false" ]; then
DS_DB_PWD=$DS_COMMON_NAME;
DS_JWT_ENABLED=${DS_JWT_ENABLED:-true};
DS_JWT_SECRET="$(cat /dev/urandom | tr -dc A-Za-z0-9 | head -c 32)";
DS_JWT_HEADER="AuthorizationJwt";
DS_JWT_SECRET=${DS_JWT_SECRET:-$(cat /dev/urandom | tr -dc A-Za-z0-9 | head -c 32)};
DS_JWT_HEADER=${DS_JWT_HEADER:-AuthorizationJwt};
if ! su - postgres -s /bin/bash -c "psql -lqt" | cut -d \| -f 1 | grep -q ${DS_DB_NAME}; then
su - postgres -s /bin/bash -c "psql -c \"CREATE USER ${DS_DB_USER} WITH password '${DS_DB_PWD}';\""
@ -36,9 +59,11 @@ if [ "$DOCUMENT_SERVER_INSTALLED" = "false" ]; then
echo ${package_sysname}-documentserver $DS_COMMON_NAME/jwt-secret select ${DS_JWT_SECRET} | sudo debconf-set-selections
echo ${package_sysname}-documentserver $DS_COMMON_NAME/jwt-header select ${DS_JWT_HEADER} | sudo debconf-set-selections
apt-get install -yq ${package_sysname}-documentserver
elif [ "$UPDATE" = "true" ] && [ "$DOCUMENT_SERVER_INSTALLED" = "true" ]; then
apt-get install -y --only-upgrade ${package_sysname}-documentserver
if [ "$INSTALLATION_TYPE" = "COMMUNITY" ]; then
apt-get install -yq ${package_sysname}-documentserver
else
apt-get install -yq ${package_sysname}-documentserver-ee
fi
fi
if [ "$PRODUCT_INSTALLED" = "false" ]; then

View File

@ -36,7 +36,10 @@ PRODUCT="docspace"
BASE_DIR="/app/$PACKAGE_SYSNAME";
STATUS=""
DOCKER_TAG=""
GIT_BRANCH="develop"
GIT_BRANCH="master"
INSTALLATION_TYPE="ENTERPRISE"
IMAGE_NAME="${PACKAGE_SYSNAME}/${PRODUCT}-api"
CONTAINER_NAME="${PACKAGE_SYSNAME}-api"
NETWORK=${PACKAGE_SYSNAME}
@ -70,7 +73,8 @@ DATABASE_MIGRATION="true"
ELK_VERSION=""
ELK_HOST=""
DOCUMENT_SERVER_IMAGE_NAME="onlyoffice/4testing-documentserver-ee:latest"
DOCUMENT_SERVER_IMAGE_NAME=""
DOCUMENT_SERVER_VERSION=""
DOCUMENT_SERVER_JWT_SECRET=""
DOCUMENT_SERVER_JWT_HEADER=""
DOCUMENT_SERVER_HOST=""
@ -84,7 +88,6 @@ HELP_TARGET="install-Docker.sh";
SKIP_HARDWARE_CHECK="false";
EXTERNAL_PORT="80"
SERVICE_PORT="5050"
while [ "$1" != "" ]; do
case $1 in
@ -124,7 +127,7 @@ while [ "$1" != "" ]; do
fi
;;
-idocs | --installdocumentserver )
-idocs | --installdocs )
if [ "$2" != "" ]; then
INSTALL_DOCUMENT_SERVER=$2
shift
@ -138,14 +141,14 @@ while [ "$1" != "" ]; do
fi
;;
-irb | --installrabbitmq )
-irbt | --installrabbitmq )
if [ "$2" != "" ]; then
INSTALL_RABBITMQ=$2
shift
fi
;;
-ird | --installredis )
-irds | --installredis )
if [ "$2" != "" ]; then
INSTALL_REDIS=$2
shift
@ -194,7 +197,7 @@ while [ "$1" != "" ]; do
fi
;;
-esh | --elasticsearchhost )
-esh | --elastichost )
if [ "$2" != "" ]; then
ELK_HOST=$2
shift
@ -208,13 +211,6 @@ while [ "$1" != "" ]; do
fi
;;
-ip | --internalport )
if [ "$2" != "" ]; then
SERVICE_PORT=$2
shift
fi
;;
-ep | --externalport )
if [ "$2" != "" ]; then
EXTERNAL_PORT=$2
@ -246,6 +242,7 @@ while [ "$1" != "" ]; do
-s | --status )
if [ "$2" != "" ]; then
STATUS=$2
IMAGE_NAME="${PACKAGE_SYSNAME}/${STATUS}${PRODUCT}-api"
shift
fi
;;
@ -256,7 +253,7 @@ while [ "$1" != "" ]; do
fi
;;
-tag | --dockertag )
-dsv | --docspaceversion )
if [ "$2" != "" ]; then
DOCKER_TAG=$2
shift
@ -271,13 +268,20 @@ while [ "$1" != "" ]; do
fi
;;
-di | --documentserverimage )
-docsi | --docsimage )
if [ "$2" != "" ]; then
DOCUMENT_SERVER_IMAGE_NAME=$2
shift
fi
;;
-docsv | --docsversion )
if [ "$2" != "" ]; then
DOCUMENT_SERVER_VERSION=$2
shift
fi
;;
-dbm | --databasemigration )
if [ "$2" != "" ]; then
DATABASE_MIGRATION=$2
@ -285,6 +289,27 @@ while [ "$1" != "" ]; do
fi
;;
-jh | --jwtheader )
if [ "$2" != "" ]; then
DOCUMENT_SERVER_JWT_HEADER=$2
shift
fi
;;
-js | --jwtsecret )
if [ "$2" != "" ]; then
DOCUMENT_SERVER_JWT_SECRET=$2
shift
fi
;;
-it | --installation_type )
if [ "$2" != "" ]; then
INSTALLATION_TYPE=$(echo "$2" | awk '{print toupper($0)}');
shift
fi
;;
-? | -h | --help )
echo " Usage: bash $HELP_TARGET [PARAMETER] [[PARAMETER], ...]"
echo
@ -292,43 +317,47 @@ while [ "$1" != "" ]; do
echo " -hub, --hub dockerhub name"
echo " -un, --username dockerhub username"
echo " -p, --password dockerhub password"
echo " -it, --installation_type installation type (community|enterprise)"
echo " -skiphc, --skiphardwarecheck skip hardware check (true|false)"
echo " -u, --update use to update existing components (true|false)"
echo " -ids, --installdocspace install or update $PRODUCT (true|false)"
echo " -tag, --dockertag select the version to install $PRODUCT (latest|develop|version number)"
echo " -idocs, --installdocumentserver install or update document server (true|false)"
echo " -di, --documentserverimage document server image name"
echo " -imysql, --installmysql install or update mysql (true|false)"
echo " -irb, --installrabbitmq install or update rabbitmq (true|false)"
echo " -ird, --installredis install or update redis (true|false)"
echo " -dsv, --docspaceversion select the $PRODUCT version"
echo " -dsh, --docspacehost $PRODUCT host"
echo " -env, --environment $PRODUCT environment"
echo " -mk, --machinekey setting for core.machinekey"
echo " -ep, --externalport external $PRODUCT port (default value 80)"
echo " -idocs, --installdocs install or update document server (true|false)"
echo " -docsi, --docsimage document server image name"
echo " -docsv, --docsversion document server version"
echo " -jh, --jwtheader defines the http header that will be used to send the JWT"
echo " -js, --jwtsecret defines the secret key to validate the JWT in the request"
echo " -irbt, --installrabbitmq install or update rabbitmq (true|false)"
echo " -irds, --installredis install or update redis (true|false)"
echo " -esh, --elastichost elasticsearch host"
echo " -imysql, --installmysql install or update mysql (true|false)"
echo " -mysqlrp, --mysqlrootpassword mysql server root password"
echo " -mysqld, --mysqldatabase $PRODUCT database name"
echo " -mysqlu, --mysqluser $PRODUCT database user"
echo " -mysqlp, --mysqlpassword $PRODUCT database password"
echo " -mysqlh, --mysqlhost mysql server host"
echo " -dsh, --docspdcehost $PRODUCT host"
echo " -esh, --elasticsearchhost elasticsearch host"
echo " -env, --environment $PRODUCT environment"
echo " -skiphc, --skiphardwarecheck skip hardware check (true|false)"
echo " -ip, --internalport internal $PRODUCT port (default value 5050)"
echo " -ep, --externalport external $PRODUCT port (default value 80)"
echo " -mk, --machinekey setting for core.machinekey"
echo " -ls, --local_scripts run the installation from local scripts"
echo " -dbm, --databasemigration database migration (true|false)"
echo " -?, -h, --help this help"
echo
echo " Install all the components without document server:"
echo " bash $HELP_TARGET -idocs false"
echo
echo " Install Document Server only. Skip the installation of MYSQL and $PRODUCT:"
echo " bash $HELP_TARGET -ids false -idocs true -imysql false -irb false -ird false"
echo " Install Document Server only. Skip the installation of mysql, $PRODUCT, rabbitmq, redis:"
echo " bash $HELP_TARGET -ids false -idocs true -imysql false -irbt false -irds false"
echo
echo " Update all installed components. Stop the containers that need to be updated, remove them and run the latest versions of the corresponding components. The portal data should be picked up automatically:"
echo " Update all installed components. Stop the containers that need to be updated, remove them and run the latest versions of the corresponding components."
echo " The portal data should be picked up automatically:"
echo " bash $HELP_TARGET -u true"
echo
echo " Update Document Server only to version 7.2.1.34 and skip the update for all other components:"
echo " bash $HELP_TARGET -u true -di onlyoffice/documentserver-ee:7.2.1.34 -ids false"
echo " bash $HELP_TARGET -u true -docsi ${PACKAGE_SYSNAME}/documentserver-ee -docsv 7.2.1.34 -idocs true -ids false -irbt false -irds false"
echo
echo " Update $PRODUCT only to version 1.2.0 and skip the update for all other components:"
echo " bash $HELP_TARGET -u true -tag rc-v1.2.0 -idocs false"
echo " bash $HELP_TARGET -u true -dsv v1.2.0 -idocs false -irbt false -irds false"
echo
exit 0
;;
@ -542,8 +571,20 @@ install_docker_compose () {
fi
}
install_jq () {
curl -s -o jq http://stedolan.github.io/jq/download/linux64/jq
chmod +x jq
cp jq /usr/bin
rm jq
if ! command_exists jq; then
echo "command jq not found"
exit 1;
fi
}
check_ports () {
RESERVED_PORTS=(443 2181 2888 3306 3888 8081 8099 9092 9200 9300 9800 9899 9999 33060);
RESERVED_PORTS=(3306 8092);
ARRAY_PORTS=();
USED_PORTS="";
@ -558,11 +599,6 @@ check_ports () {
echo "External port $EXTERNAL_PORT is reserved. Select another port"
exit 1;
fi
if [ "$RESERVED_PORT" -eq "$SERVICE_PORT" ] ; then
echo "Internal port $SERVICE_PORT is reserved. Select another port"
exit 1;
fi
done
else
echo "Invalid external port $EXTERNAL_PORT"
@ -704,7 +740,6 @@ create_network () {
get_container_env_parameter () {
local CONTAINER_NAME=$1;
local PARAMETER_NAME=$2;
VALUE="";
if [[ -z ${CONTAINER_NAME} ]]; then
echo "Empty container name"
@ -722,11 +757,86 @@ get_container_env_parameter () {
if [[ -n ${CONTAINER_EXIST} ]]; then
VALUE=$(docker inspect --format='{{range .Config.Env}}{{println .}}{{end}}' ${CONTAINER_NAME} | grep "${PARAMETER_NAME}=" | sed 's/^.*=//');
fi
if [ -z $VALUE ] && [ -f $BASE_DIR/.env ]; then
VALUE=$(sed -n "/.*${PARAMETER_NAME}=/s///p" $BASE_DIR/.env)
fi
fi
echo "$VALUE"
}
get_available_version () {
if [[ -z "$1" ]]; then
echo "image name is empty";
exit 1;
fi
if ! command_exists curl ; then
install_curl;
fi
if ! command_exists jq ; then
install_jq
fi
CREDENTIALS="";
AUTH_HEADER="";
TAGS_RESP="";
if [[ -n ${HUB} ]]; then
DOCKER_CONFIG="$HOME/.docker/config.json";
if [[ -f "$DOCKER_CONFIG" ]]; then
CREDENTIALS=$(jq -r '.auths."'$HUB'".auth' < "$DOCKER_CONFIG");
if [ "$CREDENTIALS" == "null" ]; then
CREDENTIALS="";
fi
fi
if [[ -z ${CREDENTIALS} && -n ${USERNAME} && -n ${PASSWORD} ]]; then
CREDENTIALS=$(echo -n "$USERNAME:$PASSWORD" | base64);
fi
if [[ -n ${CREDENTIALS} ]]; then
AUTH_HEADER="Authorization: Basic $CREDENTIALS";
fi
REPO=$(echo $1 | sed "s/$HUB\///g");
TAGS_RESP=$(curl -s -H "$AUTH_HEADER" -X GET https://$HUB/v2/$REPO/tags/list);
TAGS_RESP=$(echo $TAGS_RESP | jq -r '.tags')
else
if [[ -n ${USERNAME} && -n ${PASSWORD} ]]; then
CREDENTIALS="{\"username\":\"$USERNAME\",\"password\":\"$PASSWORD\"}";
fi
if [[ -n ${CREDENTIALS} ]]; then
LOGIN_RESP=$(curl -s -H "Content-Type: application/json" -X POST -d "$CREDENTIALS" https://hub.docker.com/v2/users/login/);
TOKEN=$(echo $LOGIN_RESP | jq -r '.token');
AUTH_HEADER="Authorization: JWT $TOKEN";
sleep 1;
fi
TAGS_RESP=$(curl -s -H "$AUTH_HEADER" -X GET https://hub.docker.com/v2/repositories/$1/tags/);
TAGS_RESP=$(echo $TAGS_RESP | jq -r '.results[].name')
fi
VERSION_REGEX_1="[0-9]+\.[0-9]+\.[0-9]+"
VERSION_REGEX_2="[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+"
TAG_LIST=""
for item in $TAGS_RESP
do
if [[ $item =~ $VERSION_REGEX_1 ]] || [[ $item =~ $VERSION_REGEX_2 ]]; then
TAG_LIST="$item,$TAG_LIST"
fi
done
LATEST_TAG=$(echo $TAG_LIST | tr ',' '\n' | sort -t. -k 1,1n -k 2,2n -k 3,3n -k 4,4n | awk '/./{line=$0} END{print line}');
echo "$LATEST_TAG" | sed "s/\"//g"
}
set_jwt_secret () {
CURRENT_JWT_SECRET="";
@ -739,43 +849,99 @@ set_jwt_secret () {
fi
if [[ -z ${JWT_SECRET} ]]; then
CURRENT_JWT_SECRET=$(get_container_env_parameter "${PACKAGE_SYSNAME}-api" "DOCUMENT_SERVER_JWT_SECRET");
CURRENT_JWT_SECRET=$(get_container_env_parameter "${CONTAINER_NAME}" "DOCUMENT_SERVER_JWT_SECRET");
if [[ -n ${CURRENT_JWT_SECRET} ]]; then
DOCUMENT_SERVER_JWT_SECRET="$CURRENT_JWT_SECRET";
fi
fi
if [[ -z ${JWT_SECRET} ]] && [[ "$UPDATE" != "true" ]]; then
if [[ -z ${JWT_SECRET} ]]; then
DOCUMENT_SERVER_JWT_SECRET=$(get_random_str 32);
fi
}
set_core_machinekey () {
CURRENT_CORE_MACHINEKEY="";
set_jwt_header () {
CURRENT_JWT_HEADER="";
if [[ -z ${CORE_MACHINEKEY} ]]; then
if file_exists ${BASE_DIR}/.private/machinekey; then
CURRENT_CORE_MACHINEKEY=$(cat ${BASE_DIR}/.private/machinekey);
if [[ -z ${JWT_HEADER} ]]; then
CURRENT_JWT_HEADER=$(get_container_env_parameter "${PACKAGE_SYSNAME}-document-server" "JWT_HEADER");
if [[ -n ${CURRENT_CORE_MACHINEKEY} ]]; then
APP_CORE_MACHINEKEY="$CURRENT_CORE_MACHINEKEY";
fi
if [[ -n ${CURRENT_JWT_HEADER} ]]; then
DOCUMENT_SERVER_JWT_HEADER="$CURRENT_JWT_HEADER";
fi
fi
if [[ -z ${JWT_HEADER} ]]; then
CURRENT_JWT_HEADER=$(get_container_env_parameter "${CONTAINER_NAME}" "DOCUMENT_SERVER_JWT_HEADER");
if [[ -n ${CURRENT_JWT_HEADER} ]]; then
DOCUMENT_SERVER_JWT_HEADER="$CURRENT_JWT_HEADER";
fi
fi
if [[ -z ${CORE_MACHINEKEY} ]]; then
CURRENT_CORE_MACHINEKEY=$(get_container_env_parameter "${PACKAGE_SYSNAME}-api" "$APP_CORE_MACHINEKEY");
if [[ -z ${JWT_HEADER} ]]; then
DOCUMENT_SERVER_JWT_HEADER="AuthorizationJwt"
fi
}
set_core_machinekey () {
if [[ -z ${APP_CORE_MACHINEKEY} ]]; then
CURRENT_CORE_MACHINEKEY=$(get_container_env_parameter "${CONTAINER_NAME}" "APP_CORE_MACHINEKEY");
if [[ -n ${CURRENT_CORE_MACHINEKEY} ]]; then
APP_CORE_MACHINEKEY="$CURRENT_CORE_MACHINEKEY";
fi
fi
if [[ -z ${CORE_MACHINEKEY} ]] && [[ "$UPDATE" != "true" ]]; then
if [[ -z ${APP_CORE_MACHINEKEY} ]] && [[ "$UPDATE" != "true" ]]; then
APP_CORE_MACHINEKEY=$(get_random_str 12);
mkdir -p ${BASE_DIR}/.private/
echo $APP_CORE_MACHINEKEY > ${BASE_DIR}/.private/machinekey
fi
}
set_mysql_params () {
if [[ -z ${MYSQL_PASSWORD} ]]; then
MYSQL_PASSWORD=$(get_container_env_parameter "${CONTAINER_NAME}" "MYSQL_PASSWORD");
if [[ -z ${MYSQL_PASSWORD} ]]; then
MYSQL_PASSWORD=$(get_random_str 20);
fi
fi
if [[ -z ${MYSQL_ROOT_PASSWORD} ]]; then
MYSQL_ROOT_PASSWORD=$(get_container_env_parameter "${CONTAINER_NAME}" "MYSQL_ROOT_PASSWORD");
if [[ -z ${MYSQL_ROOT_PASSWORD} ]]; then
MYSQL_ROOT_PASSWORD=${MYSQL_PASSWORD:-$(get_random_str 20)};
fi
fi
if [[ -z ${MYSQL_DATABASE} ]]; then
MYSQL_DATABASE=$(get_container_env_parameter "${CONTAINER_NAME}" "MYSQL_DATABASE");
fi
if [[ -z ${MYSQL_USER} ]]; then
MYSQL_USER=$(get_container_env_parameter "${CONTAINER_NAME}" "MYSQL_USER");
fi
if [[ -z ${MYSQL_HOST} ]]; then
MYSQL_HOST=$(get_container_env_parameter "${CONTAINER_NAME}" "MYSQL_HOST");
fi
}
set_docspace_params() {
ENV_EXTENSION=$(get_container_env_parameter "${CONTAINER_NAME}" "ENV_EXTENSION");
DOCUMENT_SERVER_HOST=$(get_container_env_parameter "${CONTAINER_NAME}" "DOCUMENT_SERVER_HOST");
ELK_HOST=$(get_container_env_parameter "${CONTAINER_NAME}" "ELK_HOST");
APP_CORE_BASE_DOMAIN=$(get_container_env_parameter "${CONTAINER_NAME}" "APP_CORE_BASE_DOMAIN");
[ -f ${BASE_DIR}/${PRODUCT}.yml ] && EXTERNAL_PORT=$(grep -oP '(?<=- ).*?(?=:8092)' ${BASE_DIR}/${PRODUCT}.yml)
}
set_installation_type_data () {
if [ "$INSTALLATION_TYPE" == "COMMUNITY" ]; then
DOCUMENT_SERVER_IMAGE_NAME=${DOCUMENT_SERVER_IMAGE_NAME:-"${PACKAGE_SYSNAME}/${STATUS}documentserver"}
elif [ "$INSTALLATION_TYPE" == "ENTERPRISE" ]; then
DOCUMENT_SERVER_IMAGE_NAME=${DOCUMENT_SERVER_IMAGE_NAME:-"${PACKAGE_SYSNAME}/${STATUS}documentserver-ee"}
fi
}
@ -784,9 +950,14 @@ download_files () {
install_service svn subversion
fi
svn export --force https://github.com/ONLYOFFICE/${PRODUCT}/branches/${GIT_BRANCH}/build/install/docker/ ${BASE_DIR}
svn export --force https://github.com/${PACKAGE_SYSNAME}/${PRODUCT}/branches/${GIT_BRANCH}/build/install/docker/ ${BASE_DIR}
reconfigure STATUS ${STATUS}
reconfigure MYSQL_DATABASE ${MYSQL_DATABASE}
reconfigure MYSQL_USER ${MYSQL_USER}
reconfigure MYSQL_PASSWORD ${MYSQL_PASSWORD}
reconfigure MYSQL_ROOT_PASSWORD ${MYSQL_ROOT_PASSWORD}
}
reconfigure () {
@ -803,20 +974,7 @@ install_mysql_server () {
install_docker_compose
fi
if [[ -z ${MYSQL_PASSWORD} ]] && [[ -z ${MYSQL_ROOT_PASSWORD} ]]; then
MYSQL_PASSWORD=$(get_random_str 20 | sed -e 's/;/%/g' -e 's/=/%/g' -e 's/!/%/g');
MYSQL_ROOT_PASSWORD=$(get_random_str 20 | sed -e 's/;/%/g' -e 's/=/%/g' -e 's/!/%/g');
elif [[ -z ${MYSQL_PASSWORD} ]] || [[ -z ${MYSQL_ROOT_PASSWORD} ]]; then
MYSQL_PASSWORD=${MYSQL_PASSWORD:-"$MYSQL_ROOT_PASSWORD"}
MYSQL_ROOT_PASSWORD=${MYSQL_ROOT_PASSWORD:-"$MYSQL_PASSWORD"}
fi
reconfigure MYSQL_VERSION ${MYSQL_VERSION}
reconfigure MYSQL_DATABASE ${MYSQL_DATABASE}
reconfigure MYSQL_USER ${MYSQL_USER}
reconfigure MYSQL_PASSWORD ${MYSQL_PASSWORD}
reconfigure MYSQL_ROOT_PASSWORD ${MYSQL_ROOT_PASSWORD}
reconfigure MYSQL_HOST ${MYSQL_HOST}
reconfigure DATABASE_MIGRATION ${DATABASE_MIGRATION}
docker-compose -f $BASE_DIR/db.yml up -d
@ -827,10 +985,9 @@ install_document_server () {
install_docker_compose
fi
reconfigure DOCUMENT_SERVER_IMAGE_NAME ${DOCUMENT_SERVER_IMAGE_NAME}
reconfigure DOCUMENT_SERVER_IMAGE_NAME "${DOCUMENT_SERVER_IMAGE_NAME}:${DOCUMENT_SERVER_VERSION:-$(get_available_version "$DOCUMENT_SERVER_IMAGE_NAME")}"
reconfigure DOCUMENT_SERVER_JWT_HEADER ${DOCUMENT_SERVER_JWT_HEADER}
reconfigure DOCUMENT_SERVER_JWT_SECRET ${DOCUMENT_SERVER_JWT_SECRET}
reconfigure DOCUMENT_SERVER_HOST ${DOCUMENT_SERVER_HOST}
docker-compose -f $BASE_DIR/ds.yml up -d
}
@ -855,17 +1012,26 @@ install_product () {
if ! command_exists docker-compose; then
install_docker_compose
fi
DOCKER_TAG="${DOCKER_TAG:-$(get_available_version ${IMAGE_NAME})}"
[ "${UPDATE}" = "true" ] && LOCAL_CONTAINER_TAG="$(docker inspect --format='{{index .Config.Image}}' ${CONTAINER_NAME} | awk -F':' '{print $2}')"
if [ "${UPDATE}" = "true" ] && [ "${LOCAL_CONTAINER_TAG}" != "${DOCKER_TAG}" ]; then
docker-compose -f $BASE_DIR/build.yml pull
docker-compose -f $BASE_DIR/migration-runner.yml -f $BASE_DIR/notify.yml -f $BASE_DIR/healthchecks.yml down
docker-compose -f $BASE_DIR/${PRODUCT}.yml down --volumes
fi
reconfigure ENV_EXTENSION ${ENV_EXTENSION}
reconfigure ELK_HOST ${ELK_HOST}
reconfigure ELK_VERSION ${ELK_VERSION}
reconfigure SERVICE_PORT ${SERVICE_PORT}
reconfigure DOCUMENT_SERVER_HOST ${DOCUMENT_SERVER_HOST}
reconfigure MYSQL_HOST ${MYSQL_HOST}
reconfigure APP_CORE_MACHINEKEY ${APP_CORE_MACHINEKEY}
reconfigure APP_CORE_BASE_DOMAIN ${APP_CORE_BASE_DOMAIN}
reconfigure DOCKER_TAG ${DOCKER_TAG}
if [[ -n $EXTERNAL_PORT ]]; then
sed -i "s/8092:8092/${EXTERNAL_PORT}:8092/g" $BASE_DIR/${PRODUCT}.yml
fi
[[ -n $EXTERNAL_PORT ]] && sed -i "s/8092:8092/${EXTERNAL_PORT}:8092/g" $BASE_DIR/${PRODUCT}.yml
docker-compose -f $BASE_DIR/migration-runner.yml up -d
docker-compose -f $BASE_DIR/${PRODUCT}.yml up -d
@ -873,93 +1039,15 @@ install_product () {
docker-compose -f $BASE_DIR/healthchecks.yml up -d
}
get_local_image_RepoDigests() {
local CONTAINER_IMAGE=$1;
LOCAL_IMAGE_RepoDigest=$(docker inspect --format='{{index .RepoDigests 0}}' $CONTAINER_IMAGE)
if [ -z ${LOCAL_IMAGE_RepoDigest} ]; then
echo "Local docker image not found, check the name of docker image $CONTAINER_IMAGE"
exit 1
fi
echo $LOCAL_IMAGE_RepoDigest
}
check_pull_image() {
local CONTAINER_IMAGE=$1;
CHECK_STATUS_IMAGE="$(docker pull $CONTAINER_IMAGE | grep Status | awk '{print $2" "$3" "$4" "$5" "$6}')"
if [ "${CHECK_STATUS_IMAGE}" == "Image is up to date" ]; then
echo "No updates required"
fi
}
check_image_RepoDigest() {
local OLD_LOCAL_IMAGE_RepoDigest=$1
local NEW_LOCAL_IMAGE_RepoDigest=$2
if [ "${OLD_LOCAL_IMAGE_RepoDigest}" == "${NEW_LOCAL_IMAGE_RepoDigest}" ]; then
CHECK_RepoDigest="false";
else
CHECK_RepoDigest="true";
fi
}
docker_image_update() {
docker-compose -f $BASE_DIR/notify.yml -f $BASE_DIR/${PRODUCT}.yml down --volumes
docker-compose -f $BASE_DIR/build.yml pull
}
update_product () {
if ! command_exists docker-compose; then
install_docker_compose
fi
IMAGE_NAME="onlyoffice-api"
CONTAINER_IMAGE=$(docker inspect --format='{{.Config.Image}}' $IMAGE_NAME)
OLD_LOCAL_IMAGE_RepoDigest=$(get_local_image_RepoDigests "${CONTAINER_IMAGE}")
check_pull_image "${CONTAINER_IMAGE}"
NEW_LOCAL_IMAGE_RepoDigest=$(get_local_image_RepoDigests "${CONTAINER_IMAGE}")
check_image_RepoDigest ${OLD_LOCAL_IMAGE_RepoDigest} ${NEW_LOCAL_IMAGE_RepoDigest}
if [ ${CHECK_RepoDigest} == "true" ]; then
docker_image_update
fi
}
save_parameter() {
local VARIABLE_NAME=$1
local VARIABLE_VALUE=$2
if [[ -z ${VARIABLE_VALUE} ]]; then
sed -n "/.*${VARIABLE_NAME}=/s///p" $BASE_DIR/.env
else
echo $VARIABLE_VALUE
fi
}
save_parameters_from_configs() {
MYSQL_DATABASE=$(save_parameter MYSQL_DATABASE $MYSQL_DATABASE)
MYSQL_USER=$(save_parameter MYSQL_USER $MYSQL_USER)
MYSQL_PASSWORD=$(save_parameter MYSQL_PASSWORD $MYSQL_PASSWORD)
MYSQL_ROOT_PASSWORD=$(save_parameter MYSQL_ROOT_PASSWORD $MYSQL_ROOT_PASSWORD)
MYSQL_HOST=$(save_parameter MYSQL_HOST $MYSQL_HOST)
DOCUMENT_SERVER_JWT_SECRET=$(save_parameter DOCUMENT_SERVER_JWT_SECRET $DOCUMENT_SERVER_JWT_SECRET)
DOCUMENT_SERVER_JWT_HEADER=$(save_parameter DOCUMENT_SERVER_JWT_HEADER $DOCUMENT_SERVER_JWT_HEADER)
DOCUMENT_SERVER_HOST=$(save_parameter DOCUMENT_SERVER_HOST $DOCUMENT_SERVER_HOST)
ELK_HOST=$(save_parameter ELK_HOST $ELK_HOST)
SERVICE_PORT=$(save_parameter SERVICE_PORT $SERVICE_PORT)
APP_CORE_MACHINEKEY=$(save_parameter APP_CORE_MACHINEKEY $APP_CORE_MACHINEKEY)
APP_CORE_BASE_DOMAIN=$(save_parameter APP_CORE_BASE_DOMAIN $APP_CORE_BASE_DOMAIN)
if [ ${EXTERNAL_PORT} = "8092" ]; then
EXTERNAL_PORT=$(grep -oP '(?<=- ).*?(?=:8092)' /app/onlyoffice/${PRODUCT}.yml)
fi
}
start_installation () {
root_checking
get_os_info
set_installation_type_data
get_os_info
check_os_info
check_kernel
if [ "$UPDATE" != "true" ]; then
check_ports
fi
@ -977,21 +1065,18 @@ start_installation () {
docker_login
if [ "$UPDATE" = "true" ]; then
save_parameters_from_configs
fi
download_files
set_docspace_params
set_jwt_secret
set_jwt_header
set_core_machinekey
create_network
if [ "$UPDATE" = "true" ]; then
update_product
fi
set_mysql_params
download_files
if [ "$INSTALL_MYSQL_SERVER" == "true" ]; then
install_mysql_server
@ -1014,8 +1099,8 @@ start_installation () {
fi
echo ""
echo "Thank you for installing ONLYOFFICE ${PRODUCT^^}."
echo "In case you have any questions contact us via http://support.onlyoffice.com or visit our forum at http://dev.onlyoffice.org"
echo "Thank you for installing ${PACKAGE_SYSNAME^^} ${PRODUCT^^}."
echo "In case you have any questions contact us via http://support.${PACKAGE_SYSNAME}.com or visit our forum at http://dev.${PACKAGE_SYSNAME}.org"
echo ""
exit 0;

View File

@ -5,8 +5,8 @@ set -e
package_manager="yum"
package_sysname="onlyoffice";
product="docspace"
GIT_BRANCH="develop"
package_services="";
GIT_BRANCH="master"
INSTALLATION_TYPE="ENTERPRISE"
RES_APP_INSTALLED="is already installed";
RES_APP_CHECK_PORTS="uses ports"
RES_CHECK_PORTS="please, make sure that the ports are free.";
@ -31,6 +31,27 @@ while [ "$1" != "" ]; do
shift
fi
;;
-je | --jwtenabled )
if [ "$2" != "" ]; then
JWT_ENABLED=$2
shift
fi
;;
-jh | --jwtheader )
if [ "$2" != "" ]; then
JWT_HEADER=$2
shift
fi
;;
-js | --jwtsecret )
if [ "$2" != "" ]; then
JWT_SECRET=$2
shift
fi
;;
-gb | --gitbranch )
if [ "$2" != "" ]; then
@ -54,11 +75,23 @@ while [ "$1" != "" ]; do
fi
;;
-it | --installation_type )
if [ "$2" != "" ]; then
INSTALLATION_TYPE=$(echo "$2" | awk '{print toupper($0)}');
shift
fi
;;
-? | -h | --help )
echo " Usage $0 [PARAMETER] [[PARAMETER], ...]"
echo " Parameters:"
echo " -it, --installation_type installation type (community|enterprise)"
echo " -u, --update use to update existing components (true|false)"
echo " -je, --jwtenabled specifies the enabling the JWT validation (true|false)"
echo " -jh, --jwtheader defines the http header that will be used to send the JWT"
echo " -js, --jwtsecret defines the secret key to validate the JWT in the request"
echo " -ls, --local_scripts use 'true' to run local scripts (true|false)"
echo " -skiphc, --skiphardwarecheck use to skip hardware check (true|false)"
echo " -?, -h, --help this help"
echo
exit 0
@ -89,16 +122,6 @@ enabled=1
gpgkey=https://download.onlyoffice.com/GPG-KEY-ONLYOFFICE
END
cat > /etc/yum.repos.d/onlyoffice4testing.repo <<END
[onlyoffice4testing]
name=onlyoffice4testing repo
baseurl=http://static.teamlab.info.s3.amazonaws.com/repo/4testing/centos/main/noarch/
gpgcheck=1
enabled=1
gpgkey=https://download.onlyoffice.com/GPG-KEY-ONLYOFFICE
END
#DOWNLOAD_URL_PREFIX="https://download.onlyoffice.com/install-appserver/install-RedHat"
DOWNLOAD_URL_PREFIX="https://raw.githubusercontent.com/ONLYOFFICE/${product}/${GIT_BRANCH}/build/install/OneClickInstall/install-RedHat"
if [ "$LOCAL_SCRIPTS" = "true" ]; then

View File

@ -10,11 +10,11 @@ cat<<EOF
EOF
if rpm -qa | grep ${package_sysname}-${product}; then
echo "${package_sysname}-${product} $RES_APP_INSTALLED"
if rpm -qa | grep ${product}; then
echo "${product} $RES_APP_INSTALLED"
PRODUCT_INSTALLED="true";
elif [ "${UPDATE}" != "true" ] && netstat -lnp | awk '{print $4}' | grep -qE ":80$|:8081$|:8083$|:5001$|:5002$|:8080$|:80$"; then
echo "${package_sysname}-${product} $RES_APP_CHECK_PORTS: 80, 8081, 8083, 5001, 5002, 9200, 2181, 9092";
echo "${product} $RES_APP_CHECK_PORTS: 80, 8081, 8083, 5001, 5002, 9200, 2181, 9092";
echo "$RES_CHECK_PORTS"
exit
else

View File

@ -18,6 +18,28 @@ for SVC in $package_services; do
systemctl enable $SVC
done
if [ "$UPDATE" = "true" ] && [ "$DOCUMENT_SERVER_INSTALLED" = "true" ]; then
ds_pkg_installed_name=$(rpm -qa --qf '%{NAME}\n' | grep ${package_sysname}-documentserver);
if [ "$INSTALLATION_TYPE" = "COMMUNITY" ]; then
ds_pkg_name="${package_sysname}-documentserver";
fi
if [ "$INSTALLATION_TYPE" = "ENTERPRISE" ]; then
ds_pkg_name="${package_sysname}-documentserver-ee";
fi
if [ -n $ds_pkg_name ]; then
if ! rpm -qi ${ds_pkg_name} &> /dev/null; then
${package_manager} -y remove ${ds_pkg_installed_name}
DOCUMENT_SERVER_INSTALLED="false"
else
${package_manager} -y update ${ds_pkg_name}
fi
fi
fi
MYSQL_SERVER_HOST=${MYSQL_SERVER_HOST:-"localhost"}
MYSQL_SERVER_DB_NAME=${MYSQL_SERVER_DB_NAME:-"${package_sysname}"}
MYSQL_SERVER_USER=${MYSQL_SERVER_USER:-"root"}
@ -65,16 +87,20 @@ if [ "$DOCUMENT_SERVER_INSTALLED" = "false" ]; then
DS_DB_USER=$DS_COMMON_NAME;
DS_DB_PWD=$DS_COMMON_NAME;
declare -x JWT_ENABLED=true;
declare -x JWT_SECRET="$(cat /dev/urandom | tr -dc A-Za-z0-9 | head -c 32)";
declare -x JWT_HEADER="AuthorizationJwt";
declare -x JWT_ENABLED=${JWT_ENABLED:-true};
declare -x JWT_SECRET=${JWT_SECRET:-$(cat /dev/urandom | tr -dc A-Za-z0-9 | head -c 32)};
declare -x JWT_HEADER=${JWT_HEADER:-AuthorizationJwt};
if ! su - postgres -s /bin/bash -c "psql -lqt" | cut -d \| -f 1 | grep -q ${DS_DB_NAME}; then
su - postgres -s /bin/bash -c "psql -c \"CREATE USER ${DS_DB_USER} WITH password '${DS_DB_PWD}';\""
su - postgres -s /bin/bash -c "psql -c \"CREATE DATABASE ${DS_DB_NAME} OWNER ${DS_DB_USER};\""
fi
${package_manager} -y install ${package_sysname}-documentserver
if [ "$INSTALLATION_TYPE" = "COMMUNITY" ]; then
${package_manager} -y install ${package_sysname}-documentserver
else
${package_manager} -y install ${package_sysname}-documentserver-ee
fi
expect << EOF
@ -97,6 +123,11 @@ expect << EOF
expect -re "Password"
send "\025$DS_DB_PWD\r"
if { "${INSTALLATION_TYPE}" == "ENTERPRISE" } {
expect "Configuring redis access..."
send "\025$DS_REDIS_HOST\r"
}
expect "Configuring AMQP access... "
expect -re "Host"
send "\025$DS_RABBITMQ_HOST\r"
@ -110,9 +141,6 @@ expect << EOF
expect eof
EOF
DOCUMENT_SERVER_INSTALLED="true";
elif [ "$UPDATE" = "true" ] && [ "$DOCUMENT_SERVER_INSTALLED" = "true" ]; then
${package_manager} -y update ${package_sysname}-documentserver
fi
{ ${package_manager} check-update ${product}; PRODUCT_CHECK_UPDATE=$?; } || true
@ -124,21 +152,15 @@ if [ "$PRODUCT_INSTALLED" = "false" ]; then
-mysqlu ${MYSQL_SERVER_USER} \
-mysqlp ${MYSQL_ROOT_PASS}
elif [[ $PRODUCT_CHECK_UPDATE -eq $UPDATE_AVAILABLE_CODE ]]; then
ENVIRONMENT="$(cat /lib/systemd/system/${product}-api.service | grep -oP 'ENVIRONMENT=\K.*')"
USER_CONNECTIONSTRING=$(json -f /etc/onlyoffice/${product}/appsettings.$ENVIRONMENT.json ConnectionStrings.default.connectionString)
MYSQL_SERVER_HOST=$(echo $USER_CONNECTIONSTRING | grep -oP 'Server=\K.*' | grep -o '^[^;]*')
MYSQL_SERVER_DB_NAME=$(echo $USER_CONNECTIONSTRING | grep -oP 'Database=\K.*' | grep -o '^[^;]*')
MYSQL_SERVER_USER=$(echo $USER_CONNECTIONSTRING | grep -oP 'User ID=\K.*' | grep -o '^[^;]*')
MYSQL_SERVER_PORT=$(echo $USER_CONNECTIONSTRING | grep -oP 'Port=\K.*' | grep -o '^[^;]*')
MYSQL_ROOT_PASS=$(echo $USER_CONNECTIONSTRING | grep -oP 'Password=\K.*' | grep -o '^[^;]*')
ENVIRONMENT=$(grep -oP 'ENVIRONMENT=\K.*' /lib/systemd/system/${product}-api.service)
CONNECTION_STRING=$(json -f /etc/${package_sysname}/${product}/appsettings.$ENVIRONMENT.json ConnectionStrings.default.connectionString)
${package_manager} -y update ${product}
${product}-configuration \
-e ${ENVIRONMENT} \
-mysqlh ${MYSQL_SERVER_HOST} \
-mysqld ${MYSQL_SERVER_DB_NAME} \
-mysqlu ${MYSQL_SERVER_USER} \
-mysqlp ${MYSQL_ROOT_PASS}
-e $ENVIRONMENT \
-mysqlh $(grep -oP 'Server=\K[^;]*' <<< "$CONNECTION_STRING") \
-mysqld $(grep -oP 'Database=\K[^;]*' <<< "$CONNECTION_STRING") \
-mysqlu $(grep -oP 'User ID=\K[^;]*' <<< "$CONNECTION_STRING") \
-mysqlp $(grep -oP 'Password=\K[^;]*' <<< "$CONNECTION_STRING")
fi
echo ""

View File

@ -50,6 +50,7 @@ yum localinstall -y --nogpgcheck https://download1.rpmfusion.org/free/el/rpmfusi
MONOREV=$REV
if [ "$REV" = "9" ]; then
MONOREV="8"
TESTING_REPO="--enablerepo=crb"
elif [ "$REV" = "8" ]; then
POWERTOOLS_REPO="--enablerepo=powertools"
fi
@ -117,7 +118,7 @@ ${package_manager} -y install epel-release \
redis --enablerepo=remi \
SDL2 $POWERTOOLS_REPO \
expect \
ffmpeg
ffmpeg $TESTING_REPO
py3_version=$(python3 -c 'import sys; print(sys.version_info.minor)')
if [[ $py3_version -lt 6 ]]; then

View File

@ -8,6 +8,7 @@ PACKAGE_SYSNAME="onlyoffice"
APP_DIR="/etc/${PACKAGE_SYSNAME}/${PRODUCT}"
PRODUCT_DIR="/var/www/${PRODUCT}"
LOG_DIR="/var/log/${PACKAGE_SYSNAME}/${PRODUCT}"
USER_CONF="$APP_DIR/appsettings.$ENVIRONMENT.json"
NGINX_DIR="/etc/nginx"
@ -22,9 +23,6 @@ DB_PWD=""
APP_HOST="localhost"
APP_PORT="80"
DOCUMENT_SERVER_HOST="localhost";
DOCUMENT_SERVER_PORT="8083";
ELK_SHEME="http"
ELK_HOST="localhost"
ELK_PORT="9200"
@ -170,6 +168,13 @@ while [ "$1" != "" ]; do
shift
fi
;;
-mk | --machinekey )
if [ "$2" != "" ]; then
CORE_MACHINEKEY=$2
shift
fi
;;
-? | -h | --help )
echo " Usage: bash ${PRODUCT}-configuration [PARAMETER] [[PARAMETER], ...]"
@ -191,6 +196,7 @@ while [ "$1" != "" ]; do
echo " -mysqld, --mysqldatabase ${PRODUCT} database name"
echo " -mysqlu, --mysqluser ${PRODUCT} database user"
echo " -mysqlp, --mysqlpassword ${PRODUCT} database password"
echo " -mk, --machinekey setting for core.machinekey"
echo " -e, --environment environment (default 'production')"
echo " -?, -h, --help this help"
echo
@ -206,11 +212,17 @@ while [ "$1" != "" ]; do
done
set_core_machinekey () {
if [ -f $APP_DIR/.private/machinekey ]; then
CORE_MACHINEKEY=$(cat $APP_DIR/.private/machinekey)
if [[ -f $APP_DIR/.private/machinekey ]] || [[ -n $CORE_MACHINEKEY ]]; then
CORE_MACHINEKEY=${CORE_MACHINEKEY:-$(cat $APP_DIR/.private/machinekey)};
else
CORE_MACHINEKEY=$(cat /dev/urandom | tr -dc A-Za-z0-9 | head -c 12);
echo $CORE_MACHINEKEY >> $APP_DIR/.private/machinekey
if [ "$DIST" = "RedHat" ]; then
echo $CORE_MACHINEKEY > $APP_DIR/.private/machinekey
chmod o-rwx $APP_DIR/.private/machinekey
elif [ "$DIST" = "Debian" ]; then
db_set ${PRODUCT}/machinekey $CORE_MACHINEKEY || true
echo ${PRODUCT} ${PRODUCT}/machinekey select $CORE_MACHINEKEY | debconf-set-selections || true
fi
fi
$JSON_USERCONF "this.core={'base-domain': \"$APP_HOST\", 'machinekey': \"$CORE_MACHINEKEY\" }" >/dev/null 2>&1
@ -227,7 +239,9 @@ install_json() {
}
restart_services() {
sed -e "s/ENVIRONMENT=.*/ENVIRONMENT=$ENVIRONMENT/" -e "s/environment=.*/environment=$ENVIRONMENT/" -i /lib/systemd/system/${PRODUCT}*.service >/dev/null 2>&1
chown -R ${PACKAGE_SYSNAME}:${PACKAGE_SYSNAME} $APP_DIR $PRODUCT_DIR $LOG_DIR
sed "s_\(ENVIRONMENT=\).*_\1${ENVIRONMENT}_i" -i /lib/systemd/system/${PRODUCT}*.service >/dev/null 2>&1
systemctl daemon-reload
echo -n "Updating database... "
@ -247,10 +261,10 @@ restart_services() {
}
input_db_params(){
local user_connectionString=$(json -f $USER_CONF ConnectionStrings.default.connectionString)
local def_DB_HOST=$(echo $user_connectionString | grep -oP 'Server=\K.*' | grep -o '^[^;]*')
local def_DB_NAME=$(echo $user_connectionString | grep -oP 'Database=\K.*' | grep -o '^[^;]*')
local def_DB_USER=$(echo $user_connectionString | grep -oP 'User ID=\K.*' | grep -o '^[^;]*')
local CONNECTION_STRING=$(json -f $USER_CONF ConnectionStrings.default.connectionString)
local def_DB_HOST=$(grep -oP 'Server=\K[^;]*' <<< "$CONNECTION_STRING")
local def_DB_NAME=$(grep -oP 'Database=\K[^;]*' <<< "$CONNECTION_STRING")
local def_DB_USER=$(grep -oP 'User ID=\K[^;]*' <<< "$CONNECTION_STRING")
if [ -z $def_DB_HOST ] && [ -z $DB_HOST ]; then
read -e -p "Database host: " -i "$DB_HOST" DB_HOST;
@ -293,8 +307,8 @@ establish_mysql_conn(){
fi
#Save db settings in .json
CONNECTION_STRING="Server=$DB_HOST;Port=$DB_PORT;Database=$DB_NAME;User ID=$DB_USER;Password=$DB_PWD;Pooling=true;Character Set=utf8;AutoEnlist=false; \
SSL Mode=none;AllowPublicKeyRetrieval=true;Connection Timeout=30;Maximum Pool Size=300"
CONNECTION_STRING="Server=$DB_HOST;Port=$DB_PORT;Database=$DB_NAME;User ID=$DB_USER;Password=$DB_PWD;Pooling=true; \
Character Set=utf8; AutoEnlist=false; SSL Mode=none;AllowPublicKeyRetrieval=true;Connection Timeout=30;Maximum Pool Size=300"
$JSON_USERCONF "this.ConnectionStrings={'default': {'connectionString': \"$CONNECTION_STRING\"}}" >/dev/null 2>&1
$JSON $APP_DIR/apisystem.$ENVIRONMENT.json -e "this.ConnectionStrings={'default': {'connectionString': \"$CONNECTION_STRING\"}}" >/dev/null 2>&1
@ -418,20 +432,15 @@ setup_nginx(){
# Remove default nginx website
rm -f $NGINX_CONF/default.conf >/dev/null 2>&1 || rm -f $NGINX_DIR/sites-enabled/default >/dev/null 2>&1
sed -i "s/listen.*;/listen $APP_PORT;/" $NGINX_CONF/${PACKAGE_SYSNAME}.conf
sed -i "s_\(listen\).*;_\1 $APP_PORT;_" $NGINX_CONF/${PACKAGE_SYSNAME}.conf
NGINX_WORKER_PROCESSES=${NGINX_WORKER_PROCESSES:-$(grep processor /proc/cpuinfo | wc -l)};
NGINX_WORKER_CONNECTIONS=${NGINX_WORKER_CONNECTIONS:-$(ulimit -n)};
sed "s!\(^worker_processes\).*;!\1 ${NGINX_WORKER_PROCESSES};!" -i ${NGINX_ROOT_DIR}/nginx.conf
sed "s!\(worker_connections\).*;!\1 ${NGINX_WORKER_CONNECTIONS};!" -i ${NGINX_ROOT_DIR}/nginx.conf
sed "s!\(^worker_processes\).*;!\1 ${NGINX_WORKER_PROCESSES:-$(grep processor /proc/cpuinfo | wc -l)};!" -i ${NGINX_DIR}/nginx.conf
sed "s!\(worker_connections\).*;!\1 ${NGINX_WORKER_CONNECTIONS:-$(ulimit -n)};!" -i ${NGINX_DIR}/nginx.conf
if [ "$DIST" = "RedHat" ]; then
# Remove default nginx settings
DELETION_LINE=$(sed -n '/server {/=' /etc/nginx/nginx.conf | head -n 1)
if [ -n "$DELETION_LINE" ]; then
sed "$DELETION_LINE,\$d" -i /etc/nginx/nginx.conf
echo "}" >> /etc/nginx/nginx.conf
if grep -q "server {" ${NGINX_DIR}/nginx.conf ; then
sed -e '$a}' -e '/server {/,$d' -i ${NGINX_DIR}/nginx.conf
fi
shopt -s nocasematch
@ -498,21 +507,17 @@ setup_nginx(){
}
setup_docs() {
echo -n "Configuring Docs... "
local DS_CONF="/etc/${PACKAGE_SYSNAME}/documentserver/local.json"
local JSON_DSCONF="$JSON $DS_CONF -e"
#Changing the Docs port in nginx conf
sed 's/\(listen .*:\)\([0-9]\{2,5\}\b\)\( default_server\)\?\(;\)/\1'${DOCUMENT_SERVER_PORT}'\3\4/' -i $NGINX_CONF/ds.conf
sed "0,/proxy_pass .*;/{s/proxy_pass .*;/proxy_pass http:\/\/${DOCUMENT_SERVER_HOST}:${DOCUMENT_SERVER_PORT};/}" -i $NGINX_CONF/${PACKAGE_SYSNAME}.conf
#Enable JWT validation for Docs
$JSON_DSCONF "this.services.CoAuthoring.token.enable.browser='true'" >/dev/null 2>&1
$JSON_DSCONF "this.services.CoAuthoring.token.enable.request.inbox='true'" >/dev/null 2>&1
$JSON_DSCONF "this.services.CoAuthoring.token.enable.request.outbox='true'" >/dev/null 2>&1
echo -n "Configuring docs... "
local DS_CONF_DIR="/etc/${PACKAGE_SYSNAME}/documentserver"
local DOCUMENT_SERVER_HOST=${DOCUMENT_SERVER_HOST:-localhost}
local DOCUMENT_SERVER_PORT=${DOCUMENT_SERVER_PORT:-$(grep -oP '(?<=:)\d+(?=\s)' ${DS_CONF_DIR}/nginx/ds.conf)}
local DOCUMENT_SERVER_JWT_SECRET=$(json -f ${DS_CONF} services.CoAuthoring.secret.inbox.string)
local DOCUMENT_SERVER_JWT_HEADER=$(json -f ${DS_CONF} services.CoAuthoring.token.inbox.header)
#Changing the Docs port in nginx conf
sed 's/\(listen .*:\)\([0-9]\{2,5\}\b\)\( default_server\)\?\(;\)/\1'${DOCUMENT_SERVER_PORT}'\3\4/' -i ${DS_CONF_DIR}/nginx/ds.conf
sed "0,/proxy_pass .*;/{s/proxy_pass .*;/proxy_pass http:\/\/${DOCUMENT_SERVER_HOST}:${DOCUMENT_SERVER_PORT};/}" -i $NGINX_CONF/${PACKAGE_SYSNAME}.conf
local DOCUMENT_SERVER_JWT_SECRET=$(json -f ${DS_CONF_DIR}/local.json services.CoAuthoring.secret.inbox.string)
local DOCUMENT_SERVER_JWT_HEADER=$(json -f ${DS_CONF_DIR}/local.json services.CoAuthoring.token.inbox.header)
#Save Docs address and JWT in .json
$JSON_USERCONF "this.files={'docservice': {\
@ -627,11 +632,10 @@ product_configuration(){
#Creating environment configuration files
enviromentFiles=("appsettings.$ENVIRONMENT.json" "apisystem.$ENVIRONMENT.json" "elastic.$ENVIRONMENT.json" "rabbitmq.$ENVIRONMENT.json")
for i in "${!enviromentFiles[@]}";
do
for i in "${!enviromentFiles[@]}"; do
if [ ! -e "$APP_DIR/${enviromentFiles[$i]}" ]; then
echo "{}" >> "$APP_DIR/${enviromentFiles[$i]}"
chown ${PACKAGE_SYSNAME}:${PACKAGE_SYSNAME} "$APP_DIR/${enviromentFiles[$i]}"
echo "{}" > "$APP_DIR/${enviromentFiles[$i]}"
chmod o-rwx "$APP_DIR/${enviromentFiles[$i]}"
fi
done
@ -661,14 +665,14 @@ if $PACKAGE_MANAGER mysql-client >/dev/null 2>&1 || $PACKAGE_MANAGER mysql-commu
establish_mysql_conn || exit $?
fi
if $PACKAGE_MANAGER nginx >/dev/null 2>&1; then
setup_nginx
fi
if $PACKAGE_MANAGER ${PACKAGE_SYSNAME}-documentserver >/dev/null 2>&1 || $PACKAGE_MANAGER ${PACKAGE_SYSNAME}-documentserver-de >/dev/null 2>&1 || $PACKAGE_MANAGER ${PACKAGE_SYSNAME}-documentserver-ee >/dev/null 2>&1; then
setup_docs
fi
if $PACKAGE_MANAGER nginx >/dev/null 2>&1; then
setup_nginx
fi
if $PACKAGE_MANAGER elasticsearch >/dev/null 2>&1; then
setup_elasticsearch
fi

View File

@ -5,7 +5,7 @@ SRC_PATH="/AppServer"
BUILD_PATH="/publish"
SELF_CONTAINED="false"
ARGS=""
PUBLISH_CNF="Release"
while [ "$1" != "" ]; do
case $1 in
@ -34,6 +34,12 @@ while [ "$1" != "" ]; do
ARGS=$2
shift
fi
;;
-pc | --publish-configuration )
if [ "$2" != "" ]; then
PUBLISH_CNF=$2
shift
fi
;;
-? | -h | --help )
echo " Usage: bash publish-backend.sh [PARAMETER] [[PARAMETER], ...]"
@ -42,6 +48,7 @@ while [ "$1" != "" ]; do
echo " -bp, --buildpath path where generated output is placed (by default=/publish)"
echo " -sc, --self-contained publish the .NET runtime with your application (by default=false)"
echo " -ar, --arguments additional arguments publish the .NET runtime with your application"
echo " -pc, --publish-configuration dotnet publish configuration Ex. Release/Debug"
echo " -?, -h, --help this help"
echo " Examples"
echo " bash publish-backend.sh -sp /app/AppServer"
@ -66,7 +73,7 @@ for i in ${!servers_products_name_backend[@]}; do
echo "== Publish ${servers_products_name_backend[$i]}.csproj project =="
SERVICE_DIR="$(dirname "$(find ${SRC_PATH} -type f -name "${servers_products_name_backend[$i]}".csproj)")"
cd ${SERVICE_DIR}
dotnet publish -c Release --self-contained ${SELF_CONTAINED} ${ARGS} -o ${BUILD_PATH}/products/${servers_products_name_backend[$i]}/server/
dotnet publish -c ${PUBLISH_CNF} --self-contained ${SELF_CONTAINED} ${ARGS} -o ${BUILD_PATH}/products/${servers_products_name_backend[$i]}/server/
done
# Array of names backend services
@ -87,7 +94,7 @@ for i in ${!services_name_backend[@]}; do
echo "== Publish ${services_name_backend[$i]}.csproj project =="
SERVICE_DIR="$(dirname "$(find ${SRC_PATH} -type f -name "${services_name_backend[$i]}".csproj)")"
cd ${SERVICE_DIR}
dotnet publish -c Release --self-contained ${SELF_CONTAINED} ${ARGS} -o ${BUILD_PATH}/services/${services_name_backend[$i]}/service/
dotnet publish -c ${PUBLISH_CNF} --self-contained ${SELF_CONTAINED} ${ARGS} -o ${BUILD_PATH}/services/${services_name_backend[$i]}/service/
done
# Array of names backend services in directory common (Nodejs)

View File

@ -38,174 +38,125 @@ Description: {{product}}
Package: {{product}}-common
Architecture: any
Depends: adduser, logrotate, ${misc:Depends}, ${shlibs:Depends}
Recommends: default-mysql-client
Description: {{product}}-common
{{product}}-common
Package: {{product}}-backup
Architecture: any
Depends: {{product}}-common (= {{package_header_tag_version}}),
dotnet-sdk-7.0,
${misc:Depends},
${shlibs:Depends}
Depends: {{product}}-common (= {{package_header_tag_version}}), dotnet-sdk-7.0, ${misc:Depends}, ${shlibs:Depends}
Description: {{product}}-backup
{{product}}-backup
Package: {{product}}-files
Architecture: any
Depends: {{product}}-common (= {{package_header_tag_version}}),
dotnet-sdk-7.0,
${misc:Depends},
${shlibs:Depends}
Depends: {{product}}-common (= {{package_header_tag_version}}), dotnet-sdk-7.0, ${misc:Depends}, ${shlibs:Depends}
Recommends: elasticsearch (= 7.10.0)
Description: {{product}}-files
{{product}}-files
Package: {{product}}-files-services
Architecture: any
Depends: {{product}}-common (= {{package_header_tag_version}}),
dotnet-sdk-7.0,
ffmpeg,
${misc:Depends},
${shlibs:Depends}
Depends: {{product}}-common (= {{package_header_tag_version}}), dotnet-sdk-7.0, ${misc:Depends}, ${shlibs:Depends}
Recommends: ffmpeg, elasticsearch (= 7.10.0)
Description: {{product}}-files-services
{{product}}-files-services
Package: {{product}}-notify
Architecture: any
Depends: {{product}}-common (= {{package_header_tag_version}}),
dotnet-sdk-7.0,
${misc:Depends},
${shlibs:Depends}
Depends: {{product}}-common (= {{package_header_tag_version}}), dotnet-sdk-7.0, ${misc:Depends}, ${shlibs:Depends}
Recommends: ffmpeg, elasticsearch (= 7.10.0)
Description: {{product}}-notify
{{product}}-notify
Package: {{product}}-people-server
Architecture: any
Depends: {{product}}-common (= {{package_header_tag_version}}),
dotnet-sdk-7.0,
${misc:Depends},
${shlibs:Depends}
Depends: {{product}}-common (= {{package_header_tag_version}}), dotnet-sdk-7.0, ${misc:Depends}, ${shlibs:Depends}
Description: {{product}}-people-server
{{product}}-people-server
Package: {{product}}-socket
Architecture: any
Depends: {{product}}-common (= {{package_header_tag_version}}),
nodejs (>=16),
${misc:Depends},
${shlibs:Depends}
Depends: {{product}}-common (= {{package_header_tag_version}}), nodejs (>= 16), ${misc:Depends}, ${shlibs:Depends}
Recommends: redis-server
Description: {{product}}-socket
{{product}}-socket
Package: {{product}}-studio-notify
Architecture: any
Depends: {{product}}-common (= {{package_header_tag_version}}),
dotnet-sdk-7.0,
${misc:Depends},
${shlibs:Depends}
Depends: {{product}}-common (= {{package_header_tag_version}}), dotnet-sdk-7.0, ${misc:Depends}, ${shlibs:Depends}
Description: {{product}}-studio-notify
{{product}}-studio-notify
Package: {{product}}-api
Architecture: any
Depends: {{product}}-common (= {{package_header_tag_version}}),
dotnet-sdk-7.0,
${misc:Depends},
${shlibs:Depends}
Depends: {{product}}-common (= {{package_header_tag_version}}), dotnet-sdk-7.0, ${misc:Depends}, ${shlibs:Depends}
Recommends: rabbitmq-server, apache-activemq, redis-server
Description: {{product}}-api
{{product}}-api
Package: {{product}}-api-system
Architecture: any
Depends: {{product}}-common (= {{package_header_tag_version}}),
dotnet-sdk-7.0,
${misc:Depends},
${shlibs:Depends}
Depends: {{product}}-common (= {{package_header_tag_version}}), dotnet-sdk-7.0, ${misc:Depends}, ${shlibs:Depends}
Description: {{product}}-api-system
{{product}}-api-system
Package: {{product}}-studio
Architecture: any
Depends: {{product}}-common (= {{package_header_tag_version}}),
dotnet-sdk-7.0,
${misc:Depends},
${shlibs:Depends}
Depends: {{product}}-common (= {{package_header_tag_version}}), dotnet-sdk-7.0, ${misc:Depends}, ${shlibs:Depends}
Description: {{product}}-studio
{{product}}-studio
Package: {{product}}-proxy
Architecture: any
Depends: nginx, ${misc:Depends}, ${shlibs:Depends}
Depends: {{product}}-common (= {{package_header_tag_version}}), nginx-extras (>= 1.9.5), ${misc:Depends}, ${shlibs:Depends}
Description: {{product}}-proxy
{{product}}-proxy
Package: {{product}}-ssoauth
Architecture: any
Depends: {{product}}-common (= {{package_header_tag_version}}),
nodejs (>=16),
${misc:Depends},
${shlibs:Depends}
Depends: {{product}}-common (= {{package_header_tag_version}}), nodejs (>= 16), ${misc:Depends}, ${shlibs:Depends}
Description: {{product}}-ssoauth
{{product}}-ssoauth
Package: {{product}}-backup-background
Architecture: any
Depends: {{product}}-common (= {{package_header_tag_version}}),
dotnet-sdk-7.0,
${misc:Depends},
${shlibs:Depends}
Depends: {{product}}-common (= {{package_header_tag_version}}), dotnet-sdk-7.0, ${misc:Depends}, ${shlibs:Depends}
Description: {{product}}-backup-background
{{product}}-backup-background
Package: {{product}}-clear-events
Architecture: any
Depends: {{product}}-common (= {{package_header_tag_version}}),
dotnet-sdk-7.0,
${misc:Depends},
${shlibs:Depends}
Depends: {{product}}-common (= {{package_header_tag_version}}), dotnet-sdk-7.0, ${misc:Depends}, ${shlibs:Depends}
Description: {{product}}-clear-events
{{product}}-clear-events
Package: {{product}}-migration-runner
Architecture: any
Depends: {{product}}-common (= {{package_header_tag_version}}),
dotnet-sdk-7.0,
${misc:Depends},
${shlibs:Depends}
Depends: {{product}}-common (= {{package_header_tag_version}}), dotnet-sdk-7.0, ${misc:Depends}, ${shlibs:Depends}
Description: {{product}}-migration-runner
{{product}}-migration-runner
Package: {{product}}-radicale
Architecture: any
Depends: {{product}}-common (= {{package_header_tag_version}}),
python3-pip,
${misc:Depends},
${shlibs:Depends}
Depends: {{product}}-common (= {{package_header_tag_version}}), python3-pip, ${misc:Depends}, ${shlibs:Depends}
Description: {{product}}-radicale
{{product}}-radicale
Package: {{product}}-doceditor
Architecture: any
Depends: {{product}}-common (= {{package_header_tag_version}}),
nodejs (>=16),
${misc:Depends},
${shlibs:Depends}
Depends: {{product}}-common (= {{package_header_tag_version}}), nodejs (>= 16), ${misc:Depends}, ${shlibs:Depends}
Description: {{product}}-doceditor
{{product}}-doceditor
Package: {{product}}-login
Architecture: any
Depends: {{product}}-common (= {{package_header_tag_version}}),
nodejs (>=16),
${misc:Depends},
${shlibs:Depends}
Depends: {{product}}-common (= {{package_header_tag_version}}), nodejs (>= 16), ${misc:Depends}, ${shlibs:Depends}
Description: {{product}}-login
{{product}}-login
Package: {{product}}-healthchecks
Architecture: any
Depends: {{product}}-common (= {{package_header_tag_version}}),
dotnet-sdk-7.0,
${misc:Depends},
${shlibs:Depends}
Depends: {{product}}-common (= {{package_header_tag_version}}), dotnet-sdk-7.0, ${misc:Depends}, ${shlibs:Depends}
Description: {{product}}-healthchecks
{{product}}-healthchecks

View File

@ -1,4 +1,4 @@
#!/bin/sh -e
#!/bin/bash
set -e
@ -6,50 +6,67 @@ set -e
case "$1" in
configure)
db_get {{product}}/environment || true
ENVIRONMENT="$RET"
db_get {{product}}/host || true
APP_HOST="$RET"
db_get {{product}}/port || true
APP_PORT="$RET"
db_get {{product}}/db-host || true
DB_HOST="$RET"
db_get {{product}}/db-name || true
DB_NAME="$RET"
db_get {{product}}/db-user || true
DB_USER="$RET"
db_get {{product}}/db-pwd || true
DB_PWD="$RET"
db_get {{product}}/environment || true
ENVIRONMENT="$RET"
db_get {{product}}/host || true
APP_HOST="$RET"
db_get {{product}}/port || true
APP_PORT="$RET"
db_get {{product}}/machinekey || true
CORE_MACHINEKEY="$RET"
db_get {{product}}/redis-host || true
REDIS_HOST="$RET"
db_get {{product}}/redis-port || true
REDIS_PORT="$RET"
args+=(-e "$ENVIRONMENT" -ash "$APP_HOST" -asp "$APP_PORT" );
[ -n "$CORE_MACHINEKEY" ] && args+=(-mk "$CORE_MACHINEKEY" );
db_get {{product}}/rabbitmq-host || true
RABBITMQ_HOST="$RET"
db_get {{product}}/rabbitmq-user || true
RABBITMQ_USER="$RET"
db_get {{product}}/rabbitmq-port || true
RABBITMQ_PORT="$RET"
db_get {{product}}/rabbitmq-password || true
RABBITMQ_PASSWORD="$RET"
db_get {{product}}/db-host || true
DB_HOST="$RET"
db_get {{product}}/db-name || true
DB_NAME="$RET"
db_get {{product}}/db-user || true
DB_USER="$RET"
db_get {{product}}/db-pwd || true
DB_PWD="$RET"
db_get {{product}}/elasticsearch-sheme || true
ELK_SHEME="$RET"
db_get {{product}}/elasticsearch-host || true
ELK_HOST="$RET"
db_get {{product}}/elasticsearch-port || true
ELK_PORT="$RET"
args+=(-mysqlh "$DB_HOST" -mysqld "$DB_NAME" -mysqlu "$DB_USER" );
[ -n "$DB_PWD" ] && args+=(-mysqlp "$DB_PWD" );
db_get onlyoffice/db-host || true
DOCUMENT_SERVER_HOST="$RET"
db_get onlyoffice/ds-port || true
DOCUMENT_SERVER_PORT="$RET"
db_get {{product}}/redis-host || true
REDIS_HOST="$RET"
db_get {{product}}/redis-port || true
REDIS_PORT="$RET"
bash /usr/bin/{{product}}-configuration -e $ENVIRONMENT -mysqlh $DB_HOST -mysqld $DB_NAME -mysqlu $DB_USER -mysqlp $DB_PWD -ash $APP_HOST -asp $APP_PORT -dsh $DOCUMENT_SERVER_HOST \
-dsp $DOCUMENT_SERVER_PORT -rdh $REDIS_HOST -rdp $REDIS_PORT -rbh $RABBITMQ_HOST -rbp $RABBITMQ_PORT -rbu $RABBITMQ_USER -rbpw $RABBITMQ_PASSWORD -ess $ELK_SHEME -esh $ELK_HOST -esp $ELK_PORT
args+=(-rdh "$REDIS_HOST" -rdp "$REDIS_PORT" );
db_get {{product}}/rabbitmq-host || true
RABBITMQ_HOST="$RET"
db_get {{product}}/rabbitmq-user || true
RABBITMQ_USER="$RET"
db_get {{product}}/rabbitmq-port || true
RABBITMQ_PORT="$RET"
db_get {{product}}/rabbitmq-password || true
RABBITMQ_PASSWORD="$RET"
args+=(-rbh "$RABBITMQ_HOST" -rbp "$RABBITMQ_PORT" -rbu "$RABBITMQ_USER" -rbpw "$RABBITMQ_PASSWORD" );
db_get {{product}}/elasticsearch-sheme || true
ELK_SHEME="$RET"
db_get {{product}}/elasticsearch-host || true
ELK_HOST="$RET"
db_get {{product}}/elasticsearch-port || true
ELK_PORT="$RET"
args+=(-ess "$ELK_SHEME" -esh "$ELK_HOST" -esp "$ELK_PORT" );
db_get onlyoffice/db-host || true
DOCUMENT_SERVER_HOST="$RET"
db_get onlyoffice/ds-port || true
DOCUMENT_SERVER_PORT="$RET"
args+=(-dsh "$DOCUMENT_SERVER_HOST" -dsp "$DOCUMENT_SERVER_PORT" );
bash /usr/bin/{{product}}-configuration "${args[@]}"
exit 0
;;
abort-upgrade|abort-remove|abort-deconfigure)

View File

@ -0,0 +1,45 @@
#!/bin/sh
# postrm script for {{package_sysname}}
#
# see: dh_installdeb(1)
set -e
# summary of how this script can be called:
# * <postrm> `remove'
# * <postrm> `purge'
# * <old-postrm> `upgrade' <new-version>
# * <new-postrm> `failed-upgrade' <old-version>
# * <new-postrm> `abort-install'
# * <new-postrm> `abort-install' <old-version>
# * <new-postrm> `abort-upgrade' <old-version>
# * <disappearer's-postrm> `disappear' <overwriter>
# <overwriter-version>
# for details, see http://www.debian.org/doc/debian-policy/ or
# the debian-policy package
if [ "$1" = purge ] && [ -e /usr/share/debconf/confmodule ]; then
. /usr/share/debconf/confmodule
fi
case "$1" in
purge)
rm -rf /var/www/{{product}}
rm -rf /etc/onlyoffice/{{product}}
;;
remove|upgrade|failed-upgrade|abort-install|abort-upgrade|disappear)
;;
*)
echo "postrm called with unknown argument \`$1'" >&2
exit 1
;;
esac
# dh_installdeb will replace this with shell code automatically
# generated by other debhelper scripts.
#DEBHELPER#
exit 0

View File

@ -13,11 +13,10 @@ if ! cat /etc/group | grep -q "nginx:"; then
fi
if ! cat /etc/passwd | grep -q "nginx:"; then
adduser --quiet -g nginx --no-create-home --home /nonexistent --system nginx
adduser --quiet --group --no-create-home --home /nonexistent --system nginx
usermod -aG nginx nginx
fi
usermod -aG onlyoffice,nginx onlyoffice
chown -R onlyoffice:onlyoffice /var/log/onlyoffice/{{product}} /var/www/{{product}} /etc/onlyoffice/{{product}}
#DEBHELPER#

View File

@ -6,6 +6,9 @@ set -e
DIR="/var/www/{{product}}"
[ -f /usr/lib/python3.$(python3 -c 'import sys; print(sys.version_info.minor)')/EXTERNALLY-MANAGED ] && \
rm /usr/lib/python3.$(python3 -c 'import sys; print(sys.version_info.minor)')/EXTERNALLY-MANAGED
python3 -m pip install --upgrade pip
python3 -m pip install --upgrade requests
python3 -m pip install --upgrade setuptools

View File

@ -77,3 +77,7 @@ Template: {{product}}/rabbitmq-password
Type: string
Default: guest
Description: RabbitMQ password:
Template: {{product}}/machinekey
Type: string
Description: Enter your own machinekey:

View File

@ -49,8 +49,8 @@ override_dh_auto_build:
cp ${CURRENT_PATH}/debian/source/lintian-overrides ${CURRENT_PATH}/debian/$$i.lintian-overrides; \
done
override_dh_fixperms:
dh_fixperms
execute_after_dh_fixperms:
chmod o-rwx debian/${PRODUCT}-common/etc/onlyoffice/${PRODUCT}/*
override_dh_auto_install:
dh_systemd_enable --no-enable

View File

@ -41,3 +41,6 @@ invalid-standards-version
# Temporary ignoring of translation errors
untranslatable-debconf-templates
# We use this to protect sensitive information (ie passwords) in the config file
non-standard-file-perm

View File

@ -34,6 +34,8 @@
# app service environment #
ENV_EXTENSION=none
APP_CORE_BASE_DOMAIN=localhost
APP_KNOWN_PROXIES=""
APP_KNOWN_NETWORKS=""
APP_CORE_MACHINEKEY=your_core_machinekey
DOCUMENT_SERVER_JWT_SECRET=your_jwt_secret
@ -90,3 +92,5 @@
SERVICE_HELTHCHECKS=${HELTHCHECKS_HOST}:${SERVICE_PORT}
NETWORK_NAME=${PRODUCT}
COMPOSE_IGNORE_ORPHANS=True

View File

@ -14,6 +14,7 @@ ARG BUILD_PATH
ARG BUILD_ARGS="build"
ARG DEPLOY_ARGS="deploy"
ARG DEBUG_INFO="true"
ARG PUBLISH_CNF="Release"
LABEL onlyoffice.appserver.release-date="${RELEASE_DATE}" \
maintainer="Ascensio System SIA <support@onlyoffice.com>"
@ -51,7 +52,7 @@ RUN cd ${SRC_PATH} && \
cd ${SRC_PATH}/build/install/common/ && \
bash build-frontend.sh -sp "${SRC_PATH}" -ba "${BUILD_ARGS}" -da "${DEPLOY_ARGS}" -di "${DEBUG_INFO}" && \
bash build-backend.sh -sp "${SRC_PATH}" && \
bash publish-backend.sh -sp "${SRC_PATH}" -bp "${BUILD_PATH}" && \
bash publish-backend.sh -pc "${PUBLISH_CNF}" -sp "${SRC_PATH}" -bp "${BUILD_PATH}" && \
cp -rf ${SRC_PATH}/products/ASC.Files/Server/DocStore ${BUILD_PATH}/products/ASC.Files/server/ && \
rm -rf ${SRC_PATH}/common/* && \
rm -rf ${SRC_PATH}/web/ASC.Web.Core/* && \
@ -84,7 +85,7 @@ RUN mkdir -p /var/log/onlyoffice && \
vim \
python3-pip \
libgdiplus && \
pip3 install --upgrade jsonpath-ng multipledispatch && \
pip3 install --upgrade jsonpath-ng multipledispatch netaddr netifaces && \
rm -rf /var/lib/apt/lists/*
COPY --from=base --chown=onlyoffice:onlyoffice /app/onlyoffice/config/* /app/onlyoffice/config/
@ -113,7 +114,7 @@ RUN mkdir -p /var/log/onlyoffice && \
curl \
vim \
python3-pip && \
pip3 install --upgrade jsonpath-ng multipledispatch && \
pip3 install --upgrade jsonpath-ng multipledispatch netaddr netifaces && \
rm -rf /var/lib/apt/lists/*
COPY --from=base --chown=onlyoffice:onlyoffice /app/onlyoffice/config/* /app/onlyoffice/config/

View File

@ -14,6 +14,7 @@ ARG BUILD_PATH
ARG BUILD_ARGS="build"
ARG DEPLOY_ARGS="deploy"
ARG DEBUG_INFO="true"
ARG PUBLISH_CNF="Debug"
LABEL onlyoffice.docspace.release-date="${RELEASE_DATE}" \
maintainer="Ascensio System SIA <support@onlyoffice.com>"
@ -49,7 +50,7 @@ RUN cd ${SRC_PATH} && \
sed -e 's/#//' -i /etc/nginx/conf.d/onlyoffice.conf && \
cd ${SRC_PATH}/build/install/common/ && \
bash build-backend.sh -sp "${SRC_PATH}" && \
bash publish-backend.sh -sp "${SRC_PATH}" -bp "${BUILD_PATH}" && \
bash publish-backend.sh -pc "${PUBLISH_CNF}" -sp "${SRC_PATH}" -bp "${BUILD_PATH}" && \
cp -rf ${SRC_PATH}/products/ASC.Files/Server/DocStore ${BUILD_PATH}/products/ASC.Files/server/ && \
rm -rf ${SRC_PATH}/common/* && \
rm -rf ${SRC_PATH}/web/ASC.Web.Core/* && \
@ -82,7 +83,7 @@ RUN mkdir -p /var/log/onlyoffice && \
vim \
python3-pip \
libgdiplus && \
pip3 install --upgrade jsonpath-ng multipledispatch && \
pip3 install --upgrade jsonpath-ng multipledispatch netaddr netifaces && \
rm -rf /var/lib/apt/lists/*
COPY --from=base --chown=onlyoffice:onlyoffice /app/onlyoffice/config/* /app/onlyoffice/config/
@ -111,7 +112,7 @@ RUN mkdir -p /var/log/onlyoffice && \
curl \
vim \
python3-pip && \
pip3 install --upgrade jsonpath-ng multipledispatch && \
pip3 install --upgrade jsonpath-ng multipledispatch netaddr netifaces && \
rm -rf /var/lib/apt/lists/*
COPY --from=base --chown=onlyoffice:onlyoffice /app/onlyoffice/config/* /app/onlyoffice/config/

View File

@ -1,7 +1,8 @@
import json, sys, os
import json, sys, os, netifaces
from jsonpath_ng import jsonpath, parse
from os import environ
from multipledispatch import dispatch
from netaddr import *
filePath = None
saveFilePath = None
@ -26,6 +27,8 @@ APP_CORE_BASE_DOMAIN = os.environ["APP_CORE_BASE_DOMAIN"] if environ.get("APP_CO
APP_CORE_MACHINEKEY = os.environ["APP_CORE_MACHINEKEY"] if environ.get("APP_CORE_MACHINEKEY") else "your_core_machinekey"
APP_URL_PORTAL = os.environ["APP_URL_PORTAL"] if environ.get("APP_URL_PORTAL") else "http://" + ROUTER_HOST + ":8092"
APP_STORAGE_ROOT = os.environ["APP_STORAGE_ROOT"] if environ.get("APP_STORAGE_ROOT") else BASE_DIR + "/data/"
APP_KNOWN_PROXIES = os.environ["APP_KNOWN_PROXIES"]
APP_KNOWN_NETWORKS = os.environ["APP_KNOWN_NETWORKS"]
DOCUMENT_SERVER_JWT_SECRET = os.environ["DOCUMENT_SERVER_JWT_SECRET"] if environ.get("DOCUMENT_SERVER_JWT_SECRET") else "your_jwt_secret"
DOCUMENT_SERVER_JWT_HEADER = os.environ["DOCUMENT_SERVER_JWT_HEADER"] if environ.get("DOCUMENT_SERVER_JWT_HEADER") else "AuthorizationJwt"
@ -134,7 +137,7 @@ saveFilePath = filePath
filePath = "/app/onlyoffice/config/appsettings.json"
jsonData = openJsonFile(filePath)
#jsonUpdateValue = parseJsonValue(jsonValue)
updateJsonData(jsonData, "$.ConnectionStrings.default.connectionString", "Server="+ MYSQL_HOST +";Port=3306;Database="+ MYSQL_DATABASE +";User ID="+ MYSQL_USER +";Password="+ MYSQL_PASSWORD +";Pooling=true;Character Set=utf8;AutoEnlist=false;SSL Mode=none;ConnectionReset=false",)
updateJsonData(jsonData,"$.ConnectionStrings.default.connectionString", "Server="+ MYSQL_HOST +";Port=3306;Database="+ MYSQL_DATABASE +";User ID="+ MYSQL_USER +";Password="+ MYSQL_PASSWORD +";Pooling=true;Character Set=utf8;AutoEnlist=false;SSL Mode=none;ConnectionReset=false",)
updateJsonData(jsonData,"$.core.base-domain", APP_CORE_BASE_DOMAIN)
updateJsonData(jsonData,"$.core.machinekey", APP_CORE_MACHINEKEY)
updateJsonData(jsonData,"$.core.products.subfolder", "server")
@ -144,6 +147,23 @@ updateJsonData(jsonData,"$.files.docservice.url.public", DOCUMENT_SERVER_URL_PUB
updateJsonData(jsonData,"$.files.docservice.url.internal", DOCUMENT_SERVER_URL_INTERNAL)
updateJsonData(jsonData,"$.files.docservice.secret.value", DOCUMENT_SERVER_JWT_SECRET)
updateJsonData(jsonData,"$.files.docservice.secret.header", DOCUMENT_SERVER_JWT_HEADER)
ip_address = netifaces.ifaddresses('eth0').get(netifaces.AF_INET)[0].get('addr')
netmask = netifaces.ifaddresses('eth0').get(netifaces.AF_INET)[0].get('netmask')
ip_address_netmask = '%s/%s' % (ip_address, netmask)
interface_cidr = IPNetwork(ip_address_netmask)
knownNetwork = [str(interface_cidr)]
knownProxies = ["127.0.0.1"]
if APP_KNOWN_NETWORKS:
knownNetwork= knownNetwork + [x.strip() for x in APP_KNOWN_NETWORKS.split(',')]
if APP_KNOWN_PROXIES:
knownNetwork= knownNetwork + [x.strip() for x in APP_KNOWN_PROXIES.split(',')]
updateJsonData(jsonData,"$.core.hosting.forwardedHeadersOptions.knownNetworks", knownNetwork)
updateJsonData(jsonData,"$.core.hosting.forwardedHeadersOptions.knownProxies", knownProxies)
writeJsonFile(filePath, jsonData)
filePath = "/app/onlyoffice/config/apisystem.json"

View File

@ -12,6 +12,8 @@ x-service: &x-service-base
MYSQL_PASSWORD: ${MYSQL_PASSWORD}
DATABASE_MIGRATION: ${DATABASE_MIGRATION}
APP_DOTNET_ENV: ${APP_DOTNET_ENV}
APP_KNOWN_NETWORKS: ${APP_KNOWN_NETWORKS}
APP_KNOWN_PROXIES: ${APP_KNOWN_PROXIES}
APP_CORE_BASE_DOMAIN: ${APP_CORE_BASE_DOMAIN}
APP_CORE_MACHINEKEY: ${APP_CORE_MACHINEKEY}
APP_URL_PORTAL: ${APP_URL_PORTAL}

View File

@ -20,6 +20,8 @@ x-service: &x-service-base
MYSQL_PASSWORD: ${MYSQL_PASSWORD}
DATABASE_MIGRATION: ${DATABASE_MIGRATION}
APP_DOTNET_ENV: ${APP_DOTNET_ENV}
APP_KNOWN_NETWORKS: ${APP_KNOWN_NETWORKS}
APP_KNOWN_PROXIES: ${APP_KNOWN_PROXIES}
APP_CORE_BASE_DOMAIN: ${APP_CORE_BASE_DOMAIN}
APP_CORE_MACHINEKEY: ${APP_CORE_MACHINEKEY}
DOCUMENT_SERVER_JWT_SECRET: ${DOCUMENT_SERVER_JWT_SECRET}

View File

@ -21,6 +21,8 @@ x-service:
MYSQL_PASSWORD: ${MYSQL_PASSWORD}
DATABASE_MIGRATION: ${DATABASE_MIGRATION}
APP_DOTNET_ENV: ${APP_DOTNET_ENV}
APP_KNOWN_NETWORKS: ${APP_KNOWN_NETWORKS}
APP_KNOWN_PROXIES: ${APP_KNOWN_PROXIES}
APP_CORE_BASE_DOMAIN: ${APP_CORE_BASE_DOMAIN}
APP_CORE_MACHINEKEY: ${APP_CORE_MACHINEKEY}
DOCUMENT_SERVER_JWT_SECRET: ${DOCUMENT_SERVER_JWT_SECRET}

View File

@ -42,3 +42,6 @@ addFilter(r'E: non-executable-script')
# docspace-configuration.sh has a permission of 744, so that users do not have the opportunity to run the script
addFilter(r'non-standard-executable-perm')
# We use this to protect sensitive information (ie passwords) in the config file
addFilter(r'non-readable')

View File

@ -30,12 +30,14 @@
%files common
%defattr(-, onlyoffice, onlyoffice, -)
%config %{_sysconfdir}/onlyoffice/%{product}/
%config %attr(640, onlyoffice, onlyoffice) %{_sysconfdir}/onlyoffice/%{product}/*
%exclude %{_sysconfdir}/onlyoffice/%{product}/nginx
%{_docdir}/%{name}-%{version}-%{release}/
%config %{_sysconfdir}/logrotate.d/%{product}-common
%{_var}/log/onlyoffice/%{product}/
%dir %{_sysconfdir}/onlyoffice/
%dir %{_sysconfdir}/onlyoffice/%{product}/
%dir %{_sysconfdir}/onlyoffice/%{product}/.private/
%dir %{_var}/log/onlyoffice/
%files files-services

View File

@ -6,7 +6,6 @@ mkdir -p "%{buildroot}%{_sysconfdir}/logrotate.d"
mkdir -p "%{buildroot}%{_sysconfdir}/nginx/conf.d/"
mkdir -p "%{buildroot}%{_sysconfdir}/nginx/includes/"
mkdir -p "%{buildroot}%{_sysconfdir}/onlyoffice/%{product}/.private/"
mkdir -p "%{buildroot}%{_sysconfdir}/onlyoffice/%{product}/data/"
mkdir -p "%{buildroot}%{_var}/log/onlyoffice/%{product}/"
mkdir -p "%{buildroot}%{buildpath}/Tools/radicale/plugins/"
mkdir -p "%{buildroot}%{buildpath}/products/ASC.Files/client/"

View File

@ -18,7 +18,8 @@ Common
Summary: Files-services
Group: Applications/Internet
Requires: %name-common = %version-%release
Requires: dotnet-sdk-7.0, ffmpeg
Requires: dotnet-sdk-7.0
Requires: ffmpeg
AutoReqProv: no
%description files-services
Files-services

View File

@ -9,7 +9,7 @@
<ROW Property="AI_FINDEXE_TITLE" Value="Select the installation package for [|ProductName]" ValueLocId="AI.Property.FindExeTitle"/>
<ROW Property="AI_PACKAGING_TOOL" Value="Advanced Installer 20.0 build e4706cc2" ValueLocId="-"/>
<ROW Property="AI_PREDEF_LCONDS_PROPS" Value="AI_DETECTED_INTERNET_CONNECTION;AI_DETECTED_ADMIN_USER"/>
<ROW Property="AI_PREREQ_REPAIR_ENABLED" MultiBuildValue="ExeBuild:1"/>
<ROW Property="AI_PREREQ_REPAIR_ENABLED" MultiBuildValue="DefaultBuild:1#ExeBuild:1"/>
<ROW Property="AI_PRODUCTNAME_ARP" Value="[|ProductName]"/>
<ROW Property="AI_UNINSTALLER" Value="msiexec.exe"/>
<ROW Property="ALLUSERS" Value="1"/>
@ -38,8 +38,8 @@
<ROW Property="DB_PORT" Value="3306"/>
<ROW Property="DB_PWD" Value="root"/>
<ROW Property="DB_USER" Value="root"/>
<ROW Property="DOCUMENT_SERVER_HOST" Value="localhost" MultiBuildValue="DefaultBuild:"/>
<ROW Property="DOCUMENT_SERVER_PORT" Value="8083" MultiBuildValue="DefaultBuild:"/>
<ROW Property="DOCUMENT_SERVER_HOST" Value="localhost"/>
<ROW Property="DOCUMENT_SERVER_PORT" Value="8083"/>
<ROW Property="ELASTICSEARCH_HOST" Value="localhost" ValueLocId="-"/>
<ROW Property="ELASTICSEARCH_MSG" Value="Unable to connect to remote Elasticsearch server at "/>
<ROW Property="ELASTICSEARCH_PORT" Value="9200" ValueLocId="-"/>
@ -47,8 +47,8 @@
<ROW Property="ENVIRONMENT" Value="PRODUCT.ENVIRONMENT.SUB"/>
<ROW Property="Editor_Port" Value="5013"/>
<ROW Property="INSTALL_ROOT_FOLDER_NAME" Value="[|Manufacturer]"/>
<ROW Property="JWT_ENABLED" Value="true" MultiBuildValue="DefaultBuild:"/>
<ROW Property="JWT_HEADER" Value="Authorization" MultiBuildValue="DefaultBuild:"/>
<ROW Property="JWT_ENABLED" Value="true"/>
<ROW Property="JWT_HEADER" Value="Authorization"/>
<ROW Property="Login_Port" Value="5011"/>
<ROW Property="MSIFASTINSTALL" MultiBuildValue="DefaultBuild:3#ExeBuild:3"/>
<ROW Property="MYSQLODBCDRIVER" Value="MySQL ODBC 8.0 Unicode Driver"/>
@ -58,11 +58,11 @@
<ROW Property="NEED_REINDEX_ELASTICSEARCH" Value="FALSE" ValueLocId="-"/>
<ROW Property="PACKAGE_NAME" Value="ONLYOFFICE_DocSpace_Community_Win-install.v[|ProductVersion]" MultiBuildValue="ExeBuild:ONLYOFFICE_DocSpace_Enterprise_Win-install.v[|ProductVersion]"/>
<ROW Property="PRODUCT_NAME" Value="ONLYOFFICE DocSpace"/>
<ROW Property="PS_DB_HOST" Value="localhost" MultiBuildValue="DefaultBuild:"/>
<ROW Property="PS_DB_NAME" Value="onlyoffice" MultiBuildValue="DefaultBuild:"/>
<ROW Property="PS_DB_PORT" Value="5432" MultiBuildValue="DefaultBuild:"/>
<ROW Property="PS_DB_PWD" Value="onlyoffice" MultiBuildValue="DefaultBuild:"/>
<ROW Property="PS_DB_USER" Value="onlyoffice" MultiBuildValue="DefaultBuild:"/>
<ROW Property="PS_DB_HOST" Value="localhost"/>
<ROW Property="PS_DB_NAME" Value="onlyoffice"/>
<ROW Property="PS_DB_PORT" Value="5432"/>
<ROW Property="PS_DB_PWD" Value="onlyoffice"/>
<ROW Property="PS_DB_USER" Value="onlyoffice"/>
<ROW Property="ProductCode" Value="1033:{3FABEB4A-D27F-4BA6-A40E-16BE47540727} " Type="16"/>
<ROW Property="ProductLanguage" Value="1033"/>
<ROW Property="ProductName" Value="[|PRODUCT_NAME]"/>
@ -207,6 +207,7 @@
<ROW Component="Data" ComponentId="{C46222BF-779D-4F78-9A6B-EA249CCB9761}" Directory_="Data_Dir" Attributes="0"/>
<ROW Component="DocEditor.exe" ComponentId="{FBE9155F-9ACD-4A1A-9198-891ED73BA90C}" Directory_="tools_Dir" Attributes="0" KeyPath="DocEditor.exe"/>
<ROW Component="DocumentServer" ComponentId="{9F6BB24B-F2F9-4FE5-8431-A46F38A301AD}" Directory_="APPDIR" Attributes="260" KeyPath="DocumentServer" Options="2"/>
<ROW Component="DocumentServer.EE" ComponentId="{DFF09176-439E-4FC8-BDEB-39DDBD835A0F}" Directory_="APPDIR" Attributes="260" KeyPath="DocumentServer.EE" Options="2"/>
<ROW Component="Login.exe" ComponentId="{FBE9155F-9ACD-4A1A-9198-891ED73BA202}" Directory_="tools_Dir" Attributes="0" KeyPath="Login.exe"/>
<ROW Component="Logs" ComponentId="{6C28AF1C-0190-4DE3-A753-430496711F3C}" Directory_="Logs_Dir" Attributes="0"/>
<ROW Component="ProdInfo" ComponentId="{5FB28D19-6A7D-4078-901F-58C2DF0DE176}" Directory_="APPDIR" Attributes="260" KeyPath="Version"/>
@ -260,7 +261,8 @@
<ROW Feature="ClearEvents" Feature_Parent="DotnetServices" Title=".NET ClearEvents Service" Description="Feature contains .NET ClearEvents service" Display="29" Level="1" Directory_="APPDIR" Attributes="0"/>
<ROW Feature="DataBackup" Feature_Parent="DotnetServices" Title=".NET DataBackup Service" Description="Feature contains .NET DataBackup service" Display="27" Level="1" Directory_="APPDIR" Attributes="0"/>
<ROW Feature="DocEditor" Feature_Parent="NodeJSServices" Title="Node.js DocEditor Service" Description="Feature contains Node.js DocEditor service" Display="3" Level="1" Directory_="APPDIR" Attributes="0"/>
<ROW Feature="DocumentServer" Title="DocumentServer" Description="DocumentServer" Display="5" Level="1" Attributes="0" Builds="ExeBuild"/>
<ROW Feature="DocumentServer" Title="DocumentServer" Description="DocumentServer" Display="5" Level="1" Attributes="0" Builds="DefaultBuild"/>
<ROW Feature="DocumentServer.EE" Title="DocumentServer-EE" Description="DocumentServer-EE" Display="35" Level="1" Attributes="0" Builds="ExeBuild"/>
<ROW Feature="DotnetServices" Feature_Parent="MainFeature" Title=".NET services" Description="Feature contains all .NET services" Display="3" Level="1" Directory_="APPDIR" Attributes="0"/>
<ROW Feature="File" Feature_Parent="DotnetServices" Title=".NET File Service" Description="Feature contains .NET File service" Display="23" Level="1" Directory_="APPDIR" Attributes="0"/>
<ROW Feature="Files" Feature_Parent="DotnetServices" Title=".NET Files Service" Description="Feature contains .NET Files service" Display="21" Level="1" Directory_="APPDIR" Attributes="0"/>
@ -410,7 +412,7 @@
<ROW JsonProperty="enabled" Parent="migration" Name="enabled" Condition="1" Order="0" Flags="57" Value="[DATABASE_MIGRATION]"/>
<ROW JsonProperty="environment" Parent="app" Name="environment" Condition="1" Order="2" Flags="57" Value="[ENVIRONMENT]"/>
<ROW JsonProperty="environment_1" Parent="app_1" Name="environment" Condition="1" Order="2" Flags="57" Value="[ENVIRONMENT]"/>
<ROW JsonProperty="files" Parent="Root_1" Name="files" Condition="(&amp;DocumentServer = 3) AND NOT (!DocumentServer = 3)" Order="3" Flags="60"/>
<ROW JsonProperty="files" Parent="Root_1" Name="files" Condition="1" Order="3" Flags="60"/>
<ROW JsonProperty="folder" Parent="products" Name="folder" Condition="1" Order="0" Flags="57" Value="[APPDIR_FORWARD_SLASH]products"/>
<ROW JsonProperty="folder_1" Parent="products_1" Name="folder" Condition="1" Order="0" Flags="57" Value="[APPDIR_FORWARD_SLASH]products"/>
<ROW JsonProperty="header" Parent="secret" Name="header" Condition="1" Order="1" Flags="57" Value="[DOCUMENT_SERVER_JWT_HEADER]"/>
@ -507,6 +509,7 @@
<ROW Feature_="WebStudio" Level="4" Condition="WEB_STUDIO_SERVICE = 0"/>
<ROW Feature_="Proxy" Level="4" Condition="PROXY_SERVICE = 0"/>
<ROW Feature_="WebHealthChecksUI" Level="4" Condition="WEB_HEALTHCHECKS_UI_SERVICE = 0"/>
<ROW Feature_="DocumentServer.EE" Level="4" Condition="DOCUMENT_SERVER_INSTALL_NONE = 1"/>
</COMPONENT>
<COMPONENT cid="caphyon.advinst.msicomp.MsiControlComponent">
<ROW Dialog_="AdminBrowseDlg" Control="OK" Type="PushButton" X="304" Y="243" Width="56" Height="17" Attributes="3" Text="[ButtonText_OK]" Order="300" TextLocId="-" MsiKey="AdminBrowseDlg#OK"/>
@ -1004,12 +1007,12 @@
<ROW Action="SET_APPDIR" Type="307" Source="APPDIR" Target="[ProgramFilesFolder][Manufacturer]\[ProductName]" MultiBuildTarget="DefaultBuild:[ProgramFilesFolder][INSTALL_ROOT_FOLDER_NAME]\DocSpace#ExeBuild:[ProgramFilesFolder][INSTALL_ROOT_FOLDER_NAME]\DocSpace"/>
<ROW Action="SET_SHORTCUTDIR" Type="307" Source="SHORTCUTDIR" Target="[ProgramMenuFolder][ProductName]" MultiBuildTarget="DefaultBuild:[ProgramMenuFolder][INSTALL_ROOT_FOLDER_NAME]\DocSpace#ExeBuild:[ProgramMenuFolder][INSTALL_ROOT_FOLDER_NAME]\DocSpace"/>
<ROW Action="SET_TARGETDIR_TO_APPDIR" Type="51" Source="TARGETDIR" Target="[APPDIR]"/>
<ROW Action="SetDocumentServerJWTSecretProp" Type="262" Source="utils.vbs" Target="SetDocumentServerJWTSecretProp"/>
<ROW Action="SetDocumentServerJWTSecretProp" Type="6" Source="utils.vbs" Target="SetDocumentServerJWTSecretProp"/>
<ROW Action="SetMACHINEKEY" Type="51" Source="MACHINE_KEY" Target="[ComputerName]"/>
<ROW Action="Set_APPDIR_FORWARD_SLASH" Type="38" Target="Script Text" TargetUnformatted="Session.Property(&quot;APPDIR_FORWARD_SLASH&quot;) = Replace(Session.Property(&quot;APPDIR&quot;), &quot;\&quot;, &quot;/&quot;)&#13;&#10;" AdditionalSeq="AI_DATA_SETTER_6"/>
<ROW Action="Set_DS_JWT_ENABLED" Type="307" Source="DOCUMENT_SERVER_JWT_ENABLED" Target="[JWT_ENABLED]"/>
<ROW Action="Set_DS_JWT_HEADER" Type="307" Source="DOCUMENT_SERVER_JWT_HEADER" Target="[JWT_HEADER]"/>
<ROW Action="Set_DS_JWT_SECRET" Type="307" Source="DOCUMENT_SERVER_JWT_SECRET" Target="[JWT_SECRET]"/>
<ROW Action="Set_DS_JWT_ENABLED" Type="51" Source="DOCUMENT_SERVER_JWT_ENABLED" Target="[JWT_ENABLED]"/>
<ROW Action="Set_DS_JWT_HEADER" Type="51" Source="DOCUMENT_SERVER_JWT_HEADER" Target="[JWT_HEADER]"/>
<ROW Action="Set_DS_JWT_SECRET" Type="51" Source="DOCUMENT_SERVER_JWT_SECRET" Target="[JWT_SECRET]"/>
<ROW Action="StartElasticSearchService" Type="3073" Source="aicustact.dll" Target="StartWinService" Options="1" AdditionalSeq="AI_DATA_SETTER_13"/>
<ROW Action="StartMigrationRunner" Type="3074" Source="viewer.exe" Target="/EnforcedRunAsAdmin /RunAsAdmin /HideWindow /dir &quot;[APPDIR]services\ASC.Migration.Runner\service&quot; &quot;[APPDIR]services\ASC.Migration.Runner\service\ASC.Migration.Runner.exe&quot;" Options="1"/>
<ROW Action="StartMySQLService" Type="1" Source="aicustact.dll" Target="StartWinService" Options="1" AdditionalSeq="AI_DATA_SETTER_11"/>
@ -1120,6 +1123,7 @@
<ROW Feature_="NodeJSServices" Component_="tools"/>
<ROW Feature_="MainFeature" Component_="AppPath"/>
<ROW Feature_="MainFeature" Component_="icon.ico"/>
<ROW Feature_="DocumentServer.EE" Component_="DocumentServer.EE"/>
</COMPONENT>
<COMPONENT cid="caphyon.advinst.msicomp.MsiIconsComponent">
<ROW Name="icon.exe" SourcePath="Resources\icon.ico" Index="0"/>
@ -1180,10 +1184,6 @@
<ROW Action="AI_ConfigureChainer" Condition="((UILevel = 2) OR (UILevel = 3)) AND (NOT UPGRADINGPRODUCTCODE)" Sequence="6598"/>
<ROW Action="AI_LaunchChainer" Condition="AI_PREREQ_CHAINER AND (NOT UPGRADINGPRODUCTCODE)" Sequence="6599"/>
<ROW Action="AI_VerifyPrereq" Sequence="1101"/>
<ROW Action="SetDocumentServerJWTSecretProp" Condition="( ( NOT Installed ) OR ( Installed AND REMOVE &lt;&gt; &quot;ALL&quot; AND AI_INSTALL_MODE &lt;&gt; &quot;Remove&quot; ) ) AND ( JWT_ENABLED = &quot;true&quot; AND (&amp;DocumentServer = 3) AND NOT (!DocumentServer = 3) )" Sequence="1601"/>
<ROW Action="Set_DS_JWT_HEADER" Condition="( ( NOT Installed ) OR ( Installed AND REMOVE &lt;&gt; &quot;ALL&quot; AND AI_INSTALL_MODE &lt;&gt; &quot;Remove&quot; ) ) AND ( JWT_ENABLED = &quot;true&quot; AND (&amp;DocumentServer = 3) AND NOT (!DocumentServer = 3) )" Sequence="1603"/>
<ROW Action="Set_DS_JWT_ENABLED" Condition="( ( NOT Installed ) OR ( Installed AND REMOVE &lt;&gt; &quot;ALL&quot; AND AI_INSTALL_MODE &lt;&gt; &quot;Remove&quot; ) ) AND ( JWT_ENABLED = &quot;true&quot; AND (&amp;DocumentServer = 3) AND NOT (!DocumentServer = 3) )" Sequence="1602"/>
<ROW Action="Set_DS_JWT_SECRET" Condition="( ( NOT Installed ) OR ( Installed AND REMOVE &lt;&gt; &quot;ALL&quot; AND AI_INSTALL_MODE &lt;&gt; &quot;Remove&quot; ) ) AND ( JWT_ENABLED = &quot;true&quot; AND (&amp;DocumentServer = 3) AND NOT (!DocumentServer = 3) )" Sequence="1604"/>
<ROW Action="AI_XmlInstall" Condition="(REMOVE &lt;&gt; &quot;ALL&quot;)" Sequence="5102"/>
<ROW Action="AI_DATA_SETTER_14" Condition="(REMOVE &lt;&gt; &quot;ALL&quot;)" Sequence="5101"/>
<ROW Action="AI_XmlUninstall" Condition="(REMOVE)" Sequence="3102"/>
@ -1218,10 +1218,10 @@
<ROW Action="AI_InstallPrerequisite" Sequence="1299"/>
<ROW Action="AI_InstallPostPrerequisite" Sequence="1301"/>
<ROW Action="AI_CleanPrereq" Sequence="1302"/>
<ROW Action="SetDocumentServerJWTSecretProp" Condition="( ( NOT Installed ) OR ( Installed AND REMOVE &lt;&gt; &quot;ALL&quot; AND AI_INSTALL_MODE &lt;&gt; &quot;Remove&quot; ) ) AND ( JWT_ENABLED = &quot;true&quot; AND (&amp;DocumentServer = 3) AND NOT (!DocumentServer = 3) )" Sequence="1103"/>
<ROW Action="Set_DS_JWT_ENABLED" Condition="( ( NOT Installed ) OR ( Installed AND REMOVE &lt;&gt; &quot;ALL&quot; AND AI_INSTALL_MODE &lt;&gt; &quot;Remove&quot; ) ) AND ( JWT_ENABLED = &quot;true&quot; AND (&amp;DocumentServer = 3) AND NOT (!DocumentServer = 3) )" Sequence="1104"/>
<ROW Action="Set_DS_JWT_HEADER" Condition="( ( NOT Installed ) OR ( Installed AND REMOVE &lt;&gt; &quot;ALL&quot; AND AI_INSTALL_MODE &lt;&gt; &quot;Remove&quot; ) ) AND ( JWT_ENABLED = &quot;true&quot; AND (&amp;DocumentServer = 3) AND NOT (!DocumentServer = 3) )" Sequence="1105"/>
<ROW Action="Set_DS_JWT_SECRET" Condition="( ( NOT Installed ) OR ( Installed AND REMOVE &lt;&gt; &quot;ALL&quot; AND AI_INSTALL_MODE &lt;&gt; &quot;Remove&quot; ) ) AND ( JWT_ENABLED = &quot;true&quot; AND (&amp;DocumentServer = 3) AND NOT (!DocumentServer = 3) )" Sequence="1106"/>
<ROW Action="SetDocumentServerJWTSecretProp" Condition="( ( NOT Installed ) OR ( Installed AND REMOVE &lt;&gt; &quot;ALL&quot; AND AI_INSTALL_MODE &lt;&gt; &quot;Remove&quot; ) ) AND ( JWT_ENABLED = &quot;true&quot; )" Sequence="1103"/>
<ROW Action="Set_DS_JWT_ENABLED" Condition="( ( NOT Installed ) OR ( Installed AND REMOVE &lt;&gt; &quot;ALL&quot; AND AI_INSTALL_MODE &lt;&gt; &quot;Remove&quot; ) ) AND ( JWT_ENABLED = &quot;true&quot; )" Sequence="1104"/>
<ROW Action="Set_DS_JWT_HEADER" Condition="( ( NOT Installed ) OR ( Installed AND REMOVE &lt;&gt; &quot;ALL&quot; AND AI_INSTALL_MODE &lt;&gt; &quot;Remove&quot; ) ) AND ( JWT_ENABLED = &quot;true&quot; )" Sequence="1105"/>
<ROW Action="Set_DS_JWT_SECRET" Condition="( ( NOT Installed ) OR ( Installed AND REMOVE &lt;&gt; &quot;ALL&quot; AND AI_INSTALL_MODE &lt;&gt; &quot;Remove&quot; ) ) AND ( JWT_ENABLED = &quot;true&quot; )" Sequence="1106"/>
<ROW Action="PostgreSQLConfigure" Condition="( NOT Installed )" Sequence="1102"/>
<ROW Action="AI_PRESERVE_INSTALL_TYPE" Sequence="199"/>
</COMPONENT>
@ -1311,6 +1311,7 @@
<ROW Registry="DisplayName" Root="-1" Key="Software\Microsoft\Windows\CurrentVersion\Uninstall\[ProductName] [ProductVersion]" Name="DisplayName" Value="[AI_PRODUCTNAME_ARP]" Component_="AI_CustomARPName"/>
<ROW Registry="DisplayVersion" Root="-1" Key="Software\Microsoft\Windows\CurrentVersion\Uninstall\[ProductName] [ProductVersion]" Name="DisplayVersion" Value="[ProductVersion]" Component_="AI_CustomARPName"/>
<ROW Registry="DocumentServer" Root="-1" Key="Software\Caphyon\Advanced Installer\Prereqs\[ProductCode]\[ProductVersion]" Name="DocumentServer" Value="1" Component_="DocumentServer"/>
<ROW Registry="DocumentServer.EE" Root="-1" Key="Software\Caphyon\Advanced Installer\Prereqs\[ProductCode]\[ProductVersion]" Name="DocumentServer.EE" Value="1" Component_="DocumentServer.EE"/>
<ROW Registry="EstimatedSize" Root="-1" Key="Software\Microsoft\Windows\CurrentVersion\Uninstall\[ProductName] [ProductVersion]" Name="EstimatedSize" Value="#[AI_ARP_SIZE]" Component_="AI_CustomARPName" VirtualValue="#"/>
<ROW Registry="HelpLink" Root="-1" Key="Software\Microsoft\Windows\CurrentVersion\Uninstall\[ProductName] [ProductVersion]" Name="HelpLink" Value="[ARPHELPLINK]" Component_="AI_CustomARPName"/>
<ROW Registry="HelpTelephone" Root="-1" Key="Software\Microsoft\Windows\CurrentVersion\Uninstall\[ProductName] [ProductVersion]" Name="HelpTelephone" Value="[ARPHELPTELEPHONE]" Component_="AI_CustomARPName"/>
@ -1436,20 +1437,22 @@
<ROW PrereqKey="F3520F64DA5998338D97129FAD2" DisplayName=".NET Runtime 7.0.3 x64" VersionMin="7.0" SetupFileUrl="https://download.visualstudio.microsoft.com/download/pr/c69813b7-2ece-4c2e-8c45-e33006985e18/61cc8fe4693a662b2da55ad932a46446/dotnet-runtime-7.0.3-win-x64.exe" Location="1" ExactSize="28223424" WinNTVersions="Windows 9x/ME/NT/2000/XP/Vista/Windows 7/Windows 8 x86/Windows 8.1 x86/Windows 10 x86" WinNT64Versions="Windows Vista x64, Windows Server 2008 x64, Windows 7 RTM x64, Windows Server 2008 R2 x64, Windows 8 x64, Windows Server 2012 x64, Windows 10 version 1507 x64, Windows 10 version 1511 x64" Operator="1" ComLine="/q /norestart" BasicUiComLine="/q /norestart" NoUiComLine="/q /norestart" Options="ym" MD5="c9d6796b57a1630d4f004302262c241e" TargetName=".NET 7.0"/>
<ROW PrereqKey="CA62D813A4E74FA2AAE86A7D7B7B1493" DisplayName="Visual C++ Redistributable for Visual Studio 2013 Update 5 x64" VersionMin="12.0" SetupFileUrl="http://download.microsoft.com/download/C/C/2/CC2DF5F8-4454-44B4-802D-5EA68D086676/vcredist_x64.exe" Location="1" ExactSize="7201056" WinNTVersions="Windows 9x/ME/NT/2000/XP/Vista/Windows 7/Windows 8 x86/Windows 8.1 x86/Windows 10 x86" Operator="1" ComLine="/quiet" BasicUiComLine="/quiet" NoUiComLine="/quiet" Options="xym" MD5="b364dd867258dfc79342e00d57c81bb5" TargetName="Visual C++ Redistributable for Visual Studio 2013?vcredist_2013u5_x64.exe"/>
<ROW PrereqKey="D564007E3BBE4F85950A09B470A7CA65" DisplayName="Visual C++ Redistributable for Visual Studio 2013 Update 5 x86" VersionMin="12.0" SetupFileUrl="http://download.microsoft.com/download/C/C/2/CC2DF5F8-4454-44B4-802D-5EA68D086676/vcredist_x86.exe" Location="1" ExactSize="6510272" Operator="0" ComLine="/quiet" BasicUiComLine="/quiet" NoUiComLine="/quiet" Options="ym" MD5="6a3a1760342ea699d5e6df1f2a1c7707" TargetName="Visual C++ Redistributable for Visual Studio 2013?vcredist_2013u5_x86.exe"/>
<ROW PrereqKey="DocumentServer" DisplayName="DocumentServer" SetupFileUrl="onlyoffice-documentserver.latest.exe" Location="0" ExactSize="0" WinNTVersions="Windows 9x/ME/NT/2000/XP/Vista/Windows 7/Windows 8 x86/Windows 8.1 x86/Windows 10 x86" Operator="1" ComLine="/VERYSILENT /norestart /DIR=&quot;[APPDIR]..\DocumentServer&quot; /DS_PORT=&quot;[DOCUMENT_SERVER_PORT]&quot; /JWT_ENABLED=&quot;[DOCUMENT_SERVER_JWT_ENABLED]&quot; /JWT_SECRET=&quot;[DOCUMENT_SERVER_JWT_SECRET]&quot; /JWT_HEADER=&quot;[DOCUMENT_SERVER_JWT_HEADER]&quot; /DB_HOST=&quot;[PS_DB_HOST]&quot; /DB_USER=&quot;[PS_DB_USER]&quot; /DB_PWD=&quot;[PS_DB_PWD]&quot; /DB_NAME=&quot;[PS_DB_NAME]&quot; /LOG" BasicUiComLine="/VERYSILENT /norestart /DIR=&quot;[APPDIR]..\DocumentServer&quot; /DS_PORT=&quot;[DOCUMENT_SERVER_PORT]&quot; /JWT_ENABLED=&quot;[DOCUMENT_SERVER_JWT_ENABLED]&quot; /JWT_SECRET=&quot;[DOCUMENT_SERVER_JWT_SECRET]&quot; /JWT_HEADER=&quot;[DOCUMENT_SERVER_JWT_HEADER]&quot; /DB_HOST=&quot;[PS_DB_HOST]&quot; /DB_USER=&quot;[PS_DB_USER]&quot; /DB_PWD=&quot;[PS_DB_PWD]&quot; /DB_NAME=&quot;[PS_DB_NAME]&quot; /LOG" NoUiComLine="/VERYSILENT /norestart /DIR=&quot;[APPDIR]..\DocumentServer&quot; /DS_PORT=&quot;[DOCUMENT_SERVER_PORT]&quot; /JWT_ENABLED=&quot;[DOCUMENT_SERVER_JWT_ENABLED]&quot; /JWT_SECRET=&quot;[DOCUMENT_SERVER_JWT_SECRET]&quot; /JWT_HEADER=&quot;[DOCUMENT_SERVER_JWT_HEADER]&quot; /DB_HOST=&quot;[PS_DB_HOST]&quot; /DB_USER=&quot;[PS_DB_USER]&quot; /DB_PWD=&quot;[PS_DB_PWD]&quot; /DB_NAME=&quot;[PS_DB_NAME]&quot; /LOG" Options="mxf=i" TargetName="onlyoffice-documentserver.latest.exe" Feature="DocumentServer" RepairComLine="/VERYSILENT /norestart /DIR=&quot;[APPDIR]..\DocumentServer&quot; /DS_PORT=&quot;[DOCUMENT_SERVER_PORT]&quot; /JWT_ENABLED=&quot;[DOCUMENT_SERVER_JWT_ENABLED]&quot; /JWT_SECRET=&quot;[DOCUMENT_SERVER_JWT_SECRET]&quot; /JWT_HEADER=&quot;[DOCUMENT_SERVER_JWT_HEADER]&quot; /DB_HOST=&quot;[PS_DB_HOST]&quot; /DB_USER=&quot;[PS_DB_USER]&quot; /DB_PWD=&quot;[PS_DB_PWD]&quot; /DB_NAME=&quot;[PS_DB_NAME]&quot; /LOG"/>
<ROW PrereqKey="DocumentServer" DisplayName="DocumentServer" SetupFileUrl="onlyoffice-documentserver.exe" Location="0" ExactSize="0" WinNTVersions="Windows 9x/ME/NT/2000/XP/Vista/Windows 7/Windows 8 x86/Windows 8.1 x86/Windows 10 x86" Operator="1" ComLine="/VERYSILENT /norestart /DIR=&quot;[APPDIR]..\DocumentServer&quot; /DS_PORT=&quot;[DOCUMENT_SERVER_PORT]&quot; /JWT_ENABLED=&quot;[DOCUMENT_SERVER_JWT_ENABLED]&quot; /JWT_SECRET=&quot;[DOCUMENT_SERVER_JWT_SECRET]&quot; /JWT_HEADER=&quot;[DOCUMENT_SERVER_JWT_HEADER]&quot; /DB_HOST=&quot;[PS_DB_HOST]&quot; /DB_USER=&quot;[PS_DB_USER]&quot; /DB_PWD=&quot;[PS_DB_PWD]&quot; /DB_NAME=&quot;[PS_DB_NAME]&quot; /LOG" BasicUiComLine="/VERYSILENT /norestart /DIR=&quot;[APPDIR]..\DocumentServer&quot; /DS_PORT=&quot;[DOCUMENT_SERVER_PORT]&quot; /JWT_ENABLED=&quot;[DOCUMENT_SERVER_JWT_ENABLED]&quot; /JWT_SECRET=&quot;[DOCUMENT_SERVER_JWT_SECRET]&quot; /JWT_HEADER=&quot;[DOCUMENT_SERVER_JWT_HEADER]&quot; /DB_HOST=&quot;[PS_DB_HOST]&quot; /DB_USER=&quot;[PS_DB_USER]&quot; /DB_PWD=&quot;[PS_DB_PWD]&quot; /DB_NAME=&quot;[PS_DB_NAME]&quot; /LOG" NoUiComLine="/VERYSILENT /norestart /DIR=&quot;[APPDIR]..\DocumentServer&quot; /DS_PORT=&quot;[DOCUMENT_SERVER_PORT]&quot; /JWT_ENABLED=&quot;[DOCUMENT_SERVER_JWT_ENABLED]&quot; /JWT_SECRET=&quot;[DOCUMENT_SERVER_JWT_SECRET]&quot; /JWT_HEADER=&quot;[DOCUMENT_SERVER_JWT_HEADER]&quot; /DB_HOST=&quot;[PS_DB_HOST]&quot; /DB_USER=&quot;[PS_DB_USER]&quot; /DB_PWD=&quot;[PS_DB_PWD]&quot; /DB_NAME=&quot;[PS_DB_NAME]&quot; /LOG" Options="fi=" TargetName="onlyoffice-documentserver.exe" Builds="DefaultBuild" Feature="DocumentServer" RepairComLine="/VERYSILENT /norestart /DIR=&quot;[APPDIR]..\DocumentServer&quot; /DS_PORT=&quot;[DOCUMENT_SERVER_PORT]&quot; /JWT_ENABLED=&quot;[DOCUMENT_SERVER_JWT_ENABLED]&quot; /JWT_SECRET=&quot;[DOCUMENT_SERVER_JWT_SECRET]&quot; /JWT_HEADER=&quot;[DOCUMENT_SERVER_JWT_HEADER]&quot; /DB_HOST=&quot;[PS_DB_HOST]&quot; /DB_USER=&quot;[PS_DB_USER]&quot; /DB_PWD=&quot;[PS_DB_PWD]&quot; /DB_NAME=&quot;[PS_DB_NAME]&quot; /LOG"/>
<ROW PrereqKey="DocumentServer.EE" DisplayName="DocumentServer-EE" SetupFileUrl="onlyoffice-documentserver-ee.exe" Location="0" ExactSize="0" WinNTVersions="Windows 9x/ME/NT/2000/XP/Vista/Windows 7/Windows 8 x86/Windows 8.1 x86/Windows 10 x86" Operator="1" ComLine="/VERYSILENT /norestart /DIR=&quot;[APPDIR]..\DocumentServer&quot; /DS_PORT=&quot;[DOCUMENT_SERVER_PORT]&quot; /JWT_ENABLED=&quot;[DOCUMENT_SERVER_JWT_ENABLED]&quot; /JWT_SECRET=&quot;[DOCUMENT_SERVER_JWT_SECRET]&quot; /JWT_HEADER=&quot;[DOCUMENT_SERVER_JWT_HEADER]&quot; /DB_HOST=&quot;[PS_DB_HOST]&quot; /DB_USER=&quot;[PS_DB_USER]&quot; /DB_PWD=&quot;[PS_DB_PWD]&quot; /DB_NAME=&quot;[PS_DB_NAME]&quot; /LOG" BasicUiComLine="/VERYSILENT /norestart /DIR=&quot;[APPDIR]..\DocumentServer&quot; /DS_PORT=&quot;[DOCUMENT_SERVER_PORT]&quot; /JWT_ENABLED=&quot;[DOCUMENT_SERVER_JWT_ENABLED]&quot; /JWT_SECRET=&quot;[DOCUMENT_SERVER_JWT_SECRET]&quot; /JWT_HEADER=&quot;[DOCUMENT_SERVER_JWT_HEADER]&quot; /DB_HOST=&quot;[PS_DB_HOST]&quot; /DB_USER=&quot;[PS_DB_USER]&quot; /DB_PWD=&quot;[PS_DB_PWD]&quot; /DB_NAME=&quot;[PS_DB_NAME]&quot; /LOG" NoUiComLine="/VERYSILENT /norestart /DIR=&quot;[APPDIR]..\DocumentServer&quot; /DS_PORT=&quot;[DOCUMENT_SERVER_PORT]&quot; /JWT_ENABLED=&quot;[DOCUMENT_SERVER_JWT_ENABLED]&quot; /JWT_SECRET=&quot;[DOCUMENT_SERVER_JWT_SECRET]&quot; /JWT_HEADER=&quot;[DOCUMENT_SERVER_JWT_HEADER]&quot; /DB_HOST=&quot;[PS_DB_HOST]&quot; /DB_USER=&quot;[PS_DB_USER]&quot; /DB_PWD=&quot;[PS_DB_PWD]&quot; /DB_NAME=&quot;[PS_DB_NAME]&quot; /LOG" Options="fi=" TargetName="onlyoffice-documentserver-ee.exe" Builds="ExeBuild" Feature="DocumentServer.EE" RepairComLine="/VERYSILENT /norestart /DIR=&quot;[APPDIR]..\DocumentServer&quot; /DS_PORT=&quot;[DOCUMENT_SERVER_PORT]&quot; /JWT_ENABLED=&quot;[DOCUMENT_SERVER_JWT_ENABLED]&quot; /JWT_SECRET=&quot;[DOCUMENT_SERVER_JWT_SECRET]&quot; /JWT_HEADER=&quot;[DOCUMENT_SERVER_JWT_HEADER]&quot; /DB_HOST=&quot;[PS_DB_HOST]&quot; /DB_USER=&quot;[PS_DB_USER]&quot; /DB_PWD=&quot;[PS_DB_PWD]&quot; /DB_NAME=&quot;[PS_DB_NAME]&quot; /LOG"/>
<ROW PrereqKey="EA5B60A5CAD4115A8386D017CC889B9" DisplayName="ASP.NET Core Runtime 7.0.3 x64" VersionMin="7.0" SetupFileUrl="https://download.visualstudio.microsoft.com/download/pr/d37efccc-2ba1-4fc9-a1ef-a8e1e77fb681/b9a20fc29ff05f18d81620ec88ade699/aspnetcore-runtime-7.0.3-win-x64.exe" Location="1" ExactSize="9562088" WinNTVersions="Windows 9x/ME/NT/2000/XP/Vista/Windows 7/Windows 8 x86/Windows 8.1 x86/Windows 10 x86" WinNT64Versions="Windows Vista x64, Windows Server 2008 x64, Windows 7 RTM x64, Windows Server 2008 R2 x64, Windows 8 x64, Windows Server 2012 x64, Windows 10 version 1507 x64, Windows 10 version 1511 x64" Operator="1" ComLine="/q /norestart" BasicUiComLine="/q /norestart" NoUiComLine="/q /norestart" Options="xym" MD5="a87c53a62579d43c6e20683ad686c991" TargetName="ASP.NET Core 7.0"/>
<ROW PrereqKey="C5949268848C59079D60551E525B7" DisplayName=".NET Runtime 7.0.3 x86" VersionMin="7.0" SetupFileUrl="https://download.visualstudio.microsoft.com/download/pr/9dd2da29-ca47-40fb-81a0-96fe26ea8ea2/e8f7e09a6d4848b8c4a13282d964b9e1/dotnet-runtime-7.0.3-win-x86.exe" Location="1" ExactSize="25849872" WinNTVersions="Windows Vista x86, Windows Server 2008 x86, Windows 7 RTM x86, Windows 8 x86, Windows 10 version 1507 x86, Windows 10 version 1511 x86" WinNT64Versions="Windows Vista x64, Windows Server 2008 x64, Windows 7 RTM x64, Windows Server 2008 R2 x64, Windows 8 x64, Windows Server 2012 x64, Windows 10 version 1507 x64, Windows 10 version 1511 x64" Operator="1" ComLine="/q /norestart" BasicUiComLine="/q /norestart" NoUiComLine="/q /norestart" Options="ym" MD5="5252b28e402d52361910ddffe7dc7c2b" TargetName=".NET 7.0"/>
<ROW PrereqKey="Erlangv20.3x64" DisplayName="Erlang v20.3 x64" VersionMin="20.3" SetupFileUrl="http://download.onlyoffice.com/install/windows/enterprise/otp_win64_20.3.exe" Location="1" ExactSize="0" WinNTVersions="Windows 9x/ME/NT/2000/XP/Vista/Windows 7/Windows 8 x86/Windows 8.1 x86/Windows 10 x86" Operator="1" ComLine="/S" BasicUiComLine="/S" NoUiComLine="/S" Options="yx" TargetName="Erlang v20.3 x64"/>
<ROW PrereqKey="MySQLInstallerRunn" DisplayName="MySQL Installer Community 8.0.21 x86 Runner" SetupFileUrl="MySQL Installer Runner.exe" Location="0" ExactSize="0" Operator="1" ComLine="/VERYSILENT /DB_PWD=&quot;root&quot; /MYSQL_VERSION=&quot;8.0.21&quot;" BasicUiComLine="/VERYSILENT /DB_PWD=&quot;root&quot; /MYSQL_VERSION=&quot;8.0.21&quot;" NoUiComLine="/VERYSILENT /DB_PWD=&quot;root&quot; /MYSQL_VERSION=&quot;8.0.21&quot;" Options="y" TargetName="MySQL Installer Runner \MySQL Installer Runner.exe" ParentPrereq="RequiredApplication_2"/>
<ROW PrereqKey="PostgreSQL_ODBC" DisplayName="PostgreSQL ODBC Driver x64" SetupFileUrl="psqlodbc_x64.msi" Location="0" ExactSize="0" WinNTVersions="Windows 9x/ME/NT/2000/XP/Vista/Windows 7/Windows 8 x86/Windows 8.1 x86/Windows 10 x86" Operator="1" ComLine="/quiet" BasicUiComLine="/quiet" NoUiComLine="/quiet" Options="myx" TargetName="psqlodbc_x64.msi" Builds="ExeBuild"/>
<ROW PrereqKey="PostgresSQL" DisplayName="PostgresSQL v9.5.4 x64" VersionMin="9.5.4" SetupFileUrl="postgresql-9.5.4-1-windows-x64.exe" Location="0" ExactSize="0" WinNTVersions="Windows 9x/ME/NT/2000/XP/Vista/Windows 7/Windows 8 x86/Windows 8.1 x86/Windows 10 x86" Operator="1" ComLine="--unattendedmodeui none --install_runtimes 0 --mode unattended --superaccount &quot;postgres&quot; --superpassword &quot;postgres&quot;" BasicUiComLine="--unattendedmodeui none --install_runtimes 0 --mode unattended --superaccount &quot;postgres&quot; --superpassword &quot;postgres&quot;" NoUiComLine="--unattendedmodeui none --install_runtimes 0 --mode unattended --superaccount &quot;postgres&quot; --superpassword &quot;postgres&quot;" Options="xy" TargetName="postgresql-9.5.4-1-windows-x64.exe" Builds="ExeBuild"/>
<ROW PrereqKey="RequiredApplication" DisplayName="MySQL Connector/ODBC 8.0.21 x86" VersionMin="8.0.21" SetupFileUrl="https://dev.mysql.com/get/Downloads/Connector-ODBC/8.0/mysql-connector-odbc-8.0.21-win32.msi" Location="1" ExactSize="0" Operator="1" ComLine="/quiet" BasicUiComLine="/quiet" NoUiComLine="/quiet" Options="ym" TargetName="MySQL Connector ODBC 8.0.21 x86"/>
<ROW PrereqKey="FFmpegx64" DisplayName="FFmpeg x64" VersionMin="6.0.0" SetupFileUrl="https://github.com/icedterminal/ffmpeg-installer/releases/download/6.0.0.20230306/FFmpeg_Essentials.msi" Location="1" ExactSize="0" WinNTVersions="Windows 9x/ME/NT/2000/XP/Vista/Windows 7/Windows 8 x86/Windows 8.1 x86/Windows 10 x86" Operator="1" ComLine="/quiet" BasicUiComLine="/quiet" NoUiComLine="/quiet" Options="yx" TargetName="FFmpeg x64"/>
<ROW PrereqKey="MySQLInstallerRunn" DisplayName="MySQL Installer Community 8.0.32 x86 Runner" SetupFileUrl="MySQL Installer Runner.exe" Location="0" ExactSize="0" Operator="1" ComLine="/VERYSILENT /DB_PWD=&quot;root&quot; /MYSQL_VERSION=&quot;8.0.32&quot;" BasicUiComLine="/VERYSILENT /DB_PWD=&quot;root&quot; /MYSQL_VERSION=&quot;8.0.32&quot;" NoUiComLine="/VERYSILENT /DB_PWD=&quot;root&quot; /MYSQL_VERSION=&quot;8.0.32&quot;" Options="y" TargetName="MySQL Installer Runner \MySQL Installer Runner.exe" ParentPrereq="RequiredApplication_2"/>
<ROW PrereqKey="PostgreSQL_ODBC" DisplayName="PostgreSQL ODBC Driver x64" SetupFileUrl="psqlodbc_x64.msi" Location="0" ExactSize="0" WinNTVersions="Windows 9x/ME/NT/2000/XP/Vista/Windows 7/Windows 8 x86/Windows 8.1 x86/Windows 10 x86" Operator="1" ComLine="/quiet" BasicUiComLine="/quiet" NoUiComLine="/quiet" Options="myx" TargetName="psqlodbc_x64.msi"/>
<ROW PrereqKey="PostgresSQL" DisplayName="PostgresSQL v12.9 x64" VersionMin="12.9" SetupFileUrl="postgresql-12.9-1-windows-x64.exe" Location="0" ExactSize="0" WinNTVersions="Windows 9x/ME/NT/2000/XP/Vista/Windows 7/Windows 8 x86/Windows 8.1 x86/Windows 10 x86" Operator="1" ComLine="--unattendedmodeui none --install_runtimes 0 --mode unattended --superaccount &quot;postgres&quot; --superpassword &quot;postgres&quot;" BasicUiComLine="--unattendedmodeui none --install_runtimes 0 --mode unattended --superaccount &quot;postgres&quot; --superpassword &quot;postgres&quot;" NoUiComLine="--unattendedmodeui none --install_runtimes 0 --mode unattended --superaccount &quot;postgres&quot; --superpassword &quot;postgres&quot;" Options="xy" TargetName="postgresql-12.9-1-windows-x64.exe"/>
<ROW PrereqKey="RequiredApplication" DisplayName="MySQL Connector/ODBC 8.0.32 x86" VersionMin="8.0.32" SetupFileUrl="https://cdn.mysql.com/Downloads/Connector-ODBC/8.0/mysql-connector-odbc-8.0.32-win32.msi" Location="1" ExactSize="0" Operator="1" ComLine="/quiet" BasicUiComLine="/quiet" NoUiComLine="/quiet" Options="ym" TargetName="MySQL Connector ODBC 8.0.32 x86"/>
<ROW PrereqKey="RequiredApplication_1" DisplayName="Node.js 18.12.1" VersionMin="18.12.1" SetupFileUrl="https://nodejs.org/dist/v18.12.1/node-v18.12.1-x64.msi" Location="1" ExactSize="0" Operator="0" ComLine="/quiet" BasicUiComLine="/quiet" NoUiComLine="/quiet" Options="my" TargetName="Node.js v18.12.1 x64"/>
<ROW PrereqKey="RequiredApplication_2" DisplayName="MySQL Installer Community 8.0.21 x86" VersionMin="1.4.34" SetupFileUrl="https://dev.mysql.com/get/Downloads/MySQLInstaller/mysql-installer-community-8.0.21.0.msi" Location="1" ExactSize="0" Operator="1" ComLine="/quiet" BasicUiComLine="/quiet" NoUiComLine="/quiet" Options="y" TargetName="MySQL Installer Community 8.0.21 x86"/>
<ROW PrereqKey="RequiredApplication_2" DisplayName="MySQL Installer Community 8.0.32 x86" VersionMin="8.0.32" SetupFileUrl="https://cdn.mysql.com/Downloads/MySQLInstaller/mysql-installer-community-8.0.32.0.msi" Location="1" ExactSize="0" Operator="1" ComLine="/quiet" BasicUiComLine="/quiet" NoUiComLine="/quiet" Options="y" TargetName="MySQL Installer Community 8.0.32 x86"/>
<ROW PrereqKey="RequiredApplication_4" DisplayName="Elasticsearch v7.16.3 x64" VersionMin="7.16.3" SetupFileUrl="https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.16.3.msi" Location="1" ExactSize="0" WinNTVersions="Windows 9x/ME/NT/2000/XP/Vista/Windows 7/Windows 8 x86/Windows 8.1 x86/Windows 10 x86" Operator="1" ComLine="/quiet" BasicUiComLine="/quiet" NoUiComLine="/quiet" Options="y" TargetName="Elasticsearch v7.16.3 x64"/>
<ROW PrereqKey="RequiredApplication_5" DisplayName="RabbitMQ v3.7.4 x64" VersionMin="3.7.4" SetupFileUrl="https://github.com/rabbitmq/rabbitmq-server/releases/download/v3.7.4/rabbitmq-server-3.7.4.exe" Location="1" ExactSize="0" WinNTVersions="Windows 9x/ME/NT/2000/XP/Vista/Windows 7/Windows 8 x86/Windows 8.1 x86/Windows 10 x86" Operator="1" ComLine="/S" BasicUiComLine="/S" NoUiComLine="/S" Options="yx" TargetName="RabbitMQ v3.7.4 x64"/>
<ROW PrereqKey="RequiredApplication_6" DisplayName="Redis 5.0.10 x64" VersionMin="5.0" SetupFileUrl="http://download.onlyoffice.com/install/windows/redist/Redis-x64-5.0.10.msi" Location="1" ExactSize="0" WinNTVersions="Windows 9x/ME/NT/2000/XP/Vista/Windows 7/Windows 8 x86/Windows 8.1 x86/Windows 10 x86" Operator="1" ComLine="/quiet ADD_INSTALLFOLDER_TO_PATH=1" BasicUiComLine="/quiet ADD_INSTALLFOLDER_TO_PATH=1" NoUiComLine="/quiet ADD_INSTALLFOLDER_TO_PATH=1" Options="yx" TargetName="Redis 5.0.10 x64"/>
<ATTRIBUTE name="PrereqsOrder" value="B96F93FA27E74B02866727AAE83982D0 F3520F64DA5998338D97129FAD2 C5949268848C59079D60551E525B7 EA5B60A5CAD4115A8386D017CC889B9 FC441DA8855740179A0DFCF9560D3DEE D564007E3BBE4F85950A09B470A7CA65 CA62D813A4E74FA2AAE86A7D7B7B1493 A918597FE054CCCB65ABDBA0AD8F63C C4FE6FD5B7C4D07B3A313E754A9A6A8 B365F790B0C4E08A90D54675D858A21 B450414DF7494F99141402B8725A7C RequiredApplication RequiredApplication_2 MySQLInstallerRunn RequiredApplication_1 RequiredApplication_4 Erlangv20.3x64 RequiredApplication_5 RequiredApplication_6 PostgreSQL_ODBC PostgresSQL DocumentServer"/>
<ATTRIBUTE name="PrereqsOrder" value="B96F93FA27E74B02866727AAE83982D0 F3520F64DA5998338D97129FAD2 C5949268848C59079D60551E525B7 EA5B60A5CAD4115A8386D017CC889B9 FC441DA8855740179A0DFCF9560D3DEE D564007E3BBE4F85950A09B470A7CA65 CA62D813A4E74FA2AAE86A7D7B7B1493 A918597FE054CCCB65ABDBA0AD8F63C C4FE6FD5B7C4D07B3A313E754A9A6A8 B365F790B0C4E08A90D54675D858A21 B450414DF7494F99141402B8725A7C RequiredApplication RequiredApplication_2 MySQLInstallerRunn RequiredApplication_1 RequiredApplication_4 Erlangv20.3x64 RequiredApplication_5 RequiredApplication_6 FFmpegx64 PostgreSQL_ODBC PostgresSQL DocumentServer DocumentServer.EE"/>
</COMPONENT>
<COMPONENT cid="caphyon.advinst.msicomp.PreReqSearchComponent">
<ROW SearchKey="A918597FE054CCCB65ABDBA0AD8F63CSyst" Prereq="A918597FE054CCCB65ABDBA0AD8F63C" SearchType="0" SearchString="[SystemFolder]vcruntime140.dll" VerMin="14.26.28720" Order="2" Property="PreReqSearch_1_A918597FE054CCCB65AB"/>
@ -1466,11 +1469,13 @@
<ROW SearchKey="D564007E3BBE4F85950A09B470A7CA65Ver" Prereq="D564007E3BBE4F85950A09B470A7CA65" SearchType="2" SearchString="HKLM\SOFTWARE\Microsoft\DevDiv\VC\Servicing\12.0\RuntimeMinimum\Version" VerMin="12.0.40649" Order="1" Property="PreReqSearch_D564007E3BBE4F85950A09"/>
<ROW SearchKey="EA5B60A5CAD4115A8386D017CC889B9ASP.N" Prereq="EA5B60A5CAD4115A8386D017CC889B9" SearchType="1" SearchString="HKLM\SOFTWARE\Microsoft\ASP.NET Core\Shared Framework\v7.0" VerMin="7.0.0" Order="1" Property="PreReqSearch_EA5B60A5CAD4115A8386D0"/>
<ROW SearchKey="C5949268848C59079D60551E525B7Micr" Prereq="C5949268848C59079D60551E525B7" SearchType="12" SearchString="HKLM\SOFTWARE\dotnet\Setup\InstalledVersions\x86\sharedfx\Microsoft.NETCore.App" VerMin="7.0.0" Order="1" Property="PreReqSearch_C5949268848C59079D6055"/>
<ROW SearchKey="FFmpeg" Prereq="FFmpegx64" SearchType="4" SearchString="{384A74EC-865A-4907-8561-9DE765EE6E14}" Order="1" Property="PreReqSearch_3"/>
<ROW SearchKey="ONLYOFFICEDocumentServer_is1" Prereq="DocumentServer" SearchType="5" SearchString="HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\ONLYOFFICE DocumentServer_is1" Order="1" Property="PreReqSearch_1_1" Platform="1"/>
<ROW SearchKey="RabbitMQ_1" Prereq="RequiredApplication_5" SearchType="5" SearchString="HKLM\SOFTWARE\Ericsson\Erlang\ErlSrv\1.1\RabbitMQ" Order="2" Property="PreReqSearch_9"/>
<ROW SearchKey="SystemFolderfile.dll" Prereq="RequiredApplication" SearchType="4" SearchString="{FF073FBB-32E2-4052-B6B2-830C5ED4A809}" VerMin="8.0.21" Order="1" Property="PreReqSearch"/>
<ROW SearchKey="SystemFolderfile.dll" Prereq="RequiredApplication" SearchType="4" SearchString="{FF073FBB-32E2-4052-B6B2-830C5ED4A809}" VerMin="8.0.32" Order="1" Property="PreReqSearch"/>
<ROW SearchKey="SystemFolderfile.dll_1" Prereq="RequiredApplication_1" SearchType="4" SearchString="{47C07A3A-42EF-4213-A85D-8F5A59077C28}" VerMin="14.17.4" Order="1" Property="PreReqSearch_1"/>
<ROW SearchKey="SystemFolderfile.dll_2" Prereq="RequiredApplication_2" SearchType="4" SearchString="{18B94B70-06F1-4AC0-B308-37280DB868C2}" VerMin="1.4.34" Order="1" Property="PreReqSearch_2"/>
<ROW SearchKey="SystemFolderfile.dll_2" Prereq="RequiredApplication_2" SearchType="4" SearchString="{18B94B70-06F1-4AC0-B308-37280DB868C2}" VerMin="8.0.32" Order="1" Property="PreReqSearch_2"/>
<ROW SearchKey="SystemFolderfile.dll_3" Prereq="DocumentServer.EE" SearchType="0" SearchString="HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\ONLYOFFICE DocumentServer_is1" Order="1" Property="PreReqSearch_8" Platform="1"/>
<ROW SearchKey="UpgradeCode" Prereq="PostgreSQL_ODBC" SearchType="4" SearchString="{BBD29DF5-89F6-4B8B-BDC9-C3EA3A4AFDBB}" VerMin="09.05" Order="1" Property="PreReqSearch_14"/>
<ROW SearchKey="UpgradeCode_1" Prereq="RequiredApplication_4" SearchType="4" SearchString="{DAAA2CBA-A1ED-4F29-AFBF-5478617B00F6}" VerMin="7.13.1" Order="2" Property="PreReqSearch_7"/>
<ROW SearchKey="UpgradeCode_3" Prereq="RequiredApplication_6" SearchType="4" SearchString="{05410198-7212-4FC4-B7C8-AFEFC3DA0FBC}" VerMin="5.0.10" Order="2" Property="PreReqSearch_12"/>
@ -1478,7 +1483,7 @@
<ROW SearchKey="Version_1" Prereq="MySQLInstallerRunn" SearchType="2" SearchString="HKLM\SOFTWARE\MySQL AB\MySQL Server 8.0\Version" Order="2" Property="PreReqSearch_5"/>
<ROW SearchKey="Version_2" Prereq="MySQLInstallerRunn" SearchType="2" SearchString="HKLM\SOFTWARE\MySQL AB\MySQL Server 5.5\Version" VerMin="5.5" Order="0" Property="PreReqSearch_6"/>
<ROW SearchKey="__1" Prereq="Erlangv20.3x64" SearchType="5" SearchString="HKLM\SOFTWARE\Wow6432Node\Ericsson\Erlang\9.3" Order="2" Property="PreReqSearch_11"/>
<ROW SearchKey="postgresqlx649.5" Prereq="PostgresSQL" SearchType="5" SearchString="HKLM\SOFTWARE\PostgreSQL\Installations\postgresql-x64-9.5" Order="1" Property="PreReqSearch_2_1"/>
<ROW SearchKey="postgresqlx649.5" Prereq="PostgresSQL" SearchType="5" SearchString="HKLM\SOFTWARE\PostgreSQL\Installations\postgresql-x64-12" Order="1" Property="PreReqSearch_2_1"/>
</COMPONENT>
<COMPONENT cid="caphyon.advinst.msicomp.SqlScriptComponent">
<ATTRIBUTE name="ImpersonateUser" value="true"/>

View File

@ -9,7 +9,7 @@ set SRC_PATH=%~s2
pushd %~1
call dotnet build ASC.Web.slnf
call dotnet build ASC.Migrations.sln -o %SRC_PATH%\services\ASC.Migration.Runner\service
call dotnet build ASC.Migrations.sln --property:OutputPath=%SRC_PATH%\services\ASC.Migration.Runner\service
echo "== Build ASC.Socket.IO =="
pushd common\ASC.Socket.IO

View File

@ -36,14 +36,20 @@ function DownloadComponents {
}
}
switch ( $env:DOCUMENT_SERVER_VERSION )
switch ( $env:DOCUMENT_SERVER_VERSION_EE )
{
latest { $DOCUMENT_SERVER_LINK = "https://download.onlyoffice.com/install/documentserver/windows/onlyoffice-documentserver-ee.exe" }
custom { $DOCUMENT_SERVER_LINK = $env:DOCUMENT_SERVER_CUSTOM_LINK.Replace(",", "") }
latest { $DOCUMENT_SERVER_EE_LINK = "https://download.onlyoffice.com/install/documentserver/windows/onlyoffice-documentserver-ee.exe" }
custom { $DOCUMENT_SERVER_EE_LINK = $env:DOCUMENT_SERVER_EE_CUSTOM_LINK.Replace(",", "") }
}
switch ( $env:DOCUMENT_SERVER_VERSION_CE )
{
latest { $DOCUMENT_SERVER_CE_LINK = "https://download.onlyoffice.com/install/documentserver/windows/onlyoffice-documentserver.exe" }
custom { $DOCUMENT_SERVER_CE_LINK = $env:DOCUMENT_SERVER_CE_CUSTOM_LINK.Replace(",", "") }
}
$nginx_version = '1.21.1'
$psql_version = '9.5.4'
$psql_version = '12.9'
$path_prereq = "${pwd}\build\install\win\"
@ -60,12 +66,20 @@ $prerequisites = @(
link = "https://github.com/winsw/winsw/releases/download/v2.11.0/WinSW.NET4.exe";
}
@{
@{
# Downloading onlyoffice-documentserver-ee for DocSpace Enterprise
download_allways = $true;
name = "onlyoffice-documentserver.latest.exe";
link = $DOCUMENT_SERVER_LINK
name = "onlyoffice-documentserver-ee.exe";
link = $DOCUMENT_SERVER_EE_LINK
}
@{
# Downloading onlyoffice-documentserver for DocSpace Community
download_allways = $true;
name = "onlyoffice-documentserver.exe";
link = $DOCUMENT_SERVER_CE_LINK
}
@{
download_allways = $false;
name = "psqlodbc_x64.msi";

View File

@ -0,0 +1,4 @@
PUSHD %~dp0..
set dir=%~dp0..
echo %dir%
dotnet test common\Tests\Backend.Translations.Tests\Backend.Translations.Tests.csproj -l:html --environment "BASE_DIR=%dir%" --results-directory "%dir%/TestsResults"

View File

@ -24,10 +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.Linq;
using Microsoft.AspNetCore.Builder;
using JsonConverter = System.Text.Json.Serialization.JsonConverter;
namespace ASC.Api.Core;
@ -142,9 +138,7 @@ public abstract class BaseStartup
}
};
services.AddControllers()
.AddXmlSerializerFormatters()
.AddJsonOptions(jsonOptions);
services.AddControllers().AddJsonOptions(jsonOptions);
services.AddSingleton(jsonOptions);
@ -207,11 +201,6 @@ public abstract class BaseStartup
config.Filters.Add(new CustomResponseFilterAttribute());
config.Filters.Add(new CustomExceptionFilterAttribute());
config.Filters.Add(new TypeFilterAttribute(typeof(WebhooksGlobalFilterAttribute)));
config.Filters.Add(new TypeFilterAttribute(typeof(FormatFilter)));
config.OutputFormatters.RemoveType<XmlSerializerOutputFormatter>();
config.OutputFormatters.Add(new XmlOutputFormatter());
});
var authBuilder = services.AddAuthentication(options =>

View File

@ -62,7 +62,6 @@ public class CustomEndpointDataSource : EndpointDataSource
{
var order = constraintRouteAttr != null ? r.Order : r.Order + 2;
endpoints.Add(new RouteEndpoint(r.RequestDelegate, RoutePatternFactory.Parse(r.RoutePattern.RawText, defaults, policies), order + 1, r.Metadata, r.DisplayName));
endpoints.Add(new RouteEndpoint(r.RequestDelegate, RoutePatternFactory.Parse(r.RoutePattern.RawText + ".{format}", defaults, policies), order, r.Metadata, r.DisplayName));
}
}).ToList();
@ -76,13 +75,6 @@ public class CustomEndpointDataSource : EndpointDataSource
public static class EndpointExtension
{
private static readonly IReadOnlyList<string> _methodList = new List<string>
{
"POST",
"PUT",
"DELETE"
};
public static async Task<IEndpointRouteBuilder> MapCustomAsync(this IEndpointRouteBuilder endpoints, bool webhooksEnabled = false, IServiceProvider serviceProvider = null)
{
endpoints.MapControllers();
@ -109,7 +101,7 @@ public static class EndpointExtension
var httpMethodMetadata = r.Metadata.OfType<HttpMethodMetadata>().FirstOrDefault();
var disabled = r.Metadata.OfType<WebhookDisableAttribute>().FirstOrDefault();
if (disabled == null)
if (disabled == null && httpMethodMetadata != null)
{
foreach (var httpMethod in httpMethodMetadata.HttpMethods)
{
@ -118,7 +110,7 @@ public static class EndpointExtension
}
return result;
})
.Where(r => _methodList.Contains(r.Method))
.Where(r => DbWorker.MethodList.Contains(r.Method))
.DistinctBy(r => $"{r.Method}|{r.Route}")
.ToList();

View File

@ -51,7 +51,9 @@ public class WebhooksGlobalFilterAttribute : ResultFilterAttribute, IDisposable
public override async Task OnResultExecutionAsync(ResultExecutingContext context, ResultExecutionDelegate next)
{
if (!await Skip(context.HttpContext))
var skip = await Skip(context.HttpContext);
if (!skip)
{
_bodyStream = context.HttpContext.Response.Body;
context.HttpContext.Response.Body = _stream;
@ -59,7 +61,7 @@ public class WebhooksGlobalFilterAttribute : ResultFilterAttribute, IDisposable
await base.OnResultExecutionAsync(context, next);
if (context.Cancel || await Skip(context.HttpContext))
if (context.Cancel || skip)
{
return;
}
@ -113,6 +115,11 @@ public class WebhooksGlobalFilterAttribute : ResultFilterAttribute, IDisposable
return true;
}
if (!DbWorker.MethodList.Contains(method))
{
return true;
}
var webhook = await _dbWorker.GetWebhookAsync(method, routePattern);
if (webhook == null || _settingsManager.Load<WebHooksSettings>().Ids.Contains(webhook.Id))
{

View File

@ -36,4 +36,5 @@ public class DefaultRouteAttribute : RouteAttribute
}
public DefaultRouteAttribute() : base(BaseUrl) { }
public DefaultRouteAttribute(string template) : base($"{BaseUrl}{template}") { }
}

View File

@ -30,16 +30,16 @@ public class IPGeolocationInfo
{
public string Key { get; set; }
public string City { get; set; }
public double TimezoneOffset { get; set; }
public float TimezoneOffset { get; set; }
public string TimezoneName { get; set; }
public string IPStart { get; set; }
public string IPEnd { get; set; }
public IPAddress IPStart { get; set; }
public IPAddress IPEnd { get; set; }
public string Continent { get; set; }
public static readonly IPGeolocationInfo Default = new IPGeolocationInfo
{
Key = string.Empty,
IPStart = string.Empty,
IPEnd = string.Empty,
City = string.Empty,
TimezoneName = string.Empty,
};

View File

@ -77,7 +77,16 @@ public class BaseCommonLinkUtility
}
else if (_serverRoot == null)
{
_serverRoot = new UriBuilder(Uri.UriSchemeHttp, LocalHost);
var serverRoot = coreBaseSettings.ServerRoot;
if (string.IsNullOrEmpty(serverRoot))
{
_serverRoot = new UriBuilder(Uri.UriSchemeHttp, LocalHost);
}
else
{
ServerUri = serverRoot;
}
}
}
catch (Exception error)

View File

@ -169,8 +169,6 @@ public class TariffService : ITariffService
if (_billingClient.Configured && withRequestToPaymentSystem)
{
var paymentFound = false;
try
{
var currentPayments = _billingClient.GetCurrentPayments(GetPortalId(tenantId));
@ -225,8 +223,6 @@ public class TariffService : ITariffService
}
UpdateCache(tariff.Id);
paymentFound = true;
}
catch (Exception error)
{
@ -236,7 +232,7 @@ public class TariffService : ITariffService
}
}
if (!paymentFound)
if (tariff.Id == 0)
{
var freeTariff = tariff.Quotas.FirstOrDefault(tariffRow =>
{

View File

@ -188,6 +188,7 @@ public class CachedUserService : IUserService, ICachedService
List<List<Guid>> includeGroups,
List<Guid> excludeGroups,
EmployeeActivationStatus? activationStatus,
AccountLoginType? accountLoginType,
string text,
string sortBy,
bool sortOrderAsc,
@ -196,7 +197,7 @@ public class CachedUserService : IUserService, ICachedService
out int total,
out int count)
{
return Service.GetUsers(tenant, isDocSpaceAdmin, employeeStatus, includeGroups, excludeGroups, activationStatus, text, sortBy, sortOrderAsc, limit, offset, out total, out count);
return Service.GetUsers(tenant, isDocSpaceAdmin, employeeStatus, includeGroups, excludeGroups, activationStatus, accountLoginType, text, sortBy, sortOrderAsc, limit, offset, out total, out count);
}
public UserInfo GetUser(int tenant, Guid id)

View File

@ -34,6 +34,7 @@ public class CoreBaseSettings
private bool? _personal;
private bool? _customMode;
private bool? _disableDocSpace;
private string _serverRoot;
private IConfiguration Configuration { get; }
@ -55,6 +56,19 @@ public class CoreBaseSettings
}
}
public string ServerRoot
{
get
{
if (_serverRoot == null)
{
_serverRoot = Configuration["core:server-root"] ?? string.Empty;
}
return _serverRoot;
}
}
public bool Standalone => _standalone ?? (bool)(_standalone = Configuration["core:base-domain"] == "localhost");
public bool Personal =>

View File

@ -326,6 +326,17 @@ public class TenantManager
return result;
}
public Dictionary<string, decimal> GetProductPriceInfo(string productId)
{
if (string.IsNullOrEmpty(productId))
{
return null;
}
var prices = TariffService.GetProductPriceInfo(new[] { productId });
return prices.ContainsKey(productId) ? prices[productId] : null;
}
public TenantQuota SaveTenantQuota(TenantQuota quota)
{
quota = QuotaService.SaveTenantQuota(quota);

View File

@ -187,6 +187,7 @@ public class UserManager
List<List<Guid>> includeGroups,
List<Guid> excludeGroups,
EmployeeActivationStatus? activationStatus,
AccountLoginType? accountLoginType,
string text,
string sortBy,
bool sortOrderAsc,
@ -195,7 +196,7 @@ public class UserManager
out int total,
out int count)
{
return _userService.GetUsers(Tenant.Id, isDocSpaceAdmin, employeeStatus, includeGroups, excludeGroups, activationStatus, text, sortBy, sortOrderAsc, limit, offset, out total, out count);
return _userService.GetUsers(Tenant.Id, isDocSpaceAdmin, employeeStatus, includeGroups, excludeGroups, activationStatus, accountLoginType, text, sortBy, sortOrderAsc, limit, offset, out total, out count);
}
public string[] GetUserNames(EmployeeStatus status)

View File

@ -0,0 +1,34 @@
// (c) Copyright Ascensio System SIA 2010-2022
//
// This program is a free software product.
// You can redistribute it and/or modify it under the terms
// of the GNU Affero General Public License (AGPL) version 3 as published by the Free Software
// Foundation. In accordance with Section 7(a) of the GNU AGPL its Section 15 shall be amended
// to the effect that Ascensio System SIA expressly excludes the warranty of non-infringement of
// any third-party rights.
//
// This program is distributed WITHOUT ANY WARRANTY, without even the implied warranty
// of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. For details, see
// the GNU AGPL at: http://www.gnu.org/licenses/agpl-3.0.html
//
// You can contact Ascensio System SIA at Lubanas st. 125a-25, Riga, Latvia, EU, LV-1021.
//
// The interactive user interfaces in modified source and object code versions of the Program must
// display Appropriate Legal Notices, as required under Section 5 of the GNU AGPL version 3.
//
// Pursuant to Section 7(b) of the License you must retain the original Product logo when
// distributing the program. Pursuant to Section 7(e) we decline to grant you any rights under
// trademark law for use of our trademarks.
//
// All the Product's GUI elements, including illustrations and icon sets, as well as technical writing
// content are licensed under the terms of the Creative Commons Attribution-ShareAlike 4.0
// International. See the License terms at http://creativecommons.org/licenses/by-sa/4.0/legalcode
namespace ASC.Core;
public enum AccountLoginType
{
SSO,
LDAP,
Standart
}

View File

@ -35,6 +35,7 @@ public interface IUserService
List<List<Guid>> includeGroups,
List<Guid> excludeGroups,
EmployeeActivationStatus? activationStatus,
AccountLoginType? accountLoginType,
string text,
string sortBy,
bool sortOrderAsc,

View File

@ -1,130 +1,150 @@
// (c) Copyright Ascensio System SIA 2010-2022
//
// This program is a free software product.
// You can redistribute it and/or modify it under the terms
// of the GNU Affero General Public License (AGPL) version 3 as published by the Free Software
// Foundation. In accordance with Section 7(a) of the GNU AGPL its Section 15 shall be amended
// to the effect that Ascensio System SIA expressly excludes the warranty of non-infringement of
// any third-party rights.
//
// This program is distributed WITHOUT ANY WARRANTY, without even the implied warranty
// of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. For details, see
// the GNU AGPL at: http://www.gnu.org/licenses/agpl-3.0.html
//
// You can contact Ascensio System SIA at Lubanas st. 125a-25, Riga, Latvia, EU, LV-1021.
//
// The interactive user interfaces in modified source and object code versions of the Program must
// display Appropriate Legal Notices, as required under Section 5 of the GNU AGPL version 3.
//
// Pursuant to Section 7(b) of the License you must retain the original Product logo when
// distributing the program. Pursuant to Section 7(e) we decline to grant you any rights under
// trademark law for use of our trademarks.
//
// All the Product's GUI elements, including illustrations and icon sets, as well as technical writing
// content are licensed under the terms of the Creative Commons Attribution-ShareAlike 4.0
// International. See the License terms at http://creativecommons.org/licenses/by-sa/4.0/legalcode
namespace ASC.Web.Api.Core;
[Scope]
public class RegionHelper
{
private readonly TenantManager _tenantManager;
private readonly IHttpContextAccessor _httpContextAccessor;
private readonly GeolocationHelper _geolocationHelper;
private readonly UserManager _userManager;
public RegionHelper(
TenantManager tenantManager,
IHttpContextAccessor httpContextAccessor,
GeolocationHelper geolocationHelper,
UserManager userManager)
{
_tenantManager = tenantManager;
_httpContextAccessor = httpContextAccessor;
_geolocationHelper = geolocationHelper;
_userManager = userManager;
}
public RegionInfo GetCurrentRegionInfo()
{
var priceInfo = _tenantManager.GetProductPriceInfo();
var defaultRegion = GetDefaultRegionInfo();
var countryCode = _httpContextAccessor.HttpContext.Request.Query["country"];
var currentRegion = GetRegionInfo(countryCode) ?? FindRegionInfo();
if (currentRegion != null && !currentRegion.Name.Equals(defaultRegion.Name))
{
if (priceInfo.Values.Any(value => value.ContainsKey(currentRegion.ISOCurrencySymbol)))
{
return currentRegion;
}
}
return defaultRegion;
}
public RegionInfo GetDefaultRegionInfo()
{
return GetRegionInfo("US");
}
public string GetCurrencyFromRequest()
{
var regionInfo = GetDefaultRegionInfo();
var geoinfo = _geolocationHelper.GetIPGeolocationFromHttpContext();
if (!string.IsNullOrEmpty(geoinfo.Key))
{
try
{
regionInfo = new RegionInfo(geoinfo.Key);
}
catch (Exception)
{
}
}
return regionInfo.ISOCurrencySymbol;
}
private RegionInfo FindRegionInfo()
{
RegionInfo regionInfo = null;
var tenant = _tenantManager.GetCurrentTenant();
var geoinfo = _geolocationHelper.GetIPGeolocationFromHttpContext();
if (geoinfo != null)
{
regionInfo = GetRegionInfo(geoinfo.Key);
}
if (regionInfo == null)
{
var owner = _userManager.GetUsers(tenant.OwnerId);
var culture = string.IsNullOrEmpty(owner.CultureName) ? tenant.GetCulture() : owner.GetCulture();
regionInfo = GetRegionInfo(culture.Name);
}
return regionInfo;
}
private RegionInfo GetRegionInfo(string isoTwoLetterCountryCode)
{
RegionInfo regionInfo = null;
if (!string.IsNullOrEmpty(isoTwoLetterCountryCode))
{
try
{
regionInfo = new RegionInfo(isoTwoLetterCountryCode);
}
catch
{
}
}
return regionInfo;
}
}
// (c) Copyright Ascensio System SIA 2010-2022
//
// This program is a free software product.
// You can redistribute it and/or modify it under the terms
// of the GNU Affero General Public License (AGPL) version 3 as published by the Free Software
// Foundation. In accordance with Section 7(a) of the GNU AGPL its Section 15 shall be amended
// to the effect that Ascensio System SIA expressly excludes the warranty of non-infringement of
// any third-party rights.
//
// This program is distributed WITHOUT ANY WARRANTY, without even the implied warranty
// of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. For details, see
// the GNU AGPL at: http://www.gnu.org/licenses/agpl-3.0.html
//
// You can contact Ascensio System SIA at Lubanas st. 125a-25, Riga, Latvia, EU, LV-1021.
//
// The interactive user interfaces in modified source and object code versions of the Program must
// display Appropriate Legal Notices, as required under Section 5 of the GNU AGPL version 3.
//
// Pursuant to Section 7(b) of the License you must retain the original Product logo when
// distributing the program. Pursuant to Section 7(e) we decline to grant you any rights under
// trademark law for use of our trademarks.
//
// All the Product's GUI elements, including illustrations and icon sets, as well as technical writing
// content are licensed under the terms of the Creative Commons Attribution-ShareAlike 4.0
// International. See the License terms at http://creativecommons.org/licenses/by-sa/4.0/legalcode
namespace ASC.Core;
[Scope]
public class RegionHelper
{
private readonly TenantManager _tenantManager;
private readonly IHttpContextAccessor _httpContextAccessor;
private readonly GeolocationHelper _geolocationHelper;
private readonly UserManager _userManager;
public RegionHelper(
TenantManager tenantManager,
IHttpContextAccessor httpContextAccessor,
GeolocationHelper geolocationHelper,
UserManager userManager)
{
_tenantManager = tenantManager;
_httpContextAccessor = httpContextAccessor;
_geolocationHelper = geolocationHelper;
_userManager = userManager;
}
public RegionInfo GetCurrentRegionInfo(IDictionary<string, Dictionary<string, decimal>> priceInfo = null)
{
var defaultRegion = GetDefaultRegionInfo();
var geoinfo = _geolocationHelper.GetIPGeolocationFromHttpContext();
var countryCode = _httpContextAccessor.HttpContext?.Request.Query["country"];
var currentRegion = GetRegionInfo(countryCode);
if (currentRegion == null)
{
if (geoinfo != null)
{
currentRegion = GetRegionInfo(geoinfo.Key);
}
if (currentRegion == null)
{
var tenant = _tenantManager.GetCurrentTenant(false);
if (tenant != null)
{
var owner = _userManager.GetUsers(tenant.OwnerId);
var culture = string.IsNullOrEmpty(owner.CultureName) ? tenant.GetCulture() : owner.GetCulture();
currentRegion = GetRegionInfo(culture.Name);
}
}
}
if (currentRegion != null && !currentRegion.Name.Equals(defaultRegion.Name))
{
priceInfo ??= _tenantManager.GetProductPriceInfo();
if (priceInfo.Values.Any(value => value.ContainsKey(currentRegion.ISOCurrencySymbol)))
{
return currentRegion;
}
if (geoinfo != null && !string.IsNullOrEmpty(geoinfo.Continent) && geoinfo.Continent == "EU")
{
return GetRegionInfo("ES");
}
}
return defaultRegion;
}
public RegionInfo GetDefaultRegionInfo()
{
return GetRegionInfo("US");
}
public string GetCurrencyFromRequest()
{
var defaultRegion = GetDefaultRegionInfo();
var geoinfo = _geolocationHelper.GetIPGeolocationFromHttpContext();
if (!string.IsNullOrEmpty(geoinfo.Key))
{
try
{
var currentRegion = new RegionInfo(geoinfo.Key);
if (currentRegion != null && !currentRegion.Name.Equals(defaultRegion.Name))
{
var priceInfo = _tenantManager.GetProductPriceInfo();
if (priceInfo.Values.Any(value => value.ContainsKey(currentRegion.ISOCurrencySymbol)))
{
return currentRegion.ISOCurrencySymbol;
}
if (!string.IsNullOrEmpty(geoinfo.Continent) && geoinfo.Continent == "EU")
{
return "EUR";
}
}
}
catch (Exception)
{
}
}
return defaultRegion.ISOCurrencySymbol;
}
private RegionInfo GetRegionInfo(string isoTwoLetterCountryCode)
{
RegionInfo regionInfo = null;
if (!string.IsNullOrEmpty(isoTwoLetterCountryCode))
{
try
{
regionInfo = new RegionInfo(isoTwoLetterCountryCode);
}
catch
{
}
}
return regionInfo;
}
}

View File

@ -26,7 +26,7 @@
namespace ASC.Core.Data;
[Scope]
[Scope(Additional = typeof(DbQuotaServiceExtensions))]
class DbQuotaService : IQuotaService
{
private readonly IDbContextFactory<CoreDbContext> _dbContextFactory;
@ -41,19 +41,14 @@ class DbQuotaService : IQuotaService
{
using var coreDbContext = _dbContextFactory.CreateDbContext();
return coreDbContext.Quotas
.ProjectTo<TenantQuota>(_mapper.ConfigurationProvider)
.ToList();
return _mapper.Map<List<DbQuota>, List<TenantQuota>>(coreDbContext.Quotas.ToList());
}
public TenantQuota GetTenantQuota(int id)
{
using var coreDbContext = _dbContextFactory.CreateDbContext();
return coreDbContext.Quotas
.Where(r => r.Tenant == id)
.ProjectTo<TenantQuota>(_mapper.ConfigurationProvider)
.SingleOrDefault();
return _mapper.Map<DbQuota, TenantQuota>(coreDbContext.Quotas.SingleOrDefault(r => r.Tenant == id));
}
public TenantQuota SaveTenantQuota(TenantQuota quota)
@ -135,4 +130,12 @@ class DbQuotaService : IQuotaService
return q.ProjectTo<TenantQuotaRow>(_mapper.ConfigurationProvider).ToList();
}
}
public static class DbQuotaServiceExtensions
{
public static void Register(DIHelper services)
{
services.TryAdd<TenantQuotaPriceResolver>();
}
}

View File

@ -24,10 +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 ASC.Core.Common.EF;
using Microsoft.EntityFrameworkCore;
namespace ASC.Core.Data;
[Scope]
@ -212,16 +208,16 @@ public class EFUserService : IUserService
.ToList();
}
public IQueryable<UserInfo> GetUsers(int tenant, bool isDocSpaceAdmin, EmployeeStatus? employeeStatus, List<List<Guid>> includeGroups, List<Guid> excludeGroups, EmployeeActivationStatus? activationStatus, string text, string sortBy, bool sortOrderAsc, long limit, long offset, out int total, out int count)
public IQueryable<UserInfo> GetUsers(int tenant, bool isDocSpaceAdmin, EmployeeStatus? employeeStatus, List<List<Guid>> includeGroups, List<Guid> excludeGroups, EmployeeActivationStatus? activationStatus, AccountLoginType? accountLoginType, string text, string sortBy, bool sortOrderAsc, long limit, long offset, out int total, out int count)
{
var userDbContext = _dbContextFactory.CreateDbContext();
var totalQuery = GetUserQuery(userDbContext, tenant);
totalQuery = GetUserQueryForFilter(userDbContext, totalQuery, isDocSpaceAdmin, employeeStatus, includeGroups, excludeGroups, activationStatus, text);
totalQuery = GetUserQueryForFilter(userDbContext, totalQuery, isDocSpaceAdmin, employeeStatus, includeGroups, excludeGroups, activationStatus, accountLoginType, text);
total = totalQuery.Count();
var q = GetUserQuery(userDbContext, tenant);
q = GetUserQueryForFilter(userDbContext, q, isDocSpaceAdmin, employeeStatus, includeGroups, excludeGroups, activationStatus, text);
q = GetUserQueryForFilter(userDbContext, q, isDocSpaceAdmin, employeeStatus, includeGroups, excludeGroups, activationStatus, accountLoginType, text);
var orderedQuery = q.OrderBy(r => r.ActivationStatus == EmployeeActivationStatus.Pending);
q = orderedQuery;
@ -632,6 +628,7 @@ public class EFUserService : IUserService
List<List<Guid>> includeGroups,
List<Guid> excludeGroups,
EmployeeActivationStatus? activationStatus,
AccountLoginType? accountLoginType,
string text)
{
q = q.Where(r => !r.Removed);
@ -701,6 +698,19 @@ public class EFUserService : IUserService
u.Email.Contains(text));
}
switch (accountLoginType)
{
case AccountLoginType.LDAP:
q = q.Where(r => r.Sid != null);
break;
case AccountLoginType.SSO:
q = q.Where(r => r.SsoNameId != null);
break;
case AccountLoginType.Standart:
q = q.Where(r => r.SsoNameId == null && r.Sid == null);
break;
}
return q;
}

View File

@ -29,7 +29,7 @@ namespace ASC.Core.Common.EF.Context;
public class CustomDbContext : DbContext
{
public DbSet<MobileAppInstall> MobileAppInstall { get; set; }
public DbSet<DbipLocation> DbipLocation { get; set; }
public DbSet<DbIPLookup> DbIPLookup { get; set; }
public DbSet<Regions> Regions { get; set; }
public CustomDbContext(DbContextOptions<CustomDbContext> options) : base(options) { }
@ -39,7 +39,7 @@ public class CustomDbContext : DbContext
ModelBuilderWrapper
.From(modelBuilder, Database)
.AddMobileAppInstall()
.AddDbipLocation()
.AddDbIPLookup()
.AddRegions();
}
}

View File

@ -0,0 +1,155 @@
// (c) Copyright Ascensio System SIA 2010-2022
//
// This program is a free software product.
// You can redistribute it and/or modify it under the terms
// of the GNU Affero General Public License (AGPL) version 3 as published by the Free Software
// Foundation. In accordance with Section 7(a) of the GNU AGPL its Section 15 shall be amended
// to the effect that Ascensio System SIA expressly excludes the warranty of non-infringement of
// any third-party rights.
//
// This program is distributed WITHOUT ANY WARRANTY, without even the implied warranty
// of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. For details, see
// the GNU AGPL at: http://www.gnu.org/licenses/agpl-3.0.html
//
// You can contact Ascensio System SIA at Lubanas st. 125a-25, Riga, Latvia, EU, LV-1021.
//
// The interactive user interfaces in modified source and object code versions of the Program must
// display Appropriate Legal Notices, as required under Section 5 of the GNU AGPL version 3.
//
// Pursuant to Section 7(b) of the License you must retain the original Product logo when
// distributing the program. Pursuant to Section 7(e) we decline to grant you any rights under
// trademark law for use of our trademarks.
//
// All the Product's GUI elements, including illustrations and icon sets, as well as technical writing
// content are licensed under the terms of the Creative Commons Attribution-ShareAlike 4.0
// International. See the License terms at http://creativecommons.org/licenses/by-sa/4.0/legalcode
namespace ASC.Core.Common.EF.Model;
public class DbIPLookup
{
public string AddrType { get; set; } //ipv4, ipv6
public byte[] IPStart { get; set; }
public byte[] IPEnd { get; set; }
public string Continent { get; set; }
public string Country { get; set; }
public string StateProvCode { get; set; }
public string StateProv { get; set; }
public string District { get; set; }
public string City { get; set; }
public string ZipCode { get; set; }
public float Latitude { get; set; }
public float Longitude { get; set; }
public int? GeonameId { get; set; }
public float TimezoneOffset { get; set; }
public string TimezoneName { get; set; }
public string WeatherCode { get; set; }
}
public static class DbIPLookupExtension
{
public static ModelBuilderWrapper AddDbIPLookup(this ModelBuilderWrapper modelBuilder)
{
modelBuilder
.Add(MySqlAddDbIPLookup, Provider.MySql)
.Add(PgSqlAddDbIPLookup, Provider.PostgreSql);
return modelBuilder;
}
public static void MySqlAddDbIPLookup(this ModelBuilder modelBuilder)
{
modelBuilder.Entity<DbIPLookup>(entity =>
{
entity.ToTable("dbip_lookup")
.HasCharSet("utf8mb4");
entity.HasKey(nameof(DbIPLookup.AddrType), nameof(DbIPLookup.IPStart));
entity.Property(e => e.AddrType)
.IsRequired()
.HasColumnName("addr_type")
.HasColumnType("enum('ipv4','ipv6')");
entity.Property(e => e.IPStart)
.IsRequired()
.HasColumnName("ip_start")
.HasColumnType("varbinary(16)");
entity.Property(e => e.IPEnd)
.IsRequired()
.HasColumnName("ip_end")
.HasColumnType("varbinary(16)");
entity.Property(e => e.Continent)
.IsRequired()
.HasColumnName("continent")
.HasColumnType("char(2)");
entity.Property(e => e.Country)
.IsRequired()
.HasColumnName("country")
.HasColumnType("char(2)");
entity.Property(e => e.StateProvCode)
.HasColumnName("stateprov_code")
.HasColumnType("varchar(15)");
entity.Property(e => e.StateProv)
.IsRequired()
.HasColumnName("stateprov")
.HasColumnType("varchar(80)");
entity.Property(e => e.District)
.IsRequired()
.HasColumnName("district")
.HasColumnType("varchar(80)");
entity.Property(e => e.City)
.IsRequired()
.HasColumnName("city")
.HasColumnType("varchar(80)");
entity.Property(e => e.ZipCode)
.HasColumnName("zipcode")
.HasColumnType("varchar(20)");
entity.Property(e => e.Latitude)
.IsRequired()
.HasColumnName("latitude")
.HasColumnType("float");
entity.Property(e => e.Longitude)
.IsRequired()
.HasColumnName("longitude")
.HasColumnType("float");
entity.Property(e => e.GeonameId)
.IsRequired(false)
.HasColumnName("geoname_id")
.HasColumnType("int(10)");
entity.Property(e => e.TimezoneOffset)
.IsRequired()
.HasColumnType("float")
.HasColumnName("timezone_offset");
entity.Property(e => e.TimezoneName)
.IsRequired()
.HasColumnName("timezone_name")
.HasColumnType("varchar(64)");
entity.Property(e => e.WeatherCode)
.IsRequired()
.HasColumnName("weather_code")
.HasColumnType("varchar(10)");
});
}
public static void PgSqlAddDbIPLookup(this ModelBuilder modelBuilder)
{
throw new NotImplementedException();
}
}

View File

@ -1,225 +0,0 @@
// (c) Copyright Ascensio System SIA 2010-2022
//
// This program is a free software product.
// You can redistribute it and/or modify it under the terms
// of the GNU Affero General Public License (AGPL) version 3 as published by the Free Software
// Foundation. In accordance with Section 7(a) of the GNU AGPL its Section 15 shall be amended
// to the effect that Ascensio System SIA expressly excludes the warranty of non-infringement of
// any third-party rights.
//
// This program is distributed WITHOUT ANY WARRANTY, without even the implied warranty
// of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. For details, see
// the GNU AGPL at: http://www.gnu.org/licenses/agpl-3.0.html
//
// You can contact Ascensio System SIA at Lubanas st. 125a-25, Riga, Latvia, EU, LV-1021.
//
// The interactive user interfaces in modified source and object code versions of the Program must
// display Appropriate Legal Notices, as required under Section 5 of the GNU AGPL version 3.
//
// Pursuant to Section 7(b) of the License you must retain the original Product logo when
// distributing the program. Pursuant to Section 7(e) we decline to grant you any rights under
// trademark law for use of our trademarks.
//
// All the Product's GUI elements, including illustrations and icon sets, as well as technical writing
// content are licensed under the terms of the Creative Commons Attribution-ShareAlike 4.0
// International. See the License terms at http://creativecommons.org/licenses/by-sa/4.0/legalcode
namespace ASC.Core.Common.EF.Model;
public class DbipLocation
{
public int Id { get; set; }
public string AddrType { get; set; }
public string IPStart { get; set; }
public string IPEnd { get; set; }
public string Country { get; set; }
public string StateProv { get; set; }
public string District { get; set; }
public string City { get; set; }
public string ZipCode { get; set; }
public long? Latitude { get; set; }
public long? Longitude { get; set; }
public int? GeonameId { get; set; }
public double? TimezoneOffset { get; set; }
public string TimezoneName { get; set; }
public int Processed { get; set; }
}
public static class DbipLocationExtension
{
public static ModelBuilderWrapper AddDbipLocation(this ModelBuilderWrapper modelBuilder)
{
modelBuilder
.Add(MySqlAddDbipLocation, Provider.MySql)
.Add(PgSqlAddDbipLocation, Provider.PostgreSql);
return modelBuilder;
}
public static void MySqlAddDbipLocation(this ModelBuilder modelBuilder)
{
modelBuilder.Entity<DbipLocation>(entity =>
{
entity.ToTable("dbip_location")
.HasCharSet("utf8");
entity.HasIndex(e => e.IPStart)
.HasDatabaseName("ip_start");
entity.Property(e => e.Id).HasColumnName("id");
entity.Property(e => e.AddrType)
.IsRequired()
.HasColumnName("addr_type")
.HasColumnType("enum('ipv4','ipv6')")
.HasCharSet("utf8")
.UseCollation("utf8_general_ci");
entity.Property(e => e.City)
.IsRequired()
.HasColumnName("city")
.HasColumnType("varchar(255)")
.HasCharSet("utf8")
.UseCollation("utf8_general_ci");
entity.Property(e => e.Country)
.IsRequired()
.HasColumnName("country")
.HasColumnType("varchar(2)")
.HasCharSet("utf8")
.UseCollation("utf8_general_ci");
entity.Property(e => e.District)
.HasColumnName("district")
.HasColumnType("varchar(255)")
.HasCharSet("utf8")
.UseCollation("utf8_general_ci");
entity.Property(e => e.GeonameId)
.HasColumnName("geoname_id")
.IsRequired(false)
.HasDefaultValueSql("NULL");
entity.Property(e => e.IPEnd)
.IsRequired()
.HasColumnName("ip_end")
.HasColumnType("varchar(39)")
.HasCharSet("utf8")
.UseCollation("utf8_general_ci");
entity.Property(e => e.IPStart)
.IsRequired()
.HasColumnName("ip_start")
.HasColumnType("varchar(39)")
.HasCharSet("utf8")
.UseCollation("utf8_general_ci");
entity.Property(e => e.Latitude)
.HasColumnName("latitude")
.HasColumnType("float")
.IsRequired(false)
.HasDefaultValueSql("NULL");
entity.Property(e => e.Longitude)
.HasColumnName("longitude")
.HasColumnType("float")
.IsRequired(false)
.HasDefaultValueSql("NULL");
entity.Property(e => e.Processed)
.HasColumnName("processed")
.HasDefaultValueSql("'1'");
entity.Property(e => e.StateProv)
.IsRequired()
.HasColumnName("stateprov")
.HasColumnType("varchar(255)")
.HasCharSet("utf8")
.UseCollation("utf8_general_ci");
entity.Property(e => e.TimezoneName)
.HasColumnName("timezone_name")
.HasColumnType("varchar(255)")
.HasCharSet("utf8")
.UseCollation("utf8_general_ci");
entity.Property(e => e.TimezoneOffset)
.HasColumnType("int")
.HasColumnName("timezone_offset")
.IsRequired(false)
.HasDefaultValueSql("NULL");
entity.Property(e => e.ZipCode)
.HasColumnName("zipcode")
.HasColumnType("varchar(255)")
.HasCharSet("utf8")
.UseCollation("utf8_general_ci");
});
}
public static void PgSqlAddDbipLocation(this ModelBuilder modelBuilder)
{
modelBuilder.HasPostgresEnum("onlyoffice", "enum_dbip_location", new[] { "ipv4", "ipv6" });
modelBuilder.Entity<DbipLocation>(entity =>
{
entity.ToTable("dbip_location", "onlyoffice");
entity.HasIndex(e => e.IPStart)
.HasDatabaseName("ip_start");
entity.Property(e => e.Id).HasColumnName("id");
entity.Property(e => e.City)
.IsRequired()
.HasColumnName("city")
.HasMaxLength(255);
entity.Property(e => e.Country)
.IsRequired()
.HasColumnName("country")
.HasMaxLength(2);
entity.Property(e => e.District)
.HasColumnName("district")
.HasMaxLength(255)
.HasDefaultValueSql("NULL");
entity.Property(e => e.GeonameId).HasColumnName("geoname_id");
entity.Property(e => e.IPEnd)
.IsRequired()
.HasColumnName("ip_end")
.HasMaxLength(39);
entity.Property(e => e.IPStart)
.IsRequired()
.HasColumnName("ip_start")
.HasMaxLength(39);
entity.Property(e => e.Latitude).HasColumnName("latitude");
entity.Property(e => e.Longitude).HasColumnName("longitude");
entity.Property(e => e.Processed)
.HasColumnName("processed")
.HasDefaultValueSql("1");
entity.Property(e => e.StateProv)
.IsRequired()
.HasColumnName("stateprov")
.HasMaxLength(255);
entity.Property(e => e.TimezoneName)
.HasColumnName("timezone_name")
.HasMaxLength(255)
.HasDefaultValueSql("NULL");
entity.Property(e => e.TimezoneOffset).HasColumnName("timezone_offset");
entity.Property(e => e.ZipCode)
.HasColumnName("zipcode")
.HasMaxLength(255)
.HasDefaultValueSql("NULL");
});
}
}

View File

@ -138,6 +138,26 @@ public static class FilesConvertsExtension
new FilesConverts { Input = ".dotx", Output = ".html" },
new FilesConverts { Input = ".dotx", Output = ".ott" },
new FilesConverts { Input = ".dps", Output = ".odp" },
new FilesConverts { Input = ".dps", Output = ".otp" },
new FilesConverts { Input = ".dps", Output = ".pdf" },
new FilesConverts { Input = ".dps", Output = ".potm" },
new FilesConverts { Input = ".dps", Output = ".potx" },
new FilesConverts { Input = ".dps", Output = ".ppsm" },
new FilesConverts { Input = ".dps", Output = ".ppsx" },
new FilesConverts { Input = ".dps", Output = ".pptm" },
new FilesConverts { Input = ".dps", Output = ".pptx" },
new FilesConverts { Input = ".dpt", Output = ".odp" },
new FilesConverts { Input = ".dpt", Output = ".otp" },
new FilesConverts { Input = ".dpt", Output = ".pdf" },
new FilesConverts { Input = ".dpt", Output = ".potm" },
new FilesConverts { Input = ".dpt", Output = ".potx" },
new FilesConverts { Input = ".dpt", Output = ".ppsm" },
new FilesConverts { Input = ".dpt", Output = ".ppsx" },
new FilesConverts { Input = ".dpt", Output = ".pptm" },
new FilesConverts { Input = ".dpt", Output = ".pptx" },
new FilesConverts { Input = ".epub", Output = ".docx" },
new FilesConverts { Input = ".epub", Output = ".odt" },
new FilesConverts { Input = ".epub", Output = ".pdf" },
@ -150,6 +170,24 @@ public static class FilesConvertsExtension
new FilesConverts { Input = ".epub", Output = ".html" },
new FilesConverts { Input = ".epub", Output = ".ott" },
new FilesConverts { Input = ".et", Output = ".csv" },
new FilesConverts { Input = ".et", Output = ".ods" },
new FilesConverts { Input = ".et", Output = ".ots" },
new FilesConverts { Input = ".et", Output = ".pdf" },
new FilesConverts { Input = ".et", Output = ".xlsm" },
new FilesConverts { Input = ".et", Output = ".xlsx" },
new FilesConverts { Input = ".et", Output = ".xltm" },
new FilesConverts { Input = ".et", Output = ".xltx" },
new FilesConverts { Input = ".ett", Output = ".csv" },
new FilesConverts { Input = ".ett", Output = ".ods" },
new FilesConverts { Input = ".ett", Output = ".ots" },
new FilesConverts { Input = ".ett", Output = ".pdf" },
new FilesConverts { Input = ".ett", Output = ".xlsm" },
new FilesConverts { Input = ".ett", Output = ".xlsx" },
new FilesConverts { Input = ".ett", Output = ".xltm" },
new FilesConverts { Input = ".ett", Output = ".xltx" },
new FilesConverts { Input = ".fb2", Output = ".docx" },
new FilesConverts { Input = ".fb2", Output = ".odt" },
new FilesConverts { Input = ".fb2", Output = ".pdf" },
@ -192,6 +230,19 @@ public static class FilesConvertsExtension
new FilesConverts { Input = ".fodt", Output = ".html" },
new FilesConverts { Input = ".fodt", Output = ".ott" },
new FilesConverts { Input = ".htm", Output = ".docm" },
new FilesConverts { Input = ".htm", Output = ".docx" },
new FilesConverts { Input = ".htm", Output = ".dotm" },
new FilesConverts { Input = ".htm", Output = ".dotx" },
new FilesConverts { Input = ".htm", Output = ".epub" },
new FilesConverts { Input = ".htm", Output = ".fb2" },
new FilesConverts { Input = ".htm", Output = ".html" },
new FilesConverts { Input = ".htm", Output = ".odt" },
new FilesConverts { Input = ".htm", Output = ".ott" },
new FilesConverts { Input = ".htm", Output = ".pdf" },
new FilesConverts { Input = ".htm", Output = ".rtf" },
new FilesConverts { Input = ".htm", Output = ".txt" },
new FilesConverts { Input = ".html", Output = ".docx" },
new FilesConverts { Input = ".html", Output = ".odt" },
new FilesConverts { Input = ".html", Output = ".pdf" },
@ -214,8 +265,22 @@ public static class FilesConvertsExtension
new FilesConverts { Input = ".mht", Output = ".dotx" },
new FilesConverts { Input = ".mht", Output = ".epub" },
new FilesConverts { Input = ".mht", Output = ".fb2" },
new FilesConverts { Input = ".mht", Output = ".html" },
new FilesConverts { Input = ".mht", Output = ".ott" },
new FilesConverts { Input = ".mhtml", Output = ".docm" },
new FilesConverts { Input = ".mhtml", Output = ".docx" },
new FilesConverts { Input = ".mhtml", Output = ".dotm" },
new FilesConverts { Input = ".mhtml", Output = ".dotx" },
new FilesConverts { Input = ".mhtml", Output = ".epub" },
new FilesConverts { Input = ".mhtml", Output = ".fb2" },
new FilesConverts { Input = ".mhtml", Output = ".html" },
new FilesConverts { Input = ".mhtml", Output = ".odt" },
new FilesConverts { Input = ".mhtml", Output = ".ott" },
new FilesConverts { Input = ".mhtml", Output = ".pdf" },
new FilesConverts { Input = ".mhtml", Output = ".rtf" },
new FilesConverts { Input = ".mhtml", Output = ".txt" },
new FilesConverts { Input = ".odp", Output = ".pdf" },
new FilesConverts { Input = ".odp", Output = ".pptx" },
new FilesConverts { Input = ".odp", Output = ".otp" },
@ -397,6 +462,51 @@ public static class FilesConvertsExtension
new FilesConverts { Input = ".rtf", Output = ".html" },
new FilesConverts { Input = ".rtf", Output = ".ott" },
new FilesConverts { Input = ".stw", Output = ".docm" },
new FilesConverts { Input = ".stw", Output = ".docx" },
new FilesConverts { Input = ".stw", Output = ".dotm" },
new FilesConverts { Input = ".stw", Output = ".dotx" },
new FilesConverts { Input = ".stw", Output = ".epub" },
new FilesConverts { Input = ".stw", Output = ".fb2" },
new FilesConverts { Input = ".stw", Output = ".html" },
new FilesConverts { Input = ".stw", Output = ".odt" },
new FilesConverts { Input = ".stw", Output = ".ott" },
new FilesConverts { Input = ".stw", Output = ".pdf" },
new FilesConverts { Input = ".stw", Output = ".rtf" },
new FilesConverts { Input = ".stw", Output = ".txt" },
new FilesConverts { Input = ".sxc", Output = ".csv" },
new FilesConverts { Input = ".sxc", Output = ".ods" },
new FilesConverts { Input = ".sxc", Output = ".ots" },
new FilesConverts { Input = ".sxc", Output = ".pdf" },
new FilesConverts { Input = ".sxc", Output = ".xlsm" },
new FilesConverts { Input = ".sxc", Output = ".xlsx" },
new FilesConverts { Input = ".sxc", Output = ".xltm" },
new FilesConverts { Input = ".sxc", Output = ".xltx" },
new FilesConverts { Input = ".sxi", Output = ".odp" },
new FilesConverts { Input = ".sxi", Output = ".otp" },
new FilesConverts { Input = ".sxi", Output = ".pdf" },
new FilesConverts { Input = ".sxi", Output = ".potm" },
new FilesConverts { Input = ".sxi", Output = ".potx" },
new FilesConverts { Input = ".sxi", Output = ".ppsm" },
new FilesConverts { Input = ".sxi", Output = ".ppsx" },
new FilesConverts { Input = ".sxi", Output = ".pptm" },
new FilesConverts { Input = ".sxi", Output = ".pptx" },
new FilesConverts { Input = ".sxw", Output = ".docm" },
new FilesConverts { Input = ".sxw", Output = ".docx" },
new FilesConverts { Input = ".sxw", Output = ".dotm" },
new FilesConverts { Input = ".sxw", Output = ".dotx" },
new FilesConverts { Input = ".sxw", Output = ".epub" },
new FilesConverts { Input = ".sxw", Output = ".fb2" },
new FilesConverts { Input = ".sxw", Output = ".html" },
new FilesConverts { Input = ".sxw", Output = ".odt" },
new FilesConverts { Input = ".sxw", Output = ".ott" },
new FilesConverts { Input = ".sxw", Output = ".pdf" },
new FilesConverts { Input = ".sxw", Output = ".rtf" },
new FilesConverts { Input = ".sxw", Output = ".txt" },
new FilesConverts { Input = ".txt", Output = ".pdf" },
new FilesConverts { Input = ".txt", Output = ".docx" },
new FilesConverts { Input = ".txt", Output = ".odt" },
@ -409,6 +519,32 @@ public static class FilesConvertsExtension
new FilesConverts { Input = ".txt", Output = ".html" },
new FilesConverts { Input = ".txt", Output = ".ott" },
new FilesConverts { Input = ".wps", Output = ".docm" },
new FilesConverts { Input = ".wps", Output = ".docx" },
new FilesConverts { Input = ".wps", Output = ".dotm" },
new FilesConverts { Input = ".wps", Output = ".dotx" },
new FilesConverts { Input = ".wps", Output = ".epub" },
new FilesConverts { Input = ".wps", Output = ".fb2" },
new FilesConverts { Input = ".wps", Output = ".html" },
new FilesConverts { Input = ".wps", Output = ".odt" },
new FilesConverts { Input = ".wps", Output = ".ott" },
new FilesConverts { Input = ".wps", Output = ".pdf" },
new FilesConverts { Input = ".wps", Output = ".rtf" },
new FilesConverts { Input = ".wps", Output = ".txt" },
new FilesConverts { Input = ".wpt", Output = ".docm" },
new FilesConverts { Input = ".wpt", Output = ".docx" },
new FilesConverts { Input = ".wpt", Output = ".dotm" },
new FilesConverts { Input = ".wpt", Output = ".dotx" },
new FilesConverts { Input = ".wpt", Output = ".epub" },
new FilesConverts { Input = ".wpt", Output = ".fb2" },
new FilesConverts { Input = ".wpt", Output = ".html" },
new FilesConverts { Input = ".wpt", Output = ".odt" },
new FilesConverts { Input = ".wpt", Output = ".ott" },
new FilesConverts { Input = ".wpt", Output = ".pdf" },
new FilesConverts { Input = ".wpt", Output = ".rtf" },
new FilesConverts { Input = ".wpt", Output = ".txt" },
new FilesConverts { Input = ".xls", Output = ".csv" },
new FilesConverts { Input = ".xls", Output = ".ods" },
new FilesConverts { Input = ".xls", Output = ".pdf" },
@ -418,6 +554,15 @@ public static class FilesConvertsExtension
new FilesConverts { Input = ".xls", Output = ".xltm" },
new FilesConverts { Input = ".xls", Output = ".xltx" },
new FilesConverts { Input = ".xlsb", Output = ".csv" },
new FilesConverts { Input = ".xlsb", Output = ".ods" },
new FilesConverts { Input = ".xlsb", Output = ".ots" },
new FilesConverts { Input = ".xlsb", Output = ".pdf" },
new FilesConverts { Input = ".xlsb", Output = ".xlsm" },
new FilesConverts { Input = ".xlsb", Output = ".xlsx" },
new FilesConverts { Input = ".xlsb", Output = ".xltm" },
new FilesConverts { Input = ".xlsb", Output = ".xltx" },
new FilesConverts { Input = ".xlsm", Output = ".csv" },
new FilesConverts { Input = ".xlsm", Output = ".xltm" },
new FilesConverts { Input = ".xlsm", Output = ".xltx" },
@ -492,23 +637,23 @@ public static class FilesConvertsExtension
{
modelBuilder.Entity<FilesConverts>(entity =>
{
entity.HasKey(e => new { e.Input, e.Output })
.HasName("PRIMARY");
entity.HasKey(e => new { e.Input, e.Output })
.HasName("PRIMARY");
entity.ToTable("files_converts")
.HasCharSet("utf8");
entity.ToTable("files_converts")
.HasCharSet("utf8");
entity.Property(e => e.Input)
.HasColumnName("input")
.HasColumnType("varchar(50)")
.HasCharSet("utf8")
.UseCollation("utf8_general_ci");
entity.Property(e => e.Input)
.HasColumnName("input")
.HasColumnType("varchar(50)")
.HasCharSet("utf8")
.UseCollation("utf8_general_ci");
entity.Property(e => e.Output)
.HasColumnName("output")
.HasColumnType("varchar(50)")
.HasCharSet("utf8")
.UseCollation("utf8_general_ci");
entity.Property(e => e.Output)
.HasColumnName("output")
.HasColumnType("varchar(50)")
.HasCharSet("utf8")
.UseCollation("utf8_general_ci");
});
}
public static void PgSqlAddFilesConverts(this ModelBuilder modelBuilder)

View File

@ -26,45 +26,70 @@
namespace ASC.Geolocation;
// hack for EF Core
public static class EntityFrameworkHelper
{
public static int Compare(this byte[] b1, byte[] b2)
{
throw new Exception("This method can only be used in EF LINQ Context");
}
}
[Scope]
public class GeolocationHelper
{
private readonly CreatorDbContext _creatorDbContext;
private readonly IDbContextFactory<CustomDbContext> _dbContextFactory;
private readonly ILogger<GeolocationHelper> _logger;
private readonly IHttpContextAccessor _httpContextAccessor;
private readonly ICache _cache;
public GeolocationHelper(
CreatorDbContext creatorDbContext,
IDbContextFactory<CustomDbContext> dbContextFactory,
ILogger<GeolocationHelper> logger,
IHttpContextAccessor httpContextAccessor)
IHttpContextAccessor httpContextAccessor,
ICache cache)
{
_creatorDbContext = creatorDbContext;
_dbContextFactory = dbContextFactory;
_logger = logger;
_httpContextAccessor = httpContextAccessor;
_cache = cache;
}
public IPGeolocationInfo GetIPGeolocation(string ip)
public IPGeolocationInfo GetIPGeolocation(IPAddress address)
{
try
{
using var dbContext = _creatorDbContext.CreateDbContext<CustomDbContext>(nameConnectionString: "teamlabsite");
var ipformatted = FormatIP(ip);
var q = dbContext.DbipLocation
.Where(r => r.IPStart.CompareTo(ipformatted) <= 0)
.Where(r => ipformatted.CompareTo(r.IPEnd) <= 0)
var cacheKey = $"ip_geolocation_info_${address}";
var fromCache = _cache.Get<IPGeolocationInfo>(cacheKey);
if (fromCache != null) return fromCache;
using var dbContext = _dbContextFactory.CreateDbContext();
var addrType = address.AddressFamily == System.Net.Sockets.AddressFamily.InterNetwork ? "ipv4" : "ipv6";
var result = dbContext.DbIPLookup
.Where(r => r.AddrType == addrType && r.IPStart.Compare(address.GetAddressBytes()) <= 0)
.OrderByDescending(r => r.IPStart)
.Select(r => new IPGeolocationInfo
{
City = r.City,
IPEnd = r.IPEnd,
IPStart = r.IPStart,
IPEnd = new IPAddress(r.IPEnd),
IPStart = new IPAddress(r.IPStart),
Key = r.Country,
TimezoneOffset = r.TimezoneOffset ?? 0,
TimezoneName = r.TimezoneName
TimezoneOffset = r.TimezoneOffset,
TimezoneName = r.TimezoneName,
Continent = r.Continent
})
.FirstOrDefault();
return q ?? IPGeolocationInfo.Default;
if (result != null)
{
_cache.Insert(cacheKey, result, TimeSpan.FromSeconds(15));
}
return result ?? IPGeolocationInfo.Default;
}
catch (Exception error)
{
@ -80,48 +105,14 @@ public class GeolocationHelper
{
var ip = _httpContextAccessor.HttpContext.Connection.RemoteIpAddress;
if (ip != IPAddress.Loopback)
if (!ip.Equals(IPAddress.Loopback))
{
_logger.DebugRemoteIpAddress(ip.ToString());
return GetIPGeolocation(ip.ToString());
return GetIPGeolocation(ip);
}
}
return IPGeolocationInfo.Default;
}
private static string FormatIP(string ip)
{
ip = (ip ?? "").Trim();
if (ip.Contains('.'))
{
//ip v4
if (ip.Length == 15)
{
return ip;
}
return string.Join(".", ip.Split(':')[0].Split('.').Select(s => ("00" + s).Substring(s.Length - 1)).ToArray());
}
else if (ip.Contains(':'))
{
//ip v6
if (ip.Length == 39)
{
return ip;
}
var index = ip.IndexOf("::");
if (0 <= index)
{
ip = ip.Insert(index + 2, new string(':', 8 - ip.Split(':').Length));
}
return string.Join(":", ip.Split(':').Select(s => ("0000" + s).Substring(s.Length)).ToArray());
}
else
{
throw new ArgumentException("Unknown ip " + ip);
}
}
}
}

View File

@ -93,21 +93,24 @@ public class RegisterInstanceWorkerService<T> : BackgroundService where T : IHos
}
}
public override async Task StopAsync(CancellationToken cancellationToken)
{
try
{
await using var scope = _serviceProvider.CreateAsyncScope();
var registerInstanceService = scope.ServiceProvider.GetService<IRegisterInstanceManager<T>>();
await registerInstanceService.UnRegister(InstanceId);
{
if (!_isSingletoneMode)
{
try
{
await using var scope = _serviceProvider.CreateAsyncScope();
_logger.InformationUnRegister(InstanceId, DateTimeOffset.Now);
}
catch
{
_logger.ErrorUnableToUnRegister(InstanceId, DateTimeOffset.Now);
}
var registerInstanceService = scope.ServiceProvider.GetService<IRegisterInstanceManager<T>>();
await registerInstanceService.UnRegister(InstanceId);
_logger.InformationUnRegister(InstanceId, DateTimeOffset.Now);
}
catch
{
_logger.ErrorUnableToUnRegister(InstanceId, DateTimeOffset.Now);
}
}
await base.StopAsync(cancellationToken);
}

View File

@ -27,7 +27,7 @@
namespace ASC.Core.Common.Log;
internal static partial class GeolocationHelperLogger
{
[LoggerMessage(Level = LogLevel.Error, Message = "This is remote ip address {remoteIp}")]
[LoggerMessage(Level = LogLevel.Debug, Message = "This is remote ip address {remoteIp}")]
public static partial void DebugRemoteIpAddress(this ILogger<GeolocationHelper> logger, string remoteIp);
[LoggerMessage(Level = LogLevel.Error, Message = "GetIPGeolocation")]

View File

@ -64,275 +64,6 @@ public enum MessageAction
#endregion
#region Projects
ProjectCreated = 2000,
ProjectCreatedFromTemplate = 2001,
ProjectUpdated = 2002,
ProjectUpdatedStatus = 2003,
ProjectFollowed = 2004,
ProjectUnfollowed = 2005,
ProjectDeleted = 2006,
ProjectDeletedMember = 2007,
ProjectUpdatedTeam = 2008,
ProjectUpdatedMemberRights = 2009,
ProjectLinkedCompany = 2010,
ProjectUnlinkedCompany = 2011,
ProjectLinkedPerson = 2012,
ProjectUnlinkedPerson = 2013,
ProjectLinkedContacts = 2014,
MilestoneCreated = 2015,
MilestoneUpdated = 2016,
MilestoneUpdatedStatus = 2017,
MilestoneDeleted = 2018,
TaskCreated = 2019,
TaskCreatedFromDiscussion = 2020,
TaskUpdated = 2021,
TaskUpdatedStatus = 2022,
TaskMovedToMilestone = 2023,
TaskUnlinkedMilestone = 2024,
TaskUpdatedFollowing = 2025,
TaskAttachedFiles = 2026,
TaskDetachedFile = 2027,
TasksLinked = 2028,
TasksUnlinked = 2029,
TaskDeleted = 2030,
TaskCommentCreated = 2031,
TaskCommentUpdated = 2032,
TaskCommentDeleted = 2033,
SubtaskCreated = 2034,
SubtaskUpdated = 2035,
SubtaskUpdatedStatus = 2036,
SubtaskDeleted = 2037,
SubtaskMoved = 2058,
DiscussionCreated = 2038,
DiscussionUpdated = 2039,
DiscussionUpdatedFollowing = 2040,
DiscussionAttachedFiles = 2041,
DiscussionDetachedFile = 2042,
DiscussionDeleted = 2043,
DiscussionCommentCreated = 2044,
DiscussionCommentUpdated = 2045,
DiscussionCommentDeleted = 2046,
TaskTimeCreated = 2047,
TaskTimeUpdated = 2048,
TaskTimesUpdatedStatus = 2049,
TaskTimesDeleted = 2050,
ReportTemplateCreated = 2051,
ReportTemplateUpdated = 2052,
ReportTemplateDeleted = 2053,
ProjectTemplateCreated = 2054,
ProjectTemplateUpdated = 2055,
ProjectTemplateDeleted = 2056,
ProjectsImportedFromBasecamp = 2057,
#endregion
#region CRM
CompanyCreated = 3000,
CompanyCreatedWithWebForm = 3157,
CompanyUpdated = 3001,
CompanyUpdatedPrincipalInfo = 3002,
CompanyUpdatedPhoto = 3003,
CompanyUpdatedTemperatureLevel = 3004,
CompanyUpdatedPersonsTemperatureLevel = 3005,
CompanyCreatedTag = 3006,
CompanyCreatedPersonsTag = 3007,
CompanyDeletedTag = 3008,
CompanyCreatedHistoryEvent = 3009,
CompanyDeletedHistoryEvent = 3010,
CompanyLinkedPerson = 3011,
CompanyUnlinkedPerson = 3012,
CompanyLinkedProject = 3013,
CompanyUnlinkedProject = 3014,
CompanyAttachedFiles = 3015,
CompanyDetachedFile = 3159,
CompaniesMerged = 3016,
CompanyDeleted = 3017,
PersonCreated = 3018,
PersonCreatedWithWebForm = 3158,
PersonsCreated = 3019,
PersonUpdated = 3020,
PersonUpdatedPrincipalInfo = 3021,
PersonUpdatedPhoto = 3022,
PersonUpdatedTemperatureLevel = 3023,
PersonUpdatedCompanyTemperatureLevel = 3024,
PersonCreatedTag = 3025,
PersonCreatedCompanyTag = 3026,
PersonDeletedTag = 3027,
PersonCreatedHistoryEvent = 3028,
PersonDeletedHistoryEvent = 3029,
PersonLinkedProject = 3030,
PersonUnlinkedProject = 3031,
PersonAttachedFiles = 3032,
PersonDetachedFile = 3160,
PersonsMerged = 3033,
PersonDeleted = 3034,
ContactsDeleted = 3035,
CrmTaskCreated = 3036,
ContactsCreatedCrmTasks = 3037,
CrmTaskUpdated = 3038,
CrmTaskOpened = 3039,
CrmTaskClosed = 3040,
CrmTaskDeleted = 3041,
OpportunityCreated = 3042,
OpportunityUpdated = 3043,
OpportunityUpdatedStage = 3044,
OpportunityCreatedTag = 3045,
OpportunityDeletedTag = 3046,
OpportunityCreatedHistoryEvent = 3047,
OpportunityDeletedHistoryEvent = 3048,
OpportunityLinkedCompany = 3049,
OpportunityUnlinkedCompany = 3050,
OpportunityLinkedPerson = 3051,
OpportunityUnlinkedPerson = 3052,
OpportunityAttachedFiles = 3053,
OpportunityDetachedFile = 3161,
OpportunityOpenedAccess = 3054,
OpportunityRestrictedAccess = 3055,
OpportunityDeleted = 3056,
OpportunitiesDeleted = 3057,
InvoiceCreated = 3058,
InvoiceUpdated = 3059,
InvoicesUpdatedStatus = 3060,
InvoiceDeleted = 3061,
InvoicesDeleted = 3062,
CaseCreated = 3063,
CaseUpdated = 3064,
CaseOpened = 3065,
CaseClosed = 3066,
CaseCreatedTag = 3067,
CaseDeletedTag = 3068,
CaseCreatedHistoryEvent = 3069,
CaseDeletedHistoryEvent = 3070,
CaseLinkedCompany = 3071,
CaseUnlinkedCompany = 3072,
CaseLinkedPerson = 3073,
CaseUnlinkedPerson = 3074,
CaseAttachedFiles = 3075,
CaseDetachedFile = 3162,
CaseOpenedAccess = 3076,
CaseRestrictedAccess = 3077,
CaseDeleted = 3078,
CasesDeleted = 3079,
CrmSmtpSettingsUpdated = 3080,
CrmTestMailSent = 3081,
CrmDefaultCurrencyUpdated = 3082,
CrmAllDataExported = 3083,
ContactTemperatureLevelCreated = 3084,
ContactTemperatureLevelUpdated = 3085,
ContactTemperatureLevelUpdatedColor = 3086,
ContactTemperatureLevelsUpdatedOrder = 3087,
ContactTemperatureLevelDeleted = 3088,
ContactTemperatureLevelSettingsUpdated = 3089,
ContactTypeCreated = 3090,
ContactTypeUpdated = 3091,
ContactTypesUpdatedOrder = 3092,
ContactTypeDeleted = 3093,
InvoiceItemCreated = 3094,
InvoiceItemUpdated = 3095,
InvoiceItemDeleted = 3096,
InvoiceItemsDeleted = 3097,
InvoiceTaxCreated = 3098,
InvoiceTaxUpdated = 3099,
InvoiceTaxDeleted = 3100,
CurrencyRateUpdated = 3163,
InvoiceDefaultTermsUpdated = 3164,
InvoiceDownloaded = 3165,
CrmSmtpMailSent = 3166,
OrganizationProfileUpdatedCompanyName = 3101,
OrganizationProfileUpdatedInvoiceLogo = 3102,
OrganizationProfileUpdatedAddress = 3103,
InvoiceNumberFormatUpdated = 3104,
ContactUserFieldCreated = 3105,
ContactUserFieldUpdated = 3106,
ContactUserFieldsUpdatedOrder = 3107,
ContactUserFieldDeleted = 3108,
CompanyUserFieldCreated = 3109,
CompanyUserFieldUpdated = 3110,
CompanyUserFieldsUpdatedOrder = 3111,
CompanyUserFieldDeleted = 3112,
PersonUserFieldCreated = 3113,
PersonUserFieldUpdated = 3114,
PersonUserFieldsUpdatedOrder = 3115,
PersonUserFieldDeleted = 3116,
OpportunityUserFieldCreated = 3117,
OpportunityUserFieldUpdated = 3118,
OpportunityUserFieldsUpdatedOrder = 3119,
OpportunityUserFieldDeleted = 3120,
CaseUserFieldCreated = 3121,
CaseUserFieldUpdated = 3122,
CaseUserFieldsUpdatedOrder = 3123,
CaseUserFieldDeleted = 3124,
HistoryEventCategoryCreated = 3125,
HistoryEventCategoryUpdated = 3126,
HistoryEventCategoryUpdatedIcon = 3127,
HistoryEventCategoriesUpdatedOrder = 3128,
HistoryEventCategoryDeleted = 3129,
CrmTaskCategoryCreated = 3130,
CrmTaskCategoryUpdated = 3131,
CrmTaskCategoryUpdatedIcon = 3132,
CrmTaskCategoriesUpdatedOrder = 3133,
CrmTaskCategoryDeleted = 3134,
OpportunityStageCreated = 3135,
OpportunityStageUpdated = 3136,
OpportunityStageUpdatedColor = 3137,
OpportunityStagesUpdatedOrder = 3138,
OpportunityStageDeleted = 3139,
ContactsCreatedTag = 3140,
ContactsDeletedTag = 3141,
OpportunitiesCreatedTag = 3142,
OpportunitiesDeletedTag = 3143,
CasesCreatedTag = 3144,
CasesDeletedTag = 3145,
ContactsTagSettingsUpdated = 3146,
WebsiteContactFormUpdatedKey = 3147,
ContactsImportedFromCSV = 3148,
CrmTasksImportedFromCSV = 3149,
OpportunitiesImportedFromCSV = 3150,
CasesImportedFromCSV = 3151,
ContactsExportedToCsv = 3152,
CrmTasksExportedToCsv = 3153,
OpportunitiesExportedToCsv = 3154,
CasesExportedToCsv = 3155,
#endregion
#region People
UserCreated = 4000,
@ -571,27 +302,4 @@ public enum MessageAction
ContactSalesMailSent = 7004,
#endregion
#region Partners
AcceptRequest = 8000,
RejectRequest = 8001,
BlockPartner = 8002,
UnblockPartner = 8003,
DeletePartner = 8004,
ChangePartner = 8005,
ConfirmPortal = 8006,
MarkInvoicePaid = 8007,
MarkInvoiceUnpaid = 8008,
AddHostedPartner = 8009,
RemoveHostedPartner = 8010,
MarkPartnerAuthorized = 8011,
MarkPartnerNotAuthorized = 8012,
ChangePartnerLevel = 8013,
ChangeHostedPartnerQuotas = 8014,
ChangeHostedPartner = 8015,
BillLumpSumInvoice = 8016,
#endregion
}

View File

@ -129,37 +129,18 @@ public class AWSSender : SmtpSender, IDisposable
}
_semaphore.Release();
}
var dest = new Destination
{
ToAddresses = m.Reciever.Split(new[] { '|' }, StringSplitOptions.RemoveEmptyEntries).Select(a => MailAddressUtils.Create(a).Address).ToList(),
};
var subject = new Content(MimeHeaderUtils.EncodeMime(m.Subject)) { Charset = Encoding.UTF8.WebName, };
Body body;
if (m.ContentType == Pattern.HtmlContentType)
{
body = new Body(new Content(HtmlUtil.GetText(m.Content)) { Charset = Encoding.UTF8.WebName })
{
Html = new Content(GetHtmlView(m.Content)) { Charset = Encoding.UTF8.WebName }
};
}
else
{
body = new Body(new Content(m.Content) { Charset = Encoding.UTF8.WebName });
}
var from = MailAddressUtils.Create(m.Sender).ToEncodedString();
var request = new SendEmailRequest { Source = from, Destination = dest, Message = new Message(subject, body) };
if (!string.IsNullOrEmpty(m.ReplyTo))
{
request.ReplyToAddresses.Add(MailAddressUtils.Create(m.ReplyTo).Address);
}
var message = BuildMailMessage(m);
using var ms = new MemoryStream();
message.WriteTo(ms);
var request = new SendRawEmailRequest(new RawMessage(ms));
ThrottleIfNeeded();
var response = await _amazonEmailServiceClient.SendEmailAsync(request);
var response = await _amazonEmailServiceClient.SendRawEmailAsync(request);
_lastSend = DateTime.UtcNow;
return response != null ? NoticeSendResult.OK : NoticeSendResult.TryOnceAgain;

View File

@ -195,7 +195,7 @@ public class SmtpSender : INotifySender
: null;
}
}
private MimeMessage BuildMailMessage(NotifyMessage m)
protected MimeMessage BuildMailMessage(NotifyMessage m)
{
var mimeMessage = new MimeMessage
{

View File

@ -42,6 +42,7 @@ public class TenantQuota : IMapFrom<DbQuota>
public int Tenant { get; set; }
public string Name { get; set; }
public decimal Price { get; set; }
public string PriceCurrencySymbol { get; set; }
public string ProductId { get; set; }
public bool Visible { get; set; }
@ -373,7 +374,8 @@ public class TenantQuota : IMapFrom<DbQuota>
public void Mapping(Profile profile)
{
profile.CreateMap<DbQuota, TenantQuota>();
profile.CreateMap<DbQuota, TenantQuota>()
.ForMember(dest => dest.Price, o => o.MapFrom<TenantQuotaPriceResolver>());
}
public TenantQuotaFeature<T> GetFeature<T>(string name)

View File

@ -0,0 +1,58 @@
// (c) Copyright Ascensio System SIA 2010-2022
//
// This program is a free software product.
// You can redistribute it and/or modify it under the terms
// of the GNU Affero General Public License (AGPL) version 3 as published by the Free Software
// Foundation. In accordance with Section 7(a) of the GNU AGPL its Section 15 shall be amended
// to the effect that Ascensio System SIA expressly excludes the warranty of non-infringement of
// any third-party rights.
//
// This program is distributed WITHOUT ANY WARRANTY, without even the implied warranty
// of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. For details, see
// the GNU AGPL at: http://www.gnu.org/licenses/agpl-3.0.html
//
// You can contact Ascensio System SIA at Lubanas st. 125a-25, Riga, Latvia, EU, LV-1021.
//
// The interactive user interfaces in modified source and object code versions of the Program must
// display Appropriate Legal Notices, as required under Section 5 of the GNU AGPL version 3.
//
// Pursuant to Section 7(b) of the License you must retain the original Product logo when
// distributing the program. Pursuant to Section 7(e) we decline to grant you any rights under
// trademark law for use of our trademarks.
//
// All the Product's GUI elements, including illustrations and icon sets, as well as technical writing
// content are licensed under the terms of the Creative Commons Attribution-ShareAlike 4.0
// International. See the License terms at http://creativecommons.org/licenses/by-sa/4.0/legalcode
namespace ASC.Core.Tenants;
[Scope]
internal class TenantQuotaPriceResolver : IValueResolver<DbQuota, TenantQuota, decimal>
{
private readonly TenantManager _tenantManager;
private readonly RegionHelper _regionHelper;
public TenantQuotaPriceResolver(TenantManager tenantManager, RegionHelper regionHelper)
{
_tenantManager = tenantManager;
_regionHelper = regionHelper;
}
public decimal Resolve(DbQuota source, TenantQuota destination, decimal destMember, ResolutionContext context)
{
var priceInfo = _tenantManager.GetProductPriceInfo(source.ProductId);
if (priceInfo != null)
{
var currentRegion = _regionHelper.GetCurrentRegionInfo(new Dictionary<string, Dictionary<string, decimal>>() { { source.ProductId, priceInfo } });
destination.PriceCurrencySymbol = currentRegion.CurrencySymbol;
if (priceInfo.ContainsKey(currentRegion.ISOCurrencySymbol))
{
return priceInfo[currentRegion.ISOCurrencySymbol];
}
}
return source.Price;
}
}

View File

@ -22,7 +22,7 @@ namespace ASC.Data.Backup.Core {
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "17.0.0.0")]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
public class BackupResource {
internal class BackupResource {
private static global::System.Resources.ResourceManager resourceMan;
@ -36,7 +36,7 @@ namespace ASC.Data.Backup.Core {
/// Returns the cached ResourceManager instance used by this class.
/// </summary>
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
public static global::System.Resources.ResourceManager ResourceManager {
internal static global::System.Resources.ResourceManager ResourceManager {
get {
if (object.ReferenceEquals(resourceMan, null)) {
global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("ASC.Data.Backup.Core.BackupResource", typeof(BackupResource).Assembly);
@ -51,7 +51,7 @@ namespace ASC.Data.Backup.Core {
/// resource lookups using this strongly typed resource class.
/// </summary>
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
public static global::System.Globalization.CultureInfo Culture {
internal static global::System.Globalization.CultureInfo Culture {
get {
return resourceCulture;
}
@ -63,7 +63,7 @@ namespace ASC.Data.Backup.Core {
/// <summary>
/// Looks up a localized string similar to The backup file is invalid. Please, use a file created in ONLYOFFICE v11.5 or later..
/// </summary>
public static string BackupNotFound {
internal static string BackupNotFound {
get {
return ResourceManager.GetString("BackupNotFound", resourceCulture);
}
@ -72,7 +72,7 @@ namespace ASC.Data.Backup.Core {
/// <summary>
/// Looks up a localized string similar to Set Password.
/// </summary>
public static string ButtonSetPassword {
internal static string ButtonSetPassword {
get {
return ResourceManager.GetString("ButtonSetPassword", resourceCulture);
}

View File

@ -61,4 +61,7 @@
<data name="BackupNotFound" xml:space="preserve">
<value>Yedək faylı etibarsızdır. ONLYOFFICE v11.5 və ya daha yeni versiyada yaradılmış fayldan istifadə edin.</value>
</data>
<data name="ButtonSetPassword" xml:space="preserve">
<value>Parol təyin edin</value>
</data>
</root>

View File

@ -61,4 +61,7 @@
<data name="BackupNotFound" xml:space="preserve">
<value>Το αρχείο αντιγράφων ασφαλείας είναι μη έγκυρο. Παρακαλώ, χρησιμοποιείστε ένα αρχείο που έχει δημιουργηθεί σε ONLYOFFICE v11.5 ή επόμενο.</value>
</data>
<data name="ButtonSetPassword" xml:space="preserve">
<value>Ορισμός Συνθηματικού</value>
</data>
</root>

View File

@ -61,4 +61,7 @@
<data name="BackupNotFound" xml:space="preserve">
<value>Le fichier de sauvegarde n'est pas valide. Veuillez utiliser un fichier créé dans ONLYOFFICE v11.5 ou plus récent.</value>
</data>
<data name="ButtonSetPassword" xml:space="preserve">
<value>Définir un mot de passe</value>
</data>
</root>

View File

@ -61,4 +61,7 @@
<data name="BackupNotFound" xml:space="preserve">
<value>Yedekleme dosyası geçersiz. Lütfen ONLYOFFICE v11.5 veya sonraki sürümlerde oluşturulmuş bir dosya kullanın.</value>
</data>
<data name="ButtonSetPassword" xml:space="preserve">
<value>Parola Belirle</value>
</data>
</root>

View File

@ -196,7 +196,14 @@ public class NotifyHelper
{
args.Add(new TagValue(CommonTags.VirtualRootPath, url));
args.Add(new TagValue(CommonTags.ProfileUrl, url + _commonLinkUtility.GetMyStaff()));
args.Add(new TagValue(CommonTags.LetterLogo, _tenantLogoManager.GetLogoDark(false)));
var attachment = _tenantLogoManager.GetMailLogoAsAttacment().Result;
if (attachment != null)
{
args.Add(new TagValue(CommonTags.LetterLogo, "cid:" + attachment.ContentId));
args.Add(new TagValue(CommonTags.EmbeddedAttachments, new[] { attachment }));
}
}
return args;

View File

@ -178,7 +178,7 @@ public class RestoreProgressItem : BaseBackupProgressItem
restoredTenant = _tenantManager.GetTenant(columnMapper.GetTenantMapping());
restoredTenant.SetStatus(TenantStatus.Active);
restoredTenant.Alias = tenant.Alias;
restoredTenant.PaymentId = string.IsNullOrEmpty(restoredTenant.PaymentId) ? _configuration["core:payment-region"] + TenantId : restoredTenant.PaymentId;
restoredTenant.PaymentId = string.IsNullOrEmpty(restoredTenant.PaymentId) ? _configuration["core:payment:region"] + TenantId : restoredTenant.PaymentId;
if (string.IsNullOrEmpty(restoredTenant.MappedDomain) && !string.IsNullOrEmpty(tenant.MappedDomain))
{

View File

@ -43,6 +43,7 @@ public class TenantsModuleSpecifics : ModuleSpecificsBase
{
DateColumns = new Dictionary<string, bool> {{"creationdatetime", false}, {"statuschanged", false}, {"version_changed", false}}
},
new TableInfo("tenants_tariffrow", "tenant") {InsertMethod = InsertMethod.Replace},
new TableInfo("tenants_quotarow", "tenant") {InsertMethod = InsertMethod.Replace},
new TableInfo("core_user", "tenant", "id", IdType.Guid)
{
@ -58,6 +59,7 @@ public class TenantsModuleSpecifics : ModuleSpecificsBase
new RelationInfo("tenants_tenants", "id", "tenants_quota", "tenant"),
new RelationInfo("tenants_tenants", "id", "tenants_tariff", "tenant"),
new RelationInfo("tenants_tenants", "id", "tenants_tariff", "tariff"),
new RelationInfo("tenants_tariff", "id", "tenants_tariffrow", "tariff_id"),
new RelationInfo("core_user", "id", "tenants_tenants", "owner_id", null, null, RelationImportance.Low)
};

View File

@ -68,8 +68,13 @@ public class DefaultRabbitMQPersistentConnection
return;
}
_disposed = true;
_disposed = true;
DisposeConnection();
}
private void DisposeConnection()
{
try
{
_connection.ConnectionShutdown -= OnConnectionShutdown;
@ -80,8 +85,8 @@ public class DefaultRabbitMQPersistentConnection
catch (IOException ex)
{
_logger.CriticalDefaultRabbitMQPersistentConnection(ex);
}
}
}
}
public bool TryConnect()
{
@ -98,7 +103,12 @@ public class DefaultRabbitMQPersistentConnection
);
policy.Execute(() =>
{
{
if (_connection != null)
{
DisposeConnection();
}
_connection = _connectionFactory
.CreateConnection();
});

View File

@ -0,0 +1,204 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<data name="OnlyofficeModuleNameCalendar" xml:space="preserve">
<value>Təqvim</value>
</data>
<data name="ModuleNameCalendar" xml:space="preserve">
<value>Təqvim</value>
</data>
<data name="ModuleNameUsers" xml:space="preserve">
<value>İstifadəçilər</value>
</data>
<data name="NextcloudModuleNameDocuments" xml:space="preserve">
<value>İstifadəçi Faylları</value>
</data>
<data name="Unzipping" xml:space="preserve">
<value>Açılır...</value>
</data>
<data name="OnlyofficeModuleNamePeople" xml:space="preserve">
<value>İnsanlar</value>
</data>
<data name="OnlyofficeModuleNameMail" xml:space="preserve">
<value>Poçt</value>
</data>
<data name="ModuleNameMail" xml:space="preserve">
<value>Poçt</value>
</data>
<data name="GoogleModuleNameContacts" xml:space="preserve">
<value>Poçt Əlaqələri</value>
</data>
<data name="OnlyofficeModuleNameDocuments" xml:space="preserve">
<value>Sənədlər</value>
</data>
<data name="ModuleNameGroups" xml:space="preserve">
<value>Qruplar</value>
</data>
<data name="GoogleModuleNameDocuments" xml:space="preserve">
<value>Google Drive Faylları</value>
</data>
<data name="DataProcessing" xml:space="preserve">
<value>Məlumatların emalı...</value>
</data>
<data name="DumpParse" xml:space="preserve">
<value>Məlumatlar bazasının təhlili</value>
</data>
<data name="DataProcessingCompleted" xml:space="preserve">
<value>Məlumatların email tamamlandı</value>
</data>
<data name="NextcloudModuleNameContacts" xml:space="preserve">
<value>Əlaqələr</value>
</data>
<data name="ClearingTemporaryData" xml:space="preserve">
<value>Müvəqqəti məlumatların təmizlənməsi</value>
</data>
<data name="MigratingUserContacts" xml:space="preserve">
<value>İstifadəçi kontaktları köçürülür {0} ({1}/{2})</value>
</data>
<data name="MigratingUserFiles" xml:space="preserve">
<value>İstifadəçi faylları köçürülür {0} ({1}/{2})</value>
</data>
<data name="MigrationCanceled" xml:space="preserve">
<value>Köçürülmə ləğv edildi</value>
</data>
<data name="MigrationCompleted" xml:space="preserve">
<value>Köçürülmə tamamlandı</value>
</data>
<data name="UserSkipped" xml:space="preserve">
<value>İstifadəçini daxill etmək alınmadı: {0} ({1}/{2})</value>
</data>
<data name="GroupMigration" xml:space="preserve">
<value>Qrup köçürməsi {0} ({1}/{2})</value>
</data>
<data name="PreparingForMigration" xml:space="preserve">
<value>Köçürülmə üçün hazırlıq</value>
</data>
<data name="StartOfDataProcessing" xml:space="preserve">
<value>Məlumat emalı başlayır...</value>
</data>
<data name="UnzippingFinished" xml:space="preserve">
<value>Açılma tamamlandı...</value>
</data>
<data name="UserCalendarMigration" xml:space="preserve">
<value>İstifadəçi təqviminin köçürülməsi {0} ({1}/{2})</value>
</data>
<data name="UserMigration" xml:space="preserve">
<value>İstifadəçi köçürülməsi {0} ({1}/{2})</value>
</data>
</root>

View File

@ -0,0 +1,204 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<data name="ClearingTemporaryData" xml:space="preserve">
<value>Изчистване на временните данни</value>
</data>
<data name="DataProcessing" xml:space="preserve">
<value>Обработка на данни...</value>
</data>
<data name="DataProcessingCompleted" xml:space="preserve">
<value>Обработката на данните е завършена</value>
</data>
<data name="DumpParse" xml:space="preserve">
<value>Разбор на база данни</value>
</data>
<data name="GoogleModuleNameContacts" xml:space="preserve">
<value>Контакти на пощата</value>
</data>
<data name="GoogleModuleNameDocuments" xml:space="preserve">
<value>Google Drive файлове</value>
</data>
<data name="GroupMigration" xml:space="preserve">
<value>Групова миграция {0} ({1}/{2})</value>
</data>
<data name="MigratingUserContacts" xml:space="preserve">
<value>Мигриране на потребителски контакти {0} ({1}/{2})</value>
</data>
<data name="MigratingUserFiles" xml:space="preserve">
<value>Мигриране на потребителски файлове {0} ({1}/{2})</value>
</data>
<data name="MigrationCanceled" xml:space="preserve">
<value>Миграцията е отменена</value>
</data>
<data name="MigrationCompleted" xml:space="preserve">
<value>Миграцията е завършена</value>
</data>
<data name="ModuleNameCalendar" xml:space="preserve">
<value>Календар</value>
</data>
<data name="ModuleNameGroups" xml:space="preserve">
<value>Групи</value>
</data>
<data name="ModuleNameMail" xml:space="preserve">
<value>Поща</value>
</data>
<data name="ModuleNameUsers" xml:space="preserve">
<value>Потребители</value>
</data>
<data name="NextcloudModuleNameContacts" xml:space="preserve">
<value>Контакти</value>
</data>
<data name="NextcloudModuleNameDocuments" xml:space="preserve">
<value>Потребителски файлове</value>
</data>
<data name="OnlyofficeModuleNameDocuments" xml:space="preserve">
<value>Документи</value>
</data>
<data name="OnlyofficeModuleNameCalendar" xml:space="preserve">
<value>Календар</value>
</data>
<data name="OnlyofficeModuleNameMail" xml:space="preserve">
<value>Поща</value>
</data>
<data name="OnlyofficeModuleNamePeople" xml:space="preserve">
<value>Хора</value>
</data>
<data name="PreparingForMigration" xml:space="preserve">
<value>Подготовка за миграция</value>
</data>
<data name="StartOfDataProcessing" xml:space="preserve">
<value>Обработката на данните започва...</value>
</data>
<data name="Unzipping" xml:space="preserve">
<value>Разархивиране...</value>
</data>
<data name="UnzippingFinished" xml:space="preserve">
<value>Разархивирането завърши...</value>
</data>
<data name="UserCalendarMigration" xml:space="preserve">
<value>Мигриране на потребителски календар {0} ({1}/{2})</value>
</data>
<data name="UserMigration" xml:space="preserve">
<value>Мигриране на потребители {0} ({1}/{2})</value>
</data>
<data name="UserSkipped" xml:space="preserve">
<value>Неуспешно импортиране на потребител: {0} ({1}/{2})</value>
</data>
</root>

View File

@ -0,0 +1,204 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<data name="ClearingTemporaryData" xml:space="preserve">
<value>Vymazání dočasných dat</value>
</data>
<data name="DataProcessing" xml:space="preserve">
<value>Zpracování dat ...</value>
</data>
<data name="DataProcessingCompleted" xml:space="preserve">
<value>Zpracování dat dokončeno</value>
</data>
<data name="DumpParse" xml:space="preserve">
<value>Rozbor databáze</value>
</data>
<data name="GoogleModuleNameContacts" xml:space="preserve">
<value>Emailové kontakty</value>
</data>
<data name="GoogleModuleNameDocuments" xml:space="preserve">
<value>Soubory na Disku Google</value>
</data>
<data name="GroupMigration" xml:space="preserve">
<value>Migrace skupiny {0} ({1}/{2})</value>
</data>
<data name="MigratingUserContacts" xml:space="preserve">
<value>Migrace kontaktů uživatelů {0} ({1}/{2})</value>
</data>
<data name="MigratingUserFiles" xml:space="preserve">
<value>Migrace uživatelských souborů {0} ({1}/{2})</value>
</data>
<data name="MigrationCanceled" xml:space="preserve">
<value>Migrace zrušena</value>
</data>
<data name="MigrationCompleted" xml:space="preserve">
<value>Migrace dokončena</value>
</data>
<data name="ModuleNameCalendar" xml:space="preserve">
<value>Kalendář</value>
</data>
<data name="ModuleNameGroups" xml:space="preserve">
<value>Skupiny</value>
</data>
<data name="ModuleNameMail" xml:space="preserve">
<value>Mail</value>
</data>
<data name="ModuleNameUsers" xml:space="preserve">
<value>Uživatelé</value>
</data>
<data name="NextcloudModuleNameContacts" xml:space="preserve">
<value>Kontakty</value>
</data>
<data name="NextcloudModuleNameDocuments" xml:space="preserve">
<value>Soubory uživatele</value>
</data>
<data name="OnlyofficeModuleNamePeople" xml:space="preserve">
<value>Lidé</value>
</data>
<data name="OnlyofficeModuleNameDocuments" xml:space="preserve">
<value>Dokumenty</value>
</data>
<data name="OnlyofficeModuleNameCalendar" xml:space="preserve">
<value>Kalendář</value>
</data>
<data name="OnlyofficeModuleNameMail" xml:space="preserve">
<value>Mail</value>
</data>
<data name="PreparingForMigration" xml:space="preserve">
<value>Příprava na migraci</value>
</data>
<data name="StartOfDataProcessing" xml:space="preserve">
<value>Spuštění zpracování dat ...</value>
</data>
<data name="Unzipping" xml:space="preserve">
<value>Rozbalení ...</value>
</data>
<data name="UnzippingFinished" xml:space="preserve">
<value>Rozbalování dokončeno...</value>
</data>
<data name="UserCalendarMigration" xml:space="preserve">
<value>Migrace uživatelského kalendáře {0} ({1}/{2})</value>
</data>
<data name="UserMigration" xml:space="preserve">
<value>Migrace uživatelů {0} ({1}/{2})</value>
</data>
<data name="UserSkipped" xml:space="preserve">
<value>Nepodařilo se importovat uživatele: {0} ({1}/{2})</value>
</data>
</root>

View File

@ -0,0 +1,204 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<data name="OnlyofficeModuleNameCalendar" xml:space="preserve">
<value>Ημερολόγιο</value>
</data>
<data name="ModuleNameCalendar" xml:space="preserve">
<value>Ημερολόγιο</value>
</data>
<data name="ClearingTemporaryData" xml:space="preserve">
<value>Εκκαθάριση προσωρινών δεδομένων</value>
</data>
<data name="NextcloudModuleNameContacts" xml:space="preserve">
<value>Επαφές</value>
</data>
<data name="DataProcessingCompleted" xml:space="preserve">
<value>Η επεξεργασία δεδομένων ολοκληρώθηκε</value>
</data>
<data name="DataProcessing" xml:space="preserve">
<value>Επεξεργασία δεδομένων...</value>
</data>
<data name="DumpParse" xml:space="preserve">
<value>Ανάλυση βάσης δεδομένων</value>
</data>
<data name="OnlyofficeModuleNameDocuments" xml:space="preserve">
<value>Έγγραφα</value>
</data>
<data name="UserSkipped" xml:space="preserve">
<value>Η εισαγωγή χρήστη απέτυχε: {0} ({1}/{2})</value>
</data>
<data name="GoogleModuleNameDocuments" xml:space="preserve">
<value>Αρχεία του Google Drive</value>
</data>
<data name="GroupMigration" xml:space="preserve">
<value>Μετακίνηση ομάδων {0} ({1}/{2})</value>
</data>
<data name="ModuleNameGroups" xml:space="preserve">
<value>Ομάδες</value>
</data>
<data name="OnlyofficeModuleNameMail" xml:space="preserve">
<value>Αλληλογραφία</value>
</data>
<data name="ModuleNameMail" xml:space="preserve">
<value>Αλληλογραφία</value>
</data>
<data name="GoogleModuleNameContacts" xml:space="preserve">
<value>Επαφές αλληλογραφίας</value>
</data>
<data name="MigratingUserContacts" xml:space="preserve">
<value>Μετακίνηση επαφών χρηστών {0} ({1}/{2})</value>
</data>
<data name="MigratingUserFiles" xml:space="preserve">
<value>Μετακίνηση αρχείων χρηστών {0} ({1}/{2})</value>
</data>
<data name="MigrationCanceled" xml:space="preserve">
<value>Η μετακίνηση ακυρώθηκε</value>
</data>
<data name="MigrationCompleted" xml:space="preserve">
<value>Η μετακίνηση ολοκληρώθηκε</value>
</data>
<data name="OnlyofficeModuleNamePeople" xml:space="preserve">
<value>Άνθρωποι</value>
</data>
<data name="PreparingForMigration" xml:space="preserve">
<value>Προετοιμασία για μετακίνηση</value>
</data>
<data name="StartOfDataProcessing" xml:space="preserve">
<value>Έναρξη επεξεργασίας δεδομένων...</value>
</data>
<data name="UnzippingFinished" xml:space="preserve">
<value>Η αποσυμπίεση ολοκληρώθηκε...</value>
</data>
<data name="Unzipping" xml:space="preserve">
<value>Αποσυμπίεση...</value>
</data>
<data name="UserCalendarMigration" xml:space="preserve">
<value>Μετακίνηση ημερολογίου χρήστη {0} ({1}/{2})</value>
</data>
<data name="UserMigration" xml:space="preserve">
<value>Μετακίνηση χρήστη {0} ({1}/{2})</value>
</data>
<data name="NextcloudModuleNameDocuments" xml:space="preserve">
<value>Αρχεία χρηστών</value>
</data>
<data name="ModuleNameUsers" xml:space="preserve">
<value>Χρήστες</value>
</data>
</root>

View File

@ -0,0 +1,204 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<data name="OnlyofficeModuleNameCalendar" xml:space="preserve">
<value>캘린더</value>
</data>
<data name="ModuleNameCalendar" xml:space="preserve">
<value>캘린더</value>
</data>
<data name="ClearingTemporaryData" xml:space="preserve">
<value>임시 데이터 삭제 중</value>
</data>
<data name="NextcloudModuleNameContacts" xml:space="preserve">
<value>연락처</value>
</data>
<data name="DataProcessingCompleted" xml:space="preserve">
<value>데이터 처리가 완료되었습니다</value>
</data>
<data name="DataProcessing" xml:space="preserve">
<value>데이터 처리 중...</value>
</data>
<data name="DumpParse" xml:space="preserve">
<value>데이터베이스 파싱 중</value>
</data>
<data name="OnlyofficeModuleNameDocuments" xml:space="preserve">
<value>문서</value>
</data>
<data name="UserSkipped" xml:space="preserve">
<value>사용자 가져오기에 실패했습니다: {0} ({1}/{2})</value>
</data>
<data name="GoogleModuleNameDocuments" xml:space="preserve">
<value>Google 드라이브의 파일</value>
</data>
<data name="GroupMigration" xml:space="preserve">
<value>그룹 마이그레이션 {0} ({1}/{2})</value>
</data>
<data name="ModuleNameGroups" xml:space="preserve">
<value>그룹</value>
</data>
<data name="OnlyofficeModuleNameMail" xml:space="preserve">
<value>메일</value>
</data>
<data name="ModuleNameMail" xml:space="preserve">
<value>메일</value>
</data>
<data name="GoogleModuleNameContacts" xml:space="preserve">
<value>메일의 연락처</value>
</data>
<data name="MigratingUserContacts" xml:space="preserve">
<value>사용자 연락처 마이그레이션 중 {0} ({1}/{2})</value>
</data>
<data name="MigratingUserFiles" xml:space="preserve">
<value>사용자 파일 마이그레이션 중 {0} ({1}/{2})</value>
</data>
<data name="MigrationCanceled" xml:space="preserve">
<value>마이그레이션이 취소되었습니다</value>
</data>
<data name="MigrationCompleted" xml:space="preserve">
<value>마이그레이션이 완료되었습니다</value>
</data>
<data name="OnlyofficeModuleNamePeople" xml:space="preserve">
<value>사람</value>
</data>
<data name="PreparingForMigration" xml:space="preserve">
<value>마이그레이션 준비 중</value>
</data>
<data name="StartOfDataProcessing" xml:space="preserve">
<value>데이터 처리 시작 중...</value>
</data>
<data name="UnzippingFinished" xml:space="preserve">
<value>압축 해제가 완료되었습니다...</value>
</data>
<data name="Unzipping" xml:space="preserve">
<value>압축 해제 중...</value>
</data>
<data name="UserCalendarMigration" xml:space="preserve">
<value>사용자 캘린더 마이그레이션 {0} ({1}/{2})</value>
</data>
<data name="UserMigration" xml:space="preserve">
<value>사용자 마이그레이션 {0} ({1}/{2})</value>
</data>
<data name="NextcloudModuleNameDocuments" xml:space="preserve">
<value>사용자의 파일</value>
</data>
<data name="ModuleNameUsers" xml:space="preserve">
<value>사용자</value>
</data>
</root>

View File

@ -0,0 +1,201 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<data name="OnlyofficeModuleNameCalendar" xml:space="preserve">
<value>Agenda</value>
</data>
<data name="ModuleNameCalendar" xml:space="preserve">
<value>Agenda</value>
</data>
<data name="ClearingTemporaryData" xml:space="preserve">
<value>Tijdelijke gegevens wissen</value>
</data>
<data name="NextcloudModuleNameContacts" xml:space="preserve">
<value>Contacten</value>
</data>
<data name="DataProcessingCompleted" xml:space="preserve">
<value>Gegevensverwerking voltooid</value>
</data>
<data name="DataProcessing" xml:space="preserve">
<value>Verwerking van gegevens...</value>
</data>
<data name="DumpParse" xml:space="preserve">
<value>Database parsing</value>
</data>
<data name="OnlyofficeModuleNameDocuments" xml:space="preserve">
<value>Documenten</value>
</data>
<data name="GoogleModuleNameDocuments" xml:space="preserve">
<value>Google Drive`s Bestanden</value>
</data>
<data name="GroupMigration" xml:space="preserve">
<value>Groepsmigratie {0} ({1}/{2})</value>
</data>
<data name="ModuleNameGroups" xml:space="preserve">
<value>Groepen</value>
</data>
<data name="OnlyofficeModuleNameMail" xml:space="preserve">
<value>Mail</value>
</data>
<data name="ModuleNameMail" xml:space="preserve">
<value>Mail</value>
</data>
<data name="GoogleModuleNameContacts" xml:space="preserve">
<value>Mail`s Contactpersonen</value>
</data>
<data name="MigratingUserContacts" xml:space="preserve">
<value>Migreren van gebruikerscontacten {0} ({1}/{2})</value>
</data>
<data name="MigratingUserFiles" xml:space="preserve">
<value>Migratie van gebruikersbestanden {0} ({1}/{2})</value>
</data>
<data name="MigrationCanceled" xml:space="preserve">
<value>Migratie geannuleerd</value>
</data>
<data name="MigrationCompleted" xml:space="preserve">
<value>Migratie voltooid</value>
</data>
<data name="OnlyofficeModuleNamePeople" xml:space="preserve">
<value>Personen</value>
</data>
<data name="PreparingForMigration" xml:space="preserve">
<value>Voorbereiding van de migratie</value>
</data>
<data name="StartOfDataProcessing" xml:space="preserve">
<value>Gegevensverwerking starten...</value>
</data>
<data name="Unzipping" xml:space="preserve">
<value>Uitpakken...</value>
</data>
<data name="UnzippingFinished" xml:space="preserve">
<value>Uitpakken voltooid...</value>
</data>
<data name="UserCalendarMigration" xml:space="preserve">
<value>Gebruikerskalender migratie {0} ({1}/{2})</value>
</data>
<data name="UserMigration" xml:space="preserve">
<value>Gebruikersmigratie {0} ({1}/{2})</value>
</data>
<data name="NextcloudModuleNameDocuments" xml:space="preserve">
<value>Gebruikersbestanden</value>
</data>
<data name="ModuleNameUsers" xml:space="preserve">
<value>Gebruikers</value>
</data>
</root>

View File

@ -0,0 +1,204 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<data name="ClearingTemporaryData" xml:space="preserve">
<value>Czyszczenie danych tymczasowych</value>
</data>
<data name="DataProcessing" xml:space="preserve">
<value>Przetwarzanie danych...</value>
</data>
<data name="DataProcessingCompleted" xml:space="preserve">
<value>Zakończono przetwarzanie danych</value>
</data>
<data name="DumpParse" xml:space="preserve">
<value>Analizowanie bazy danych</value>
</data>
<data name="GoogleModuleNameContacts" xml:space="preserve">
<value>Kontakty z poczty</value>
</data>
<data name="GoogleModuleNameDocuments" xml:space="preserve">
<value>Pliki Google Drive</value>
</data>
<data name="GroupMigration" xml:space="preserve">
<value>Migracja grupy {0} ({1}/{2})</value>
</data>
<data name="MigratingUserContacts" xml:space="preserve">
<value>Migrowanie kontaktów użytkownika {0} ({1}/{2})</value>
</data>
<data name="MigratingUserFiles" xml:space="preserve">
<value>Migrowanie plików użytkownika {0} ({1}/{2})</value>
</data>
<data name="MigrationCanceled" xml:space="preserve">
<value>Migracja została anulowana</value>
</data>
<data name="MigrationCompleted" xml:space="preserve">
<value>Migracja została zakończona</value>
</data>
<data name="ModuleNameCalendar" xml:space="preserve">
<value>Kalendarz</value>
</data>
<data name="ModuleNameGroups" xml:space="preserve">
<value>Grupy</value>
</data>
<data name="ModuleNameMail" xml:space="preserve">
<value>E-mail</value>
</data>
<data name="ModuleNameUsers" xml:space="preserve">
<value>Użytkownicy</value>
</data>
<data name="NextcloudModuleNameContacts" xml:space="preserve">
<value>Kontakty</value>
</data>
<data name="NextcloudModuleNameDocuments" xml:space="preserve">
<value>Pliki użytkownika</value>
</data>
<data name="OnlyofficeModuleNameCalendar" xml:space="preserve">
<value>Kalendarz</value>
</data>
<data name="OnlyofficeModuleNameDocuments" xml:space="preserve">
<value>Dokumenty</value>
</data>
<data name="OnlyofficeModuleNameMail" xml:space="preserve">
<value>E-mail</value>
</data>
<data name="OnlyofficeModuleNamePeople" xml:space="preserve">
<value>Ludzie</value>
</data>
<data name="PreparingForMigration" xml:space="preserve">
<value>Przygotowanie do migracji</value>
</data>
<data name="StartOfDataProcessing" xml:space="preserve">
<value>Rozpoczynamy przetwarzanie danych...</value>
</data>
<data name="Unzipping" xml:space="preserve">
<value>Rozpakowywanie...</value>
</data>
<data name="UnzippingFinished" xml:space="preserve">
<value>Rozpakowywanie zakończone...</value>
</data>
<data name="UserCalendarMigration" xml:space="preserve">
<value>Migracja kalendarza użytkownika {0} ({1}/{2})</value>
</data>
<data name="UserMigration" xml:space="preserve">
<value>Migracja użytkownika {0} ({1}/{2})</value>
</data>
<data name="UserSkipped" xml:space="preserve">
<value>Nie udało się zaimportować użytkownika: {0} ({1}/{2})</value>
</data>
</root>

View File

@ -0,0 +1,204 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<data name="OnlyofficeModuleNameCalendar" xml:space="preserve">
<value>Calendário</value>
</data>
<data name="ModuleNameCalendar" xml:space="preserve">
<value>Calendário</value>
</data>
<data name="ClearingTemporaryData" xml:space="preserve">
<value>A eliminar os dados temporários</value>
</data>
<data name="NextcloudModuleNameContacts" xml:space="preserve">
<value>Contactos</value>
</data>
<data name="DataProcessingCompleted" xml:space="preserve">
<value>Processamento dos dados completado</value>
</data>
<data name="DataProcessing" xml:space="preserve">
<value>A processar os dados...</value>
</data>
<data name="DumpParse" xml:space="preserve">
<value>Análise da base de dados</value>
</data>
<data name="OnlyofficeModuleNameDocuments" xml:space="preserve">
<value>Documentos</value>
</data>
<data name="UserSkipped" xml:space="preserve">
<value>Falha ao importar utilizador: {0} ({1}/{2})</value>
</data>
<data name="GoogleModuleNameDocuments" xml:space="preserve">
<value>Ficheiros do Google Drive</value>
</data>
<data name="GroupMigration" xml:space="preserve">
<value>Migração do grupo {0} ({1}/{2})</value>
</data>
<data name="ModuleNameGroups" xml:space="preserve">
<value>Grupos</value>
</data>
<data name="OnlyofficeModuleNameMail" xml:space="preserve">
<value>Correio-electrónico</value>
</data>
<data name="ModuleNameMail" xml:space="preserve">
<value>Correio-electrónico</value>
</data>
<data name="GoogleModuleNameContacts" xml:space="preserve">
<value>Contactos do Email</value>
</data>
<data name="MigratingUserContacts" xml:space="preserve">
<value>A migrar os contactos do utilizador {0} ({1}/{2})</value>
</data>
<data name="MigratingUserFiles" xml:space="preserve">
<value>A migrar os ficheiros do utilizador {0} ({1}/{2})</value>
</data>
<data name="MigrationCanceled" xml:space="preserve">
<value>Migração cancelada</value>
</data>
<data name="MigrationCompleted" xml:space="preserve">
<value>Migração completada</value>
</data>
<data name="OnlyofficeModuleNamePeople" xml:space="preserve">
<value>Pessoas</value>
</data>
<data name="PreparingForMigration" xml:space="preserve">
<value>A preparar a migração</value>
</data>
<data name="StartOfDataProcessing" xml:space="preserve">
<value>A iniciar o processamento de dados...</value>
</data>
<data name="UnzippingFinished" xml:space="preserve">
<value>Descompactação completa...</value>
</data>
<data name="Unzipping" xml:space="preserve">
<value>A Descompactar...</value>
</data>
<data name="UserCalendarMigration" xml:space="preserve">
<value>Migração do calendário do utilizador {0} ({1}/{2})</value>
</data>
<data name="UserMigration" xml:space="preserve">
<value>Migração do Utilizador {0} ({1}/{2})</value>
</data>
<data name="NextcloudModuleNameDocuments" xml:space="preserve">
<value>Ficheiros dos Utilizadores</value>
</data>
<data name="ModuleNameUsers" xml:space="preserve">
<value>Utilizadores</value>
</data>
</root>

View File

@ -0,0 +1,204 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<data name="OnlyofficeModuleNameCalendar" xml:space="preserve">
<value>Календарь</value>
</data>
<data name="ModuleNameCalendar" xml:space="preserve">
<value>Календарь</value>
</data>
<data name="ClearingTemporaryData" xml:space="preserve">
<value>Удаление временных данных</value>
</data>
<data name="NextcloudModuleNameContacts" xml:space="preserve">
<value>Контакты</value>
</data>
<data name="ModuleNameGroups" xml:space="preserve">
<value>Группы</value>
</data>
<data name="ModuleNameUsers" xml:space="preserve">
<value>Пользователи</value>
</data>
<data name="OnlyofficeModuleNamePeople" xml:space="preserve">
<value>Люди</value>
</data>
<data name="NextcloudModuleNameDocuments" xml:space="preserve">
<value>Файлы пользователя</value>
</data>
<data name="OnlyofficeModuleNameDocuments" xml:space="preserve">
<value>Документы</value>
</data>
<data name="GoogleModuleNameDocuments" xml:space="preserve">
<value>Файлы Google Drive</value>
</data>
<data name="GroupMigration" xml:space="preserve">
<value>Миграция группы {0} ({1}/{2})</value>
</data>
<data name="OnlyofficeModuleNameMail" xml:space="preserve">
<value>Почта</value>
</data>
<data name="ModuleNameMail" xml:space="preserve">
<value>Почта</value>
</data>
<data name="GoogleModuleNameContacts" xml:space="preserve">
<value>Контакты почты</value>
</data>
<data name="MigrationCanceled" xml:space="preserve">
<value>Миграция отменена</value>
</data>
<data name="MigrationCompleted" xml:space="preserve">
<value>Миграция завершена</value>
</data>
<data name="PreparingForMigration" xml:space="preserve">
<value>Подготовка к миграции</value>
</data>
<data name="Unzipping" xml:space="preserve">
<value>Разархивирование...</value>
</data>
<data name="UserCalendarMigration" xml:space="preserve">
<value>Миграция календаря пользователя {0} ({1}/{2})</value>
</data>
<data name="UserMigration" xml:space="preserve">
<value>Миграция пользователя {0} ({1}/{2})</value>
</data>
<data name="UnzippingFinished" xml:space="preserve">
<value>Разархивирование завершено...</value>
</data>
<data name="StartOfDataProcessing" xml:space="preserve">
<value>Запуск обработки данных...</value>
</data>
<data name="MigratingUserFiles" xml:space="preserve">
<value>Миграция файлов пользователя {0} ({1}/{2})</value>
</data>
<data name="MigratingUserContacts" xml:space="preserve">
<value>Миграция контактов пользователя {0} ({1}/{2})</value>
</data>
<data name="UserSkipped" xml:space="preserve">
<value>Не удалось импортировать пользователя: {0} ({1}/{2})</value>
</data>
<data name="DataProcessing" xml:space="preserve">
<value>Обработка данных...</value>
</data>
<data name="DataProcessingCompleted" xml:space="preserve">
<value>Обработка данных завершена</value>
</data>
<data name="DumpParse" xml:space="preserve">
<value>Парсинг базы данных</value>
</data>
</root>

View File

@ -0,0 +1,204 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<data name="OnlyofficeModuleNameCalendar" xml:space="preserve">
<value>Kalendár</value>
</data>
<data name="ModuleNameCalendar" xml:space="preserve">
<value>Kalendár</value>
</data>
<data name="NextcloudModuleNameContacts" xml:space="preserve">
<value>Kontakty</value>
</data>
<data name="ClearingTemporaryData" xml:space="preserve">
<value>Vymazanie dočasných údajov</value>
</data>
<data name="DataProcessingCompleted" xml:space="preserve">
<value>Spracovanie údajov dokončené</value>
</data>
<data name="DataProcessing" xml:space="preserve">
<value>Spracovanie údajov...</value>
</data>
<data name="DumpParse" xml:space="preserve">
<value>Spracovanie databázy</value>
</data>
<data name="OnlyofficeModuleNameDocuments" xml:space="preserve">
<value>Dokumenty</value>
</data>
<data name="UserSkipped" xml:space="preserve">
<value>Nepodarilo sa importovať používateľa: {0} ({1}/{2})</value>
</data>
<data name="GoogleModuleNameDocuments" xml:space="preserve">
<value>Súbory na disku Google</value>
</data>
<data name="GroupMigration" xml:space="preserve">
<value>Presun skupín {0} ({1}/{2})</value>
</data>
<data name="ModuleNameGroups" xml:space="preserve">
<value>Skupiny</value>
</data>
<data name="OnlyofficeModuleNameMail" xml:space="preserve">
<value>E-mail</value>
</data>
<data name="ModuleNameMail" xml:space="preserve">
<value>E-mail</value>
</data>
<data name="GoogleModuleNameContacts" xml:space="preserve">
<value>Kontakty poštovej schránky</value>
</data>
<data name="MigratingUserContacts" xml:space="preserve">
<value>Presun kontaktov používateľov {0} ({1}/{2})</value>
</data>
<data name="MigratingUserFiles" xml:space="preserve">
<value>Presun používateľských súborov {0} ({1}/{2})</value>
</data>
<data name="MigrationCanceled" xml:space="preserve">
<value>Presun zrušený</value>
</data>
<data name="MigrationCompleted" xml:space="preserve">
<value>Presun dokončený</value>
</data>
<data name="OnlyofficeModuleNamePeople" xml:space="preserve">
<value>Ľudia</value>
</data>
<data name="PreparingForMigration" xml:space="preserve">
<value>Príprava na presun</value>
</data>
<data name="StartOfDataProcessing" xml:space="preserve">
<value>Spustenie spracovania údajov...</value>
</data>
<data name="UnzippingFinished" xml:space="preserve">
<value>Rozbaľovanie dokončené...</value>
</data>
<data name="Unzipping" xml:space="preserve">
<value>Rozbaľovanie...</value>
</data>
<data name="UserCalendarMigration" xml:space="preserve">
<value>Presun kalendára používateľa {0} ({1}/{2})</value>
</data>
<data name="UserMigration" xml:space="preserve">
<value>Presun používateľov {0} ({1}/{2})</value>
</data>
<data name="NextcloudModuleNameDocuments" xml:space="preserve">
<value>Súbory používateľa</value>
</data>
<data name="ModuleNameUsers" xml:space="preserve">
<value>Používatelia</value>
</data>
</root>

View File

@ -0,0 +1,204 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<data name="OnlyofficeModuleNameCalendar" xml:space="preserve">
<value>Koledar</value>
</data>
<data name="ModuleNameCalendar" xml:space="preserve">
<value>Koledar</value>
</data>
<data name="NextcloudModuleNameContacts" xml:space="preserve">
<value>Kontakti</value>
</data>
<data name="ModuleNameGroups" xml:space="preserve">
<value>Skupine</value>
</data>
<data name="OnlyofficeModuleNameMail" xml:space="preserve">
<value>Pošta</value>
</data>
<data name="ModuleNameMail" xml:space="preserve">
<value>Pošta</value>
</data>
<data name="OnlyofficeModuleNamePeople" xml:space="preserve">
<value>Ljudje</value>
</data>
<data name="ModuleNameUsers" xml:space="preserve">
<value>Uporabniki</value>
</data>
<data name="OnlyofficeModuleNameDocuments" xml:space="preserve">
<value>Dokumenti</value>
</data>
<data name="Unzipping" xml:space="preserve">
<value>Razpakiranje...</value>
</data>
<data name="UnzippingFinished" xml:space="preserve">
<value>Razpakiranje zaključeno...</value>
</data>
<data name="StartOfDataProcessing" xml:space="preserve">
<value>Začetek procesiranja podatkov...</value>
</data>
<data name="PreparingForMigration" xml:space="preserve">
<value>Priprava na migracijo</value>
</data>
<data name="MigrationCanceled" xml:space="preserve">
<value>Migracija preklicana</value>
</data>
<data name="MigrationCompleted" xml:space="preserve">
<value>Migracija zaključena</value>
</data>
<data name="MigratingUserContacts" xml:space="preserve">
<value>Migracija uporabnikovih kontaktov {0} ({1}/{2})</value>
</data>
<data name="MigratingUserFiles" xml:space="preserve">
<value>Migracija uporabnikovih datotek {0} ({1}/{2})</value>
</data>
<data name="GoogleModuleNameContacts" xml:space="preserve">
<value>Poštni kontakti</value>
</data>
<data name="GroupMigration" xml:space="preserve">
<value>Migracija skupine {0} ({1}/{2})</value>
</data>
<data name="GoogleModuleNameDocuments" xml:space="preserve">
<value>Google Drive datoteke</value>
</data>
<data name="UserSkipped" xml:space="preserve">
<value>Uvoz uporabnika ni uspel: {0} ({1}/{2})</value>
</data>
<data name="DumpParse" xml:space="preserve">
<value>Razčlenjevanje baze podatkov</value>
</data>
<data name="DataProcessing" xml:space="preserve">
<value>Procesiranje podatkov...</value>
</data>
<data name="DataProcessingCompleted" xml:space="preserve">
<value>Procesiranje podatkov zaključeno</value>
</data>
<data name="ClearingTemporaryData" xml:space="preserve">
<value>Brisanje začasnih podatkov</value>
</data>
<data name="UserCalendarMigration" xml:space="preserve">
<value>Migracija uporabnikovega koledarja {0} ({1}/{2})</value>
</data>
<data name="UserMigration" xml:space="preserve">
<value>Migracija uporabnika {0} ({1}/{2})</value>
</data>
<data name="NextcloudModuleNameDocuments" xml:space="preserve">
<value>Uporabnikove datoteke</value>
</data>
</root>

View File

@ -0,0 +1,204 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<data name="OnlyofficeModuleNameCalendar" xml:space="preserve">
<value>Takvim</value>
</data>
<data name="ModuleNameCalendar" xml:space="preserve">
<value>Takvim</value>
</data>
<data name="ClearingTemporaryData" xml:space="preserve">
<value>Geçici verileri temizleme</value>
</data>
<data name="NextcloudModuleNameContacts" xml:space="preserve">
<value>Kişiler</value>
</data>
<data name="OnlyofficeModuleNameDocuments" xml:space="preserve">
<value>Belgeler</value>
</data>
<data name="ModuleNameGroups" xml:space="preserve">
<value>Gruplar</value>
</data>
<data name="OnlyofficeModuleNameMail" xml:space="preserve">
<value>Posta</value>
</data>
<data name="ModuleNameMail" xml:space="preserve">
<value>Posta</value>
</data>
<data name="OnlyofficeModuleNamePeople" xml:space="preserve">
<value>İnsanlar</value>
</data>
<data name="ModuleNameUsers" xml:space="preserve">
<value>Kullanıcılar</value>
</data>
<data name="GoogleModuleNameContacts" xml:space="preserve">
<value>Postanın Kişileri</value>
</data>
<data name="DumpParse" xml:space="preserve">
<value>Veritabanı ayrıştırma</value>
</data>
<data name="GoogleModuleNameDocuments" xml:space="preserve">
<value>Google Drive Dosyaları</value>
</data>
<data name="UserSkipped" xml:space="preserve">
<value>Kullanıcı içe aktarılamadı: {0} ({1}/{2})</value>
</data>
<data name="GroupMigration" xml:space="preserve">
<value>Grup taşıma {0} ({1}/{2})</value>
</data>
<data name="MigratingUserContacts" xml:space="preserve">
<value>Kullanıcı kişileri taşınıyor {0} ({1}/{2})</value>
</data>
<data name="MigratingUserFiles" xml:space="preserve">
<value>Kullanıcı dosyaları taşınıyor {0} ({1}/{2})</value>
</data>
<data name="MigrationCanceled" xml:space="preserve">
<value>Taşıma iptal edildi</value>
</data>
<data name="MigrationCompleted" xml:space="preserve">
<value>Taşıma tamamlandı</value>
</data>
<data name="DataProcessingCompleted" xml:space="preserve">
<value>Veri işleme tamamlandı</value>
</data>
<data name="DataProcessing" xml:space="preserve">
<value>Veri işleniyor...</value>
</data>
<data name="PreparingForMigration" xml:space="preserve">
<value>Geçiş için hazırlanıyor</value>
</data>
<data name="StartOfDataProcessing" xml:space="preserve">
<value>Veri işleme başlatılıyor...</value>
</data>
<data name="UnzippingFinished" xml:space="preserve">
<value>Sıkıştırılmış dosya açma tamamlandı...</value>
</data>
<data name="Unzipping" xml:space="preserve">
<value>Sıkıştırılmış dosyalar açılıyor...</value>
</data>
<data name="UserCalendarMigration" xml:space="preserve">
<value>Kullanıcı takvimi taşıma {0} ({1}/{2})</value>
</data>
<data name="UserMigration" xml:space="preserve">
<value>Kullanıcı taşıma {0} ({1}/{2})</value>
</data>
<data name="NextcloudModuleNameDocuments" xml:space="preserve">
<value>Kullanıcı Dosyaları</value>
</data>
</root>

View File

@ -0,0 +1,204 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<data name="OnlyofficeModuleNameDocuments" xml:space="preserve">
<value>Документи</value>
</data>
<data name="OnlyofficeModuleNamePeople" xml:space="preserve">
<value>Люди</value>
</data>
<data name="ModuleNameMail" xml:space="preserve">
<value>Пошта</value>
</data>
<data name="OnlyofficeModuleNameMail" xml:space="preserve">
<value>Пошта</value>
</data>
<data name="ModuleNameGroups" xml:space="preserve">
<value>Групи</value>
</data>
<data name="OnlyofficeModuleNameCalendar" xml:space="preserve">
<value>Календар</value>
</data>
<data name="ModuleNameCalendar" xml:space="preserve">
<value>Календар</value>
</data>
<data name="NextcloudModuleNameContacts" xml:space="preserve">
<value>Контакти</value>
</data>
<data name="ModuleNameUsers" xml:space="preserve">
<value>Користувачі</value>
</data>
<data name="ClearingTemporaryData" xml:space="preserve">
<value>Очищення тимчасових даних</value>
</data>
<data name="DataProcessingCompleted" xml:space="preserve">
<value>Обробку даних виконано</value>
</data>
<data name="DataProcessing" xml:space="preserve">
<value>Обробка даних...</value>
</data>
<data name="DumpParse" xml:space="preserve">
<value>Аналізування бази даних</value>
</data>
<data name="UserSkipped" xml:space="preserve">
<value>Не вдалося імпортувати користувача: {0} ({1}/{2})</value>
</data>
<data name="GoogleModuleNameDocuments" xml:space="preserve">
<value>Файли Google Drive</value>
</data>
<data name="GroupMigration" xml:space="preserve">
<value>Перенесення групи {0} ({1}/{2})</value>
</data>
<data name="GoogleModuleNameContacts" xml:space="preserve">
<value>Контакти пошти</value>
</data>
<data name="MigratingUserContacts" xml:space="preserve">
<value>Перенесення контактів користувача {0} ({1}/{2})</value>
</data>
<data name="MigratingUserFiles" xml:space="preserve">
<value>Перенесення файлів користувача {0} ({1}/{2})</value>
</data>
<data name="MigrationCanceled" xml:space="preserve">
<value>Перенесення скасовано</value>
</data>
<data name="MigrationCompleted" xml:space="preserve">
<value>Перенесення виконано</value>
</data>
<data name="PreparingForMigration" xml:space="preserve">
<value>Підготовка до перенесення</value>
</data>
<data name="StartOfDataProcessing" xml:space="preserve">
<value>Початок обробки даних...</value>
</data>
<data name="UnzippingFinished" xml:space="preserve">
<value>Розпакування виконано...</value>
</data>
<data name="Unzipping" xml:space="preserve">
<value>Розпакування...</value>
</data>
<data name="UserCalendarMigration" xml:space="preserve">
<value>Перенесення календаря користувача {0} ({1}/{2})</value>
</data>
<data name="UserMigration" xml:space="preserve">
<value>Перенесення користувача {0} ({1}/{2})</value>
</data>
<data name="NextcloudModuleNameDocuments" xml:space="preserve">
<value>Файли користувача</value>
</data>
</root>

View File

@ -0,0 +1,204 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<data name="OnlyofficeModuleNameCalendar" xml:space="preserve">
<value>Lịch</value>
</data>
<data name="ModuleNameCalendar" xml:space="preserve">
<value>Lịch</value>
</data>
<data name="OnlyofficeModuleNamePeople" xml:space="preserve">
<value>Con người</value>
</data>
<data name="OnlyofficeModuleNameMail" xml:space="preserve">
<value>Thư</value>
</data>
<data name="ModuleNameMail" xml:space="preserve">
<value>Thư</value>
</data>
<data name="ModuleNameGroups" xml:space="preserve">
<value>Nhóm</value>
</data>
<data name="ModuleNameUsers" xml:space="preserve">
<value>Người dùng</value>
</data>
<data name="NextcloudModuleNameContacts" xml:space="preserve">
<value>Thông tin liên hệ</value>
</data>
<data name="DataProcessing" xml:space="preserve">
<value>Đang xử lý dữ liệu...</value>
</data>
<data name="OnlyofficeModuleNameDocuments" xml:space="preserve">
<value>Tài liệu</value>
</data>
<data name="GoogleModuleNameDocuments" xml:space="preserve">
<value>Tập tin Google Drive</value>
</data>
<data name="DumpParse" xml:space="preserve">
<value>Đang phân tích cơ sở dữ liệu</value>
</data>
<data name="DataProcessingCompleted" xml:space="preserve">
<value>Đã hoàn thành xử lý dữ liệu</value>
</data>
<data name="ClearingTemporaryData" xml:space="preserve">
<value>Đang xóa dữ liệu tạm thời</value>
</data>
<data name="UserSkipped" xml:space="preserve">
<value>Không thể nhập người dùng: {0} ({1}/{2})</value>
</data>
<data name="GroupMigration" xml:space="preserve">
<value>Di chuyển nhóm {0} ({1}/{2})</value>
</data>
<data name="GoogleModuleNameContacts" xml:space="preserve">
<value>Thông tin liên hệ của Mail</value>
</data>
<data name="NextcloudModuleNameDocuments" xml:space="preserve">
<value>Tập tin của người dùng</value>
</data>
<data name="Unzipping" xml:space="preserve">
<value>Đang giải nén...</value>
</data>
<data name="UnzippingFinished" xml:space="preserve">
<value>Đang bắt đầu xử lý dữ liệu...</value>
</data>
<data name="PreparingForMigration" xml:space="preserve">
<value>Chuẩn bị cho di chuyển</value>
</data>
<data name="StartOfDataProcessing" xml:space="preserve">
<value>Đang bắt đầu xử lý dữ liệu...</value>
</data>
<data name="UserCalendarMigration" xml:space="preserve">
<value>Di chuyển lịch người dùng {0} ({1}/{2})</value>
</data>
<data name="UserMigration" xml:space="preserve">
<value>Di chuyển người dùng {0} ({1}/{2})</value>
</data>
<data name="MigrationCanceled" xml:space="preserve">
<value>Đã hủy di chuyển</value>
</data>
<data name="MigrationCompleted" xml:space="preserve">
<value>Đã hoàn thành di chuyển</value>
</data>
<data name="MigratingUserContacts" xml:space="preserve">
<value>Di chuyển thông tin liên hệ người dùng {0} ({1}/{2})</value>
</data>
<data name="MigratingUserFiles" xml:space="preserve">
<value>Di chuyển tập tin người dùng {0} ({1}/{2})</value>
</data>
</root>

View File

@ -59,137 +59,142 @@
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=6.0.2.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<data name="FooterCommonV10" xml:space="preserve">
<value>&lt;tr border="0" cellspacing="0" cellpadding="0"&gt;&lt;td colspan="3" style="height: 10px; line-height: 10px; background: #fff; padding: 0; margin: 0;"&gt;&amp;nbsp;&lt;/td&gt;&lt;/tr&gt;
&lt;tr border="0" cellspacing="0" cellpadding="0"&gt;
&lt;td style="vertical-align: top; margin: 0; padding: 34px 0 0 0; width: 210px; height: 108px; background: #f6f6f6; -moz-border-radius-topleft: 6px; -webkit-border-top-left-radius: 6px; border-top-left-radius: 6px;"&gt;
&lt;img src="%IMAGEPATH%/tech-100.png" style="width: 100px; height: 100px;margin: 0 auto;" /&gt;
&lt;/td&gt;
&lt;td style="vertical-align: top; margin: 0; padding: 34px 0 0 0; width: 180px; height: 108px; background: #f6f6f6;"&gt;
&lt;img src="%IMAGEPATH%/mailus-100.png" style="width: 100px; height: 100px;margin: 0 auto;" /&gt;
&lt;/td&gt;
&lt;td style="vertical-align: top; margin: 0; padding: 34px 0 0 0; width: 210px; height: 108px; background: #f6f6f6; -moz-border-radius-topright: 6px; -webkit-border-top-right-radius: 6px; border-top-right-radius: 6px;"&gt;
&lt;img src="%IMAGEPATH%/demo-100.png" style="width: 100px; height: 100px;margin: 0 auto;" /&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr border="0" cellspacing="0" cellpadding="0"&gt;
&lt;td style="vertical-align: top; margin: 0; padding: 0; width: 210px; height: 16px; background: #f6f6f6;"&gt;Texniki dəstək lazımdır?&lt;/td&gt;
&lt;td style="vertical-align: top; margin: 0; padding: 0; width: 180px; height: 16px; background: #f6f6f6;"&gt;Satışla bağlı Suallar&lt;/td&gt;
&lt;td style="vertical-align: top; margin: 0; padding: 0; width: 210px; height: 16px; background: #f6f6f6;"&gt;Demo Sifariş Et&lt;/td&gt;
&lt;/tr&gt;
&lt;tr border="0" cellspacing="0" cellpadding="0"&gt;
&lt;td style="vertical-align: top; margin: 0; padding: 0 0 30px; width: 210px; background: #f6f6f6;-moz-border-radius-bottomleft: 6px; -webkit-border-bottom-left-radius: 6px; border-bottom-left-radius: 6px;"&gt;
&lt;a href="%SUPPORTURL%" target="_blank" style="color: #333;"&gt;Sualınızı göndərin&lt;/a&gt;
&lt;/td&gt;
&lt;td style="vertical-align: top; margin: 0; padding: 0 0 30px; width: 180px; background: #f6f6f6;"&gt;
&lt;a href="mailto:%SALESEMAIL%" style="color: #333;"&gt;Bizə e-məktub yazın&lt;/a&gt;
&lt;/td&gt;
&lt;td style="vertical-align: top; margin: 0; padding: 0 0 30px; width: 210px; background: #f6f6f6;-moz-border-radius-bottomright: 6px; -webkit-border-bottom-right-radius: 6px; border-bottom-right-radius: 6px;"&gt;
&lt;a href="%DEMOURL%" target="_blank" style="color: #333;"&gt;Sorğu göndərin&lt;/a&gt;
&lt;/td&gt;
<value>&lt;tr border="0" cellspacing="0" cellpadding="0"&gt;&lt;td colspan="3" style="height: 10px; line-height: 10px; background: #fff; padding: 0; margin: 0;"&gt;&amp;nbsp;&lt;/td&gt;&lt;/tr&gt;
&lt;tr border="0" cellspacing="0" cellpadding="0"&gt;
&lt;td style="vertical-align: top; margin: 0; padding: 34px 0 0 0; width: 210px; height: 108px; background: #f6f6f6; -moz-border-radius-topleft: 6px; -webkit-border-top-left-radius: 6px; border-top-left-radius: 6px;"&gt;
&lt;img src="%IMAGEPATH%/tech-100.png" style="width: 100px; height: 100px;margin: 0 auto;" /&gt;
&lt;/td&gt;
&lt;td style="vertical-align: top; margin: 0; padding: 34px 0 0 0; width: 180px; height: 108px; background: #f6f6f6;"&gt;
&lt;img src="%IMAGEPATH%/mailus-100.png" style="width: 100px; height: 100px;margin: 0 auto;" /&gt;
&lt;/td&gt;
&lt;td style="vertical-align: top; margin: 0; padding: 34px 0 0 0; width: 210px; height: 108px; background: #f6f6f6; -moz-border-radius-topright: 6px; -webkit-border-top-right-radius: 6px; border-top-right-radius: 6px;"&gt;
&lt;img src="%IMAGEPATH%/demo-100.png" style="width: 100px; height: 100px;margin: 0 auto;" /&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr border="0" cellspacing="0" cellpadding="0"&gt;
&lt;td style="vertical-align: top; margin: 0; padding: 0; width: 210px; height: 16px; background: #f6f6f6;"&gt;Texniki dəstək lazımdır?&lt;/td&gt;
&lt;td style="vertical-align: top; margin: 0; padding: 0; width: 180px; height: 16px; background: #f6f6f6;"&gt;Satışla bağlı Suallar&lt;/td&gt;
&lt;td style="vertical-align: top; margin: 0; padding: 0; width: 210px; height: 16px; background: #f6f6f6;"&gt;Demo Sifariş Et&lt;/td&gt;
&lt;/tr&gt;
&lt;tr border="0" cellspacing="0" cellpadding="0"&gt;
&lt;td style="vertical-align: top; margin: 0; padding: 0 0 30px; width: 210px; background: #f6f6f6;-moz-border-radius-bottomleft: 6px; -webkit-border-bottom-left-radius: 6px; border-bottom-left-radius: 6px;"&gt;
&lt;a href="%SUPPORTURL%" target="_blank" style="color: #333;"&gt;Sualınızı göndərin&lt;/a&gt;
&lt;/td&gt;
&lt;td style="vertical-align: top; margin: 0; padding: 0 0 30px; width: 180px; background: #f6f6f6;"&gt;
&lt;a href="mailto:%SALESEMAIL%" style="color: #333;"&gt;Bizə e-məktub yazın&lt;/a&gt;
&lt;/td&gt;
&lt;td style="vertical-align: top; margin: 0; padding: 0 0 30px; width: 210px; background: #f6f6f6;-moz-border-radius-bottomright: 6px; -webkit-border-bottom-right-radius: 6px; border-bottom-right-radius: 6px;"&gt;
&lt;a href="%DEMOURL%" target="_blank" style="color: #333;"&gt;Sorğu göndərin&lt;/a&gt;
&lt;/td&gt;
&lt;/tr&gt;</value>
</data>
<data name="FooterOpensourceV10" xml:space="preserve">
<value>&lt;tr border="0" cellspacing="0" cellpadding="0"&gt;&lt;td colspan="3" style="height: 10px; line-height: 10px; background: #fff; padding: 0; margin: 0;"&gt;&amp;nbsp;&lt;/td&gt;&lt;/tr&gt;
&lt;tr border="0" cellspacing="0" cellpadding="0"&gt;
&lt;td style="vertical-align: top; margin: 0; padding: 34px 0 0 0; width: 210px; height: 108px; background: #f6f6f6; -moz-border-radius-topleft: 6px; -webkit-border-top-left-radius: 6px; border-top-left-radius: 6px;"&gt;
&lt;img src="%IMAGEPATH%/tech-100.png" style="width: 100px; height: 100px;margin: 0 auto;" /&gt;
&lt;/td&gt;
&lt;td style="vertical-align: top; margin: 0; padding: 34px 0 0 0; width: 180px; height: 108px; background: #f6f6f6;"&gt;
&lt;img src="%IMAGEPATH%/mailus-100.png" style="width: 100px; height: 100px;margin: 0 auto;" /&gt;
&lt;/td&gt;
&lt;td style="vertical-align: top; margin: 0; padding: 34px 0 0 0; width: 210px; height: 108px; background: #f6f6f6; -moz-border-radius-topright: 6px; -webkit-border-top-right-radius: 6px; border-top-right-radius: 6px;"&gt;
&lt;img src="%IMAGEPATH%/demo-100.png" style="width: 100px; height: 100px;margin: 0 auto;" /&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr border="0" cellspacing="0" cellpadding="0"&gt;
&lt;td style="vertical-align: top; margin: 0; padding: 0; width: 210px; height: 16px; background: #f6f6f6;"&gt;Texniki dəstək lazımdır?&lt;/td&gt;
&lt;td style="vertical-align: top; margin: 0; padding: 0; width: 180px; height: 16px; background: #f6f6f6;"&gt;Satışla bağlı Suallar&lt;/td&gt;
&lt;td style="vertical-align: top; margin: 0; padding: 0; width: 210px; height: 16px; background: #f6f6f6;"&gt;Demo Sifariçedin&lt;/td&gt;
&lt;/tr&gt;
&lt;tr border="0" cellspacing="0" cellpadding="0"&gt;
&lt;td style="vertical-align: top; margin: 0; padding: 0 0 30px; width: 210px; background: #f6f6f6;-moz-border-radius-bottomleft: 6px; -webkit-border-bottom-left-radius: 6px; border-bottom-left-radius: 6px;"&gt;
&lt;a href="http://dev.onlyoffice.org/" target="_blank" style="color: #333;"&gt;İcmadan soruşun&lt;/a&gt;
&lt;/td&gt;
&lt;td style="vertical-align: top; margin: 0; padding: 0 0 30px; width: 180px; background: #f6f6f6;"&gt;
&lt;a href="mailto:sales@onlyoffice.com" style="color: #333;"&gt;Bizə e-məktub yazın&lt;/a&gt;
&lt;/td&gt;
&lt;td style="vertical-align: top; margin: 0; padding: 0 0 30px; width: 210px; background: #f6f6f6;-moz-border-radius-bottomright: 6px; -webkit-border-bottom-right-radius: 6px; border-bottom-right-radius: 6px;"&gt;
&lt;a href="http://www.onlyoffice.com/demo-order.aspx" target="_blank" style="color: #333;"&gt;Bizə sorğu göndərin&lt;/a&gt;
&lt;/td&gt;
<value>&lt;tr border="0" cellspacing="0" cellpadding="0"&gt;&lt;td colspan="3" style="height: 10px; line-height: 10px; background: #fff; padding: 0; margin: 0;"&gt;&amp;nbsp;&lt;/td&gt;&lt;/tr&gt;
&lt;tr border="0" cellspacing="0" cellpadding="0"&gt;
&lt;td style="vertical-align: top; margin: 0; padding: 34px 0 0 0; width: 210px; height: 108px; background: #f6f6f6; -moz-border-radius-topleft: 6px; -webkit-border-top-left-radius: 6px; border-top-left-radius: 6px;"&gt;
&lt;img src="%IMAGEPATH%/tech-100.png" style="width: 100px; height: 100px;margin: 0 auto;" /&gt;
&lt;/td&gt;
&lt;td style="vertical-align: top; margin: 0; padding: 34px 0 0 0; width: 180px; height: 108px; background: #f6f6f6;"&gt;
&lt;img src="%IMAGEPATH%/mailus-100.png" style="width: 100px; height: 100px;margin: 0 auto;" /&gt;
&lt;/td&gt;
&lt;td style="vertical-align: top; margin: 0; padding: 34px 0 0 0; width: 210px; height: 108px; background: #f6f6f6; -moz-border-radius-topright: 6px; -webkit-border-top-right-radius: 6px; border-top-right-radius: 6px;"&gt;
&lt;img src="%IMAGEPATH%/demo-100.png" style="width: 100px; height: 100px;margin: 0 auto;" /&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr border="0" cellspacing="0" cellpadding="0"&gt;
&lt;td style="vertical-align: top; margin: 0; padding: 0; width: 210px; height: 16px; background: #f6f6f6;"&gt;Texniki dəstək lazımdır?&lt;/td&gt;
&lt;td style="vertical-align: top; margin: 0; padding: 0; width: 180px; height: 16px; background: #f6f6f6;"&gt;Satışla bağlı Suallar&lt;/td&gt;
&lt;td style="vertical-align: top; margin: 0; padding: 0; width: 210px; height: 16px; background: #f6f6f6;"&gt;Demo Sifariçedin&lt;/td&gt;
&lt;/tr&gt;
&lt;tr border="0" cellspacing="0" cellpadding="0"&gt;
&lt;td style="vertical-align: top; margin: 0; padding: 0 0 30px; width: 210px; background: #f6f6f6;-moz-border-radius-bottomleft: 6px; -webkit-border-bottom-left-radius: 6px; border-bottom-left-radius: 6px;"&gt;
&lt;a href="http://dev.onlyoffice.org/" target="_blank" style="color: #333;"&gt;İcmadan soruşun&lt;/a&gt;
&lt;/td&gt;
&lt;td style="vertical-align: top; margin: 0; padding: 0 0 30px; width: 180px; background: #f6f6f6;"&gt;
&lt;a href="mailto:sales@onlyoffice.com" style="color: #333;"&gt;Bizə e-məktub yazın&lt;/a&gt;
&lt;/td&gt;
&lt;td style="vertical-align: top; margin: 0; padding: 0 0 30px; width: 210px; background: #f6f6f6;-moz-border-radius-bottomright: 6px; -webkit-border-bottom-right-radius: 6px; border-bottom-right-radius: 6px;"&gt;
&lt;a href="http://www.onlyoffice.com/demo-order.aspx" target="_blank" style="color: #333;"&gt;Bizə sorğu göndərin&lt;/a&gt;
&lt;/td&gt;
&lt;/tr&gt;</value>
</data>
<data name="HtmlMaster" xml:space="preserve">
<value>&lt;body style="margin: 0; padding: 0; text-align: center; width: 100%; font-family: Arial, sans-serif; font-size: 14px; color: #333;"&gt;
&lt;div style="background-color: #fff; width: 600px; margin: 0 auto; text-align: left;"&gt;
&lt;table cellspacing="0" cellpadding="0" style="font-family: Arial; font-size: 14px; color: #333; background: #fff; text-align: center; width: 600px; margin: 0; padding: 0; border: 0 none; border-collapse: collapse; empty-cells: show; border-spacing: 0;"&gt;
&lt;tbody&gt;
&lt;tr border="0" cellspacing="0" cellpadding="0"&gt;
&lt;td colspan="3" style="margin: 0; padding: 0; background-color: #fff; height: 65px; padding: 20px 0 0 30px;"&gt;
&lt;div style="text-align: left; height: 65px; width: 570px; margin: 0; padding: 0;"&gt;
&lt;a href="%SITEURL%" style="text-decoration: none; display: inline-block; width: 386px; height: 44px; margin: 0; padding: 0;" target="_blank"&gt;
&lt;img src="%LOGO%" style="border: 0px none; width: 386px; height: 44px; margin: 0; padding: 0;" alt="%LOGOTEXT%" /&gt;
&lt;/a&gt;
&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr border="0" cellspacing="0" cellpadding="0"&gt;
&lt;td colspan="3" style="margin: 0; padding: 15px 30px 15px; background-color: #f6f6f6; -moz-border-radius: 6px; -webkit-border-radius: 6px; border-radius: 6px;"&gt;
&lt;div style="font-family: Arial; font-size: 14px; color: #333; margin: 0; padding: 0; width: 540px; height: auto; overflow: hidden; word-wrap: break-word; vertical-align: top; text-align: left; border: 0 none;"&gt;
%CONTENT%
&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
%FOOTER%
&lt;/tbody&gt;
&lt;/table&gt;
&lt;table cellspacing="0" cellpadding="0" style="font-family: Arial; font-size: 14px; color: #333; text-align: center; vertical-align: top; width: 600px; margin: 0; padding: 0; border-collapse: collapse; border: 0; border-spacing: 0; "&gt;
&lt;tbody&gt;
%FOOTERSOCIAL%
&lt;tr border="0" cellspacing="0" cellpadding="0"&gt;
&lt;td colspan="6" style="width: 600px; vertical-align: top; margin: 0; padding: 20px 30px 15px;"&gt;
&lt;p style="color: #7b7b7b; font-family: Arial, Tahoma; font-size: 12px; margin: 0; padding: 0; text-align: center; width: 540px;"&gt;
%TEXTFOOTER%
&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
<value>&lt;body style="margin: 0; padding: 0; text-align: center; width: 100%; font-family: Arial, sans-serif; font-size: 14px; color: #333;"&gt;
&lt;div style="background-color: #fff; width: 600px; margin: 0 auto; text-align: left;"&gt;
&lt;table cellspacing="0" cellpadding="0" style="font-family: Arial; font-size: 14px; color: #333; background: #fff; text-align: center; width: 600px; margin: 0; padding: 0; border: 0 none; border-collapse: collapse; empty-cells: show; border-spacing: 0;"&gt;
&lt;tbody&gt;
&lt;tr border="0" cellspacing="0" cellpadding="0"&gt;
&lt;td colspan="3" style="margin: 0; padding: 0; background-color: #fff; height: 65px; padding: 20px 0 0 30px;"&gt;
&lt;div style="text-align: left; height: 65px; width: 570px; margin: 0; padding: 0;"&gt;
&lt;a href="%SITEURL%" style="text-decoration: none; display: inline-block; width: 386px; height: 44px; margin: 0; padding: 0;" target="_blank"&gt;
&lt;img src="%LOGO%" style="border: 0px none; width: 386px; height: 44px; margin: 0; padding: 0;" alt="%LOGOTEXT%" /&gt;
&lt;/a&gt;
&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr border="0" cellspacing="0" cellpadding="0"&gt;
&lt;td colspan="3" style="margin: 0; padding: 15px 30px 15px; background-color: #f6f6f6; -moz-border-radius: 6px; -webkit-border-radius: 6px; border-radius: 6px;"&gt;
&lt;div style="font-family: Arial; font-size: 14px; color: #333; margin: 0; padding: 0; width: 540px; height: auto; overflow: hidden; word-wrap: break-word; vertical-align: top; text-align: left; border: 0 none;"&gt;
%CONTENT%
&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
%FOOTER%
&lt;/tbody&gt;
&lt;/table&gt;
&lt;table cellspacing="0" cellpadding="0" style="font-family: Arial; font-size: 14px; color: #333; text-align: center; vertical-align: top; width: 600px; margin: 0; padding: 0; border-collapse: collapse; border: 0; border-spacing: 0; "&gt;
&lt;tbody&gt;
%FOOTERSOCIAL%
&lt;tr border="0" cellspacing="0" cellpadding="0"&gt;
&lt;td colspan="6" style="width: 600px; vertical-align: top; margin: 0; padding: 20px 30px 15px;"&gt;
&lt;p style="color: #7b7b7b; font-family: Arial, Tahoma; font-size: 12px; margin: 0; padding: 0; text-align: center; width: 540px;"&gt;
%TEXTFOOTER%
&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;/body&gt;</value>
</data>
<data name="SocialNetworksFooterV10" xml:space="preserve">
<value>&lt;tr border="0" cellspacing="0" cellpadding="0"&gt;
&lt;td style="width: 40px; vertical-align: top; margin: 0; padding: 22px 5px 0 155px;"&gt;
&lt;a href="https://www.facebook.com/pages/OnlyOffice/833032526736775" style="width: 40px; height: 40px; display: block; margin: 0; padding: 0;" target="_blank"&gt;
&lt;img src="%IMAGEPATH%/social-fb-40.png" alt="Facebook" style="width: 40px; height: 40px;" /&gt;
&lt;/a&gt;
&lt;/td&gt;
&lt;td style="width: 40px; vertical-align: top; margin: 0; padding: 22px 5px 0 5px;"&gt;
&lt;a href="https://twitter.com/ONLY_OFFICE" style="width: 40px; height: 40px; display: block; margin: 0; padding: 0;" target="_blank"&gt;
&lt;img src="%IMAGEPATH%/social-tw-40.png" alt="Twitter" style="width: 40px; height: 40px;" /&gt;
&lt;/a&gt;
&lt;/td&gt;
&lt;td style="width: 40px; vertical-align: top; margin: 0; padding: 22px 5px 0 5px;"&gt;
&lt;a href="https://www.onlyoffice.com/blog" style="width: 40px; height: 40px; display: block; margin: 0; padding: 0;" target="_blank"&gt;
&lt;img src="%IMAGEPATH%/social-blog-40.png" alt="ONLYOFFICE" style="width: 40px; height: 40px;" /&gt;
&lt;/a&gt;
&lt;/td&gt;
&lt;td style="width: 40px; vertical-align: top; margin: 0; padding: 22px 5px 0 5px;"&gt;
&lt;a href="https://www.youtube.com/user/onlyofficeTV" style="width: 40px; height: 40px; display: block; margin: 0; padding: 0;" target="_blank"&gt;
&lt;img src="%IMAGEPATH%/social-youtube-40.png" alt="YouTube" style="width: 40px; height: 40x;" /&gt;
&lt;/a&gt;
&lt;/td&gt;
&lt;td style="width: 40px; vertical-align: top; margin: 0; padding: 22px 5px 0 5px;"&gt;
&lt;a href="https://vk.com/onlyoffice" style="width: 40px; height: 40px; display: block; margin: 0; padding: 0;" target="_blank"&gt;
&lt;img src="%IMAGEPATH%/social-vk-40.png" alt="VK" style="width: 40px; height: 40px;" /&gt;
&lt;/a&gt;
&lt;/td&gt;
&lt;td style="width: 40px; vertical-align: top; margin: 0; padding: 22px 155px 0 5px;"&gt;
&lt;a href="https://www.instagram.com/the_onlyoffice" style="width: 40px; height: 40px; display: block; margin: 0; padding: 0;" target="_blank"&gt;
&lt;img src="%IMAGEPATH%/social-inst-40.png" alt="Instagram" style="width: 40px; height: 40px;" /&gt;
&lt;/a&gt;
&lt;/td&gt;
<value>&lt;tr border="0" cellspacing="0" cellpadding="0"&gt;
&lt;td style="width: 40px; vertical-align: top; margin: 0; padding: 22px 5px 0 155px;"&gt;
&lt;a href="https://www.facebook.com/pages/OnlyOffice/833032526736775" style="width: 40px; height: 40px; display: block; margin: 0; padding: 0;" target="_blank"&gt;
&lt;img src="%IMAGEPATH%/social-fb-40.png" alt="Facebook" style="width: 40px; height: 40px;" /&gt;
&lt;/a&gt;
&lt;/td&gt;
&lt;td style="width: 40px; vertical-align: top; margin: 0; padding: 22px 5px 0 5px;"&gt;
&lt;a href="https://twitter.com/ONLY_OFFICE" style="width: 40px; height: 40px; display: block; margin: 0; padding: 0;" target="_blank"&gt;
&lt;img src="%IMAGEPATH%/social-tw-40.png" alt="Twitter" style="width: 40px; height: 40px;" /&gt;
&lt;/a&gt;
&lt;/td&gt;
&lt;td style="width: 40px; vertical-align: top; margin: 0; padding: 22px 5px 0 5px;"&gt;
&lt;a href="https://www.onlyoffice.com/blog" style="width: 40px; height: 40px; display: block; margin: 0; padding: 0;" target="_blank"&gt;
&lt;img src="%IMAGEPATH%/social-blog-40.png" alt="ONLYOFFICE" style="width: 40px; height: 40px;" /&gt;
&lt;/a&gt;
&lt;/td&gt;
&lt;td style="width: 40px; vertical-align: top; margin: 0; padding: 22px 5px 0 5px;"&gt;
&lt;a href="https://www.youtube.com/user/onlyofficeTV" style="width: 40px; height: 40px; display: block; margin: 0; padding: 0;" target="_blank"&gt;
&lt;img src="%IMAGEPATH%/social-youtube-40.png" alt="YouTube" style="width: 40px; height: 40x;" /&gt;
&lt;/a&gt;
&lt;/td&gt;
&lt;td style="width: 40px; vertical-align: top; margin: 0; padding: 22px 5px 0 5px;"&gt;
&lt;a href="https://vk.com/onlyoffice" style="width: 40px; height: 40px; display: block; margin: 0; padding: 0;" target="_blank"&gt;
&lt;img src="%IMAGEPATH%/social-vk-40.png" alt="VK" style="width: 40px; height: 40px;" /&gt;
&lt;/a&gt;
&lt;/td&gt;
&lt;td style="width: 40px; vertical-align: top; margin: 0; padding: 22px 155px 0 5px;"&gt;
&lt;a href="https://www.instagram.com/the_onlyoffice" style="width: 40px; height: 40px; display: block; margin: 0; padding: 0;" target="_blank"&gt;
&lt;img src="%IMAGEPATH%/social-inst-40.png" alt="Instagram" style="width: 40px; height: 40px;" /&gt;
&lt;/a&gt;
&lt;/td&gt;
&lt;/tr&gt;</value>
</data>
<data name="TextForFooterUnsubsribeDocSpace" xml:space="preserve">
<value>Bu e-poçt avtomatik olaraq yaradılır və ona cavab vermək lazım deyil. &lt;br /&gt;Siz &lt;a href="{0}" target="_blank"&gt; DocSpace&lt;/a&gt;-nin qeydiyyatdan keçmiş istifadəçisi olduğunuz üçün bu e-poçtu alırsınız.
&lt;br /&gt; Bu DocSpace e-poçtların artıq sizə göndərilməsini istəmirsinizsə, aşağıdakı linkə klikləyin: &lt;a href="{1}" target="_blank"&gt;Abunəlikdən çıxın&lt;/a&gt;
&lt;br /&gt;</value>
</data>
</root>

View File

@ -59,103 +59,142 @@
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=6.0.2.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<data name="FooterCommonV10" xml:space="preserve">
<value>&lt;tr border="0" cellspacing="0" cellpadding="0"&gt;&lt;td colspan="3" style="height: 10px; line-height: 10px; background: #fff; padding: 0; margin: 0;"&gt;&amp;nbsp;&lt;/td&gt;&lt;/tr&gt;
&lt;tr border="0" cellspacing="0" cellpadding="0"&gt;
&lt;td style="vertical-align: top; margin: 0; padding: 34px 0 0 0; width: 210px; height: 108px; background: #f6f6f6; -moz-border-radius-topleft: 6px; -webkit-border-top-left-radius: 6px; border-top-left-radius: 6px;"&gt;
&lt;img src="%IMAGEPATH%/tech-100.png" style="width: 100px; height: 100px;margin: 0 auto;"/&gt;
&lt;/td&gt;
&lt;td style="vertical-align: top; margin: 0; padding: 34px 0 0 0; width: 180px; height: 108px; background: #f6f6f6;"&gt;
&lt;img src="%IMAGEPATH%/mailus-100.png" style="width: 100px; height: 100px;margin: 0 auto;"/&gt;
&lt;/td&gt;
&lt;td style="vertical-align: top; margin: 0; padding: 34px 0 0 0; width: 210px; height: 108px; background: #f6f6f6; -moz-border-radius-topright: 6px; -webkit-border-top-right-radius: 6px; border-top-right-radius: 6px;"&gt;
&lt;img src="%IMAGEPATH%/demo-100.png" style="width: 100px; height: 100px;margin: 0 auto;"/&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr border="0" cellspacing="0" cellpadding="0"&gt;
&lt;td style="vertical-align: top; margin: 0; padding: 0; width: 210px; height: 16px; background: #f6f6f6;"&gt;Нуждаете се от техническа помощ?&lt;/td&gt;
&lt;td style="vertical-align: top; margin: 0; padding: 0; width: 180px; height: 16px; background: #f6f6f6;"&gt;Търговски въпроси&lt;/td&gt;
&lt;td style="vertical-align: top; margin: 0; padding: 0; width: 210px; height: 16px; background: #f6f6f6;"&gt;Демо за поръчка&lt;/td&gt;
&lt;/tr&gt;
&lt;tr border="0" cellspacing="0" cellpadding="0"&gt;
&lt;td style="vertical-align: top; margin: 0; padding: 0 0 30px; width: 210px; background: #f6f6f6;-moz-border-radius-bottomleft: 6px; -webkit-border-bottom-left-radius: 6px; border-bottom-left-radius: 6px;"&gt;
&lt;a href="%SUPPORTURL%" target="_blank" style="color: #333;"&gt;Изпрати своя въпрос&lt;/a&gt;
&lt;/td&gt;
&lt;td style="vertical-align: top; margin: 0; padding: 0 0 30px; width: 180px; background: #f6f6f6;"&gt;
&lt;a href="mailto:%SALESEMAIL%" style="color: #333;"&gt;Пишете ни&lt;/a&gt;
&lt;/td&gt;
&lt;td style="vertical-align: top; margin: 0; padding: 0 0 30px; width: 210px; background: #f6f6f6;-moz-border-radius-bottomright: 6px; -webkit-border-bottom-right-radius: 6px; border-bottom-right-radius: 6px;"&gt;
&lt;a href="%DEMOURL%" target="_blank" style="color: #333;"&gt;Изпращане на заявка&lt;/a&gt;
&lt;/td&gt;
<value>&lt;tr border="0" cellspacing="0" cellpadding="0"&gt;&lt;td colspan="3" style="height: 10px; line-height: 10px; background: #fff; padding: 0; margin: 0;"&gt;&amp;nbsp;&lt;/td&gt;&lt;/tr&gt;
&lt;tr border="0" cellspacing="0" cellpadding="0"&gt;
&lt;td style="vertical-align: top; margin: 0; padding: 34px 0 0 0; width: 210px; height: 108px; background: #f6f6f6; -moz-border-radius-topleft: 6px; -webkit-border-top-left-radius: 6px; border-top-left-radius: 6px;"&gt;
&lt;img src="%IMAGEPATH%/tech-100.png" style="width: 100px; height: 100px;margin: 0 auto;"/&gt;
&lt;/td&gt;
&lt;td style="vertical-align: top; margin: 0; padding: 34px 0 0 0; width: 180px; height: 108px; background: #f6f6f6;"&gt;
&lt;img src="%IMAGEPATH%/mailus-100.png" style="width: 100px; height: 100px;margin: 0 auto;"/&gt;
&lt;/td&gt;
&lt;td style="vertical-align: top; margin: 0; padding: 34px 0 0 0; width: 210px; height: 108px; background: #f6f6f6; -moz-border-radius-topright: 6px; -webkit-border-top-right-radius: 6px; border-top-right-radius: 6px;"&gt;
&lt;img src="%IMAGEPATH%/demo-100.png" style="width: 100px; height: 100px;margin: 0 auto;"/&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr border="0" cellspacing="0" cellpadding="0"&gt;
&lt;td style="vertical-align: top; margin: 0; padding: 0; width: 210px; height: 16px; background: #f6f6f6;"&gt;Нуждаете се от техническа помощ?&lt;/td&gt;
&lt;td style="vertical-align: top; margin: 0; padding: 0; width: 180px; height: 16px; background: #f6f6f6;"&gt;Търговски въпроси&lt;/td&gt;
&lt;td style="vertical-align: top; margin: 0; padding: 0; width: 210px; height: 16px; background: #f6f6f6;"&gt;Демо за поръчка&lt;/td&gt;
&lt;/tr&gt;
&lt;tr border="0" cellspacing="0" cellpadding="0"&gt;
&lt;td style="vertical-align: top; margin: 0; padding: 0 0 30px; width: 210px; background: #f6f6f6;-moz-border-radius-bottomleft: 6px; -webkit-border-bottom-left-radius: 6px; border-bottom-left-radius: 6px;"&gt;
&lt;a href="%SUPPORTURL%" target="_blank" style="color: #333;"&gt;Изпрати своя въпрос&lt;/a&gt;
&lt;/td&gt;
&lt;td style="vertical-align: top; margin: 0; padding: 0 0 30px; width: 180px; background: #f6f6f6;"&gt;
&lt;a href="mailto:%SALESEMAIL%" style="color: #333;"&gt;Пишете ни&lt;/a&gt;
&lt;/td&gt;
&lt;td style="vertical-align: top; margin: 0; padding: 0 0 30px; width: 210px; background: #f6f6f6;-moz-border-radius-bottomright: 6px; -webkit-border-bottom-right-radius: 6px; border-bottom-right-radius: 6px;"&gt;
&lt;a href="%DEMOURL%" target="_blank" style="color: #333;"&gt;Изпращане на заявка&lt;/a&gt;
&lt;/td&gt;
&lt;/tr&gt;</value>
</data>
<data name="FooterOpensourceV10" xml:space="preserve">
<value>&lt;tr border="0" cellspacing="0" cellpadding="0"&gt;&lt;td colspan="3" style="height: 10px; line-height: 10px; background: #fff; padding: 0; margin: 0;"&gt;&amp;nbsp;&lt;/td&gt;&lt;/tr&gt;
&lt;tr border="0" cellspacing="0" cellpadding="0"&gt;
&lt;td style="vertical-align: top; margin: 0; padding: 34px 0 0 0; width: 210px; height: 108px; background: #f6f6f6; -moz-border-radius-topleft: 6px; -webkit-border-top-left-radius: 6px; border-top-left-radius: 6px;"&gt;
&lt;img src="%IMAGEPATH%/tech-100.png" style="width: 100px; height: 100px;margin: 0 auto;"/&gt;
&lt;/td&gt;
&lt;td style="vertical-align: top; margin: 0; padding: 34px 0 0 0; width: 180px; height: 108px; background: #f6f6f6;"&gt;
&lt;img src="%IMAGEPATH%/mailus-100.png" style="width: 100px; height: 100px;margin: 0 auto;"/&gt;
&lt;/td&gt;
&lt;td style="vertical-align: top; margin: 0; padding: 34px 0 0 0; width: 210px; height: 108px; background: #f6f6f6; -moz-border-radius-topright: 6px; -webkit-border-top-right-radius: 6px; border-top-right-radius: 6px;"&gt;
&lt;img src="%IMAGEPATH%/demo-100.png" style="width: 100px; height: 100px;margin: 0 auto;"/&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr border="0" cellspacing="0" cellpadding="0"&gt;
&lt;td style="vertical-align: top; margin: 0; padding: 0; width: 210px; height: 16px; background: #f6f6f6;"&gt;Нуждаете се от техническа помощ?&lt;/td&gt;
&lt;td style="vertical-align: top; margin: 0; padding: 0; width: 180px; height: 16px; background: #f6f6f6;"&gt;Търговски въпроси&lt;/td&gt;
&lt;td style="vertical-align: top; margin: 0; padding: 0; width: 210px; height: 16px; background: #f6f6f6;"&gt;Демо за поръчка&lt;/td&gt;
&lt;/tr&gt;
&lt;tr border="0" cellspacing="0" cellpadding="0"&gt;
&lt;td style="vertical-align: top; margin: 0; padding: 0 0 30px; width: 210px; background: #f6f6f6;-moz-border-radius-bottomleft: 6px; -webkit-border-bottom-left-radius: 6px; border-bottom-left-radius: 6px;"&gt;
&lt;a href="http://dev.onlyoffice.org/" target="_blank" style="color: #333;"&gt;Изпрати своя въпрос&lt;/a&gt;
&lt;/td&gt;
&lt;td style="vertical-align: top; margin: 0; padding: 0 0 30px; width: 180px; background: #f6f6f6;"&gt;
&lt;a href="mailto:sales@onlyoffice.com" style="color: #333;"&gt;Пишете ни&lt;/a&gt;
&lt;/td&gt;
&lt;td style="vertical-align: top; margin: 0; padding: 0 0 30px; width: 210px; background: #f6f6f6;-moz-border-radius-bottomright: 6px; -webkit-border-bottom-right-radius: 6px; border-bottom-right-radius: 6px;"&gt;
&lt;a href="http://www.onlyoffice.com/demo-order.aspx" target="_blank" style="color: #333;"&gt;Изпращане на заявка&lt;/a&gt;
&lt;/td&gt;
<value>&lt;tr border="0" cellspacing="0" cellpadding="0"&gt;&lt;td colspan="3" style="height: 10px; line-height: 10px; background: #fff; padding: 0; margin: 0;"&gt;&amp;nbsp;&lt;/td&gt;&lt;/tr&gt;
&lt;tr border="0" cellspacing="0" cellpadding="0"&gt;
&lt;td style="vertical-align: top; margin: 0; padding: 34px 0 0 0; width: 210px; height: 108px; background: #f6f6f6; -moz-border-radius-topleft: 6px; -webkit-border-top-left-radius: 6px; border-top-left-radius: 6px;"&gt;
&lt;img src="%IMAGEPATH%/tech-100.png" style="width: 100px; height: 100px;margin: 0 auto;"/&gt;
&lt;/td&gt;
&lt;td style="vertical-align: top; margin: 0; padding: 34px 0 0 0; width: 180px; height: 108px; background: #f6f6f6;"&gt;
&lt;img src="%IMAGEPATH%/mailus-100.png" style="width: 100px; height: 100px;margin: 0 auto;"/&gt;
&lt;/td&gt;
&lt;td style="vertical-align: top; margin: 0; padding: 34px 0 0 0; width: 210px; height: 108px; background: #f6f6f6; -moz-border-radius-topright: 6px; -webkit-border-top-right-radius: 6px; border-top-right-radius: 6px;"&gt;
&lt;img src="%IMAGEPATH%/demo-100.png" style="width: 100px; height: 100px;margin: 0 auto;"/&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr border="0" cellspacing="0" cellpadding="0"&gt;
&lt;td style="vertical-align: top; margin: 0; padding: 0; width: 210px; height: 16px; background: #f6f6f6;"&gt;Нуждаете се от техническа помощ?&lt;/td&gt;
&lt;td style="vertical-align: top; margin: 0; padding: 0; width: 180px; height: 16px; background: #f6f6f6;"&gt;Търговски въпроси&lt;/td&gt;
&lt;td style="vertical-align: top; margin: 0; padding: 0; width: 210px; height: 16px; background: #f6f6f6;"&gt;Демо за поръчка&lt;/td&gt;
&lt;/tr&gt;
&lt;tr border="0" cellspacing="0" cellpadding="0"&gt;
&lt;td style="vertical-align: top; margin: 0; padding: 0 0 30px; width: 210px; background: #f6f6f6;-moz-border-radius-bottomleft: 6px; -webkit-border-bottom-left-radius: 6px; border-bottom-left-radius: 6px;"&gt;
&lt;a href="http://dev.onlyoffice.org/" target="_blank" style="color: #333;"&gt;Изпрати своя въпрос&lt;/a&gt;
&lt;/td&gt;
&lt;td style="vertical-align: top; margin: 0; padding: 0 0 30px; width: 180px; background: #f6f6f6;"&gt;
&lt;a href="mailto:sales@onlyoffice.com" style="color: #333;"&gt;Пишете ни&lt;/a&gt;
&lt;/td&gt;
&lt;td style="vertical-align: top; margin: 0; padding: 0 0 30px; width: 210px; background: #f6f6f6;-moz-border-radius-bottomright: 6px; -webkit-border-bottom-right-radius: 6px; border-bottom-right-radius: 6px;"&gt;
&lt;a href="http://www.onlyoffice.com/demo-order.aspx" target="_blank" style="color: #333;"&gt;Изпращане на заявка&lt;/a&gt;
&lt;/td&gt;
&lt;/tr&gt;</value>
</data>
<data name="HtmlMaster" xml:space="preserve">
<value>&lt;body style="margin: 0; padding: 0; text-align: center; width: 100%; font-family: Arial, sans-serif; font-size: 14px; color: #333;"&gt;
&lt;div style="background-color: #fff; width: 600px; margin: 0 auto; text-align: left;"&gt;
&lt;table cellspacing="0" cellpadding="0" style="font-family: Arial; font-size: 14px; color: #333; background: #fff; text-align: center; width: 600px; margin: 0; padding: 0; border: 0 none; border-collapse: collapse; empty-cells: show; border-spacing: 0;"&gt;
&lt;tbody&gt;
&lt;tr border="0" cellspacing="0" cellpadding="0"&gt;
&lt;td colspan="3" style="margin: 0; padding: 0; background-color: #fff; height: 65px; padding: 20px 0 0 30px;"&gt;
&lt;div style="text-align: left; height: 65px; width: 570px; margin: 0; padding: 0;"&gt;
&lt;a href="%SITEURL%" style="text-decoration: none; display: inline-block; width: 386px; height: 44px; margin: 0; padding: 0;" target="_blank"&gt;
&lt;img src="%LOGO%" style="border: 0px none; width: 386px; height: 44px; margin: 0; padding: 0;" alt="%LOGOTEXT%"/&gt;
&lt;/a&gt;
&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr border="0" cellspacing="0" cellpadding="0"&gt;
&lt;td colspan="3" style="margin: 0; padding: 15px 30px 15px; background-color: #f6f6f6; -moz-border-radius: 6px; -webkit-border-radius: 6px; border-radius: 6px;"&gt;
&lt;div style="font-family: Arial; font-size: 14px; color: #333; margin: 0; padding: 0; width: 540px; height: auto; overflow: hidden; word-wrap: break-word; vertical-align: top; text-align: left; border: 0 none;"&gt;
%CONTENT%
&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
%FOOTER%
&lt;/tbody&gt;
&lt;/table&gt;
&lt;table cellspacing="0" cellpadding="0" style="font-family: Arial; font-size: 14px; color: #333; text-align: center; vertical-align: top; width: 600px; margin: 0; padding: 0; border-collapse: collapse; border: 0; border-spacing: 0; "&gt;
&lt;tbody&gt;
%FOOTERSOCIAL%
&lt;tr border="0" cellspacing="0" cellpadding="0"&gt;
&lt;td colspan="6" style="width: 600px; vertical-align: top; margin: 0; padding: 20px 30px 15px;"&gt;
&lt;p style="color: #7b7b7b; font-family: Arial, Tahoma; font-size: 12px; margin: 0; padding: 0; text-align: center; width: 540px;"&gt;
%TEXTFOOTER%
&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
<value>&lt;body style="margin: 0; padding: 0; text-align: center; width: 100%; font-family: Arial, sans-serif; font-size: 14px; color: #333;"&gt;
&lt;div style="background-color: #fff; width: 600px; margin: 0 auto; text-align: left;"&gt;
&lt;table cellspacing="0" cellpadding="0" style="font-family: Arial; font-size: 14px; color: #333; background: #fff; text-align: center; width: 600px; margin: 0; padding: 0; border: 0 none; border-collapse: collapse; empty-cells: show; border-spacing: 0;"&gt;
&lt;tbody&gt;
&lt;tr border="0" cellspacing="0" cellpadding="0"&gt;
&lt;td colspan="3" style="margin: 0; padding: 0; background-color: #fff; height: 65px; padding: 20px 0 0 30px;"&gt;
&lt;div style="text-align: left; height: 65px; width: 570px; margin: 0; padding: 0;"&gt;
&lt;a href="%SITEURL%" style="text-decoration: none; display: inline-block; width: 386px; height: 44px; margin: 0; padding: 0;" target="_blank"&gt;
&lt;img src="%LOGO%" style="border: 0px none; width: 386px; height: 44px; margin: 0; padding: 0;" alt="%LOGOTEXT%"/&gt;
&lt;/a&gt;
&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr border="0" cellspacing="0" cellpadding="0"&gt;
&lt;td colspan="3" style="margin: 0; padding: 15px 30px 15px; background-color: #f6f6f6; -moz-border-radius: 6px; -webkit-border-radius: 6px; border-radius: 6px;"&gt;
&lt;div style="font-family: Arial; font-size: 14px; color: #333; margin: 0; padding: 0; width: 540px; height: auto; overflow: hidden; word-wrap: break-word; vertical-align: top; text-align: left; border: 0 none;"&gt;
%CONTENT%
&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
%FOOTER%
&lt;/tbody&gt;
&lt;/table&gt;
&lt;table cellspacing="0" cellpadding="0" style="font-family: Arial; font-size: 14px; color: #333; text-align: center; vertical-align: top; width: 600px; margin: 0; padding: 0; border-collapse: collapse; border: 0; border-spacing: 0; "&gt;
&lt;tbody&gt;
%FOOTERSOCIAL%
&lt;tr border="0" cellspacing="0" cellpadding="0"&gt;
&lt;td colspan="6" style="width: 600px; vertical-align: top; margin: 0; padding: 20px 30px 15px;"&gt;
&lt;p style="color: #7b7b7b; font-family: Arial, Tahoma; font-size: 12px; margin: 0; padding: 0; text-align: center; width: 540px;"&gt;
%TEXTFOOTER%
&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;/body&gt;</value>
</data>
<data name="SocialNetworksFooterV10" xml:space="preserve">
<value>&lt;tr border="0" cellspacing="0" cellpadding="0"&gt;
&lt;td style="width: 40px; vertical-align: top; margin: 0; padding: 22px 5px 0 155px;"&gt;
&lt;a href="https://www.facebook.com/pages/OnlyOffice/833032526736775" style="width: 40px; height: 40px; display: block; margin: 0; padding: 0;" target="_blank"&gt;
&lt;img src="%IMAGEPATH%/social-fb-40.png" alt="Facebook" style="width: 40px; height: 40px;" /&gt;
&lt;/a&gt;
&lt;/td&gt;
&lt;td style="width: 40px; vertical-align: top; margin: 0; padding: 22px 5px 0 5px;"&gt;
&lt;a href="https://twitter.com/ONLY_OFFICE" style="width: 40px; height: 40px; display: block; margin: 0; padding: 0;" target="_blank"&gt;
&lt;img src="%IMAGEPATH%/social-tw-40.png" alt="Twitter" style="width: 40px; height: 40px;" /&gt;
&lt;/a&gt;
&lt;/td&gt;
&lt;td style="width: 40px; vertical-align: top; margin: 0; padding: 22px 5px 0 5px;"&gt;
&lt;a href="https://www.onlyoffice.com/blog" style="width: 40px; height: 40px; display: block; margin: 0; padding: 0;" target="_blank"&gt;
&lt;img src="%IMAGEPATH%/social-blog-40.png" alt="ONLYOFFICE" style="width: 40px; height: 40px;" /&gt;
&lt;/a&gt;
&lt;/td&gt;
&lt;td style="width: 40px; vertical-align: top; margin: 0; padding: 22px 5px 0 5px;"&gt;
&lt;a href="https://www.youtube.com/user/onlyofficeTV" style="width: 40px; height: 40px; display: block; margin: 0; padding: 0;" target="_blank"&gt;
&lt;img src="%IMAGEPATH%/social-youtube-40.png" alt="YouTube" style="width: 40px; height: 40x;" /&gt;
&lt;/a&gt;
&lt;/td&gt;
&lt;td style="width: 40px; vertical-align: top; margin: 0; padding: 22px 5px 0 5px;"&gt;
&lt;a href="https://vk.com/onlyoffice" style="width: 40px; height: 40px; display: block; margin: 0; padding: 0;" target="_blank"&gt;
&lt;img src="%IMAGEPATH%/social-vk-40.png" alt="VK" style="width: 40px; height: 40px;" /&gt;
&lt;/a&gt;
&lt;/td&gt;
&lt;td style="width: 40px; vertical-align: top; margin: 0; padding: 22px 155px 0 5px;"&gt;
&lt;a href="https://www.instagram.com/the_onlyoffice" style="width: 40px; height: 40px; display: block; margin: 0; padding: 0;" target="_blank"&gt;
&lt;img src="%IMAGEPATH%/social-inst-40.png" alt="Instagram" style="width: 40px; height: 40px;" /&gt;
&lt;/a&gt;
&lt;/td&gt;
&lt;/tr&gt;</value>
</data>
<data name="TextForFooterUnsubsribeDocSpace" xml:space="preserve">
<value>Този имейл се генерира автоматично и не е необходимо да му отговаряте.&lt;br /&gt;Получихте този имейл, защото сте регистриран потребител на &lt;a href="{0}" target="_blank"&gt; DocSpace&lt;/a&gt;.
&lt;br /&gt; Кликнете тук, за да се отпишете от имейлите с известия на DocSpace : &lt;a href="{1}" target="_blank"&gt;Отписване&lt;/a&gt;
&lt;br /&gt;</value>
</data>
</root>

View File

@ -59,73 +59,137 @@
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=6.0.2.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<data name="FooterCommonV10" xml:space="preserve">
<value>&lt;tr border="0" cellspacing="0" cellpadding="0"&gt;&lt;td colspan="3" style="height: 10px; line-height: 10px; background: #fff; padding: 0; margin: 0;"&gt; &lt;/td&gt;&lt;/tr&gt;
&lt;tr border="0" cellspacing="0" cellpadding="0"&gt;
&lt;td style="vertical-align: top; margin: 0; padding: 34px 0 0 0; width: 210px; height: 108px; background: #f6f6f6; -moz-border-radius-topleft: 6px; -webkit-border-top-left-radius: 6px; border-top-left-radius: 6px;"&gt;
&lt;img src="%IMAGEPATH%/tech-100.png" style="width: 100px; height: 100px;margin: 0 auto;" /&gt;
&lt;/td&gt;
&lt;td style="vertical-align: top; margin: 0; padding: 34px 0 0 0; width: 180px; height: 108px; background: #f6f6f6;"&gt;
&lt;img src="%IMAGEPATH%/mailus-100.png" style="width: 100px; height: 100px;margin: 0 auto;" /&gt;
&lt;/td&gt;
&lt;td style="vertical-align: top; margin: 0; padding: 34px 0 0 0; width: 210px; height: 108px; background: #f6f6f6; -moz-border-radius-topright: 6px; -webkit-border-top-right-radius: 6px; border-top-right-radius: 6px;"&gt;
&lt;img src="%IMAGEPATH%/demo-100.png" style="width: 100px; height: 100px;margin: 0 auto;" /&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr border="0" cellspacing="0" cellpadding="0"&gt;
&lt;td style="vertical-align: top; margin: 0; padding: 0; width: 210px; height: 16px; background: #f6f6f6;"&gt;Potřebujete technickou pomoc?&lt;/td&gt;
&lt;td style="vertical-align: top; margin: 0; padding: 0; width: 180px; height: 16px; background: #f6f6f6;"&gt;Prodejní otázky&lt;/td&gt;
&lt;td style="vertical-align: top; margin: 0; padding: 0; width: 210px; height: 16px; background: #f6f6f6;"&gt;Objednat demo&lt;/td&gt;
&lt;/tr&gt;
&lt;tr border="0" cellspacing="0" cellpadding="0"&gt;
&lt;td style="vertical-align: top; margin: 0; padding: 0 0 30px; width: 210px; background: #f6f6f6;-moz-border-radius-bottomleft: 6px; -webkit-border-bottom-left-radius: 6px; border-bottom-left-radius: 6px;"&gt;
&lt;a href="%SUPPORTURL%" target="_blank" style="color: #333;"&gt;Pošlete nám Vaše dotazy&lt;/a&gt;
&lt;/td&gt;
&lt;td style="vertical-align: top; margin: 0; padding: 0 0 30px; width: 180px; background: #f6f6f6;"&gt;
&lt;a href="mailto:%SALESEMAIL%" style="color: #333;"&gt;Napište nám email&lt;/a&gt;
&lt;/td&gt;
&lt;td style="vertical-align: top; margin: 0; padding: 0 0 30px; width: 210px; background: #f6f6f6;-moz-border-radius-bottomright: 6px; -webkit-border-bottom-right-radius: 6px; border-bottom-right-radius: 6px;"&gt;
&lt;a href="%DEMOURL%" target="_blank" style="color: #333;"&gt;Poslat žádost&lt;/a&gt;
&lt;/td&gt;
<value>&lt;tr border="0" cellspacing="0" cellpadding="0"&gt;&lt;td colspan="3" style="height: 10px; line-height: 10px; background: #fff; padding: 0; margin: 0;"&gt; &lt;/td&gt;&lt;/tr&gt;
&lt;tr border="0" cellspacing="0" cellpadding="0"&gt;
&lt;td style="vertical-align: top; margin: 0; padding: 34px 0 0 0; width: 210px; height: 108px; background: #f6f6f6; -moz-border-radius-topleft: 6px; -webkit-border-top-left-radius: 6px; border-top-left-radius: 6px;"&gt;
&lt;img src="%IMAGEPATH%/tech-100.png" style="width: 100px; height: 100px;margin: 0 auto;" /&gt;
&lt;/td&gt;
&lt;td style="vertical-align: top; margin: 0; padding: 34px 0 0 0; width: 180px; height: 108px; background: #f6f6f6;"&gt;
&lt;img src="%IMAGEPATH%/mailus-100.png" style="width: 100px; height: 100px;margin: 0 auto;" /&gt;
&lt;/td&gt;
&lt;td style="vertical-align: top; margin: 0; padding: 34px 0 0 0; width: 210px; height: 108px; background: #f6f6f6; -moz-border-radius-topright: 6px; -webkit-border-top-right-radius: 6px; border-top-right-radius: 6px;"&gt;
&lt;img src="%IMAGEPATH%/demo-100.png" style="width: 100px; height: 100px;margin: 0 auto;" /&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr border="0" cellspacing="0" cellpadding="0"&gt;
&lt;td style="vertical-align: top; margin: 0; padding: 0; width: 210px; height: 16px; background: #f6f6f6;"&gt;Potřebujete technickou pomoc?&lt;/td&gt;
&lt;td style="vertical-align: top; margin: 0; padding: 0; width: 180px; height: 16px; background: #f6f6f6;"&gt;Prodejní otázky&lt;/td&gt;
&lt;td style="vertical-align: top; margin: 0; padding: 0; width: 210px; height: 16px; background: #f6f6f6;"&gt;Objednat demo&lt;/td&gt;
&lt;/tr&gt;
&lt;tr border="0" cellspacing="0" cellpadding="0"&gt;
&lt;td style="vertical-align: top; margin: 0; padding: 0 0 30px; width: 210px; background: #f6f6f6;-moz-border-radius-bottomleft: 6px; -webkit-border-bottom-left-radius: 6px; border-bottom-left-radius: 6px;"&gt;
&lt;a href="%SUPPORTURL%" target="_blank" style="color: #333;"&gt;Pošlete nám Vaše dotazy&lt;/a&gt;
&lt;/td&gt;
&lt;td style="vertical-align: top; margin: 0; padding: 0 0 30px; width: 180px; background: #f6f6f6;"&gt;
&lt;a href="mailto:%SALESEMAIL%" style="color: #333;"&gt;Napište nám email&lt;/a&gt;
&lt;/td&gt;
&lt;td style="vertical-align: top; margin: 0; padding: 0 0 30px; width: 210px; background: #f6f6f6;-moz-border-radius-bottomright: 6px; -webkit-border-bottom-right-radius: 6px; border-bottom-right-radius: 6px;"&gt;
&lt;a href="%DEMOURL%" target="_blank" style="color: #333;"&gt;Poslat žádost&lt;/a&gt;
&lt;/td&gt;
&lt;/tr&gt;</value>
</data>
<data name="HtmlMaster" xml:space="preserve">
<value>&lt;body style="margin: 0; padding: 0; text-align: center; width: 100%; font-family: Arial, sans-serif; font-size: 14px; color: #333;"&gt;
&lt;div style="background-color: #fff; width: 600px; margin: 0 auto; text-align: left;"&gt;
&lt;table cellspacing="0" cellpadding="0" style="font-family: Arial; font-size: 14px; color: #333; background: #fff; text-align: center; width: 600px; margin: 0; padding: 0; border: 0 none; border-collapse: collapse; empty-cells: show; border-spacing: 0;"&gt;
&lt;tbody&gt;
&lt;tr border="0" cellspacing="0" cellpadding="0"&gt;
&lt;td colspan="3" style="margin: 0; padding: 0; background-color: #fff; height: 65px; padding: 20px 0 0 30px;"&gt;
&lt;div style="text-align: left; height: 65px; width: 570px; margin: 0; padding: 0;"&gt;
&lt;a href="%SITEURL%" style="text-decoration: none; display: inline-block; width: 386px; height: 44px; margin: 0; padding: 0;" target="_blank"&gt;
&lt;img src="%LOGO%" style="border: 0px none; width: 386px; height: 44px; margin: 0; padding: 0;" alt="%LOGOTEXT%" /&gt;
&lt;/a&gt;
&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr border="0" cellspacing="0" cellpadding="0"&gt;
&lt;td colspan="3" style="margin: 0; padding: 15px 30px 15px; background-color: #f6f6f6; -moz-border-radius: 6px; -webkit-border-radius: 6px; border-radius: 6px;"&gt;
&lt;div style="font-family: Arial; font-size: 14px; color: #333; margin: 0; padding: 0; width: 540px; height: auto; overflow: hidden; word-wrap: break-word; vertical-align: top; text-align: left; border: 0 none;"&gt;
%CONTENT%
&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
%FOOTER%
&lt;/tbody&gt;
&lt;/table&gt;
&lt;table cellspacing="0" cellpadding="0" style="font-family: Arial; font-size: 14px; color: #333; text-align: center; vertical-align: top; width: 600px; margin: 0; padding: 0; border-collapse: collapse; border: 0; border-spacing: 0; "&gt;
&lt;tbody&gt;
%FOOTERSOCIAL%
&lt;tr border="0" cellspacing="0" cellpadding="0"&gt;
&lt;td colspan="6" style="width: 600px; vertical-align: top; margin: 0; padding: 20px 30px 15px;"&gt;
&lt;p style="color: #7b7b7b; font-family: Arial, Tahoma; font-size: 12px; margin: 0; padding: 0; text-align: center; width: 540px;"&gt;
%TEXTFOOTER%
&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
<value>&lt;body style="margin: 0; padding: 0; text-align: center; width: 100%; font-family: Arial, sans-serif; font-size: 14px; color: #333;"&gt;
&lt;div style="background-color: #fff; width: 600px; margin: 0 auto; text-align: left;"&gt;
&lt;table cellspacing="0" cellpadding="0" style="font-family: Arial; font-size: 14px; color: #333; background: #fff; text-align: center; width: 600px; margin: 0; padding: 0; border: 0 none; border-collapse: collapse; empty-cells: show; border-spacing: 0;"&gt;
&lt;tbody&gt;
&lt;tr border="0" cellspacing="0" cellpadding="0"&gt;
&lt;td colspan="3" style="margin: 0; padding: 0; background-color: #fff; height: 65px; padding: 20px 0 0 30px;"&gt;
&lt;div style="text-align: left; height: 65px; width: 570px; margin: 0; padding: 0;"&gt;
&lt;a href="%SITEURL%" style="text-decoration: none; display: inline-block; width: 386px; height: 44px; margin: 0; padding: 0;" target="_blank"&gt;
&lt;img src="%LOGO%" style="border: 0px none; width: 386px; height: 44px; margin: 0; padding: 0;" alt="%LOGOTEXT%" /&gt;
&lt;/a&gt;
&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr border="0" cellspacing="0" cellpadding="0"&gt;
&lt;td colspan="3" style="margin: 0; padding: 15px 30px 15px; background-color: #f6f6f6; -moz-border-radius: 6px; -webkit-border-radius: 6px; border-radius: 6px;"&gt;
&lt;div style="font-family: Arial; font-size: 14px; color: #333; margin: 0; padding: 0; width: 540px; height: auto; overflow: hidden; word-wrap: break-word; vertical-align: top; text-align: left; border: 0 none;"&gt;
%CONTENT%
&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
%FOOTER%
&lt;/tbody&gt;
&lt;/table&gt;
&lt;table cellspacing="0" cellpadding="0" style="font-family: Arial; font-size: 14px; color: #333; text-align: center; vertical-align: top; width: 600px; margin: 0; padding: 0; border-collapse: collapse; border: 0; border-spacing: 0; "&gt;
&lt;tbody&gt;
%FOOTERSOCIAL%
&lt;tr border="0" cellspacing="0" cellpadding="0"&gt;
&lt;td colspan="6" style="width: 600px; vertical-align: top; margin: 0; padding: 20px 30px 15px;"&gt;
&lt;p style="color: #7b7b7b; font-family: Arial, Tahoma; font-size: 12px; margin: 0; padding: 0; text-align: center; width: 540px;"&gt;
%TEXTFOOTER%
&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;/body&gt;</value>
</data>
<data name="SocialNetworksFooterV10" xml:space="preserve">
<value>&lt;tr border="0" cellspacing="0" cellpadding="0"&gt;
&lt;td style="width: 40px; vertical-align: top; margin: 0; padding: 22px 5px 0 155px;"&gt;
&lt;a href="https://www.facebook.com/pages/OnlyOffice/833032526736775" style="width: 40px; height: 40px; display: block; margin: 0; padding: 0;" target="_blank"&gt;
&lt;img src="%IMAGEPATH%/social-fb-40.png" alt="Facebook" style="width: 40px; height: 40px;" /&gt;
&lt;/a&gt;
&lt;/td&gt;
&lt;td style="width: 40px; vertical-align: top; margin: 0; padding: 22px 5px 0 5px;"&gt;
&lt;a href="https://twitter.com/ONLY_OFFICE" style="width: 40px; height: 40px; display: block; margin: 0; padding: 0;" target="_blank"&gt;
&lt;img src="%IMAGEPATH%/social-tw-40.png" alt="Twitter" style="width: 40px; height: 40px;" /&gt;
&lt;/a&gt;
&lt;/td&gt;
&lt;td style="width: 40px; vertical-align: top; margin: 0; padding: 22px 5px 0 5px;"&gt;
&lt;a href="https://www.onlyoffice.com/blog" style="width: 40px; height: 40px; display: block; margin: 0; padding: 0;" target="_blank"&gt;
&lt;img src="%IMAGEPATH%/social-blog-40.png" alt="ONLYOFFICE" style="width: 40px; height: 40px;" /&gt;
&lt;/a&gt;
&lt;/td&gt;
&lt;td style="width: 40px; vertical-align: top; margin: 0; padding: 22px 5px 0 5px;"&gt;
&lt;a href="https://www.youtube.com/user/onlyofficeTV" style="width: 40px; height: 40px; display: block; margin: 0; padding: 0;" target="_blank"&gt;
&lt;img src="%IMAGEPATH%/social-youtube-40.png" alt="YouTube" style="width: 40px; height: 40x;" /&gt;
&lt;/a&gt;
&lt;/td&gt;
&lt;td style="width: 40px; vertical-align: top; margin: 0; padding: 22px 5px 0 5px;"&gt;
&lt;a href="https://vk.com/onlyoffice" style="width: 40px; height: 40px; display: block; margin: 0; padding: 0;" target="_blank"&gt;
&lt;img src="%IMAGEPATH%/social-vk-40.png" alt="VK" style="width: 40px; height: 40px;" /&gt;
&lt;/a&gt;
&lt;/td&gt;
&lt;td style="width: 40px; vertical-align: top; margin: 0; padding: 22px 155px 0 5px;"&gt;
&lt;a href="https://www.instagram.com/the_onlyoffice" style="width: 40px; height: 40px; display: block; margin: 0; padding: 0;" target="_blank"&gt;
&lt;img src="%IMAGEPATH%/social-inst-40.png" alt="Instagram" style="width: 40px; height: 40px;" /&gt;
&lt;/a&gt;
&lt;/td&gt;
&lt;/tr&gt;</value>
</data>
<data name="FooterOpensourceV10" xml:space="preserve">
<value>&lt;tr border="0" cellspacing="0" cellpadding="0"&gt;&lt;td colspan="3" style="height: 10px; line-height: 10px; background: #fff; padding: 0; margin: 0;"&gt;&amp;nbsp;&lt;/td&gt;&lt;/tr&gt;
&lt;tr border="0" cellspacing="0" cellpadding="0"&gt;
&lt;td style="vertical-align: top; margin: 0; padding: 34px 0 0 0; width: 210px; height: 108px; background: #f6f6f6; -moz-border-radius-topleft: 6px; -webkit-border-top-left-radius: 6px; border-top-left-radius: 6px;"&gt;
&lt;img src="%IMAGEPATH%/tech-100.png" style="width: 100px; height: 100px;margin: 0 auto;" /&gt;
&lt;/td&gt;
&lt;td style="vertical-align: top; margin: 0; padding: 34px 0 0 0; width: 180px; height: 108px; background: #f6f6f6;"&gt;
&lt;img src="%IMAGEPATH%/mailus-100.png" style="width: 100px; height: 100px;margin: 0 auto;" /&gt;
&lt;/td&gt;
&lt;td style="vertical-align: top; margin: 0; padding: 34px 0 0 0; width: 210px; height: 108px; background: #f6f6f6; -moz-border-radius-topright: 6px; -webkit-border-top-right-radius: 6px; border-top-right-radius: 6px;"&gt;
&lt;img src="%IMAGEPATH%/demo-100.png" style="width: 100px; height: 100px;margin: 0 auto;" /&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr border="0" cellspacing="0" cellpadding="0"&gt;
&lt;td style="vertical-align: top; margin: 0; padding: 0; width: 210px; height: 16px; background: #f6f6f6;"&gt;Need tech help?&lt;/td&gt;
&lt;td style="vertical-align: top; margin: 0; padding: 0; width: 180px; height: 16px; background: #f6f6f6;"&gt;Sales Questions&lt;/td&gt;
&lt;td style="vertical-align: top; margin: 0; padding: 0; width: 210px; height: 16px; background: #f6f6f6;"&gt;Order Demo&lt;/td&gt;
&lt;/tr&gt;
&lt;tr border="0" cellspacing="0" cellpadding="0"&gt;
&lt;td style="vertical-align: top; margin: 0; padding: 0 0 30px; width: 210px; background: #f6f6f6;-moz-border-radius-bottomleft: 6px; -webkit-border-bottom-left-radius: 6px; border-bottom-left-radius: 6px;"&gt;
&lt;a href="http://dev.onlyoffice.org/" target="_blank" style="color: #333;"&gt;Ask the Community&lt;/a&gt;
&lt;/td&gt;
&lt;td style="vertical-align: top; margin: 0; padding: 0 0 30px; width: 180px; background: #f6f6f6;"&gt;
&lt;a href="mailto:sales@onlyoffice.com" style="color: #333;"&gt;Email us&lt;/a&gt;
&lt;/td&gt;
&lt;td style="vertical-align: top; margin: 0; padding: 0 0 30px; width: 210px; background: #f6f6f6;-moz-border-radius-bottomright: 6px; -webkit-border-bottom-right-radius: 6px; border-bottom-right-radius: 6px;"&gt;
&lt;a href="http://www.onlyoffice.com/demo-order.aspx" target="_blank" style="color: #333;"&gt;Send a request&lt;/a&gt;
&lt;/td&gt;
&lt;/tr&gt;</value>
</data>
</root>

View File

@ -59,33 +59,137 @@
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=6.0.2.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<data name="FooterCommonV10" xml:space="preserve">
<value>&lt;tr border="0" cellspacing="0" cellpadding="0"&gt;&lt;td colspan="3" style="height: 10px; line-height: 10px; background: #fff; padding: 0; margin: 0;"&gt; &lt;/td&gt;&lt;/tr&gt;
&lt;tr border="0" cellspacing="0" cellpadding="0"&gt;
&lt;td style="vertical-align: top; margin: 0; padding: 34px 0 0 0; width: 210px; height: 108px; background: #f6f6f6; -moz-border-radius-topleft: 6px; -webkit-border-top-left-radius: 6px; border-top-left-radius: 6px;"&gt;
&lt;img src="%IMAGEPATH%/tech-100.png" style="width: 100px; height: 100px;margin: 0 auto;" /&gt;
&lt;/td&gt;
&lt;td style="vertical-align: top; margin: 0; padding: 34px 0 0 0; width: 180px; height: 108px; background: #f6f6f6;"&gt;
&lt;img src="%IMAGEPATH%/mailus-100.png" style="width: 100px; height: 100px;margin: 0 auto;" /&gt;
&lt;/td&gt;
&lt;td style="vertical-align: top; margin: 0; padding: 34px 0 0 0; width: 210px; height: 108px; background: #f6f6f6; -moz-border-radius-topright: 6px; -webkit-border-top-right-radius: 6px; border-top-right-radius: 6px;"&gt;
&lt;img src="%IMAGEPATH%/demo-100.png" style="width: 100px; height: 100px;margin: 0 auto;" /&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr border="0" cellspacing="0" cellpadding="0"&gt;
&lt;td style="vertical-align: top; margin: 0; padding: 0; width: 210px; height: 16px; background: #f6f6f6;"&gt;Haluatko teknistä tukea?&lt;/td&gt;
&lt;td style="vertical-align: top; margin: 0; padding: 0; width: 180px; height: 16px; background: #f6f6f6;"&gt;Ostoon liittyvät kysymykset&lt;/td&gt;
&lt;td style="vertical-align: top; margin: 0; padding: 0; width: 210px; height: 16px; background: #f6f6f6;"&gt;Tilaa koejakso&lt;/td&gt;
&lt;/tr&gt;
&lt;tr border="0" cellspacing="0" cellpadding="0"&gt;
&lt;td style="vertical-align: top; margin: 0; padding: 0 0 30px; width: 210px; background: #f6f6f6;-moz-border-radius-bottomleft: 6px; -webkit-border-bottom-left-radius: 6px; border-bottom-left-radius: 6px;"&gt;
&lt;a href="%SUPPORTURL%" target="_blank" style="color: #333;"&gt;Lähetä kysymyksesi&lt;/a&gt;
&lt;/td&gt;
&lt;td style="vertical-align: top; margin: 0; padding: 0 0 30px; width: 180px; background: #f6f6f6;"&gt;
&lt;a href="mailto:%SALESEMAIL%" style="color: #333;"&gt;Lähetä meille sähköpostia&lt;/a&gt;
&lt;/td&gt;
&lt;td style="vertical-align: top; margin: 0; padding: 0 0 30px; width: 210px; background: #f6f6f6;-moz-border-radius-bottomright: 6px; -webkit-border-bottom-right-radius: 6px; border-bottom-right-radius: 6px;"&gt;
&lt;a href="%DEMOURL%" target="_blank" style="color: #333;"&gt;Lähetä pyyntö&lt;/a&gt;
&lt;/td&gt;
<value>&lt;tr border="0" cellspacing="0" cellpadding="0"&gt;&lt;td colspan="3" style="height: 10px; line-height: 10px; background: #fff; padding: 0; margin: 0;"&gt; &lt;/td&gt;&lt;/tr&gt;
&lt;tr border="0" cellspacing="0" cellpadding="0"&gt;
&lt;td style="vertical-align: top; margin: 0; padding: 34px 0 0 0; width: 210px; height: 108px; background: #f6f6f6; -moz-border-radius-topleft: 6px; -webkit-border-top-left-radius: 6px; border-top-left-radius: 6px;"&gt;
&lt;img src="%IMAGEPATH%/tech-100.png" style="width: 100px; height: 100px;margin: 0 auto;" /&gt;
&lt;/td&gt;
&lt;td style="vertical-align: top; margin: 0; padding: 34px 0 0 0; width: 180px; height: 108px; background: #f6f6f6;"&gt;
&lt;img src="%IMAGEPATH%/mailus-100.png" style="width: 100px; height: 100px;margin: 0 auto;" /&gt;
&lt;/td&gt;
&lt;td style="vertical-align: top; margin: 0; padding: 34px 0 0 0; width: 210px; height: 108px; background: #f6f6f6; -moz-border-radius-topright: 6px; -webkit-border-top-right-radius: 6px; border-top-right-radius: 6px;"&gt;
&lt;img src="%IMAGEPATH%/demo-100.png" style="width: 100px; height: 100px;margin: 0 auto;" /&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr border="0" cellspacing="0" cellpadding="0"&gt;
&lt;td style="vertical-align: top; margin: 0; padding: 0; width: 210px; height: 16px; background: #f6f6f6;"&gt;Haluatko teknistä tukea?&lt;/td&gt;
&lt;td style="vertical-align: top; margin: 0; padding: 0; width: 180px; height: 16px; background: #f6f6f6;"&gt;Ostoon liittyvät kysymykset&lt;/td&gt;
&lt;td style="vertical-align: top; margin: 0; padding: 0; width: 210px; height: 16px; background: #f6f6f6;"&gt;Tilaa koejakso&lt;/td&gt;
&lt;/tr&gt;
&lt;tr border="0" cellspacing="0" cellpadding="0"&gt;
&lt;td style="vertical-align: top; margin: 0; padding: 0 0 30px; width: 210px; background: #f6f6f6;-moz-border-radius-bottomleft: 6px; -webkit-border-bottom-left-radius: 6px; border-bottom-left-radius: 6px;"&gt;
&lt;a href="%SUPPORTURL%" target="_blank" style="color: #333;"&gt;Lähetä kysymyksesi&lt;/a&gt;
&lt;/td&gt;
&lt;td style="vertical-align: top; margin: 0; padding: 0 0 30px; width: 180px; background: #f6f6f6;"&gt;
&lt;a href="mailto:%SALESEMAIL%" style="color: #333;"&gt;Lähetä meille sähköpostia&lt;/a&gt;
&lt;/td&gt;
&lt;td style="vertical-align: top; margin: 0; padding: 0 0 30px; width: 210px; background: #f6f6f6;-moz-border-radius-bottomright: 6px; -webkit-border-bottom-right-radius: 6px; border-bottom-right-radius: 6px;"&gt;
&lt;a href="%DEMOURL%" target="_blank" style="color: #333;"&gt;Lähetä pyyntö&lt;/a&gt;
&lt;/td&gt;
&lt;/tr&gt;</value>
</data>
<data name="SocialNetworksFooterV10" xml:space="preserve">
<value>&lt;tr border="0" cellspacing="0" cellpadding="0"&gt;
&lt;td style="width: 40px; vertical-align: top; margin: 0; padding: 22px 5px 0 155px;"&gt;
&lt;a href="https://www.facebook.com/pages/OnlyOffice/833032526736775" style="width: 40px; height: 40px; display: block; margin: 0; padding: 0;" target="_blank"&gt;
&lt;img src="%IMAGEPATH%/social-fb-40.png" alt="Facebook" style="width: 40px; height: 40px;" /&gt;
&lt;/a&gt;
&lt;/td&gt;
&lt;td style="width: 40px; vertical-align: top; margin: 0; padding: 22px 5px 0 5px;"&gt;
&lt;a href="https://twitter.com/ONLY_OFFICE" style="width: 40px; height: 40px; display: block; margin: 0; padding: 0;" target="_blank"&gt;
&lt;img src="%IMAGEPATH%/social-tw-40.png" alt="Twitter" style="width: 40px; height: 40px;" /&gt;
&lt;/a&gt;
&lt;/td&gt;
&lt;td style="width: 40px; vertical-align: top; margin: 0; padding: 22px 5px 0 5px;"&gt;
&lt;a href="https://www.onlyoffice.com/blog" style="width: 40px; height: 40px; display: block; margin: 0; padding: 0;" target="_blank"&gt;
&lt;img src="%IMAGEPATH%/social-blog-40.png" alt="ONLYOFFICE" style="width: 40px; height: 40px;" /&gt;
&lt;/a&gt;
&lt;/td&gt;
&lt;td style="width: 40px; vertical-align: top; margin: 0; padding: 22px 5px 0 5px;"&gt;
&lt;a href="https://www.youtube.com/user/onlyofficeTV" style="width: 40px; height: 40px; display: block; margin: 0; padding: 0;" target="_blank"&gt;
&lt;img src="%IMAGEPATH%/social-youtube-40.png" alt="YouTube" style="width: 40px; height: 40x;" /&gt;
&lt;/a&gt;
&lt;/td&gt;
&lt;td style="width: 40px; vertical-align: top; margin: 0; padding: 22px 5px 0 5px;"&gt;
&lt;a href="https://vk.com/onlyoffice" style="width: 40px; height: 40px; display: block; margin: 0; padding: 0;" target="_blank"&gt;
&lt;img src="%IMAGEPATH%/social-vk-40.png" alt="VK" style="width: 40px; height: 40px;" /&gt;
&lt;/a&gt;
&lt;/td&gt;
&lt;td style="width: 40px; vertical-align: top; margin: 0; padding: 22px 155px 0 5px;"&gt;
&lt;a href="https://www.instagram.com/the_onlyoffice" style="width: 40px; height: 40px; display: block; margin: 0; padding: 0;" target="_blank"&gt;
&lt;img src="%IMAGEPATH%/social-inst-40.png" alt="Instagram" style="width: 40px; height: 40px;" /&gt;
&lt;/a&gt;
&lt;/td&gt;
&lt;/tr&gt;</value>
</data>
<data name="HtmlMaster" xml:space="preserve">
<value>&lt;body style="margin: 0; padding: 0; text-align: center; width: 100%; font-family: Arial, sans-serif; font-size: 14px; color: #333;"&gt;
&lt;div style="background-color: #fff; width: 600px; margin: 0 auto; text-align: left;"&gt;
&lt;table cellspacing="0" cellpadding="0" style="font-family: Arial; font-size: 14px; color: #333; background: #fff; text-align: center; width: 600px; margin: 0; padding: 0; border: 0 none; border-collapse: collapse; empty-cells: show; border-spacing: 0;"&gt;
&lt;tbody&gt;
&lt;tr border="0" cellspacing="0" cellpadding="0"&gt;
&lt;td colspan="3" style="margin: 0; padding: 0; background-color: #fff; height: 65px; padding: 20px 0 0 30px;"&gt;
&lt;div style="text-align: left; height: 65px; width: 570px; margin: 0; padding: 0;"&gt;
&lt;a href="%SITEURL%" style="text-decoration: none; display: inline-block; width: 386px; height: 44px; margin: 0; padding: 0;" target="_blank"&gt;
&lt;img src="%LOGO%" style="border: 0px none; width: 386px; height: 44px; margin: 0; padding: 0;" alt="%LOGOTEXT%" /&gt;
&lt;/a&gt;
&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr border="0" cellspacing="0" cellpadding="0"&gt;
&lt;td colspan="3" style="margin: 0; padding: 15px 30px 15px; background-color: #f6f6f6; -moz-border-radius: 6px; -webkit-border-radius: 6px; border-radius: 6px;"&gt;
&lt;div style="font-family: Arial; font-size: 14px; color: #333; margin: 0; padding: 0; width: 540px; height: auto; overflow: hidden; word-wrap: break-word; vertical-align: top; text-align: left; border: 0 none;"&gt;
%CONTENT%
&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
%FOOTER%
&lt;/tbody&gt;
&lt;/table&gt;
&lt;table cellspacing="0" cellpadding="0" style="font-family: Arial; font-size: 14px; color: #333; text-align: center; vertical-align: top; width: 600px; margin: 0; padding: 0; border-collapse: collapse; border: 0; border-spacing: 0; "&gt;
&lt;tbody&gt;
%FOOTERSOCIAL%
&lt;tr border="0" cellspacing="0" cellpadding="0"&gt;
&lt;td colspan="6" style="width: 600px; vertical-align: top; margin: 0; padding: 20px 30px 15px;"&gt;
&lt;p style="color: #7b7b7b; font-family: Arial, Tahoma; font-size: 12px; margin: 0; padding: 0; text-align: center; width: 540px;"&gt;
%TEXTFOOTER%
&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;/body&gt;</value>
</data>
<data name="FooterOpensourceV10" xml:space="preserve">
<value>&lt;tr border="0" cellspacing="0" cellpadding="0"&gt;&lt;td colspan="3" style="height: 10px; line-height: 10px; background: #fff; padding: 0; margin: 0;"&gt;&amp;nbsp;&lt;/td&gt;&lt;/tr&gt;
&lt;tr border="0" cellspacing="0" cellpadding="0"&gt;
&lt;td style="vertical-align: top; margin: 0; padding: 34px 0 0 0; width: 210px; height: 108px; background: #f6f6f6; -moz-border-radius-topleft: 6px; -webkit-border-top-left-radius: 6px; border-top-left-radius: 6px;"&gt;
&lt;img src="%IMAGEPATH%/tech-100.png" style="width: 100px; height: 100px;margin: 0 auto;" /&gt;
&lt;/td&gt;
&lt;td style="vertical-align: top; margin: 0; padding: 34px 0 0 0; width: 180px; height: 108px; background: #f6f6f6;"&gt;
&lt;img src="%IMAGEPATH%/mailus-100.png" style="width: 100px; height: 100px;margin: 0 auto;" /&gt;
&lt;/td&gt;
&lt;td style="vertical-align: top; margin: 0; padding: 34px 0 0 0; width: 210px; height: 108px; background: #f6f6f6; -moz-border-radius-topright: 6px; -webkit-border-top-right-radius: 6px; border-top-right-radius: 6px;"&gt;
&lt;img src="%IMAGEPATH%/demo-100.png" style="width: 100px; height: 100px;margin: 0 auto;" /&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr border="0" cellspacing="0" cellpadding="0"&gt;
&lt;td style="vertical-align: top; margin: 0; padding: 0; width: 210px; height: 16px; background: #f6f6f6;"&gt;Need tech help?&lt;/td&gt;
&lt;td style="vertical-align: top; margin: 0; padding: 0; width: 180px; height: 16px; background: #f6f6f6;"&gt;Sales Questions&lt;/td&gt;
&lt;td style="vertical-align: top; margin: 0; padding: 0; width: 210px; height: 16px; background: #f6f6f6;"&gt;Order Demo&lt;/td&gt;
&lt;/tr&gt;
&lt;tr border="0" cellspacing="0" cellpadding="0"&gt;
&lt;td style="vertical-align: top; margin: 0; padding: 0 0 30px; width: 210px; background: #f6f6f6;-moz-border-radius-bottomleft: 6px; -webkit-border-bottom-left-radius: 6px; border-bottom-left-radius: 6px;"&gt;
&lt;a href="http://dev.onlyoffice.org/" target="_blank" style="color: #333;"&gt;Ask the Community&lt;/a&gt;
&lt;/td&gt;
&lt;td style="vertical-align: top; margin: 0; padding: 0 0 30px; width: 180px; background: #f6f6f6;"&gt;
&lt;a href="mailto:sales@onlyoffice.com" style="color: #333;"&gt;Email us&lt;/a&gt;
&lt;/td&gt;
&lt;td style="vertical-align: top; margin: 0; padding: 0 0 30px; width: 210px; background: #f6f6f6;-moz-border-radius-bottomright: 6px; -webkit-border-bottom-right-radius: 6px; border-bottom-right-radius: 6px;"&gt;
&lt;a href="http://www.onlyoffice.com/demo-order.aspx" target="_blank" style="color: #333;"&gt;Send a request&lt;/a&gt;
&lt;/td&gt;
&lt;/tr&gt;</value>
</data>
</root>

View File

@ -59,137 +59,142 @@
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=6.0.2.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<data name="FooterCommonV10" xml:space="preserve">
<value>&lt;tr border="0" cellspacing="0" cellpadding="0"&gt;&lt;td colspan="3" style="height: 10px; line-height: 10px; background: #fff; padding: 0; margin: 0;"&gt; &lt;/td&gt;&lt;/tr&gt;
&lt;tr border="0" cellspacing="0" cellpadding="0"&gt;
&lt;td style="vertical-align: top; margin: 0; padding: 34px 0 0 0; width: 210px; height: 108px; background: #f6f6f6; -moz-border-radius-topleft: 6px; -webkit-border-top-left-radius: 6px; border-top-left-radius: 6px;"&gt;
&lt;img src="%IMAGEPATH%/tech-100.png" style="width: 100px; height: 100px;margin: 0 auto;" /&gt;
&lt;/td&gt;
&lt;td style="vertical-align: top; margin: 0; padding: 34px 0 0 0; width: 180px; height: 108px; background: #f6f6f6;"&gt;
&lt;img src="%IMAGEPATH%/mailus-100.png" style="width: 100px; height: 100px;margin: 0 auto;" /&gt;
&lt;/td&gt;
&lt;td style="vertical-align: top; margin: 0; padding: 34px 0 0 0; width: 210px; height: 108px; background: #f6f6f6; -moz-border-radius-topright: 6px; -webkit-border-top-right-radius: 6px; border-top-right-radius: 6px;"&gt;
&lt;img src="%IMAGEPATH%/demo-100.png" style="width: 100px; height: 100px;margin: 0 auto;" /&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr border="0" cellspacing="0" cellpadding="0"&gt;
&lt;td style="vertical-align: top; margin: 0; padding: 0; width: 210px; height: 16px; background: #f6f6f6;"&gt;Besoin d'aide technique ?&lt;/td&gt;
&lt;td style="vertical-align: top; margin: 0; padding: 0; width: 180px; height: 16px; background: #f6f6f6;"&gt;Questions sur les ventes&lt;/td&gt;
&lt;td style="vertical-align: top; margin: 0; padding: 0; width: 210px; height: 16px; background: #f6f6f6;"&gt;Commandez une démo&lt;/td&gt;
&lt;/tr&gt;
&lt;tr border="0" cellspacing="0" cellpadding="0"&gt;
&lt;td style="vertical-align: top; margin: 0; padding: 0 0 30px; width: 210px; background: #f6f6f6;-moz-border-radius-bottomleft: 6px; -webkit-border-bottom-left-radius: 6px; border-bottom-left-radius: 6px;"&gt;
&lt;a href="%SUPPORTURL%" target="_blank" style="color: #333;"&gt;Envoyez votre question&lt;/a&gt;
&lt;/td&gt;
&lt;td style="vertical-align: top; margin: 0; padding: 0 0 30px; width: 180px; background: #f6f6f6;"&gt;
&lt;a href="mailto:%SALESEMAIL%" style="color: #333;"&gt;Écrivez-nous&lt;/a&gt;
&lt;/td&gt;
&lt;td style="vertical-align: top; margin: 0; padding: 0 0 30px; width: 210px; background: #f6f6f6;-moz-border-radius-bottomright: 6px; -webkit-border-bottom-right-radius: 6px; border-bottom-right-radius: 6px;"&gt;
&lt;a href="%DEMOURL%" target="_blank" style="color: #333;"&gt;Envoyez une demande&lt;/a&gt;
&lt;/td&gt;
<value>&lt;tr border="0" cellspacing="0" cellpadding="0"&gt;&lt;td colspan="3" style="height: 10px; line-height: 10px; background: #fff; padding: 0; margin: 0;"&gt; &lt;/td&gt;&lt;/tr&gt;
&lt;tr border="0" cellspacing="0" cellpadding="0"&gt;
&lt;td style="vertical-align: top; margin: 0; padding: 34px 0 0 0; width: 210px; height: 108px; background: #f6f6f6; -moz-border-radius-topleft: 6px; -webkit-border-top-left-radius: 6px; border-top-left-radius: 6px;"&gt;
&lt;img src="%IMAGEPATH%/tech-100.png" style="width: 100px; height: 100px;margin: 0 auto;" /&gt;
&lt;/td&gt;
&lt;td style="vertical-align: top; margin: 0; padding: 34px 0 0 0; width: 180px; height: 108px; background: #f6f6f6;"&gt;
&lt;img src="%IMAGEPATH%/mailus-100.png" style="width: 100px; height: 100px;margin: 0 auto;" /&gt;
&lt;/td&gt;
&lt;td style="vertical-align: top; margin: 0; padding: 34px 0 0 0; width: 210px; height: 108px; background: #f6f6f6; -moz-border-radius-topright: 6px; -webkit-border-top-right-radius: 6px; border-top-right-radius: 6px;"&gt;
&lt;img src="%IMAGEPATH%/demo-100.png" style="width: 100px; height: 100px;margin: 0 auto;" /&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr border="0" cellspacing="0" cellpadding="0"&gt;
&lt;td style="vertical-align: top; margin: 0; padding: 0; width: 210px; height: 16px; background: #f6f6f6;"&gt;Besoin d'aide technique ?&lt;/td&gt;
&lt;td style="vertical-align: top; margin: 0; padding: 0; width: 180px; height: 16px; background: #f6f6f6;"&gt;Questions sur les ventes&lt;/td&gt;
&lt;td style="vertical-align: top; margin: 0; padding: 0; width: 210px; height: 16px; background: #f6f6f6;"&gt;Commandez une démo&lt;/td&gt;
&lt;/tr&gt;
&lt;tr border="0" cellspacing="0" cellpadding="0"&gt;
&lt;td style="vertical-align: top; margin: 0; padding: 0 0 30px; width: 210px; background: #f6f6f6;-moz-border-radius-bottomleft: 6px; -webkit-border-bottom-left-radius: 6px; border-bottom-left-radius: 6px;"&gt;
&lt;a href="%SUPPORTURL%" target="_blank" style="color: #333;"&gt;Envoyez votre question&lt;/a&gt;
&lt;/td&gt;
&lt;td style="vertical-align: top; margin: 0; padding: 0 0 30px; width: 180px; background: #f6f6f6;"&gt;
&lt;a href="mailto:%SALESEMAIL%" style="color: #333;"&gt;Écrivez-nous&lt;/a&gt;
&lt;/td&gt;
&lt;td style="vertical-align: top; margin: 0; padding: 0 0 30px; width: 210px; background: #f6f6f6;-moz-border-radius-bottomright: 6px; -webkit-border-bottom-right-radius: 6px; border-bottom-right-radius: 6px;"&gt;
&lt;a href="%DEMOURL%" target="_blank" style="color: #333;"&gt;Envoyez une demande&lt;/a&gt;
&lt;/td&gt;
&lt;/tr&gt;</value>
</data>
<data name="FooterOpensourceV10" xml:space="preserve">
<value>&lt;tr border="0" cellspacing="0" cellpadding="0"&gt;&lt;td colspan="3" style="height: 10px; line-height: 10px; background: #fff; padding: 0; margin: 0;"&gt; &lt;/td&gt;&lt;/tr&gt;
&lt;tr border="0" cellspacing="0" cellpadding="0"&gt;
&lt;td style="vertical-align: top; margin: 0; padding: 34px 0 0 0; width: 210px; height: 108px; background: #f6f6f6; -moz-border-radius-topleft: 6px; -webkit-border-top-left-radius: 6px; border-top-left-radius: 6px;"&gt;
&lt;img src="%IMAGEPATH%/tech-100.png" style="width: 100px; height: 100px;margin: 0 auto;" /&gt;
&lt;/td&gt;
&lt;td style="vertical-align: top; margin: 0; padding: 34px 0 0 0; width: 180px; height: 108px; background: #f6f6f6;"&gt;
&lt;img src="%IMAGEPATH%/mailus-100.png" style="width: 100px; height: 100px;margin: 0 auto;" /&gt;
&lt;/td&gt;
&lt;td style="vertical-align: top; margin: 0; padding: 34px 0 0 0; width: 210px; height: 108px; background: #f6f6f6; -moz-border-radius-topright: 6px; -webkit-border-top-right-radius: 6px; border-top-right-radius: 6px;"&gt;
&lt;img src="%IMAGEPATH%/demo-100.png" style="width: 100px; height: 100px;margin: 0 auto;" /&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr border="0" cellspacing="0" cellpadding="0"&gt;
&lt;td style="vertical-align: top; margin: 0; padding: 0; width: 210px; height: 16px; background: #f6f6f6;"&gt;Besoin d'assistance technique?&lt;/td&gt;
&lt;td style="vertical-align: top; margin: 0; padding: 0; width: 180px; height: 16px; background: #f6f6f6;"&gt;Questions de vente&lt;/td&gt;
&lt;td style="vertical-align: top; margin: 0; padding: 0; width: 210px; height: 16px; background: #f6f6f6;"&gt;Demander un démo&lt;/td&gt;
&lt;/tr&gt;
&lt;tr border="0" cellspacing="0" cellpadding="0"&gt;
&lt;td style="vertical-align: top; margin: 0; padding: 0 0 30px; width: 210px; background: #f6f6f6;-moz-border-radius-bottomleft: 6px; -webkit-border-bottom-left-radius: 6px; border-bottom-left-radius: 6px;"&gt;
&lt;a href="http://dev.onlyoffice.org/" target="_blank" style="color: #333;"&gt;Demandez à la communauté&lt;/a&gt;
&lt;/td&gt;
&lt;td style="vertical-align: top; margin: 0; padding: 0 0 30px; width: 180px; background: #f6f6f6;"&gt;
&lt;a href="mailto:sales@onlyoffice.com" style="color: #333;"&gt;Écrivez nous&lt;/a&gt;
&lt;/td&gt;
&lt;td style="vertical-align: top; margin: 0; padding: 0 0 30px; width: 210px; background: #f6f6f6;-moz-border-radius-bottomright: 6px; -webkit-border-bottom-right-radius: 6px; border-bottom-right-radius: 6px;"&gt;
&lt;a href="http://www.onlyoffice.com/demo-order.aspx" target="_blank" style="color: #333;"&gt;Envoyez une demande&lt;/a&gt;
&lt;/td&gt;
<value>&lt;tr border="0" cellspacing="0" cellpadding="0"&gt;&lt;td colspan="3" style="height: 10px; line-height: 10px; background: #fff; padding: 0; margin: 0;"&gt; &lt;/td&gt;&lt;/tr&gt;
&lt;tr border="0" cellspacing="0" cellpadding="0"&gt;
&lt;td style="vertical-align: top; margin: 0; padding: 34px 0 0 0; width: 210px; height: 108px; background: #f6f6f6; -moz-border-radius-topleft: 6px; -webkit-border-top-left-radius: 6px; border-top-left-radius: 6px;"&gt;
&lt;img src="%IMAGEPATH%/tech-100.png" style="width: 100px; height: 100px;margin: 0 auto;" /&gt;
&lt;/td&gt;
&lt;td style="vertical-align: top; margin: 0; padding: 34px 0 0 0; width: 180px; height: 108px; background: #f6f6f6;"&gt;
&lt;img src="%IMAGEPATH%/mailus-100.png" style="width: 100px; height: 100px;margin: 0 auto;" /&gt;
&lt;/td&gt;
&lt;td style="vertical-align: top; margin: 0; padding: 34px 0 0 0; width: 210px; height: 108px; background: #f6f6f6; -moz-border-radius-topright: 6px; -webkit-border-top-right-radius: 6px; border-top-right-radius: 6px;"&gt;
&lt;img src="%IMAGEPATH%/demo-100.png" style="width: 100px; height: 100px;margin: 0 auto;" /&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr border="0" cellspacing="0" cellpadding="0"&gt;
&lt;td style="vertical-align: top; margin: 0; padding: 0; width: 210px; height: 16px; background: #f6f6f6;"&gt;Besoin d'assistance technique?&lt;/td&gt;
&lt;td style="vertical-align: top; margin: 0; padding: 0; width: 180px; height: 16px; background: #f6f6f6;"&gt;Questions de vente&lt;/td&gt;
&lt;td style="vertical-align: top; margin: 0; padding: 0; width: 210px; height: 16px; background: #f6f6f6;"&gt;Demander un démo&lt;/td&gt;
&lt;/tr&gt;
&lt;tr border="0" cellspacing="0" cellpadding="0"&gt;
&lt;td style="vertical-align: top; margin: 0; padding: 0 0 30px; width: 210px; background: #f6f6f6;-moz-border-radius-bottomleft: 6px; -webkit-border-bottom-left-radius: 6px; border-bottom-left-radius: 6px;"&gt;
&lt;a href="http://dev.onlyoffice.org/" target="_blank" style="color: #333;"&gt;Demandez à la communauté&lt;/a&gt;
&lt;/td&gt;
&lt;td style="vertical-align: top; margin: 0; padding: 0 0 30px; width: 180px; background: #f6f6f6;"&gt;
&lt;a href="mailto:sales@onlyoffice.com" style="color: #333;"&gt;Écrivez nous&lt;/a&gt;
&lt;/td&gt;
&lt;td style="vertical-align: top; margin: 0; padding: 0 0 30px; width: 210px; background: #f6f6f6;-moz-border-radius-bottomright: 6px; -webkit-border-bottom-right-radius: 6px; border-bottom-right-radius: 6px;"&gt;
&lt;a href="http://www.onlyoffice.com/demo-order.aspx" target="_blank" style="color: #333;"&gt;Envoyez une demande&lt;/a&gt;
&lt;/td&gt;
&lt;/tr&gt;</value>
</data>
<data name="HtmlMaster" xml:space="preserve">
<value>&lt;body style="margin: 0; padding: 0; text-align: center; width: 100%; font-family: Arial, sans-serif; font-size: 14px; color: #333;"&gt;
&lt;div style="background-color: #fff; width: 600px; margin: 0 auto; text-align: left;"&gt;
&lt;table cellspacing="0" cellpadding="0" style="font-family: Arial; font-size: 14px; color: #333; background: #fff; text-align: center; width: 600px; margin: 0; padding: 0; border: 0 none; border-collapse: collapse; empty-cells: show; border-spacing: 0;"&gt;
&lt;tbody&gt;
&lt;tr border="0" cellspacing="0" cellpadding="0"&gt;
&lt;td colspan="3" style="margin: 0; padding: 0; background-color: #fff; height: 65px; padding: 20px 0 0 30px;"&gt;
&lt;div style="text-align: left; height: 65px; width: 570px; margin: 0; padding: 0;"&gt;
&lt;a href="%SITEURL%" style="text-decoration: none; display: inline-block; width: 386px; height: 44px; margin: 0; padding: 0;" target="_blank"&gt;
&lt;img src="%LOGO%" style="border: 0px none; width: 386px; height: 44px; margin: 0; padding: 0;" alt="%LOGOTEXT%" /&gt;
&lt;/a&gt;
&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr border="0" cellspacing="0" cellpadding="0"&gt;
&lt;td colspan="3" style="margin: 0; padding: 15px 30px 15px; background-color: #f6f6f6; -moz-border-radius: 6px; -webkit-border-radius: 6px; border-radius: 6px;"&gt;
&lt;div style="font-family: Arial; font-size: 14px; color: #333; margin: 0; padding: 0; width: 540px; height: auto; overflow: hidden; word-wrap: break-word; vertical-align: top; text-align: left; border: 0 none;"&gt;
%CONTENT%
&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
%FOOTER%
&lt;/tbody&gt;
&lt;/table&gt;
&lt;table cellspacing="0" cellpadding="0" style="font-family: Arial; font-size: 14px; color: #333; text-align: center; vertical-align: top; width: 600px; margin: 0; padding: 0; border-collapse: collapse; border: 0; border-spacing: 0; "&gt;
&lt;tbody&gt;
%FOOTERSOCIAL%
&lt;tr border="0" cellspacing="0" cellpadding="0"&gt;
&lt;td colspan="6" style="width: 600px; vertical-align: top; margin: 0; padding: 20px 30px 15px;"&gt;
&lt;p style="color: #7b7b7b; font-family: Arial, Tahoma; font-size: 12px; margin: 0; padding: 0; text-align: center; width: 540px;"&gt;
%TEXTFOOTER%
&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
<value>&lt;body style="margin: 0; padding: 0; text-align: center; width: 100%; font-family: Arial, sans-serif; font-size: 14px; color: #333;"&gt;
&lt;div style="background-color: #fff; width: 600px; margin: 0 auto; text-align: left;"&gt;
&lt;table cellspacing="0" cellpadding="0" style="font-family: Arial; font-size: 14px; color: #333; background: #fff; text-align: center; width: 600px; margin: 0; padding: 0; border: 0 none; border-collapse: collapse; empty-cells: show; border-spacing: 0;"&gt;
&lt;tbody&gt;
&lt;tr border="0" cellspacing="0" cellpadding="0"&gt;
&lt;td colspan="3" style="margin: 0; padding: 0; background-color: #fff; height: 65px; padding: 20px 0 0 30px;"&gt;
&lt;div style="text-align: left; height: 65px; width: 570px; margin: 0; padding: 0;"&gt;
&lt;a href="%SITEURL%" style="text-decoration: none; display: inline-block; width: 386px; height: 44px; margin: 0; padding: 0;" target="_blank"&gt;
&lt;img src="%LOGO%" style="border: 0px none; width: 386px; height: 44px; margin: 0; padding: 0;" alt="%LOGOTEXT%" /&gt;
&lt;/a&gt;
&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr border="0" cellspacing="0" cellpadding="0"&gt;
&lt;td colspan="3" style="margin: 0; padding: 15px 30px 15px; background-color: #f6f6f6; -moz-border-radius: 6px; -webkit-border-radius: 6px; border-radius: 6px;"&gt;
&lt;div style="font-family: Arial; font-size: 14px; color: #333; margin: 0; padding: 0; width: 540px; height: auto; overflow: hidden; word-wrap: break-word; vertical-align: top; text-align: left; border: 0 none;"&gt;
%CONTENT%
&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
%FOOTER%
&lt;/tbody&gt;
&lt;/table&gt;
&lt;table cellspacing="0" cellpadding="0" style="font-family: Arial; font-size: 14px; color: #333; text-align: center; vertical-align: top; width: 600px; margin: 0; padding: 0; border-collapse: collapse; border: 0; border-spacing: 0; "&gt;
&lt;tbody&gt;
%FOOTERSOCIAL%
&lt;tr border="0" cellspacing="0" cellpadding="0"&gt;
&lt;td colspan="6" style="width: 600px; vertical-align: top; margin: 0; padding: 20px 30px 15px;"&gt;
&lt;p style="color: #7b7b7b; font-family: Arial, Tahoma; font-size: 12px; margin: 0; padding: 0; text-align: center; width: 540px;"&gt;
%TEXTFOOTER%
&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;/body&gt;</value>
</data>
<data name="SocialNetworksFooterV10" xml:space="preserve">
<value>&lt;tr border="0" cellspacing="0" cellpadding="0"&gt;
&lt;td style="width: 40px; vertical-align: top; margin: 0; padding: 22px 5px 0 155px;"&gt;
&lt;a href="https://www.facebook.com/pages/OnlyOffice/833032526736775" style="width: 40px; height: 40px; display: block; margin: 0; padding: 0;" target="_blank"&gt;
&lt;img src="%IMAGEPATH%/social-fb-40.png" alt="Facebook" style="width: 40px; height: 40px;" /&gt;
&lt;/a&gt;
&lt;/td&gt;
&lt;td style="width: 40px; vertical-align: top; margin: 0; padding: 22px 5px 0 5px;"&gt;
&lt;a href="https://twitter.com/ONLY_OFFICE" style="width: 40px; height: 40px; display: block; margin: 0; padding: 0;" target="_blank"&gt;
&lt;img src="%IMAGEPATH%/social-tw-40.png" alt="Twitter" style="width: 40px; height: 40px;" /&gt;
&lt;/a&gt;
&lt;/td&gt;
&lt;td style="width: 40px; vertical-align: top; margin: 0; padding: 22px 5px 0 5px;"&gt;
&lt;a href="https://www.onlyoffice.com/blog" style="width: 40px; height: 40px; display: block; margin: 0; padding: 0;" target="_blank"&gt;
&lt;img src="%IMAGEPATH%/social-blog-40.png" alt="ONLYOFFICE" style="width: 40px; height: 40px;" /&gt;
&lt;/a&gt;
&lt;/td&gt;
&lt;td style="width: 40px; vertical-align: top; margin: 0; padding: 22px 5px 0 5px;"&gt;
&lt;a href="https://www.youtube.com/user/onlyofficeTV" style="width: 40px; height: 40px; display: block; margin: 0; padding: 0;" target="_blank"&gt;
&lt;img src="%IMAGEPATH%/social-youtube-40.png" alt="YouTube" style="width: 40px; height: 40x;" /&gt;
&lt;/a&gt;
&lt;/td&gt;
&lt;td style="width: 40px; vertical-align: top; margin: 0; padding: 22px 5px 0 5px;"&gt;
&lt;a href="https://vk.com/onlyoffice" style="width: 40px; height: 40px; display: block; margin: 0; padding: 0;" target="_blank"&gt;
&lt;img src="%IMAGEPATH%/social-vk-40.png" alt="VK" style="width: 40px; height: 40px;" /&gt;
&lt;/a&gt;
&lt;/td&gt;
&lt;td style="width: 40px; vertical-align: top; margin: 0; padding: 22px 155px 0 5px;"&gt;
&lt;a href="https://www.instagram.com/the_onlyoffice" style="width: 40px; height: 40px; display: block; margin: 0; padding: 0;" target="_blank"&gt;
&lt;img src="%IMAGEPATH%/social-inst-40.png" alt="Instagram" style="width: 40px; height: 40px;" /&gt;
&lt;/a&gt;
&lt;/td&gt;
<value>&lt;tr border="0" cellspacing="0" cellpadding="0"&gt;
&lt;td style="width: 40px; vertical-align: top; margin: 0; padding: 22px 5px 0 155px;"&gt;
&lt;a href="https://www.facebook.com/pages/OnlyOffice/833032526736775" style="width: 40px; height: 40px; display: block; margin: 0; padding: 0;" target="_blank"&gt;
&lt;img src="%IMAGEPATH%/social-fb-40.png" alt="Facebook" style="width: 40px; height: 40px;" /&gt;
&lt;/a&gt;
&lt;/td&gt;
&lt;td style="width: 40px; vertical-align: top; margin: 0; padding: 22px 5px 0 5px;"&gt;
&lt;a href="https://twitter.com/ONLY_OFFICE" style="width: 40px; height: 40px; display: block; margin: 0; padding: 0;" target="_blank"&gt;
&lt;img src="%IMAGEPATH%/social-tw-40.png" alt="Twitter" style="width: 40px; height: 40px;" /&gt;
&lt;/a&gt;
&lt;/td&gt;
&lt;td style="width: 40px; vertical-align: top; margin: 0; padding: 22px 5px 0 5px;"&gt;
&lt;a href="https://www.onlyoffice.com/blog" style="width: 40px; height: 40px; display: block; margin: 0; padding: 0;" target="_blank"&gt;
&lt;img src="%IMAGEPATH%/social-blog-40.png" alt="ONLYOFFICE" style="width: 40px; height: 40px;" /&gt;
&lt;/a&gt;
&lt;/td&gt;
&lt;td style="width: 40px; vertical-align: top; margin: 0; padding: 22px 5px 0 5px;"&gt;
&lt;a href="https://www.youtube.com/user/onlyofficeTV" style="width: 40px; height: 40px; display: block; margin: 0; padding: 0;" target="_blank"&gt;
&lt;img src="%IMAGEPATH%/social-youtube-40.png" alt="YouTube" style="width: 40px; height: 40x;" /&gt;
&lt;/a&gt;
&lt;/td&gt;
&lt;td style="width: 40px; vertical-align: top; margin: 0; padding: 22px 5px 0 5px;"&gt;
&lt;a href="https://vk.com/onlyoffice" style="width: 40px; height: 40px; display: block; margin: 0; padding: 0;" target="_blank"&gt;
&lt;img src="%IMAGEPATH%/social-vk-40.png" alt="VK" style="width: 40px; height: 40px;" /&gt;
&lt;/a&gt;
&lt;/td&gt;
&lt;td style="width: 40px; vertical-align: top; margin: 0; padding: 22px 155px 0 5px;"&gt;
&lt;a href="https://www.instagram.com/the_onlyoffice" style="width: 40px; height: 40px; display: block; margin: 0; padding: 0;" target="_blank"&gt;
&lt;img src="%IMAGEPATH%/social-inst-40.png" alt="Instagram" style="width: 40px; height: 40px;" /&gt;
&lt;/a&gt;
&lt;/td&gt;
&lt;/tr&gt;</value>
</data>
<data name="TextForFooterUnsubsribeDocSpace" xml:space="preserve">
<value>Cet e-mail est généré automatiquement et vous n'avez pas besoin d'y répondre. &lt;br /&gt;Vous recevez cet e-mail parce que vous êtes un utilisateur enregistré de&lt;a href="{0}" target="_blank"&gt; DocSpace&lt;/a&gt;.
&lt;br /&gt; Cliquez ici pour vous désabonner des notifications : &lt;a href="{1}"  target="_blank"&gt;Se désabonner&lt;/a&gt;
&lt;br /&gt;</value>
</data>
</root>

View File

@ -59,137 +59,142 @@
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=6.0.2.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<data name="FooterCommonV10" xml:space="preserve">
<value>&lt;tr border="0" cellspacing="0" cellpadding="0"&gt;&lt;td colspan="3" style="height: 10px; line-height: 10px; background: #fff; padding: 0; margin: 0;"&gt; &lt;/td&gt;&lt;/tr&gt;
&lt;tr border="0" cellspacing="0" cellpadding="0"&gt;
&lt;td style="vertical-align: top; margin: 0; padding: 34px 0 0 0; width: 210px; height: 108px; background: #f6f6f6; -moz-border-radius-topleft: 6px; -webkit-border-top-left-radius: 6px; border-top-left-radius: 6px;"&gt;
&lt;img src="%IMAGEPATH%/tech-100.png" style="width: 100px; height: 100px;margin: 0 auto;" /&gt;
&lt;/td&gt;
&lt;td style="vertical-align: top; margin: 0; padding: 34px 0 0 0; width: 180px; height: 108px; background: #f6f6f6;"&gt;
&lt;img src="%IMAGEPATH%/mailus-100.png" style="width: 100px; height: 100px;margin: 0 auto;" /&gt;
&lt;/td&gt;
&lt;td style="vertical-align: top; margin: 0; padding: 34px 0 0 0; width: 210px; height: 108px; background: #f6f6f6; -moz-border-radius-topright: 6px; -webkit-border-top-right-radius: 6px; border-top-right-radius: 6px;"&gt;
&lt;img src="%IMAGEPATH%/demo-100.png" style="width: 100px; height: 100px;margin: 0 auto;" /&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr border="0" cellspacing="0" cellpadding="0"&gt;
&lt;td style="vertical-align: top; margin: 0; padding: 0; width: 210px; height: 16px; background: #f6f6f6;"&gt;Serve assistenza tecnica?&lt;/td&gt;
&lt;td style="vertical-align: top; margin: 0; padding: 0; width: 180px; height: 16px; background: #f6f6f6;"&gt;Domande su Vendite&lt;/td&gt;
&lt;td style="vertical-align: top; margin: 0; padding: 0; width: 210px; height: 16px; background: #f6f6f6;"&gt;Ordina Demo&lt;/td&gt;
&lt;/tr&gt;
&lt;tr border="0" cellspacing="0" cellpadding="0"&gt;
&lt;td style="vertical-align: top; margin: 0; padding: 0 0 30px; width: 210px; background: #f6f6f6;-moz-border-radius-bottomleft: 6px; -webkit-border-bottom-left-radius: 6px; border-bottom-left-radius: 6px;"&gt;
&lt;a href="%SUPPORTURL%" target="_blank" style="color: #333;"&gt;Send your question&lt;/a&gt;
&lt;/td&gt;
&lt;td style="vertical-align: top; margin: 0; padding: 0 0 30px; width: 180px; background: #f6f6f6;"&gt;
&lt;a href="mailto:%SALESEMAIL%" style="color: #333;"&gt;Email us&lt;/a&gt;
&lt;/td&gt;
&lt;td style="vertical-align: top; margin: 0; padding: 0 0 30px; width: 210px; background: #f6f6f6;-moz-border-radius-bottomright: 6px; -webkit-border-bottom-right-radius: 6px; border-bottom-right-radius: 6px;"&gt;
&lt;a href="%DEMOURL%" target="_blank" style="color: #333;"&gt;Invia una richiesta&lt;/a&gt;
&lt;/td&gt;
<value>&lt;tr border="0" cellspacing="0" cellpadding="0"&gt;&lt;td colspan="3" style="height: 10px; line-height: 10px; background: #fff; padding: 0; margin: 0;"&gt; &lt;/td&gt;&lt;/tr&gt;
&lt;tr border="0" cellspacing="0" cellpadding="0"&gt;
&lt;td style="vertical-align: top; margin: 0; padding: 34px 0 0 0; width: 210px; height: 108px; background: #f6f6f6; -moz-border-radius-topleft: 6px; -webkit-border-top-left-radius: 6px; border-top-left-radius: 6px;"&gt;
&lt;img src="%IMAGEPATH%/tech-100.png" style="width: 100px; height: 100px;margin: 0 auto;" /&gt;
&lt;/td&gt;
&lt;td style="vertical-align: top; margin: 0; padding: 34px 0 0 0; width: 180px; height: 108px; background: #f6f6f6;"&gt;
&lt;img src="%IMAGEPATH%/mailus-100.png" style="width: 100px; height: 100px;margin: 0 auto;" /&gt;
&lt;/td&gt;
&lt;td style="vertical-align: top; margin: 0; padding: 34px 0 0 0; width: 210px; height: 108px; background: #f6f6f6; -moz-border-radius-topright: 6px; -webkit-border-top-right-radius: 6px; border-top-right-radius: 6px;"&gt;
&lt;img src="%IMAGEPATH%/demo-100.png" style="width: 100px; height: 100px;margin: 0 auto;" /&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr border="0" cellspacing="0" cellpadding="0"&gt;
&lt;td style="vertical-align: top; margin: 0; padding: 0; width: 210px; height: 16px; background: #f6f6f6;"&gt;Serve assistenza tecnica?&lt;/td&gt;
&lt;td style="vertical-align: top; margin: 0; padding: 0; width: 180px; height: 16px; background: #f6f6f6;"&gt;Domande su Vendite&lt;/td&gt;
&lt;td style="vertical-align: top; margin: 0; padding: 0; width: 210px; height: 16px; background: #f6f6f6;"&gt;Ordina Demo&lt;/td&gt;
&lt;/tr&gt;
&lt;tr border="0" cellspacing="0" cellpadding="0"&gt;
&lt;td style="vertical-align: top; margin: 0; padding: 0 0 30px; width: 210px; background: #f6f6f6;-moz-border-radius-bottomleft: 6px; -webkit-border-bottom-left-radius: 6px; border-bottom-left-radius: 6px;"&gt;
&lt;a href="%SUPPORTURL%" target="_blank" style="color: #333;"&gt;Send your question&lt;/a&gt;
&lt;/td&gt;
&lt;td style="vertical-align: top; margin: 0; padding: 0 0 30px; width: 180px; background: #f6f6f6;"&gt;
&lt;a href="mailto:%SALESEMAIL%" style="color: #333;"&gt;Email us&lt;/a&gt;
&lt;/td&gt;
&lt;td style="vertical-align: top; margin: 0; padding: 0 0 30px; width: 210px; background: #f6f6f6;-moz-border-radius-bottomright: 6px; -webkit-border-bottom-right-radius: 6px; border-bottom-right-radius: 6px;"&gt;
&lt;a href="%DEMOURL%" target="_blank" style="color: #333;"&gt;Invia una richiesta&lt;/a&gt;
&lt;/td&gt;
&lt;/tr&gt;</value>
</data>
<data name="FooterOpensourceV10" xml:space="preserve">
<value>&lt;tr border="0" cellspacing="0" cellpadding="0"&gt;&lt;td colspan="3" style="height: 10px; line-height: 10px; background: #fff; padding: 0; margin: 0;"&gt; &lt;/td&gt;&lt;/tr&gt;
&lt;tr border="0" cellspacing="0" cellpadding="0"&gt;
&lt;td style="vertical-align: top; margin: 0; padding: 34px 0 0 0; width: 210px; height: 108px; background: #f6f6f6; -moz-border-radius-topleft: 6px; -webkit-border-top-left-radius: 6px; border-top-left-radius: 6px;"&gt;
&lt;img src="%IMAGEPATH%/tech-100.png" style="width: 100px; height: 100px;margin: 0 auto;" /&gt;
&lt;/td&gt;
&lt;td style="vertical-align: top; margin: 0; padding: 34px 0 0 0; width: 180px; height: 108px; background: #f6f6f6;"&gt;
&lt;img src="%IMAGEPATH%/mailus-100.png" style="width: 100px; height: 100px;margin: 0 auto;" /&gt;
&lt;/td&gt;
&lt;td style="vertical-align: top; margin: 0; padding: 34px 0 0 0; width: 210px; height: 108px; background: #f6f6f6; -moz-border-radius-topright: 6px; -webkit-border-top-right-radius: 6px; border-top-right-radius: 6px;"&gt;
&lt;img src="%IMAGEPATH%/demo-100.png" style="width: 100px; height: 100px;margin: 0 auto;" /&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr border="0" cellspacing="0" cellpadding="0"&gt;
&lt;td style="vertical-align: top; margin: 0; padding: 0; width: 210px; height: 16px; background: #f6f6f6;"&gt;Serve assistenza?&lt;/td&gt;
&lt;td style="vertical-align: top; margin: 0; padding: 0; width: 180px; height: 16px; background: #f6f6f6;"&gt;Domande sulla vendita&lt;/td&gt;
&lt;td style="vertical-align: top; margin: 0; padding: 0; width: 210px; height: 16px; background: #f6f6f6;"&gt;Ordina una Demo&lt;/td&gt;
&lt;/tr&gt;
&lt;tr border="0" cellspacing="0" cellpadding="0"&gt;
&lt;td style="vertical-align: top; margin: 0; padding: 0 0 30px; width: 210px; background: #f6f6f6;-moz-border-radius-bottomleft: 6px; -webkit-border-bottom-left-radius: 6px; border-bottom-left-radius: 6px;"&gt;
&lt;a href="http://dev.onlyoffice.org/" target="_blank" style="color: #333;"&gt;Chiedi alla Community&lt;/a&gt;
&lt;/td&gt;
&lt;td style="vertical-align: top; margin: 0; padding: 0 0 30px; width: 180px; background: #f6f6f6;"&gt;
&lt;a href="mailto:sales@onlyoffice.com" style="color: #333;"&gt;Scrivici&lt;/a&gt;
&lt;/td&gt;
&lt;td style="vertical-align: top; margin: 0; padding: 0 0 30px; width: 210px; background: #f6f6f6;-moz-border-radius-bottomright: 6px; -webkit-border-bottom-right-radius: 6px; border-bottom-right-radius: 6px;"&gt;
&lt;a href="http://www.onlyoffice.com/demo-order.aspx" target="_blank" style="color: #333;"&gt;Send a request&lt;/a&gt;
&lt;/td&gt;
<value>&lt;tr border="0" cellspacing="0" cellpadding="0"&gt;&lt;td colspan="3" style="height: 10px; line-height: 10px; background: #fff; padding: 0; margin: 0;"&gt; &lt;/td&gt;&lt;/tr&gt;
&lt;tr border="0" cellspacing="0" cellpadding="0"&gt;
&lt;td style="vertical-align: top; margin: 0; padding: 34px 0 0 0; width: 210px; height: 108px; background: #f6f6f6; -moz-border-radius-topleft: 6px; -webkit-border-top-left-radius: 6px; border-top-left-radius: 6px;"&gt;
&lt;img src="%IMAGEPATH%/tech-100.png" style="width: 100px; height: 100px;margin: 0 auto;" /&gt;
&lt;/td&gt;
&lt;td style="vertical-align: top; margin: 0; padding: 34px 0 0 0; width: 180px; height: 108px; background: #f6f6f6;"&gt;
&lt;img src="%IMAGEPATH%/mailus-100.png" style="width: 100px; height: 100px;margin: 0 auto;" /&gt;
&lt;/td&gt;
&lt;td style="vertical-align: top; margin: 0; padding: 34px 0 0 0; width: 210px; height: 108px; background: #f6f6f6; -moz-border-radius-topright: 6px; -webkit-border-top-right-radius: 6px; border-top-right-radius: 6px;"&gt;
&lt;img src="%IMAGEPATH%/demo-100.png" style="width: 100px; height: 100px;margin: 0 auto;" /&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr border="0" cellspacing="0" cellpadding="0"&gt;
&lt;td style="vertical-align: top; margin: 0; padding: 0; width: 210px; height: 16px; background: #f6f6f6;"&gt;Serve assistenza?&lt;/td&gt;
&lt;td style="vertical-align: top; margin: 0; padding: 0; width: 180px; height: 16px; background: #f6f6f6;"&gt;Domande sulla vendita&lt;/td&gt;
&lt;td style="vertical-align: top; margin: 0; padding: 0; width: 210px; height: 16px; background: #f6f6f6;"&gt;Ordina una Demo&lt;/td&gt;
&lt;/tr&gt;
&lt;tr border="0" cellspacing="0" cellpadding="0"&gt;
&lt;td style="vertical-align: top; margin: 0; padding: 0 0 30px; width: 210px; background: #f6f6f6;-moz-border-radius-bottomleft: 6px; -webkit-border-bottom-left-radius: 6px; border-bottom-left-radius: 6px;"&gt;
&lt;a href="http://dev.onlyoffice.org/" target="_blank" style="color: #333;"&gt;Chiedi alla Community&lt;/a&gt;
&lt;/td&gt;
&lt;td style="vertical-align: top; margin: 0; padding: 0 0 30px; width: 180px; background: #f6f6f6;"&gt;
&lt;a href="mailto:sales@onlyoffice.com" style="color: #333;"&gt;Scrivici&lt;/a&gt;
&lt;/td&gt;
&lt;td style="vertical-align: top; margin: 0; padding: 0 0 30px; width: 210px; background: #f6f6f6;-moz-border-radius-bottomright: 6px; -webkit-border-bottom-right-radius: 6px; border-bottom-right-radius: 6px;"&gt;
&lt;a href="http://www.onlyoffice.com/demo-order.aspx" target="_blank" style="color: #333;"&gt;Send a request&lt;/a&gt;
&lt;/td&gt;
&lt;/tr&gt;</value>
</data>
<data name="HtmlMaster" xml:space="preserve">
<value>&lt;body style="margin: 0; padding: 0; text-align: center; width: 100%; font-family: Arial, sans-serif; font-size: 14px; color: #333;"&gt;
&lt;div style="background-color: #fff; width: 600px; margin: 0 auto; text-align: left;"&gt;
&lt;table cellspacing="0" cellpadding="0" style="font-family: Arial; font-size: 14px; color: #333; background: #fff; text-align: center; width: 600px; margin: 0; padding: 0; border: 0 none; border-collapse: collapse; empty-cells: show; border-spacing: 0;"&gt;
&lt;tbody&gt;
&lt;tr border="0" cellspacing="0" cellpadding="0"&gt;
&lt;td colspan="3" style="margin: 0; padding: 0; background-color: #fff; height: 65px; padding: 20px 0 0 30px;"&gt;
&lt;div style="text-align: left; height: 65px; width: 570px; margin: 0; padding: 0;"&gt;
&lt;a href="%SITEURL%" style="text-decoration: none; display: inline-block; width: 386px; height: 44px; margin: 0; padding: 0;" target="_blank"&gt;
&lt;img src="%LOGO%" style="border: 0px none; width: 386px; height: 44px; margin: 0; padding: 0;" alt="%LOGOTEXT%" /&gt;
&lt;/a&gt;
&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr border="0" cellspacing="0" cellpadding="0"&gt;
&lt;td colspan="3" style="margin: 0; padding: 15px 30px 15px; background-color: #f6f6f6; -moz-border-radius: 6px; -webkit-border-radius: 6px; border-radius: 6px;"&gt;
&lt;div style="font-family: Arial; font-size: 14px; color: #333; margin: 0; padding: 0; width: 540px; height: auto; overflow: hidden; word-wrap: break-word; vertical-align: top; text-align: left; border: 0 none;"&gt;
%CONTENT%
&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
%FOOTER%
&lt;/tbody&gt;
&lt;/table&gt;
&lt;table cellspacing="0" cellpadding="0" style="font-family: Arial; font-size: 14px; color: #333; text-align: center; vertical-align: top; width: 600px; margin: 0; padding: 0; border-collapse: collapse; border: 0; border-spacing: 0; "&gt;
&lt;tbody&gt;
%FOOTERSOCIAL%
&lt;tr border="0" cellspacing="0" cellpadding="0"&gt;
&lt;td colspan="6" style="width: 600px; vertical-align: top; margin: 0; padding: 20px 30px 15px;"&gt;
&lt;p style="color: #7b7b7b; font-family: Arial, Tahoma; font-size: 12px; margin: 0; padding: 0; text-align: center; width: 540px;"&gt;
%TEXTFOOTER%
&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
<value>&lt;body style="margin: 0; padding: 0; text-align: center; width: 100%; font-family: Arial, sans-serif; font-size: 14px; color: #333;"&gt;
&lt;div style="background-color: #fff; width: 600px; margin: 0 auto; text-align: left;"&gt;
&lt;table cellspacing="0" cellpadding="0" style="font-family: Arial; font-size: 14px; color: #333; background: #fff; text-align: center; width: 600px; margin: 0; padding: 0; border: 0 none; border-collapse: collapse; empty-cells: show; border-spacing: 0;"&gt;
&lt;tbody&gt;
&lt;tr border="0" cellspacing="0" cellpadding="0"&gt;
&lt;td colspan="3" style="margin: 0; padding: 0; background-color: #fff; height: 65px; padding: 20px 0 0 30px;"&gt;
&lt;div style="text-align: left; height: 65px; width: 570px; margin: 0; padding: 0;"&gt;
&lt;a href="%SITEURL%" style="text-decoration: none; display: inline-block; width: 386px; height: 44px; margin: 0; padding: 0;" target="_blank"&gt;
&lt;img src="%LOGO%" style="border: 0px none; width: 386px; height: 44px; margin: 0; padding: 0;" alt="%LOGOTEXT%" /&gt;
&lt;/a&gt;
&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr border="0" cellspacing="0" cellpadding="0"&gt;
&lt;td colspan="3" style="margin: 0; padding: 15px 30px 15px; background-color: #f6f6f6; -moz-border-radius: 6px; -webkit-border-radius: 6px; border-radius: 6px;"&gt;
&lt;div style="font-family: Arial; font-size: 14px; color: #333; margin: 0; padding: 0; width: 540px; height: auto; overflow: hidden; word-wrap: break-word; vertical-align: top; text-align: left; border: 0 none;"&gt;
%CONTENT%
&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
%FOOTER%
&lt;/tbody&gt;
&lt;/table&gt;
&lt;table cellspacing="0" cellpadding="0" style="font-family: Arial; font-size: 14px; color: #333; text-align: center; vertical-align: top; width: 600px; margin: 0; padding: 0; border-collapse: collapse; border: 0; border-spacing: 0; "&gt;
&lt;tbody&gt;
%FOOTERSOCIAL%
&lt;tr border="0" cellspacing="0" cellpadding="0"&gt;
&lt;td colspan="6" style="width: 600px; vertical-align: top; margin: 0; padding: 20px 30px 15px;"&gt;
&lt;p style="color: #7b7b7b; font-family: Arial, Tahoma; font-size: 12px; margin: 0; padding: 0; text-align: center; width: 540px;"&gt;
%TEXTFOOTER%
&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;/body&gt;</value>
</data>
<data name="SocialNetworksFooterV10" xml:space="preserve">
<value>&lt;tr border="0" cellspacing="0" cellpadding="0"&gt;
&lt;td style="width: 40px; vertical-align: top; margin: 0; padding: 22px 5px 0 155px;"&gt;
&lt;a href="https://www.facebook.com/pages/OnlyOffice/833032526736775" style="width: 40px; height: 40px; display: block; margin: 0; padding: 0;" target="_blank"&gt;
&lt;img src="%IMAGEPATH%/social-fb-40.png" alt="Facebook" style="width: 40px; height: 40px;" /&gt;
&lt;/a&gt;
&lt;/td&gt;
&lt;td style="width: 40px; vertical-align: top; margin: 0; padding: 22px 5px 0 5px;"&gt;
&lt;a href="https://twitter.com/ONLY_OFFICE" style="width: 40px; height: 40px; display: block; margin: 0; padding: 0;" target="_blank"&gt;
&lt;img src="%IMAGEPATH%/social-tw-40.png" alt="Twitter" style="width: 40px; height: 40px;" /&gt;
&lt;/a&gt;
&lt;/td&gt;
&lt;td style="width: 40px; vertical-align: top; margin: 0; padding: 22px 5px 0 5px;"&gt;
&lt;a href="https://www.onlyoffice.com/blog" style="width: 40px; height: 40px; display: block; margin: 0; padding: 0;" target="_blank"&gt;
&lt;img src="%IMAGEPATH%/social-blog-40.png" alt="ONLYOFFICE" style="width: 40px; height: 40px;" /&gt;
&lt;/a&gt;
&lt;/td&gt;
&lt;td style="width: 40px; vertical-align: top; margin: 0; padding: 22px 5px 0 5px;"&gt;
&lt;a href="https://www.youtube.com/user/onlyofficeTV" style="width: 40px; height: 40px; display: block; margin: 0; padding: 0;" target="_blank"&gt;
&lt;img src="%IMAGEPATH%/social-youtube-40.png" alt="YouTube" style="width: 40px; height: 40x;" /&gt;
&lt;/a&gt;
&lt;/td&gt;
&lt;td style="width: 40px; vertical-align: top; margin: 0; padding: 22px 5px 0 5px;"&gt;
&lt;a href="https://vk.com/onlyoffice" style="width: 40px; height: 40px; display: block; margin: 0; padding: 0;" target="_blank"&gt;
&lt;img src="%IMAGEPATH%/social-vk-40.png" alt="VK" style="width: 40px; height: 40px;" /&gt;
&lt;/a&gt;
&lt;/td&gt;
&lt;td style="width: 40px; vertical-align: top; margin: 0; padding: 22px 155px 0 5px;"&gt;
&lt;a href="https://www.instagram.com/the_onlyoffice" style="width: 40px; height: 40px; display: block; margin: 0; padding: 0;" target="_blank"&gt;
&lt;img src="%IMAGEPATH%/social-inst-40.png" alt="Instagram" style="width: 40px; height: 40px;" /&gt;
&lt;/a&gt;
&lt;/td&gt;
<value>&lt;tr border="0" cellspacing="0" cellpadding="0"&gt;
&lt;td style="width: 40px; vertical-align: top; margin: 0; padding: 22px 5px 0 155px;"&gt;
&lt;a href="https://www.facebook.com/pages/OnlyOffice/833032526736775" style="width: 40px; height: 40px; display: block; margin: 0; padding: 0;" target="_blank"&gt;
&lt;img src="%IMAGEPATH%/social-fb-40.png" alt="Facebook" style="width: 40px; height: 40px;" /&gt;
&lt;/a&gt;
&lt;/td&gt;
&lt;td style="width: 40px; vertical-align: top; margin: 0; padding: 22px 5px 0 5px;"&gt;
&lt;a href="https://twitter.com/ONLY_OFFICE" style="width: 40px; height: 40px; display: block; margin: 0; padding: 0;" target="_blank"&gt;
&lt;img src="%IMAGEPATH%/social-tw-40.png" alt="Twitter" style="width: 40px; height: 40px;" /&gt;
&lt;/a&gt;
&lt;/td&gt;
&lt;td style="width: 40px; vertical-align: top; margin: 0; padding: 22px 5px 0 5px;"&gt;
&lt;a href="https://www.onlyoffice.com/blog" style="width: 40px; height: 40px; display: block; margin: 0; padding: 0;" target="_blank"&gt;
&lt;img src="%IMAGEPATH%/social-blog-40.png" alt="ONLYOFFICE" style="width: 40px; height: 40px;" /&gt;
&lt;/a&gt;
&lt;/td&gt;
&lt;td style="width: 40px; vertical-align: top; margin: 0; padding: 22px 5px 0 5px;"&gt;
&lt;a href="https://www.youtube.com/user/onlyofficeTV" style="width: 40px; height: 40px; display: block; margin: 0; padding: 0;" target="_blank"&gt;
&lt;img src="%IMAGEPATH%/social-youtube-40.png" alt="YouTube" style="width: 40px; height: 40x;" /&gt;
&lt;/a&gt;
&lt;/td&gt;
&lt;td style="width: 40px; vertical-align: top; margin: 0; padding: 22px 5px 0 5px;"&gt;
&lt;a href="https://vk.com/onlyoffice" style="width: 40px; height: 40px; display: block; margin: 0; padding: 0;" target="_blank"&gt;
&lt;img src="%IMAGEPATH%/social-vk-40.png" alt="VK" style="width: 40px; height: 40px;" /&gt;
&lt;/a&gt;
&lt;/td&gt;
&lt;td style="width: 40px; vertical-align: top; margin: 0; padding: 22px 155px 0 5px;"&gt;
&lt;a href="https://www.instagram.com/the_onlyoffice" style="width: 40px; height: 40px; display: block; margin: 0; padding: 0;" target="_blank"&gt;
&lt;img src="%IMAGEPATH%/social-inst-40.png" alt="Instagram" style="width: 40px; height: 40px;" /&gt;
&lt;/a&gt;
&lt;/td&gt;
&lt;/tr&gt;</value>
</data>
<data name="TextForFooterUnsubsribeDocSpace" xml:space="preserve">
<value>Questa email viene generata automaticamente e non è necessario che tu risponda.&lt;br /&gt;Hai ricevuto questa email perché sei un utente registrato di&lt;a href="{0}" target="_blank"&gt; DocSpace&lt;/a&gt;.
&lt;br /&gt; Fai clic qui per annullare l'iscrizione alle email di notifica di DocSpace: &lt;a href="{1}" target="_blank"&gt;Annulla iscrizione&lt;/a&gt;
&lt;br /&gt;</value>
</data>
</root>

View File

@ -58,10 +58,143 @@
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=6.0.2.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<data name="TextForFooterWithUnsubscribeLink" xml:space="preserve">
<value>このメールは送信専用メールアドレスから配信されています。 このままご返信いただいてもお答えできませんのでご了承ください。
&lt;br /&gt;本メールは、&lt;a href="{0}" style="color: #7b7b7b;" target="_blank"&gt;{0}&lt;/a&gt; に登録いただいているみなさまにお送りしております。
&lt;br /&gt;「ご案内メール」の受信を希望しない場合は、こちらを押してください。&lt;a href="{1}" style="color: #7b7b7b;" target="_blank"&gt;受信解除&lt;/a&gt;
<data name="TextForFooterUnsubsribeDocSpace" xml:space="preserve">
<value>このメールは自動的に生成されるので、回答する必要はありません。&lt;br /&gt;&lt;a href="{0}" target="_blank"&gt;DocSpace&lt;/a&gt;の登録ユーザーであるため、このメールを受け取りました。
&lt;br /&gt;DocSpaceの通知メールの配信を停止するには、ここをクリックしてください &lt;a href="{1}"  target="_blank"&gt;購読中止&lt;/a&gt;
&lt;br /&gt;</value>
</data>
<data name="SocialNetworksFooterV10" xml:space="preserve">
<value>&lt;tr border="0" cellspacing="0" cellpadding="0"&gt;
&lt;td style="width: 40px; vertical-align: top; margin: 0; padding: 22px 5px 0 155px;"&gt;
&lt;a href="https://www.facebook.com/pages/OnlyOffice/833032526736775" style="width: 40px; height: 40px; display: block; margin: 0; padding: 0;" target="_blank"&gt;
&lt;img src="%IMAGEPATH%/social-fb-40.png" alt="Facebook" style="width: 40px; height: 40px;" /&gt;
&lt;/a&gt;
&lt;/td&gt;
&lt;td style="width: 40px; vertical-align: top; margin: 0; padding: 22px 5px 0 5px;"&gt;
&lt;a href="https://twitter.com/ONLY_OFFICE" style="width: 40px; height: 40px; display: block; margin: 0; padding: 0;" target="_blank"&gt;
&lt;img src="%IMAGEPATH%/social-tw-40.png" alt="Twitter" style="width: 40px; height: 40px;" /&gt;
&lt;/a&gt;
&lt;/td&gt;
&lt;td style="width: 40px; vertical-align: top; margin: 0; padding: 22px 5px 0 5px;"&gt;
&lt;a href="https://www.onlyoffice.com/blog" style="width: 40px; height: 40px; display: block; margin: 0; padding: 0;" target="_blank"&gt;
&lt;img src="%IMAGEPATH%/social-blog-40.png" alt="ONLYOFFICE" style="width: 40px; height: 40px;" /&gt;
&lt;/a&gt;
&lt;/td&gt;
&lt;td style="width: 40px; vertical-align: top; margin: 0; padding: 22px 5px 0 5px;"&gt;
&lt;a href="https://www.youtube.com/user/onlyofficeTV" style="width: 40px; height: 40px; display: block; margin: 0; padding: 0;" target="_blank"&gt;
&lt;img src="%IMAGEPATH%/social-youtube-40.png" alt="YouTube" style="width: 40px; height: 40x;" /&gt;
&lt;/a&gt;
&lt;/td&gt;
&lt;td style="width: 40px; vertical-align: top; margin: 0; padding: 22px 5px 0 5px;"&gt;
&lt;a href="https://vk.com/onlyoffice" style="width: 40px; height: 40px; display: block; margin: 0; padding: 0;" target="_blank"&gt;
&lt;img src="%IMAGEPATH%/social-vk-40.png" alt="VK" style="width: 40px; height: 40px;" /&gt;
&lt;/a&gt;
&lt;/td&gt;
&lt;td style="width: 40px; vertical-align: top; margin: 0; padding: 22px 155px 0 5px;"&gt;
&lt;a href="https://www.instagram.com/the_onlyoffice" style="width: 40px; height: 40px; display: block; margin: 0; padding: 0;" target="_blank"&gt;
&lt;img src="%IMAGEPATH%/social-inst-40.png" alt="Instagram" style="width: 40px; height: 40px;" /&gt;
&lt;/a&gt;
&lt;/td&gt;
&lt;/tr&gt;</value>
</data>
<data name="HtmlMaster" xml:space="preserve">
<value>&lt;body style="margin: 0; padding: 0; text-align: center; width: 100%; font-family: Arial, sans-serif; font-size: 14px; color: #333;"&gt;
&lt;div style="background-color: #fff; width: 600px; margin: 0 auto; text-align: left;"&gt;
&lt;table cellspacing="0" cellpadding="0" style="font-family: Arial; font-size: 14px; color: #333; background: #fff; text-align: center; width: 600px; margin: 0; padding: 0; border: 0 none; border-collapse: collapse; empty-cells: show; border-spacing: 0;"&gt;
&lt;tbody&gt;
&lt;tr border="0" cellspacing="0" cellpadding="0"&gt;
&lt;td colspan="3" style="margin: 0; padding: 0; background-color: #fff; height: 65px; padding: 20px 0 0 30px;"&gt;
&lt;div style="text-align: left; height: 65px; width: 570px; margin: 0; padding: 0;"&gt;
&lt;a href="%SITEURL%" style="text-decoration: none; display: inline-block; width: 386px; height: 44px; margin: 0; padding: 0;" target="_blank"&gt;
&lt;img src="%LOGO%" style="border: 0px none; width: 386px; height: 44px; margin: 0; padding: 0;" alt="%LOGOTEXT%" /&gt;
&lt;/a&gt;
&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr border="0" cellspacing="0" cellpadding="0"&gt;
&lt;td colspan="3" style="margin: 0; padding: 15px 30px 15px; background-color: #f6f6f6; -moz-border-radius: 6px; -webkit-border-radius: 6px; border-radius: 6px;"&gt;
&lt;div style="font-family: Arial; font-size: 14px; color: #333; margin: 0; padding: 0; width: 540px; height: auto; overflow: hidden; word-wrap: break-word; vertical-align: top; text-align: left; border: 0 none;"&gt;
%CONTENT%
&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
%FOOTER%
&lt;/tbody&gt;
&lt;/table&gt;
&lt;table cellspacing="0" cellpadding="0" style="font-family: Arial; font-size: 14px; color: #333; text-align: center; vertical-align: top; width: 600px; margin: 0; padding: 0; border-collapse: collapse; border: 0; border-spacing: 0; "&gt;
&lt;tbody&gt;
%FOOTERSOCIAL%
&lt;tr border="0" cellspacing="0" cellpadding="0"&gt;
&lt;td colspan="6" style="width: 600px; vertical-align: top; margin: 0; padding: 20px 30px 15px;"&gt;
&lt;p style="color: #7b7b7b; font-family: Arial, Tahoma; font-size: 12px; margin: 0; padding: 0; text-align: center; width: 540px;"&gt;
%TEXTFOOTER%
&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;/body&gt;</value>
</data>
<data name="FooterCommonV10" xml:space="preserve">
<value>&lt;tr border="0" cellspacing="0" cellpadding="0"&gt;&lt;td colspan="3" style="height: 10px; line-height: 10px; background: #fff; padding: 0; margin: 0;"&gt;&amp;nbsp;&lt;/td&gt;&lt;/tr&gt;
&lt;tr border="0" cellspacing="0" cellpadding="0"&gt;
&lt;td style="vertical-align: top; margin: 0; padding: 34px 0 0 0; width: 210px; height: 108px; background: #f6f6f6; -moz-border-radius-topleft: 6px; -webkit-border-top-left-radius: 6px; border-top-left-radius: 6px;"&gt;
&lt;img src="%IMAGEPATH%/tech-100.png" style="width: 100px; height: 100px;margin: 0 auto;" /&gt;
&lt;/td&gt;
&lt;td style="vertical-align: top; margin: 0; padding: 34px 0 0 0; width: 180px; height: 108px; background: #f6f6f6;"&gt;
&lt;img src="%IMAGEPATH%/mailus-100.png" style="width: 100px; height: 100px;margin: 0 auto;" /&gt;
&lt;/td&gt;
&lt;td style="vertical-align: top; margin: 0; padding: 34px 0 0 0; width: 210px; height: 108px; background: #f6f6f6; -moz-border-radius-topright: 6px; -webkit-border-top-right-radius: 6px; border-top-right-radius: 6px;"&gt;
&lt;img src="%IMAGEPATH%/demo-100.png" style="width: 100px; height: 100px;margin: 0 auto;" /&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr border="0" cellspacing="0" cellpadding="0"&gt;
&lt;td style="vertical-align: top; margin: 0; padding: 0; width: 210px; height: 16px; background: #f6f6f6;"&gt;Need tech help?&lt;/td&gt;
&lt;td style="vertical-align: top; margin: 0; padding: 0; width: 180px; height: 16px; background: #f6f6f6;"&gt;Sales Questions&lt;/td&gt;
&lt;td style="vertical-align: top; margin: 0; padding: 0; width: 210px; height: 16px; background: #f6f6f6;"&gt;Order Demo&lt;/td&gt;
&lt;/tr&gt;
&lt;tr border="0" cellspacing="0" cellpadding="0"&gt;
&lt;td style="vertical-align: top; margin: 0; padding: 0 0 30px; width: 210px; background: #f6f6f6;-moz-border-radius-bottomleft: 6px; -webkit-border-bottom-left-radius: 6px; border-bottom-left-radius: 6px;"&gt;
&lt;a href="%SUPPORTURL%" target="_blank" style="color: #333;"&gt;Send your question&lt;/a&gt;
&lt;/td&gt;
&lt;td style="vertical-align: top; margin: 0; padding: 0 0 30px; width: 180px; background: #f6f6f6;"&gt;
&lt;a href="mailto:%SALESEMAIL%" style="color: #333;"&gt;Email us&lt;/a&gt;
&lt;/td&gt;
&lt;td style="vertical-align: top; margin: 0; padding: 0 0 30px; width: 210px; background: #f6f6f6;-moz-border-radius-bottomright: 6px; -webkit-border-bottom-right-radius: 6px; border-bottom-right-radius: 6px;"&gt;
&lt;a href="%DEMOURL%" target="_blank" style="color: #333;"&gt;Send a request&lt;/a&gt;
&lt;/td&gt;
&lt;/tr&gt;</value>
</data>
<data name="FooterOpensourceV10" xml:space="preserve">
<value>&lt;tr border="0" cellspacing="0" cellpadding="0"&gt;&lt;td colspan="3" style="height: 10px; line-height: 10px; background: #fff; padding: 0; margin: 0;"&gt;&amp;nbsp;&lt;/td&gt;&lt;/tr&gt;
&lt;tr border="0" cellspacing="0" cellpadding="0"&gt;
&lt;td style="vertical-align: top; margin: 0; padding: 34px 0 0 0; width: 210px; height: 108px; background: #f6f6f6; -moz-border-radius-topleft: 6px; -webkit-border-top-left-radius: 6px; border-top-left-radius: 6px;"&gt;
&lt;img src="%IMAGEPATH%/tech-100.png" style="width: 100px; height: 100px;margin: 0 auto;" /&gt;
&lt;/td&gt;
&lt;td style="vertical-align: top; margin: 0; padding: 34px 0 0 0; width: 180px; height: 108px; background: #f6f6f6;"&gt;
&lt;img src="%IMAGEPATH%/mailus-100.png" style="width: 100px; height: 100px;margin: 0 auto;" /&gt;
&lt;/td&gt;
&lt;td style="vertical-align: top; margin: 0; padding: 34px 0 0 0; width: 210px; height: 108px; background: #f6f6f6; -moz-border-radius-topright: 6px; -webkit-border-top-right-radius: 6px; border-top-right-radius: 6px;"&gt;
&lt;img src="%IMAGEPATH%/demo-100.png" style="width: 100px; height: 100px;margin: 0 auto;" /&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr border="0" cellspacing="0" cellpadding="0"&gt;
&lt;td style="vertical-align: top; margin: 0; padding: 0; width: 210px; height: 16px; background: #f6f6f6;"&gt;Need tech help?&lt;/td&gt;
&lt;td style="vertical-align: top; margin: 0; padding: 0; width: 180px; height: 16px; background: #f6f6f6;"&gt;Sales Questions&lt;/td&gt;
&lt;td style="vertical-align: top; margin: 0; padding: 0; width: 210px; height: 16px; background: #f6f6f6;"&gt;Order Demo&lt;/td&gt;
&lt;/tr&gt;
&lt;tr border="0" cellspacing="0" cellpadding="0"&gt;
&lt;td style="vertical-align: top; margin: 0; padding: 0 0 30px; width: 210px; background: #f6f6f6;-moz-border-radius-bottomleft: 6px; -webkit-border-bottom-left-radius: 6px; border-bottom-left-radius: 6px;"&gt;
&lt;a href="http://dev.onlyoffice.org/" target="_blank" style="color: #333;"&gt;Ask the Community&lt;/a&gt;
&lt;/td&gt;
&lt;td style="vertical-align: top; margin: 0; padding: 0 0 30px; width: 180px; background: #f6f6f6;"&gt;
&lt;a href="mailto:sales@onlyoffice.com" style="color: #333;"&gt;Email us&lt;/a&gt;
&lt;/td&gt;
&lt;td style="vertical-align: top; margin: 0; padding: 0 0 30px; width: 210px; background: #f6f6f6;-moz-border-radius-bottomright: 6px; -webkit-border-bottom-right-radius: 6px; border-bottom-right-radius: 6px;"&gt;
&lt;a href="http://www.onlyoffice.com/demo-order.aspx" target="_blank" style="color: #333;"&gt;Send a request&lt;/a&gt;
&lt;/td&gt;
&lt;/tr&gt;</value>
</data>
</root>

View File

@ -0,0 +1,254 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<data name="HtmlMaster" xml:space="preserve">
<value>&lt;body style="margin: 0; padding: 0; text-align: center; width: 100%; font-family: Arial, sans-serif; font-size: 14px; color: #333;"&gt;
&lt;div style="background-color: #fff; width: 600px; margin: 0 auto; text-align: left;"&gt;
&lt;table cellspacing="0" cellpadding="0" style="font-family: Arial; font-size: 14px; color: #333; background: #fff; text-align: center; width: 600px; margin: 0; padding: 0; border: 0 none; border-collapse: collapse; empty-cells: show; border-spacing: 0;"&gt;
&lt;tbody&gt;
&lt;tr border="0" cellspacing="0" cellpadding="0"&gt;
&lt;td colspan="3" style="margin: 0; padding: 0; background-color: #fff; height: 65px; padding: 20px 0 0 30px;"&gt;
&lt;div style="text-align: left; height: 65px; width: 570px; margin: 0; padding: 0;"&gt;
&lt;a href="%SITEURL%" style="text-decoration: none; display: inline-block; width: 386px; height: 44px; margin: 0; padding: 0;" target="_blank"&gt;
&lt;img src="%LOGO%" style="border: 0px none; width: 386px; height: 44px; margin: 0; padding: 0;" alt="%LOGOTEXT%" /&gt;
&lt;/a&gt;
&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr border="0" cellspacing="0" cellpadding="0"&gt;
&lt;td colspan="3" style="margin: 0; padding: 15px 30px 15px; background-color: #f6f6f6; -moz-border-radius: 6px; -webkit-border-radius: 6px; border-radius: 6px;"&gt;
&lt;div style="font-family: Arial; font-size: 14px; color: #333; margin: 0; padding: 0; width: 540px; height: auto; overflow: hidden; word-wrap: break-word; vertical-align: top; text-align: left; border: 0 none;"&gt;
%CONTENT%
&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
%FOOTER%
&lt;/tbody&gt;
&lt;/table&gt;
&lt;table cellspacing="0" cellpadding="0" style="font-family: Arial; font-size: 14px; color: #333; text-align: center; vertical-align: top; width: 600px; margin: 0; padding: 0; border-collapse: collapse; border: 0; border-spacing: 0; "&gt;
&lt;tbody&gt;
%FOOTERSOCIAL%
&lt;tr border="0" cellspacing="0" cellpadding="0"&gt;
&lt;td colspan="6" style="width: 600px; vertical-align: top; margin: 0; padding: 20px 30px 15px;"&gt;
&lt;p style="color: #7b7b7b; font-family: Arial, Tahoma; font-size: 12px; margin: 0; padding: 0; text-align: center; width: 540px;"&gt;
%TEXTFOOTER%
&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;/body&gt;</value>
</data>
<data name="SocialNetworksFooterV10" xml:space="preserve">
<value>&lt;tr border="0" cellspacing="0" cellpadding="0"&gt;
&lt;td style="width: 40px; vertical-align: top; margin: 0; padding: 22px 5px 0 155px;"&gt;
&lt;a href="https://www.facebook.com/pages/OnlyOffice/833032526736775" style="width: 40px; height: 40px; display: block; margin: 0; padding: 0;" target="_blank"&gt;
&lt;img src="%IMAGEPATH%/social-fb-40.png" alt="Facebook" style="width: 40px; height: 40px;" /&gt;
&lt;/a&gt;
&lt;/td&gt;
&lt;td style="width: 40px; vertical-align: top; margin: 0; padding: 22px 5px 0 5px;"&gt;
&lt;a href="https://twitter.com/ONLY_OFFICE" style="width: 40px; height: 40px; display: block; margin: 0; padding: 0;" target="_blank"&gt;
&lt;img src="%IMAGEPATH%/social-tw-40.png" alt="Twitter" style="width: 40px; height: 40px;" /&gt;
&lt;/a&gt;
&lt;/td&gt;
&lt;td style="width: 40px; vertical-align: top; margin: 0; padding: 22px 5px 0 5px;"&gt;
&lt;a href="https://www.onlyoffice.com/blog" style="width: 40px; height: 40px; display: block; margin: 0; padding: 0;" target="_blank"&gt;
&lt;img src="%IMAGEPATH%/social-blog-40.png" alt="ONLYOFFICE" style="width: 40px; height: 40px;" /&gt;
&lt;/a&gt;
&lt;/td&gt;
&lt;td style="width: 40px; vertical-align: top; margin: 0; padding: 22px 5px 0 5px;"&gt;
&lt;a href="https://www.youtube.com/user/onlyofficeTV" style="width: 40px; height: 40px; display: block; margin: 0; padding: 0;" target="_blank"&gt;
&lt;img src="%IMAGEPATH%/social-youtube-40.png" alt="YouTube" style="width: 40px; height: 40x;" /&gt;
&lt;/a&gt;
&lt;/td&gt;
&lt;td style="width: 40px; vertical-align: top; margin: 0; padding: 22px 5px 0 5px;"&gt;
&lt;a href="https://vk.com/onlyoffice" style="width: 40px; height: 40px; display: block; margin: 0; padding: 0;" target="_blank"&gt;
&lt;img src="%IMAGEPATH%/social-vk-40.png" alt="VK" style="width: 40px; height: 40px;" /&gt;
&lt;/a&gt;
&lt;/td&gt;
&lt;td style="width: 40px; vertical-align: top; margin: 0; padding: 22px 155px 0 5px;"&gt;
&lt;a href="https://www.instagram.com/the_onlyoffice" style="width: 40px; height: 40px; display: block; margin: 0; padding: 0;" target="_blank"&gt;
&lt;img src="%IMAGEPATH%/social-inst-40.png" alt="Instagram" style="width: 40px; height: 40px;" /&gt;
&lt;/a&gt;
&lt;/td&gt;
&lt;/tr&gt;</value>
</data>
<data name="FooterCommonV10" xml:space="preserve">
<value>&lt;tr border="0" cellspacing="0" cellpadding="0"&gt;&lt;td colspan="3" style="height: 10px; line-height: 10px; background: #fff; padding: 0; margin: 0;"&gt;&amp;nbsp;&lt;/td&gt;&lt;/tr&gt;
&lt;tr border="0" cellspacing="0" cellpadding="0"&gt;
&lt;td style="vertical-align: top; margin: 0; padding: 34px 0 0 0; width: 210px; height: 108px; background: #f6f6f6; -moz-border-radius-topleft: 6px; -webkit-border-top-left-radius: 6px; border-top-left-radius: 6px;"&gt;
&lt;img src="%IMAGEPATH%/tech-100.png" style="width: 100px; height: 100px;margin: 0 auto;" /&gt;
&lt;/td&gt;
&lt;td style="vertical-align: top; margin: 0; padding: 34px 0 0 0; width: 180px; height: 108px; background: #f6f6f6;"&gt;
&lt;img src="%IMAGEPATH%/mailus-100.png" style="width: 100px; height: 100px;margin: 0 auto;" /&gt;
&lt;/td&gt;
&lt;td style="vertical-align: top; margin: 0; padding: 34px 0 0 0; width: 210px; height: 108px; background: #f6f6f6; -moz-border-radius-topright: 6px; -webkit-border-top-right-radius: 6px; border-top-right-radius: 6px;"&gt;
&lt;img src="%IMAGEPATH%/demo-100.png" style="width: 100px; height: 100px;margin: 0 auto;" /&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr border="0" cellspacing="0" cellpadding="0"&gt;
&lt;td style="vertical-align: top; margin: 0; padding: 0; width: 210px; height: 16px; background: #f6f6f6;"&gt;Need tech help?&lt;/td&gt;
&lt;td style="vertical-align: top; margin: 0; padding: 0; width: 180px; height: 16px; background: #f6f6f6;"&gt;Sales Questions&lt;/td&gt;
&lt;td style="vertical-align: top; margin: 0; padding: 0; width: 210px; height: 16px; background: #f6f6f6;"&gt;Order Demo&lt;/td&gt;
&lt;/tr&gt;
&lt;tr border="0" cellspacing="0" cellpadding="0"&gt;
&lt;td style="vertical-align: top; margin: 0; padding: 0 0 30px; width: 210px; background: #f6f6f6;-moz-border-radius-bottomleft: 6px; -webkit-border-bottom-left-radius: 6px; border-bottom-left-radius: 6px;"&gt;
&lt;a href="%SUPPORTURL%" target="_blank" style="color: #333;"&gt;Send your question&lt;/a&gt;
&lt;/td&gt;
&lt;td style="vertical-align: top; margin: 0; padding: 0 0 30px; width: 180px; background: #f6f6f6;"&gt;
&lt;a href="mailto:%SALESEMAIL%" style="color: #333;"&gt;Email us&lt;/a&gt;
&lt;/td&gt;
&lt;td style="vertical-align: top; margin: 0; padding: 0 0 30px; width: 210px; background: #f6f6f6;-moz-border-radius-bottomright: 6px; -webkit-border-bottom-right-radius: 6px; border-bottom-right-radius: 6px;"&gt;
&lt;a href="%DEMOURL%" target="_blank" style="color: #333;"&gt;Send a request&lt;/a&gt;
&lt;/td&gt;
&lt;/tr&gt;</value>
</data>
<data name="FooterOpensourceV10" xml:space="preserve">
<value>&lt;tr border="0" cellspacing="0" cellpadding="0"&gt;&lt;td colspan="3" style="height: 10px; line-height: 10px; background: #fff; padding: 0; margin: 0;"&gt;&amp;nbsp;&lt;/td&gt;&lt;/tr&gt;
&lt;tr border="0" cellspacing="0" cellpadding="0"&gt;
&lt;td style="vertical-align: top; margin: 0; padding: 34px 0 0 0; width: 210px; height: 108px; background: #f6f6f6; -moz-border-radius-topleft: 6px; -webkit-border-top-left-radius: 6px; border-top-left-radius: 6px;"&gt;
&lt;img src="%IMAGEPATH%/tech-100.png" style="width: 100px; height: 100px;margin: 0 auto;" /&gt;
&lt;/td&gt;
&lt;td style="vertical-align: top; margin: 0; padding: 34px 0 0 0; width: 180px; height: 108px; background: #f6f6f6;"&gt;
&lt;img src="%IMAGEPATH%/mailus-100.png" style="width: 100px; height: 100px;margin: 0 auto;" /&gt;
&lt;/td&gt;
&lt;td style="vertical-align: top; margin: 0; padding: 34px 0 0 0; width: 210px; height: 108px; background: #f6f6f6; -moz-border-radius-topright: 6px; -webkit-border-top-right-radius: 6px; border-top-right-radius: 6px;"&gt;
&lt;img src="%IMAGEPATH%/demo-100.png" style="width: 100px; height: 100px;margin: 0 auto;" /&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr border="0" cellspacing="0" cellpadding="0"&gt;
&lt;td style="vertical-align: top; margin: 0; padding: 0; width: 210px; height: 16px; background: #f6f6f6;"&gt;Need tech help?&lt;/td&gt;
&lt;td style="vertical-align: top; margin: 0; padding: 0; width: 180px; height: 16px; background: #f6f6f6;"&gt;Sales Questions&lt;/td&gt;
&lt;td style="vertical-align: top; margin: 0; padding: 0; width: 210px; height: 16px; background: #f6f6f6;"&gt;Order Demo&lt;/td&gt;
&lt;/tr&gt;
&lt;tr border="0" cellspacing="0" cellpadding="0"&gt;
&lt;td style="vertical-align: top; margin: 0; padding: 0 0 30px; width: 210px; background: #f6f6f6;-moz-border-radius-bottomleft: 6px; -webkit-border-bottom-left-radius: 6px; border-bottom-left-radius: 6px;"&gt;
&lt;a href="http://dev.onlyoffice.org/" target="_blank" style="color: #333;"&gt;Ask the Community&lt;/a&gt;
&lt;/td&gt;
&lt;td style="vertical-align: top; margin: 0; padding: 0 0 30px; width: 180px; background: #f6f6f6;"&gt;
&lt;a href="mailto:sales@onlyoffice.com" style="color: #333;"&gt;Email us&lt;/a&gt;
&lt;/td&gt;
&lt;td style="vertical-align: top; margin: 0; padding: 0 0 30px; width: 210px; background: #f6f6f6;-moz-border-radius-bottomright: 6px; -webkit-border-bottom-right-radius: 6px; border-bottom-right-radius: 6px;"&gt;
&lt;a href="http://www.onlyoffice.com/demo-order.aspx" target="_blank" style="color: #333;"&gt;Send a request&lt;/a&gt;
&lt;/td&gt;
&lt;/tr&gt;</value>
</data>
</root>

View File

@ -59,103 +59,137 @@
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=6.0.2.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<data name="FooterCommonV10" xml:space="preserve">
<value>&lt;tr border="0" cellspacing="0" cellpadding="0"&gt;&lt;td colspan="3" style="height: 10px; line-height: 10px; background: #fff; padding: 0; margin: 0;"&gt; &lt;/td&gt;&lt;/tr&gt;
&lt;tr border="0" cellspacing="0" cellpadding="0"&gt;
&lt;td style="vertical-align: top; margin: 0; padding: 34px 0 0 0; width: 210px; height: 108px; background: #f6f6f6; -moz-border-radius-topleft: 6px; -webkit-border-top-left-radius: 6px; border-top-left-radius: 6px;"&gt;
&lt;img src="%IMAGEPATH%/tech-100.png" style="width: 100px; height: 100px;margin: 0 auto;" /&gt;
&lt;/td&gt;
&lt;td style="vertical-align: top; margin: 0; padding: 34px 0 0 0; width: 180px; height: 108px; background: #f6f6f6;"&gt;
&lt;img src="%IMAGEPATH%/mailus-100.png" style="width: 100px; height: 100px;margin: 0 auto;" /&gt;
&lt;/td&gt;
&lt;td style="vertical-align: top; margin: 0; padding: 34px 0 0 0; width: 210px; height: 108px; background: #f6f6f6; -moz-border-radius-topright: 6px; -webkit-border-top-right-radius: 6px; border-top-right-radius: 6px;"&gt;
&lt;img src="%IMAGEPATH%/demo-100.png" style="width: 100px; height: 100px;margin: 0 auto;" /&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr border="0" cellspacing="0" cellpadding="0"&gt;
&lt;td style="vertical-align: top; margin: 0; padding: 0; width: 210px; height: 16px; background: #f6f6f6;"&gt;Нужна помощь?&lt;/td&gt;
&lt;td style="vertical-align: top; margin: 0; padding: 0; width: 180px; height: 16px; background: #f6f6f6;"&gt;Вопросы по покупке&lt;/td&gt;
&lt;td style="vertical-align: top; margin: 0; padding: 0; width: 210px; height: 16px; background: #f6f6f6;"&gt;Заказ демонстрации&lt;/td&gt;
&lt;/tr&gt;
&lt;tr border="0" cellspacing="0" cellpadding="0"&gt;
&lt;td style="vertical-align: top; margin: 0; padding: 0 0 30px; width: 210px; background: #f6f6f6;-moz-border-radius-bottomleft: 6px; -webkit-border-bottom-left-radius: 6px; border-bottom-left-radius: 6px;"&gt;
&lt;a href="%SUPPORTURL%" target="_blank" style="color: #333;"&gt;Задайте вопрос&lt;/a&gt;
&lt;/td&gt;
&lt;td style="vertical-align: top; margin: 0; padding: 0 0 30px; width: 180px; background: #f6f6f6;"&gt;
&lt;a href="mailto:%SALESEMAIL%" style="color: #333;"&gt;Напишите нам&lt;/a&gt;
&lt;/td&gt;
&lt;td style="vertical-align: top; margin: 0; padding: 0 0 30px; width: 210px; background: #f6f6f6;-moz-border-radius-bottomright: 6px; -webkit-border-bottom-right-radius: 6px; border-bottom-right-radius: 6px;"&gt;
&lt;a href="%DEMOURL%" target="_blank" style="color: #333;"&gt;Отправьте запрос&lt;/a&gt;
&lt;/td&gt;
<value>&lt;tr border="0" cellspacing="0" cellpadding="0"&gt;&lt;td colspan="3" style="height: 10px; line-height: 10px; background: #fff; padding: 0; margin: 0;"&gt; &lt;/td&gt;&lt;/tr&gt;
&lt;tr border="0" cellspacing="0" cellpadding="0"&gt;
&lt;td style="vertical-align: top; margin: 0; padding: 34px 0 0 0; width: 210px; height: 108px; background: #f6f6f6; -moz-border-radius-topleft: 6px; -webkit-border-top-left-radius: 6px; border-top-left-radius: 6px;"&gt;
&lt;img src="%IMAGEPATH%/tech-100.png" style="width: 100px; height: 100px;margin: 0 auto;" /&gt;
&lt;/td&gt;
&lt;td style="vertical-align: top; margin: 0; padding: 34px 0 0 0; width: 180px; height: 108px; background: #f6f6f6;"&gt;
&lt;img src="%IMAGEPATH%/mailus-100.png" style="width: 100px; height: 100px;margin: 0 auto;" /&gt;
&lt;/td&gt;
&lt;td style="vertical-align: top; margin: 0; padding: 34px 0 0 0; width: 210px; height: 108px; background: #f6f6f6; -moz-border-radius-topright: 6px; -webkit-border-top-right-radius: 6px; border-top-right-radius: 6px;"&gt;
&lt;img src="%IMAGEPATH%/demo-100.png" style="width: 100px; height: 100px;margin: 0 auto;" /&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr border="0" cellspacing="0" cellpadding="0"&gt;
&lt;td style="vertical-align: top; margin: 0; padding: 0; width: 210px; height: 16px; background: #f6f6f6;"&gt;Нужна помощь?&lt;/td&gt;
&lt;td style="vertical-align: top; margin: 0; padding: 0; width: 180px; height: 16px; background: #f6f6f6;"&gt;Вопросы по покупке&lt;/td&gt;
&lt;td style="vertical-align: top; margin: 0; padding: 0; width: 210px; height: 16px; background: #f6f6f6;"&gt;Заказ демонстрации&lt;/td&gt;
&lt;/tr&gt;
&lt;tr border="0" cellspacing="0" cellpadding="0"&gt;
&lt;td style="vertical-align: top; margin: 0; padding: 0 0 30px; width: 210px; background: #f6f6f6;-moz-border-radius-bottomleft: 6px; -webkit-border-bottom-left-radius: 6px; border-bottom-left-radius: 6px;"&gt;
&lt;a href="%SUPPORTURL%" target="_blank" style="color: #333;"&gt;Задайте вопрос&lt;/a&gt;
&lt;/td&gt;
&lt;td style="vertical-align: top; margin: 0; padding: 0 0 30px; width: 180px; background: #f6f6f6;"&gt;
&lt;a href="mailto:%SALESEMAIL%" style="color: #333;"&gt;Напишите нам&lt;/a&gt;
&lt;/td&gt;
&lt;td style="vertical-align: top; margin: 0; padding: 0 0 30px; width: 210px; background: #f6f6f6;-moz-border-radius-bottomright: 6px; -webkit-border-bottom-right-radius: 6px; border-bottom-right-radius: 6px;"&gt;
&lt;a href="%DEMOURL%" target="_blank" style="color: #333;"&gt;Отправьте запрос&lt;/a&gt;
&lt;/td&gt;
&lt;/tr&gt;</value>
</data>
<data name="FooterOpensourceV10" xml:space="preserve">
<value>&lt;tr border="0" cellspacing="0" cellpadding="0"&gt;&lt;td colspan="3" style="height: 10px; line-height: 10px; background: #fff; padding: 0; margin: 0;"&gt; &lt;/td&gt;&lt;/tr&gt;
&lt;tr border="0" cellspacing="0" cellpadding="0"&gt;
&lt;td style="vertical-align: top; margin: 0; padding: 34px 0 0 0; width: 210px; height: 108px; background: #f6f6f6; -moz-border-radius-topleft: 6px; -webkit-border-top-left-radius: 6px; border-top-left-radius: 6px;"&gt;
&lt;img src="%IMAGEPATH%/tech-100.png" style="width: 100px; height: 100px;margin: 0 auto;" /&gt;
&lt;/td&gt;
&lt;td style="vertical-align: top; margin: 0; padding: 34px 0 0 0; width: 180px; height: 108px; background: #f6f6f6;"&gt;
&lt;img src="%IMAGEPATH%/mailus-100.png" style="width: 100px; height: 100px;margin: 0 auto;" /&gt;
&lt;/td&gt;
&lt;td style="vertical-align: top; margin: 0; padding: 34px 0 0 0; width: 210px; height: 108px; background: #f6f6f6; -moz-border-radius-topright: 6px; -webkit-border-top-right-radius: 6px; border-top-right-radius: 6px;"&gt;
&lt;img src="%IMAGEPATH%/demo-100.png" style="width: 100px; height: 100px;margin: 0 auto;" /&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr border="0" cellspacing="0" cellpadding="0"&gt;
&lt;td style="vertical-align: top; margin: 0; padding: 0; width: 210px; height: 16px; background: #f6f6f6;"&gt;Нужна помощь?&lt;/td&gt;
&lt;td style="vertical-align: top; margin: 0; padding: 0; width: 180px; height: 16px; background: #f6f6f6;"&gt;Вопросы по покупке&lt;/td&gt;
&lt;td style="vertical-align: top; margin: 0; padding: 0; width: 210px; height: 16px; background: #f6f6f6;"&gt;Заказ демонстрации&lt;/td&gt;
&lt;/tr&gt;
&lt;tr border="0" cellspacing="0" cellpadding="0"&gt;
&lt;td style="vertical-align: top; margin: 0; padding: 0 0 30px; width: 210px; background: #f6f6f6;-moz-border-radius-bottomleft: 6px; -webkit-border-bottom-left-radius: 6px; border-bottom-left-radius: 6px;"&gt;
&lt;a href="http://dev.onlyoffice.org/" target="_blank" style="color: #333;"&gt;Задайте вопрос&lt;/a&gt;
&lt;/td&gt;
&lt;td style="vertical-align: top; margin: 0; padding: 0 0 30px; width: 180px; background: #f6f6f6;"&gt;
&lt;a href="mailto:sales@onlyoffice.com" style="color: #333;"&gt;Напишите нам&lt;/a&gt;
&lt;/td&gt;
&lt;td style="vertical-align: top; margin: 0; padding: 0 0 30px; width: 210px; background: #f6f6f6;-moz-border-radius-bottomright: 6px; -webkit-border-bottom-right-radius: 6px; border-bottom-right-radius: 6px;"&gt;
&lt;a href="http://www.onlyoffice.com/demo-order.aspx" target="_blank" style="color: #333;"&gt;Отправьте запрос&lt;/a&gt;
&lt;/td&gt;
<value>&lt;tr border="0" cellspacing="0" cellpadding="0"&gt;&lt;td colspan="3" style="height: 10px; line-height: 10px; background: #fff; padding: 0; margin: 0;"&gt; &lt;/td&gt;&lt;/tr&gt;
&lt;tr border="0" cellspacing="0" cellpadding="0"&gt;
&lt;td style="vertical-align: top; margin: 0; padding: 34px 0 0 0; width: 210px; height: 108px; background: #f6f6f6; -moz-border-radius-topleft: 6px; -webkit-border-top-left-radius: 6px; border-top-left-radius: 6px;"&gt;
&lt;img src="%IMAGEPATH%/tech-100.png" style="width: 100px; height: 100px;margin: 0 auto;" /&gt;
&lt;/td&gt;
&lt;td style="vertical-align: top; margin: 0; padding: 34px 0 0 0; width: 180px; height: 108px; background: #f6f6f6;"&gt;
&lt;img src="%IMAGEPATH%/mailus-100.png" style="width: 100px; height: 100px;margin: 0 auto;" /&gt;
&lt;/td&gt;
&lt;td style="vertical-align: top; margin: 0; padding: 34px 0 0 0; width: 210px; height: 108px; background: #f6f6f6; -moz-border-radius-topright: 6px; -webkit-border-top-right-radius: 6px; border-top-right-radius: 6px;"&gt;
&lt;img src="%IMAGEPATH%/demo-100.png" style="width: 100px; height: 100px;margin: 0 auto;" /&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr border="0" cellspacing="0" cellpadding="0"&gt;
&lt;td style="vertical-align: top; margin: 0; padding: 0; width: 210px; height: 16px; background: #f6f6f6;"&gt;Нужна помощь?&lt;/td&gt;
&lt;td style="vertical-align: top; margin: 0; padding: 0; width: 180px; height: 16px; background: #f6f6f6;"&gt;Вопросы по покупке&lt;/td&gt;
&lt;td style="vertical-align: top; margin: 0; padding: 0; width: 210px; height: 16px; background: #f6f6f6;"&gt;Заказ демонстрации&lt;/td&gt;
&lt;/tr&gt;
&lt;tr border="0" cellspacing="0" cellpadding="0"&gt;
&lt;td style="vertical-align: top; margin: 0; padding: 0 0 30px; width: 210px; background: #f6f6f6;-moz-border-radius-bottomleft: 6px; -webkit-border-bottom-left-radius: 6px; border-bottom-left-radius: 6px;"&gt;
&lt;a href="http://dev.onlyoffice.org/" target="_blank" style="color: #333;"&gt;Задайте вопрос&lt;/a&gt;
&lt;/td&gt;
&lt;td style="vertical-align: top; margin: 0; padding: 0 0 30px; width: 180px; background: #f6f6f6;"&gt;
&lt;a href="mailto:sales@onlyoffice.com" style="color: #333;"&gt;Напишите нам&lt;/a&gt;
&lt;/td&gt;
&lt;td style="vertical-align: top; margin: 0; padding: 0 0 30px; width: 210px; background: #f6f6f6;-moz-border-radius-bottomright: 6px; -webkit-border-bottom-right-radius: 6px; border-bottom-right-radius: 6px;"&gt;
&lt;a href="http://www.onlyoffice.com/demo-order.aspx" target="_blank" style="color: #333;"&gt;Отправьте запрос&lt;/a&gt;
&lt;/td&gt;
&lt;/tr&gt;</value>
</data>
<data name="HtmlMaster" xml:space="preserve">
<value>&lt;body style="margin: 0; padding: 0; text-align: center; width: 100%; font-family: Arial, sans-serif; font-size: 14px; color: #333;"&gt;
&lt;div style="background-color: #fff; width: 600px; margin: 0 auto; text-align: left;"&gt;
&lt;table cellspacing="0" cellpadding="0" style="font-family: Arial; font-size: 14px; color: #333; background: #fff; text-align: center; width: 600px; margin: 0; padding: 0; border: 0 none; border-collapse: collapse; empty-cells: show; border-spacing: 0;"&gt;
&lt;tbody&gt;
&lt;tr border="0" cellspacing="0" cellpadding="0"&gt;
&lt;td colspan="3" style="margin: 0; padding: 0; background-color: #fff; height: 65px; padding: 20px 0 0 30px;"&gt;
&lt;div style="text-align: left; height: 65px; width: 570px; margin: 0; padding: 0;"&gt;
&lt;a href="%SITEURL%" style="text-decoration: none; display: inline-block; width: 386px; height: 44px; margin: 0; padding: 0;" target="_blank"&gt;
&lt;img src="%LOGO%" style="border: 0px none; width: 386px; height: 44px; margin: 0; padding: 0;" alt="%LOGOTEXT%" /&gt;
&lt;/a&gt;
&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr border="0" cellspacing="0" cellpadding="0"&gt;
&lt;td colspan="3" style="margin: 0; padding: 15px 30px 15px; background-color: #f6f6f6; -moz-border-radius: 6px; -webkit-border-radius: 6px; border-radius: 6px;"&gt;
&lt;div style="font-family: Arial; font-size: 14px; color: #333; margin: 0; padding: 0; width: 540px; height: auto; overflow: hidden; word-wrap: break-word; vertical-align: top; text-align: left; border: 0 none;"&gt;
%CONTENT%
&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
%FOOTER%
&lt;/tbody&gt;
&lt;/table&gt;
&lt;table cellspacing="0" cellpadding="0" style="font-family: Arial; font-size: 14px; color: #333; text-align: center; vertical-align: top; width: 600px; margin: 0; padding: 0; border-collapse: collapse; border: 0; border-spacing: 0; "&gt;
&lt;tbody&gt;
%FOOTERSOCIAL%
&lt;tr border="0" cellspacing="0" cellpadding="0"&gt;
&lt;td colspan="6" style="width: 600px; vertical-align: top; margin: 0; padding: 20px 30px 15px;"&gt;
&lt;p style="color: #7b7b7b; font-family: Arial, Tahoma; font-size: 12px; margin: 0; padding: 0; text-align: center; width: 540px;"&gt;
%TEXTFOOTER%
&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
<value>&lt;body style="margin: 0; padding: 0; text-align: center; width: 100%; font-family: Arial, sans-serif; font-size: 14px; color: #333;"&gt;
&lt;div style="background-color: #fff; width: 600px; margin: 0 auto; text-align: left;"&gt;
&lt;table cellspacing="0" cellpadding="0" style="font-family: Arial; font-size: 14px; color: #333; background: #fff; text-align: center; width: 600px; margin: 0; padding: 0; border: 0 none; border-collapse: collapse; empty-cells: show; border-spacing: 0;"&gt;
&lt;tbody&gt;
&lt;tr border="0" cellspacing="0" cellpadding="0"&gt;
&lt;td colspan="3" style="margin: 0; padding: 0; background-color: #fff; height: 65px; padding: 20px 0 0 30px;"&gt;
&lt;div style="text-align: left; height: 65px; width: 570px; margin: 0; padding: 0;"&gt;
&lt;a href="%SITEURL%" style="text-decoration: none; display: inline-block; width: 386px; height: 44px; margin: 0; padding: 0;" target="_blank"&gt;
&lt;img src="%LOGO%" style="border: 0px none; width: 386px; height: 44px; margin: 0; padding: 0;" alt="%LOGOTEXT%" /&gt;
&lt;/a&gt;
&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr border="0" cellspacing="0" cellpadding="0"&gt;
&lt;td colspan="3" style="margin: 0; padding: 15px 30px 15px; background-color: #f6f6f6; -moz-border-radius: 6px; -webkit-border-radius: 6px; border-radius: 6px;"&gt;
&lt;div style="font-family: Arial; font-size: 14px; color: #333; margin: 0; padding: 0; width: 540px; height: auto; overflow: hidden; word-wrap: break-word; vertical-align: top; text-align: left; border: 0 none;"&gt;
%CONTENT%
&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
%FOOTER%
&lt;/tbody&gt;
&lt;/table&gt;
&lt;table cellspacing="0" cellpadding="0" style="font-family: Arial; font-size: 14px; color: #333; text-align: center; vertical-align: top; width: 600px; margin: 0; padding: 0; border-collapse: collapse; border: 0; border-spacing: 0; "&gt;
&lt;tbody&gt;
%FOOTERSOCIAL%
&lt;tr border="0" cellspacing="0" cellpadding="0"&gt;
&lt;td colspan="6" style="width: 600px; vertical-align: top; margin: 0; padding: 20px 30px 15px;"&gt;
&lt;p style="color: #7b7b7b; font-family: Arial, Tahoma; font-size: 12px; margin: 0; padding: 0; text-align: center; width: 540px;"&gt;
%TEXTFOOTER%
&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;/body&gt;</value>
</data>
<data name="SocialNetworksFooterV10" xml:space="preserve">
<value>&lt;tr border="0" cellspacing="0" cellpadding="0"&gt;
&lt;td style="width: 40px; vertical-align: top; margin: 0; padding: 22px 5px 0 155px;"&gt;
&lt;a href="https://www.facebook.com/pages/OnlyOffice/833032526736775" style="width: 40px; height: 40px; display: block; margin: 0; padding: 0;" target="_blank"&gt;
&lt;img src="%IMAGEPATH%/social-fb-40.png" alt="Facebook" style="width: 40px; height: 40px;" /&gt;
&lt;/a&gt;
&lt;/td&gt;
&lt;td style="width: 40px; vertical-align: top; margin: 0; padding: 22px 5px 0 5px;"&gt;
&lt;a href="https://twitter.com/ONLY_OFFICE" style="width: 40px; height: 40px; display: block; margin: 0; padding: 0;" target="_blank"&gt;
&lt;img src="%IMAGEPATH%/social-tw-40.png" alt="Twitter" style="width: 40px; height: 40px;" /&gt;
&lt;/a&gt;
&lt;/td&gt;
&lt;td style="width: 40px; vertical-align: top; margin: 0; padding: 22px 5px 0 5px;"&gt;
&lt;a href="https://www.onlyoffice.com/blog" style="width: 40px; height: 40px; display: block; margin: 0; padding: 0;" target="_blank"&gt;
&lt;img src="%IMAGEPATH%/social-blog-40.png" alt="ONLYOFFICE" style="width: 40px; height: 40px;" /&gt;
&lt;/a&gt;
&lt;/td&gt;
&lt;td style="width: 40px; vertical-align: top; margin: 0; padding: 22px 5px 0 5px;"&gt;
&lt;a href="https://www.youtube.com/user/onlyofficeTV" style="width: 40px; height: 40px; display: block; margin: 0; padding: 0;" target="_blank"&gt;
&lt;img src="%IMAGEPATH%/social-youtube-40.png" alt="YouTube" style="width: 40px; height: 40x;" /&gt;
&lt;/a&gt;
&lt;/td&gt;
&lt;td style="width: 40px; vertical-align: top; margin: 0; padding: 22px 5px 0 5px;"&gt;
&lt;a href="https://vk.com/onlyoffice" style="width: 40px; height: 40px; display: block; margin: 0; padding: 0;" target="_blank"&gt;
&lt;img src="%IMAGEPATH%/social-vk-40.png" alt="VK" style="width: 40px; height: 40px;" /&gt;
&lt;/a&gt;
&lt;/td&gt;
&lt;td style="width: 40px; vertical-align: top; margin: 0; padding: 22px 155px 0 5px;"&gt;
&lt;a href="https://www.instagram.com/the_onlyoffice" style="width: 40px; height: 40px; display: block; margin: 0; padding: 0;" target="_blank"&gt;
&lt;img src="%IMAGEPATH%/social-inst-40.png" alt="Instagram" style="width: 40px; height: 40px;" /&gt;
&lt;/a&gt;
&lt;/td&gt;
&lt;/tr&gt;</value>
</data>
</root>

View File

@ -59,73 +59,137 @@
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=6.0.2.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<data name="FooterCommonV10" xml:space="preserve">
<value>&lt;tr border="0" cellspacing="0" cellpadding="0"&gt;&lt;td colspan="3" style="height: 10px; line-height: 10px; background: #fff; padding: 0; margin: 0;"&gt; &lt;/td&gt;&lt;/tr&gt;
&lt;tr border="0" cellspacing="0" cellpadding="0"&gt;
&lt;td style="vertical-align: top; margin: 0; padding: 34px 0 0 0; width: 210px; height: 108px; background: #f6f6f6; -moz-border-radius-topleft: 6px; -webkit-border-top-left-radius: 6px; border-top-left-radius: 6px;"&gt;
&lt;img src="%IMAGEPATH%/tech-100.png" style="width: 100px; height: 100px;margin: 0 auto;" /&gt;
&lt;/td&gt;
&lt;td style="vertical-align: top; margin: 0; padding: 34px 0 0 0; width: 180px; height: 108px; background: #f6f6f6;"&gt;
&lt;img src="%IMAGEPATH%/mailus-100.png" style="width: 100px; height: 100px;margin: 0 auto;" /&gt;
&lt;/td&gt;
&lt;td style="vertical-align: top; margin: 0; padding: 34px 0 0 0; width: 210px; height: 108px; background: #f6f6f6; -moz-border-radius-topright: 6px; -webkit-border-top-right-radius: 6px; border-top-right-radius: 6px;"&gt;
&lt;img src="%IMAGEPATH%/demo-100.png" style="width: 100px; height: 100px;margin: 0 auto;" /&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr border="0" cellspacing="0" cellpadding="0"&gt;
&lt;td style="vertical-align: top; margin: 0; padding: 0; width: 210px; height: 16px; background: #f6f6f6;"&gt;Technische hulp nodig?&lt;/td&gt;
&lt;td style="vertical-align: top; margin: 0; padding: 0; width: 180px; height: 16px; background: #f6f6f6;"&gt;Verkoopvragen&lt;/td&gt;
&lt;td style="vertical-align: top; margin: 0; padding: 0; width: 210px; height: 16px; background: #f6f6f6;"&gt;Orderdemo&lt;/td&gt;
&lt;/tr&gt;
&lt;tr border="0" cellspacing="0" cellpadding="0"&gt;
&lt;td style="vertical-align: top; margin: 0; padding: 0 0 30px; width: 210px; background: #f6f6f6;-moz-border-radius-bottomleft: 6px; -webkit-border-bottom-left-radius: 6px; border-bottom-left-radius: 6px;"&gt;
&lt;a href="%SUPPORTURL%" target="_blank" style="color: #333;"&gt;Verstuur uw vraag&lt;/a&gt;
&lt;/td&gt;
&lt;td style="vertical-align: top; margin: 0; padding: 0 0 30px; width: 180px; background: #f6f6f6;"&gt;
&lt;a href="mailto:%SALESEMAIL%" style="color: #333;"&gt;Email us&lt;/a&gt;
&lt;/td&gt;
&lt;td style="vertical-align: top; margin: 0; padding: 0 0 30px; width: 210px; background: #f6f6f6;-moz-border-radius-bottomright: 6px; -webkit-border-bottom-right-radius: 6px; border-bottom-right-radius: 6px;"&gt;
&lt;a href="%DEMOURL%" target="_blank" style="color: #333;"&gt;Stuur een verzoek&lt;/a&gt;
&lt;/td&gt;
<value>&lt;tr border="0" cellspacing="0" cellpadding="0"&gt;&lt;td colspan="3" style="height: 10px; line-height: 10px; background: #fff; padding: 0; margin: 0;"&gt; &lt;/td&gt;&lt;/tr&gt;
&lt;tr border="0" cellspacing="0" cellpadding="0"&gt;
&lt;td style="vertical-align: top; margin: 0; padding: 34px 0 0 0; width: 210px; height: 108px; background: #f6f6f6; -moz-border-radius-topleft: 6px; -webkit-border-top-left-radius: 6px; border-top-left-radius: 6px;"&gt;
&lt;img src="%IMAGEPATH%/tech-100.png" style="width: 100px; height: 100px;margin: 0 auto;" /&gt;
&lt;/td&gt;
&lt;td style="vertical-align: top; margin: 0; padding: 34px 0 0 0; width: 180px; height: 108px; background: #f6f6f6;"&gt;
&lt;img src="%IMAGEPATH%/mailus-100.png" style="width: 100px; height: 100px;margin: 0 auto;" /&gt;
&lt;/td&gt;
&lt;td style="vertical-align: top; margin: 0; padding: 34px 0 0 0; width: 210px; height: 108px; background: #f6f6f6; -moz-border-radius-topright: 6px; -webkit-border-top-right-radius: 6px; border-top-right-radius: 6px;"&gt;
&lt;img src="%IMAGEPATH%/demo-100.png" style="width: 100px; height: 100px;margin: 0 auto;" /&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr border="0" cellspacing="0" cellpadding="0"&gt;
&lt;td style="vertical-align: top; margin: 0; padding: 0; width: 210px; height: 16px; background: #f6f6f6;"&gt;Technische hulp nodig?&lt;/td&gt;
&lt;td style="vertical-align: top; margin: 0; padding: 0; width: 180px; height: 16px; background: #f6f6f6;"&gt;Verkoopvragen&lt;/td&gt;
&lt;td style="vertical-align: top; margin: 0; padding: 0; width: 210px; height: 16px; background: #f6f6f6;"&gt;Orderdemo&lt;/td&gt;
&lt;/tr&gt;
&lt;tr border="0" cellspacing="0" cellpadding="0"&gt;
&lt;td style="vertical-align: top; margin: 0; padding: 0 0 30px; width: 210px; background: #f6f6f6;-moz-border-radius-bottomleft: 6px; -webkit-border-bottom-left-radius: 6px; border-bottom-left-radius: 6px;"&gt;
&lt;a href="%SUPPORTURL%" target="_blank" style="color: #333;"&gt;Verstuur uw vraag&lt;/a&gt;
&lt;/td&gt;
&lt;td style="vertical-align: top; margin: 0; padding: 0 0 30px; width: 180px; background: #f6f6f6;"&gt;
&lt;a href="mailto:%SALESEMAIL%" style="color: #333;"&gt;Email us&lt;/a&gt;
&lt;/td&gt;
&lt;td style="vertical-align: top; margin: 0; padding: 0 0 30px; width: 210px; background: #f6f6f6;-moz-border-radius-bottomright: 6px; -webkit-border-bottom-right-radius: 6px; border-bottom-right-radius: 6px;"&gt;
&lt;a href="%DEMOURL%" target="_blank" style="color: #333;"&gt;Stuur een verzoek&lt;/a&gt;
&lt;/td&gt;
&lt;/tr&gt;</value>
</data>
<data name="HtmlMaster" xml:space="preserve">
<value>&lt;body style="margin: 0; padding: 0; text-align: center; width: 100%; font-family: Arial, sans-serif; font-size: 14px; color: #333;"&gt;
&lt;div style="background-color: #fff; width: 600px; margin: 0 auto; text-align: left;"&gt;
&lt;table cellspacing="0" cellpadding="0" style="font-family: Arial; font-size: 14px; color: #333; background: #fff; text-align: center; width: 600px; margin: 0; padding: 0; border: 0 none; border-collapse: collapse; empty-cells: show; border-spacing: 0;"&gt;
&lt;tbody&gt;
&lt;tr border="0" cellspacing="0" cellpadding="0"&gt;
&lt;td colspan="3" style="margin: 0; padding: 0; background-color: #fff; height: 65px; padding: 20px 0 0 30px;"&gt;
&lt;div style="text-align: left; height: 65px; width: 570px; margin: 0; padding: 0;"&gt;
&lt;a href="%SITEURL%" style="text-decoration: none; display: inline-block; width: 386px; height: 44px; margin: 0; padding: 0;" target="_blank"&gt;
&lt;img src="%LOGO%" style="border: 0px none; width: 386px; height: 44px; margin: 0; padding: 0;" alt="%LOGOTEXT%" /&gt;
&lt;/a&gt;
&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr border="0" cellspacing="0" cellpadding="0"&gt;
&lt;td colspan="3" style="margin: 0; padding: 15px 30px 15px; background-color: #f6f6f6; -moz-border-radius: 6px; -webkit-border-radius: 6px; border-radius: 6px;"&gt;
&lt;div style="font-family: Arial; font-size: 14px; color: #333; margin: 0; padding: 0; width: 540px; height: auto; overflow: hidden; word-wrap: break-word; vertical-align: top; text-align: left; border: 0 none;"&gt;
%CONTENT%
&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
%FOOTER%
&lt;/tbody&gt;
&lt;/table&gt;
&lt;table cellspacing="0" cellpadding="0" style="font-family: Arial; font-size: 14px; color: #333; text-align: center; vertical-align: top; width: 600px; margin: 0; padding: 0; border-collapse: collapse; border: 0; border-spacing: 0; "&gt;
&lt;tbody&gt;
%FOOTERSOCIAL%
&lt;tr border="0" cellspacing="0" cellpadding="0"&gt;
&lt;td colspan="6" style="width: 600px; vertical-align: top; margin: 0; padding: 20px 30px 15px;"&gt;
&lt;p style="color: #7b7b7b; font-family: Arial, Tahoma; font-size: 12px; margin: 0; padding: 0; text-align: center; width: 540px;"&gt;
%TEXTFOOTER%
&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
<value>&lt;body style="margin: 0; padding: 0; text-align: center; width: 100%; font-family: Arial, sans-serif; font-size: 14px; color: #333;"&gt;
&lt;div style="background-color: #fff; width: 600px; margin: 0 auto; text-align: left;"&gt;
&lt;table cellspacing="0" cellpadding="0" style="font-family: Arial; font-size: 14px; color: #333; background: #fff; text-align: center; width: 600px; margin: 0; padding: 0; border: 0 none; border-collapse: collapse; empty-cells: show; border-spacing: 0;"&gt;
&lt;tbody&gt;
&lt;tr border="0" cellspacing="0" cellpadding="0"&gt;
&lt;td colspan="3" style="margin: 0; padding: 0; background-color: #fff; height: 65px; padding: 20px 0 0 30px;"&gt;
&lt;div style="text-align: left; height: 65px; width: 570px; margin: 0; padding: 0;"&gt;
&lt;a href="%SITEURL%" style="text-decoration: none; display: inline-block; width: 386px; height: 44px; margin: 0; padding: 0;" target="_blank"&gt;
&lt;img src="%LOGO%" style="border: 0px none; width: 386px; height: 44px; margin: 0; padding: 0;" alt="%LOGOTEXT%" /&gt;
&lt;/a&gt;
&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr border="0" cellspacing="0" cellpadding="0"&gt;
&lt;td colspan="3" style="margin: 0; padding: 15px 30px 15px; background-color: #f6f6f6; -moz-border-radius: 6px; -webkit-border-radius: 6px; border-radius: 6px;"&gt;
&lt;div style="font-family: Arial; font-size: 14px; color: #333; margin: 0; padding: 0; width: 540px; height: auto; overflow: hidden; word-wrap: break-word; vertical-align: top; text-align: left; border: 0 none;"&gt;
%CONTENT%
&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
%FOOTER%
&lt;/tbody&gt;
&lt;/table&gt;
&lt;table cellspacing="0" cellpadding="0" style="font-family: Arial; font-size: 14px; color: #333; text-align: center; vertical-align: top; width: 600px; margin: 0; padding: 0; border-collapse: collapse; border: 0; border-spacing: 0; "&gt;
&lt;tbody&gt;
%FOOTERSOCIAL%
&lt;tr border="0" cellspacing="0" cellpadding="0"&gt;
&lt;td colspan="6" style="width: 600px; vertical-align: top; margin: 0; padding: 20px 30px 15px;"&gt;
&lt;p style="color: #7b7b7b; font-family: Arial, Tahoma; font-size: 12px; margin: 0; padding: 0; text-align: center; width: 540px;"&gt;
%TEXTFOOTER%
&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;/body&gt;</value>
</data>
<data name="SocialNetworksFooterV10" xml:space="preserve">
<value>&lt;tr border="0" cellspacing="0" cellpadding="0"&gt;
&lt;td style="width: 40px; vertical-align: top; margin: 0; padding: 22px 5px 0 155px;"&gt;
&lt;a href="https://www.facebook.com/pages/OnlyOffice/833032526736775" style="width: 40px; height: 40px; display: block; margin: 0; padding: 0;" target="_blank"&gt;
&lt;img src="%IMAGEPATH%/social-fb-40.png" alt="Facebook" style="width: 40px; height: 40px;" /&gt;
&lt;/a&gt;
&lt;/td&gt;
&lt;td style="width: 40px; vertical-align: top; margin: 0; padding: 22px 5px 0 5px;"&gt;
&lt;a href="https://twitter.com/ONLY_OFFICE" style="width: 40px; height: 40px; display: block; margin: 0; padding: 0;" target="_blank"&gt;
&lt;img src="%IMAGEPATH%/social-tw-40.png" alt="Twitter" style="width: 40px; height: 40px;" /&gt;
&lt;/a&gt;
&lt;/td&gt;
&lt;td style="width: 40px; vertical-align: top; margin: 0; padding: 22px 5px 0 5px;"&gt;
&lt;a href="https://www.onlyoffice.com/blog" style="width: 40px; height: 40px; display: block; margin: 0; padding: 0;" target="_blank"&gt;
&lt;img src="%IMAGEPATH%/social-blog-40.png" alt="ONLYOFFICE" style="width: 40px; height: 40px;" /&gt;
&lt;/a&gt;
&lt;/td&gt;
&lt;td style="width: 40px; vertical-align: top; margin: 0; padding: 22px 5px 0 5px;"&gt;
&lt;a href="https://www.youtube.com/user/onlyofficeTV" style="width: 40px; height: 40px; display: block; margin: 0; padding: 0;" target="_blank"&gt;
&lt;img src="%IMAGEPATH%/social-youtube-40.png" alt="YouTube" style="width: 40px; height: 40x;" /&gt;
&lt;/a&gt;
&lt;/td&gt;
&lt;td style="width: 40px; vertical-align: top; margin: 0; padding: 22px 5px 0 5px;"&gt;
&lt;a href="https://vk.com/onlyoffice" style="width: 40px; height: 40px; display: block; margin: 0; padding: 0;" target="_blank"&gt;
&lt;img src="%IMAGEPATH%/social-vk-40.png" alt="VK" style="width: 40px; height: 40px;" /&gt;
&lt;/a&gt;
&lt;/td&gt;
&lt;td style="width: 40px; vertical-align: top; margin: 0; padding: 22px 155px 0 5px;"&gt;
&lt;a href="https://www.instagram.com/the_onlyoffice" style="width: 40px; height: 40px; display: block; margin: 0; padding: 0;" target="_blank"&gt;
&lt;img src="%IMAGEPATH%/social-inst-40.png" alt="Instagram" style="width: 40px; height: 40px;" /&gt;
&lt;/a&gt;
&lt;/td&gt;
&lt;/tr&gt;</value>
</data>
<data name="FooterOpensourceV10" xml:space="preserve">
<value>&lt;tr border="0" cellspacing="0" cellpadding="0"&gt;&lt;td colspan="3" style="height: 10px; line-height: 10px; background: #fff; padding: 0; margin: 0;"&gt;&amp;nbsp;&lt;/td&gt;&lt;/tr&gt;
&lt;tr border="0" cellspacing="0" cellpadding="0"&gt;
&lt;td style="vertical-align: top; margin: 0; padding: 34px 0 0 0; width: 210px; height: 108px; background: #f6f6f6; -moz-border-radius-topleft: 6px; -webkit-border-top-left-radius: 6px; border-top-left-radius: 6px;"&gt;
&lt;img src="%IMAGEPATH%/tech-100.png" style="width: 100px; height: 100px;margin: 0 auto;" /&gt;
&lt;/td&gt;
&lt;td style="vertical-align: top; margin: 0; padding: 34px 0 0 0; width: 180px; height: 108px; background: #f6f6f6;"&gt;
&lt;img src="%IMAGEPATH%/mailus-100.png" style="width: 100px; height: 100px;margin: 0 auto;" /&gt;
&lt;/td&gt;
&lt;td style="vertical-align: top; margin: 0; padding: 34px 0 0 0; width: 210px; height: 108px; background: #f6f6f6; -moz-border-radius-topright: 6px; -webkit-border-top-right-radius: 6px; border-top-right-radius: 6px;"&gt;
&lt;img src="%IMAGEPATH%/demo-100.png" style="width: 100px; height: 100px;margin: 0 auto;" /&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr border="0" cellspacing="0" cellpadding="0"&gt;
&lt;td style="vertical-align: top; margin: 0; padding: 0; width: 210px; height: 16px; background: #f6f6f6;"&gt;Need tech help?&lt;/td&gt;
&lt;td style="vertical-align: top; margin: 0; padding: 0; width: 180px; height: 16px; background: #f6f6f6;"&gt;Sales Questions&lt;/td&gt;
&lt;td style="vertical-align: top; margin: 0; padding: 0; width: 210px; height: 16px; background: #f6f6f6;"&gt;Order Demo&lt;/td&gt;
&lt;/tr&gt;
&lt;tr border="0" cellspacing="0" cellpadding="0"&gt;
&lt;td style="vertical-align: top; margin: 0; padding: 0 0 30px; width: 210px; background: #f6f6f6;-moz-border-radius-bottomleft: 6px; -webkit-border-bottom-left-radius: 6px; border-bottom-left-radius: 6px;"&gt;
&lt;a href="http://dev.onlyoffice.org/" target="_blank" style="color: #333;"&gt;Ask the Community&lt;/a&gt;
&lt;/td&gt;
&lt;td style="vertical-align: top; margin: 0; padding: 0 0 30px; width: 180px; background: #f6f6f6;"&gt;
&lt;a href="mailto:sales@onlyoffice.com" style="color: #333;"&gt;Email us&lt;/a&gt;
&lt;/td&gt;
&lt;td style="vertical-align: top; margin: 0; padding: 0 0 30px; width: 210px; background: #f6f6f6;-moz-border-radius-bottomright: 6px; -webkit-border-bottom-right-radius: 6px; border-bottom-right-radius: 6px;"&gt;
&lt;a href="http://www.onlyoffice.com/demo-order.aspx" target="_blank" style="color: #333;"&gt;Send a request&lt;/a&gt;
&lt;/td&gt;
&lt;/tr&gt;</value>
</data>
</root>

View File

@ -59,73 +59,137 @@
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=6.0.2.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<data name="FooterCommonV10" xml:space="preserve">
<value>&lt;tr border="0" cellspacing="0" cellpadding="0"&gt;&lt;td colspan="3" style="height: 10px; line-height: 10px; background: #fff; padding: 0; margin: 0;"&gt; &lt;/td&gt;&lt;/tr&gt;
&lt;tr border="0" cellspacing="0" cellpadding="0"&gt;
&lt;td style="vertical-align: top; margin: 0; padding: 34px 0 0 0; width: 210px; height: 108px; background: #f6f6f6; -moz-border-radius-topleft: 6px; -webkit-border-top-left-radius: 6px; border-top-left-radius: 6px;"&gt;
&lt;img src="%IMAGEPATH%/tech-100.png" style="width: 100px; height: 100px;margin: 0 auto;" /&gt;
&lt;/td&gt;
&lt;td style="vertical-align: top; margin: 0; padding: 34px 0 0 0; width: 180px; height: 108px; background: #f6f6f6;"&gt;
&lt;img src="%IMAGEPATH%/mailus-100.png" style="width: 100px; height: 100px;margin: 0 auto;" /&gt;
&lt;/td&gt;
&lt;td style="vertical-align: top; margin: 0; padding: 34px 0 0 0; width: 210px; height: 108px; background: #f6f6f6; -moz-border-radius-topright: 6px; -webkit-border-top-right-radius: 6px; border-top-right-radius: 6px;"&gt;
&lt;img src="%IMAGEPATH%/demo-100.png" style="width: 100px; height: 100px;margin: 0 auto;" /&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr border="0" cellspacing="0" cellpadding="0"&gt;
&lt;td style="vertical-align: top; margin: 0; padding: 0; width: 210px; height: 16px; background: #f6f6f6;"&gt;Potřebujete technickou pomoc?&lt;/td&gt;
&lt;td style="vertical-align: top; margin: 0; padding: 0; width: 180px; height: 16px; background: #f6f6f6;"&gt;Prodejní otázky&lt;/td&gt;
&lt;td style="vertical-align: top; margin: 0; padding: 0; width: 210px; height: 16px; background: #f6f6f6;"&gt;Objednat demo&lt;/td&gt;
&lt;/tr&gt;
&lt;tr border="0" cellspacing="0" cellpadding="0"&gt;
&lt;td style="vertical-align: top; margin: 0; padding: 0 0 30px; width: 210px; background: #f6f6f6;-moz-border-radius-bottomleft: 6px; -webkit-border-bottom-left-radius: 6px; border-bottom-left-radius: 6px;"&gt;
&lt;a href="%SUPPORTURL%" target="_blank" style="color: #333;"&gt;Send your question&lt;/a&gt;
&lt;/td&gt;
&lt;td style="vertical-align: top; margin: 0; padding: 0 0 30px; width: 180px; background: #f6f6f6;"&gt;
&lt;a href="mailto:%SALESEMAIL%" style="color: #333;"&gt;Email us&lt;/a&gt;
&lt;/td&gt;
&lt;td style="vertical-align: top; margin: 0; padding: 0 0 30px; width: 210px; background: #f6f6f6;-moz-border-radius-bottomright: 6px; -webkit-border-bottom-right-radius: 6px; border-bottom-right-radius: 6px;"&gt;
&lt;a href="%DEMOURL%" target="_blank" style="color: #333;"&gt;Poslat žádost&lt;/a&gt;
&lt;/td&gt;
<value>&lt;tr border="0" cellspacing="0" cellpadding="0"&gt;&lt;td colspan="3" style="height: 10px; line-height: 10px; background: #fff; padding: 0; margin: 0;"&gt; &lt;/td&gt;&lt;/tr&gt;
&lt;tr border="0" cellspacing="0" cellpadding="0"&gt;
&lt;td style="vertical-align: top; margin: 0; padding: 34px 0 0 0; width: 210px; height: 108px; background: #f6f6f6; -moz-border-radius-topleft: 6px; -webkit-border-top-left-radius: 6px; border-top-left-radius: 6px;"&gt;
&lt;img src="%IMAGEPATH%/tech-100.png" style="width: 100px; height: 100px;margin: 0 auto;" /&gt;
&lt;/td&gt;
&lt;td style="vertical-align: top; margin: 0; padding: 34px 0 0 0; width: 180px; height: 108px; background: #f6f6f6;"&gt;
&lt;img src="%IMAGEPATH%/mailus-100.png" style="width: 100px; height: 100px;margin: 0 auto;" /&gt;
&lt;/td&gt;
&lt;td style="vertical-align: top; margin: 0; padding: 34px 0 0 0; width: 210px; height: 108px; background: #f6f6f6; -moz-border-radius-topright: 6px; -webkit-border-top-right-radius: 6px; border-top-right-radius: 6px;"&gt;
&lt;img src="%IMAGEPATH%/demo-100.png" style="width: 100px; height: 100px;margin: 0 auto;" /&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr border="0" cellspacing="0" cellpadding="0"&gt;
&lt;td style="vertical-align: top; margin: 0; padding: 0; width: 210px; height: 16px; background: #f6f6f6;"&gt;Potřebujete technickou pomoc?&lt;/td&gt;
&lt;td style="vertical-align: top; margin: 0; padding: 0; width: 180px; height: 16px; background: #f6f6f6;"&gt;Prodejní otázky&lt;/td&gt;
&lt;td style="vertical-align: top; margin: 0; padding: 0; width: 210px; height: 16px; background: #f6f6f6;"&gt;Objednat demo&lt;/td&gt;
&lt;/tr&gt;
&lt;tr border="0" cellspacing="0" cellpadding="0"&gt;
&lt;td style="vertical-align: top; margin: 0; padding: 0 0 30px; width: 210px; background: #f6f6f6;-moz-border-radius-bottomleft: 6px; -webkit-border-bottom-left-radius: 6px; border-bottom-left-radius: 6px;"&gt;
&lt;a href="%SUPPORTURL%" target="_blank" style="color: #333;"&gt;Send your question&lt;/a&gt;
&lt;/td&gt;
&lt;td style="vertical-align: top; margin: 0; padding: 0 0 30px; width: 180px; background: #f6f6f6;"&gt;
&lt;a href="mailto:%SALESEMAIL%" style="color: #333;"&gt;Email us&lt;/a&gt;
&lt;/td&gt;
&lt;td style="vertical-align: top; margin: 0; padding: 0 0 30px; width: 210px; background: #f6f6f6;-moz-border-radius-bottomright: 6px; -webkit-border-bottom-right-radius: 6px; border-bottom-right-radius: 6px;"&gt;
&lt;a href="%DEMOURL%" target="_blank" style="color: #333;"&gt;Poslat žádost&lt;/a&gt;
&lt;/td&gt;
&lt;/tr&gt;</value>
</data>
<data name="HtmlMaster" xml:space="preserve">
<value>&lt;body style="margin: 0; padding: 0; text-align: center; width: 100%; font-family: Arial, sans-serif; font-size: 14px; color: #333;"&gt;
&lt;div style="background-color: #fff; width: 600px; margin: 0 auto; text-align: left;"&gt;
&lt;table cellspacing="0" cellpadding="0" style="font-family: Arial; font-size: 14px; color: #333; background: #fff; text-align: center; width: 600px; margin: 0; padding: 0; border: 0 none; border-collapse: collapse; empty-cells: show; border-spacing: 0;"&gt;
&lt;tbody&gt;
&lt;tr border="0" cellspacing="0" cellpadding="0"&gt;
&lt;td colspan="3" style="margin: 0; padding: 0; background-color: #fff; height: 65px; padding: 20px 0 0 30px;"&gt;
&lt;div style="text-align: left; height: 65px; width: 570px; margin: 0; padding: 0;"&gt;
&lt;a href="%SITEURL%" style="text-decoration: none; display: inline-block; width: 386px; height: 44px; margin: 0; padding: 0;" target="_blank"&gt;
&lt;img src="%LOGO%" style="border: 0px none; width: 386px; height: 44px; margin: 0; padding: 0;" alt="%LOGOTEXT%" /&gt;
&lt;/a&gt;
&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr border="0" cellspacing="0" cellpadding="0"&gt;
&lt;td colspan="3" style="margin: 0; padding: 15px 30px 15px; background-color: #f6f6f6; -moz-border-radius: 6px; -webkit-border-radius: 6px; border-radius: 6px;"&gt;
&lt;div style="font-family: Arial; font-size: 14px; color: #333; margin: 0; padding: 0; width: 540px; height: auto; overflow: hidden; word-wrap: break-word; vertical-align: top; text-align: left; border: 0 none;"&gt;
%CONTENT%
&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
%FOOTER%
&lt;/tbody&gt;
&lt;/table&gt;
&lt;table cellspacing="0" cellpadding="0" style="font-family: Arial; font-size: 14px; color: #333; text-align: center; vertical-align: top; width: 600px; margin: 0; padding: 0; border-collapse: collapse; border: 0; border-spacing: 0; "&gt;
&lt;tbody&gt;
%FOOTERSOCIAL%
&lt;tr border="0" cellspacing="0" cellpadding="0"&gt;
&lt;td colspan="6" style="width: 600px; vertical-align: top; margin: 0; padding: 20px 30px 15px;"&gt;
&lt;p style="color: #7b7b7b; font-family: Arial, Tahoma; font-size: 12px; margin: 0; padding: 0; text-align: center; width: 540px;"&gt;
%TEXTFOOTER%
&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
<value>&lt;body style="margin: 0; padding: 0; text-align: center; width: 100%; font-family: Arial, sans-serif; font-size: 14px; color: #333;"&gt;
&lt;div style="background-color: #fff; width: 600px; margin: 0 auto; text-align: left;"&gt;
&lt;table cellspacing="0" cellpadding="0" style="font-family: Arial; font-size: 14px; color: #333; background: #fff; text-align: center; width: 600px; margin: 0; padding: 0; border: 0 none; border-collapse: collapse; empty-cells: show; border-spacing: 0;"&gt;
&lt;tbody&gt;
&lt;tr border="0" cellspacing="0" cellpadding="0"&gt;
&lt;td colspan="3" style="margin: 0; padding: 0; background-color: #fff; height: 65px; padding: 20px 0 0 30px;"&gt;
&lt;div style="text-align: left; height: 65px; width: 570px; margin: 0; padding: 0;"&gt;
&lt;a href="%SITEURL%" style="text-decoration: none; display: inline-block; width: 386px; height: 44px; margin: 0; padding: 0;" target="_blank"&gt;
&lt;img src="%LOGO%" style="border: 0px none; width: 386px; height: 44px; margin: 0; padding: 0;" alt="%LOGOTEXT%" /&gt;
&lt;/a&gt;
&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr border="0" cellspacing="0" cellpadding="0"&gt;
&lt;td colspan="3" style="margin: 0; padding: 15px 30px 15px; background-color: #f6f6f6; -moz-border-radius: 6px; -webkit-border-radius: 6px; border-radius: 6px;"&gt;
&lt;div style="font-family: Arial; font-size: 14px; color: #333; margin: 0; padding: 0; width: 540px; height: auto; overflow: hidden; word-wrap: break-word; vertical-align: top; text-align: left; border: 0 none;"&gt;
%CONTENT%
&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
%FOOTER%
&lt;/tbody&gt;
&lt;/table&gt;
&lt;table cellspacing="0" cellpadding="0" style="font-family: Arial; font-size: 14px; color: #333; text-align: center; vertical-align: top; width: 600px; margin: 0; padding: 0; border-collapse: collapse; border: 0; border-spacing: 0; "&gt;
&lt;tbody&gt;
%FOOTERSOCIAL%
&lt;tr border="0" cellspacing="0" cellpadding="0"&gt;
&lt;td colspan="6" style="width: 600px; vertical-align: top; margin: 0; padding: 20px 30px 15px;"&gt;
&lt;p style="color: #7b7b7b; font-family: Arial, Tahoma; font-size: 12px; margin: 0; padding: 0; text-align: center; width: 540px;"&gt;
%TEXTFOOTER%
&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;/body&gt;</value>
</data>
<data name="SocialNetworksFooterV10" xml:space="preserve">
<value>&lt;tr border="0" cellspacing="0" cellpadding="0"&gt;
&lt;td style="width: 40px; vertical-align: top; margin: 0; padding: 22px 5px 0 155px;"&gt;
&lt;a href="https://www.facebook.com/pages/OnlyOffice/833032526736775" style="width: 40px; height: 40px; display: block; margin: 0; padding: 0;" target="_blank"&gt;
&lt;img src="%IMAGEPATH%/social-fb-40.png" alt="Facebook" style="width: 40px; height: 40px;" /&gt;
&lt;/a&gt;
&lt;/td&gt;
&lt;td style="width: 40px; vertical-align: top; margin: 0; padding: 22px 5px 0 5px;"&gt;
&lt;a href="https://twitter.com/ONLY_OFFICE" style="width: 40px; height: 40px; display: block; margin: 0; padding: 0;" target="_blank"&gt;
&lt;img src="%IMAGEPATH%/social-tw-40.png" alt="Twitter" style="width: 40px; height: 40px;" /&gt;
&lt;/a&gt;
&lt;/td&gt;
&lt;td style="width: 40px; vertical-align: top; margin: 0; padding: 22px 5px 0 5px;"&gt;
&lt;a href="https://www.onlyoffice.com/blog" style="width: 40px; height: 40px; display: block; margin: 0; padding: 0;" target="_blank"&gt;
&lt;img src="%IMAGEPATH%/social-blog-40.png" alt="ONLYOFFICE" style="width: 40px; height: 40px;" /&gt;
&lt;/a&gt;
&lt;/td&gt;
&lt;td style="width: 40px; vertical-align: top; margin: 0; padding: 22px 5px 0 5px;"&gt;
&lt;a href="https://www.youtube.com/user/onlyofficeTV" style="width: 40px; height: 40px; display: block; margin: 0; padding: 0;" target="_blank"&gt;
&lt;img src="%IMAGEPATH%/social-youtube-40.png" alt="YouTube" style="width: 40px; height: 40x;" /&gt;
&lt;/a&gt;
&lt;/td&gt;
&lt;td style="width: 40px; vertical-align: top; margin: 0; padding: 22px 5px 0 5px;"&gt;
&lt;a href="https://vk.com/onlyoffice" style="width: 40px; height: 40px; display: block; margin: 0; padding: 0;" target="_blank"&gt;
&lt;img src="%IMAGEPATH%/social-vk-40.png" alt="VK" style="width: 40px; height: 40px;" /&gt;
&lt;/a&gt;
&lt;/td&gt;
&lt;td style="width: 40px; vertical-align: top; margin: 0; padding: 22px 155px 0 5px;"&gt;
&lt;a href="https://www.instagram.com/the_onlyoffice" style="width: 40px; height: 40px; display: block; margin: 0; padding: 0;" target="_blank"&gt;
&lt;img src="%IMAGEPATH%/social-inst-40.png" alt="Instagram" style="width: 40px; height: 40px;" /&gt;
&lt;/a&gt;
&lt;/td&gt;
&lt;/tr&gt;</value>
</data>
<data name="FooterOpensourceV10" xml:space="preserve">
<value>&lt;tr border="0" cellspacing="0" cellpadding="0"&gt;&lt;td colspan="3" style="height: 10px; line-height: 10px; background: #fff; padding: 0; margin: 0;"&gt;&amp;nbsp;&lt;/td&gt;&lt;/tr&gt;
&lt;tr border="0" cellspacing="0" cellpadding="0"&gt;
&lt;td style="vertical-align: top; margin: 0; padding: 34px 0 0 0; width: 210px; height: 108px; background: #f6f6f6; -moz-border-radius-topleft: 6px; -webkit-border-top-left-radius: 6px; border-top-left-radius: 6px;"&gt;
&lt;img src="%IMAGEPATH%/tech-100.png" style="width: 100px; height: 100px;margin: 0 auto;" /&gt;
&lt;/td&gt;
&lt;td style="vertical-align: top; margin: 0; padding: 34px 0 0 0; width: 180px; height: 108px; background: #f6f6f6;"&gt;
&lt;img src="%IMAGEPATH%/mailus-100.png" style="width: 100px; height: 100px;margin: 0 auto;" /&gt;
&lt;/td&gt;
&lt;td style="vertical-align: top; margin: 0; padding: 34px 0 0 0; width: 210px; height: 108px; background: #f6f6f6; -moz-border-radius-topright: 6px; -webkit-border-top-right-radius: 6px; border-top-right-radius: 6px;"&gt;
&lt;img src="%IMAGEPATH%/demo-100.png" style="width: 100px; height: 100px;margin: 0 auto;" /&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr border="0" cellspacing="0" cellpadding="0"&gt;
&lt;td style="vertical-align: top; margin: 0; padding: 0; width: 210px; height: 16px; background: #f6f6f6;"&gt;Need tech help?&lt;/td&gt;
&lt;td style="vertical-align: top; margin: 0; padding: 0; width: 180px; height: 16px; background: #f6f6f6;"&gt;Sales Questions&lt;/td&gt;
&lt;td style="vertical-align: top; margin: 0; padding: 0; width: 210px; height: 16px; background: #f6f6f6;"&gt;Order Demo&lt;/td&gt;
&lt;/tr&gt;
&lt;tr border="0" cellspacing="0" cellpadding="0"&gt;
&lt;td style="vertical-align: top; margin: 0; padding: 0 0 30px; width: 210px; background: #f6f6f6;-moz-border-radius-bottomleft: 6px; -webkit-border-bottom-left-radius: 6px; border-bottom-left-radius: 6px;"&gt;
&lt;a href="http://dev.onlyoffice.org/" target="_blank" style="color: #333;"&gt;Ask the Community&lt;/a&gt;
&lt;/td&gt;
&lt;td style="vertical-align: top; margin: 0; padding: 0 0 30px; width: 180px; background: #f6f6f6;"&gt;
&lt;a href="mailto:sales@onlyoffice.com" style="color: #333;"&gt;Email us&lt;/a&gt;
&lt;/td&gt;
&lt;td style="vertical-align: top; margin: 0; padding: 0 0 30px; width: 210px; background: #f6f6f6;-moz-border-radius-bottomright: 6px; -webkit-border-bottom-right-radius: 6px; border-bottom-right-radius: 6px;"&gt;
&lt;a href="http://www.onlyoffice.com/demo-order.aspx" target="_blank" style="color: #333;"&gt;Send a request&lt;/a&gt;
&lt;/td&gt;
&lt;/tr&gt;</value>
</data>
</root>

View File

@ -59,137 +59,142 @@
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=6.0.2.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<data name="FooterCommonV10" xml:space="preserve">
<value>&lt;tr border="0" cellspacing="0" cellpadding="0"&gt;&lt;td colspan="3" style="height: 10px; line-height: 10px; background: #fff; padding: 0; margin: 0;"&gt; &lt;/td&gt;&lt;/tr&gt;
&lt;tr border="0" cellspacing="0" cellpadding="0"&gt;
&lt;td style="vertical-align: top; margin: 0; padding: 34px 0 0 0; width: 210px; height: 108px; background: #f6f6f6; -moz-border-radius-topleft: 6px; -webkit-border-top-left-radius: 6px; border-top-left-radius: 6px;"&gt;
&lt;img src="%IMAGEPATH%/tech-100.png" style="width: 100px; height: 100px;margin: 0 auto;" /&gt;
&lt;/td&gt;
&lt;td style="vertical-align: top; margin: 0; padding: 34px 0 0 0; width: 180px; height: 108px; background: #f6f6f6;"&gt;
&lt;img src="%IMAGEPATH%/mailus-100.png" style="width: 100px; height: 100px;margin: 0 auto;" /&gt;
&lt;/td&gt;
&lt;td style="vertical-align: top; margin: 0; padding: 34px 0 0 0; width: 210px; height: 108px; background: #f6f6f6; -moz-border-radius-topright: 6px; -webkit-border-top-right-radius: 6px; border-top-right-radius: 6px;"&gt;
&lt;img src="%IMAGEPATH%/demo-100.png" style="width: 100px; height: 100px;margin: 0 auto;" /&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr border="0" cellspacing="0" cellpadding="0"&gt;
&lt;td style="vertical-align: top; margin: 0; padding: 0; width: 210px; height: 16px; background: #f6f6f6;"&gt;Precisa de ajuda técnica?&lt;/td&gt;
&lt;td style="vertical-align: top; margin: 0; padding: 0; width: 180px; height: 16px; background: #f6f6f6;"&gt;Perguntas sobre vendas&lt;/td&gt;
&lt;td style="vertical-align: top; margin: 0; padding: 0; width: 210px; height: 16px; background: #f6f6f6;"&gt;Demonstração de pedido&lt;/td&gt;
&lt;/tr&gt;
&lt;tr border="0" cellspacing="0" cellpadding="0"&gt;
&lt;td style="vertical-align: top; margin: 0; padding: 0 0 30px; width: 210px; background: #f6f6f6;-moz-border-radius-bottomleft: 6px; -webkit-border-bottom-left-radius: 6px; border-bottom-left-radius: 6px;"&gt;
&lt;a href="%SUPPORTURL%" target="_blank" style="color: #333;"&gt;Envie sua pergunta&lt;/a&gt;
&lt;/td&gt;
&lt;td style="vertical-align: top; margin: 0; padding: 0 0 30px; width: 180px; background: #f6f6f6;"&gt;
&lt;a href="mailto:%SALESEMAIL%" style="color: #333;"&gt;Envie-nos um e-mail&lt;/a&gt;
&lt;/td&gt;
&lt;td style="vertical-align: top; margin: 0; padding: 0 0 30px; width: 210px; background: #f6f6f6;-moz-border-radius-bottomright: 6px; -webkit-border-bottom-right-radius: 6px; border-bottom-right-radius: 6px;"&gt;
&lt;a href="%DEMOURL%" target="_blank" style="color: #333;"&gt;Envie uma solicitação&lt;/a&gt;
&lt;/td&gt;
<value>&lt;tr border="0" cellspacing="0" cellpadding="0"&gt;&lt;td colspan="3" style="height: 10px; line-height: 10px; background: #fff; padding: 0; margin: 0;"&gt; &lt;/td&gt;&lt;/tr&gt;
&lt;tr border="0" cellspacing="0" cellpadding="0"&gt;
&lt;td style="vertical-align: top; margin: 0; padding: 34px 0 0 0; width: 210px; height: 108px; background: #f6f6f6; -moz-border-radius-topleft: 6px; -webkit-border-top-left-radius: 6px; border-top-left-radius: 6px;"&gt;
&lt;img src="%IMAGEPATH%/tech-100.png" style="width: 100px; height: 100px;margin: 0 auto;" /&gt;
&lt;/td&gt;
&lt;td style="vertical-align: top; margin: 0; padding: 34px 0 0 0; width: 180px; height: 108px; background: #f6f6f6;"&gt;
&lt;img src="%IMAGEPATH%/mailus-100.png" style="width: 100px; height: 100px;margin: 0 auto;" /&gt;
&lt;/td&gt;
&lt;td style="vertical-align: top; margin: 0; padding: 34px 0 0 0; width: 210px; height: 108px; background: #f6f6f6; -moz-border-radius-topright: 6px; -webkit-border-top-right-radius: 6px; border-top-right-radius: 6px;"&gt;
&lt;img src="%IMAGEPATH%/demo-100.png" style="width: 100px; height: 100px;margin: 0 auto;" /&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr border="0" cellspacing="0" cellpadding="0"&gt;
&lt;td style="vertical-align: top; margin: 0; padding: 0; width: 210px; height: 16px; background: #f6f6f6;"&gt;Precisa de ajuda técnica?&lt;/td&gt;
&lt;td style="vertical-align: top; margin: 0; padding: 0; width: 180px; height: 16px; background: #f6f6f6;"&gt;Perguntas sobre vendas&lt;/td&gt;
&lt;td style="vertical-align: top; margin: 0; padding: 0; width: 210px; height: 16px; background: #f6f6f6;"&gt;Demonstração de pedido&lt;/td&gt;
&lt;/tr&gt;
&lt;tr border="0" cellspacing="0" cellpadding="0"&gt;
&lt;td style="vertical-align: top; margin: 0; padding: 0 0 30px; width: 210px; background: #f6f6f6;-moz-border-radius-bottomleft: 6px; -webkit-border-bottom-left-radius: 6px; border-bottom-left-radius: 6px;"&gt;
&lt;a href="%SUPPORTURL%" target="_blank" style="color: #333;"&gt;Envie sua pergunta&lt;/a&gt;
&lt;/td&gt;
&lt;td style="vertical-align: top; margin: 0; padding: 0 0 30px; width: 180px; background: #f6f6f6;"&gt;
&lt;a href="mailto:%SALESEMAIL%" style="color: #333;"&gt;Envie-nos um e-mail&lt;/a&gt;
&lt;/td&gt;
&lt;td style="vertical-align: top; margin: 0; padding: 0 0 30px; width: 210px; background: #f6f6f6;-moz-border-radius-bottomright: 6px; -webkit-border-bottom-right-radius: 6px; border-bottom-right-radius: 6px;"&gt;
&lt;a href="%DEMOURL%" target="_blank" style="color: #333;"&gt;Envie uma solicitação&lt;/a&gt;
&lt;/td&gt;
&lt;/tr&gt;</value>
</data>
<data name="FooterOpensourceV10" xml:space="preserve">
<value>&lt;tr border="0" cellspacing="0" cellpadding="0"&gt;&lt;td colspan="3" style="height: 10px; line-height: 10px; background: #fff; padding: 0; margin: 0;"&gt;&amp;nbsp;&lt;/td&gt;&lt;/tr&gt;
&lt;tr border="0" cellspacing="0" cellpadding="0"&gt;
&lt;td style="vertical-align: top; margin: 0; padding: 34px 0 0 0; width: 210px; height: 108px; background: #f6f6f6; -moz-border-radius-topleft: 6px; -webkit-border-top-left-radius: 6px; border-top-left-radius: 6px;"&gt;
&lt;img src="%IMAGEPATH%/tech-100.png" style="width: 100px; height: 100px;margin: 0 auto;" /&gt;
&lt;/td&gt;
&lt;td style="vertical-align: top; margin: 0; padding: 34px 0 0 0; width: 180px; height: 108px; background: #f6f6f6;"&gt;
&lt;img src="%IMAGEPATH%/mailus-100.png" style="width: 100px; height: 100px;margin: 0 auto;" /&gt;
&lt;/td&gt;
&lt;td style="vertical-align: top; margin: 0; padding: 34px 0 0 0; width: 210px; height: 108px; background: #f6f6f6; -moz-border-radius-topright: 6px; -webkit-border-top-right-radius: 6px; border-top-right-radius: 6px;"&gt;
&lt;img src="%IMAGEPATH%/demo-100.png" style="width: 100px; height: 100px;margin: 0 auto;" /&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr border="0" cellspacing="0" cellpadding="0"&gt;
&lt;td style="vertical-align: top; margin: 0; padding: 0; width: 210px; height: 16px; background: #f6f6f6;"&gt;Need tech help?&lt;/td&gt;
&lt;td style="vertical-align: top; margin: 0; padding: 0; width: 180px; height: 16px; background: #f6f6f6;"&gt;Sales Questions&lt;/td&gt;
&lt;td style="vertical-align: top; margin: 0; padding: 0; width: 210px; height: 16px; background: #f6f6f6;"&gt;Order Demo&lt;/td&gt;
&lt;/tr&gt;
&lt;tr border="0" cellspacing="0" cellpadding="0"&gt;
&lt;td style="vertical-align: top; margin: 0; padding: 0 0 30px; width: 210px; background: #f6f6f6;-moz-border-radius-bottomleft: 6px; -webkit-border-bottom-left-radius: 6px; border-bottom-left-radius: 6px;"&gt;
&lt;a href="http://dev.onlyoffice.org/" target="_blank" style="color: #333;"&gt;Ask the Community&lt;/a&gt;
&lt;/td&gt;
&lt;td style="vertical-align: top; margin: 0; padding: 0 0 30px; width: 180px; background: #f6f6f6;"&gt;
&lt;a href="mailto:sales@onlyoffice.com" style="color: #333;"&gt;Email us&lt;/a&gt;
&lt;/td&gt;
&lt;td style="vertical-align: top; margin: 0; padding: 0 0 30px; width: 210px; background: #f6f6f6;-moz-border-radius-bottomright: 6px; -webkit-border-bottom-right-radius: 6px; border-bottom-right-radius: 6px;"&gt;
&lt;a href="http://www.onlyoffice.com/demo-order.aspx" target="_blank" style="color: #333;"&gt;Send a request&lt;/a&gt;
&lt;/td&gt;
<value>&lt;tr border="0" cellspacing="0" cellpadding="0"&gt;&lt;td colspan="3" style="height: 10px; line-height: 10px; background: #fff; padding: 0; margin: 0;"&gt;&amp;nbsp;&lt;/td&gt;&lt;/tr&gt;
&lt;tr border="0" cellspacing="0" cellpadding="0"&gt;
&lt;td style="vertical-align: top; margin: 0; padding: 34px 0 0 0; width: 210px; height: 108px; background: #f6f6f6; -moz-border-radius-topleft: 6px; -webkit-border-top-left-radius: 6px; border-top-left-radius: 6px;"&gt;
&lt;img src="%IMAGEPATH%/tech-100.png" style="width: 100px; height: 100px;margin: 0 auto;" /&gt;
&lt;/td&gt;
&lt;td style="vertical-align: top; margin: 0; padding: 34px 0 0 0; width: 180px; height: 108px; background: #f6f6f6;"&gt;
&lt;img src="%IMAGEPATH%/mailus-100.png" style="width: 100px; height: 100px;margin: 0 auto;" /&gt;
&lt;/td&gt;
&lt;td style="vertical-align: top; margin: 0; padding: 34px 0 0 0; width: 210px; height: 108px; background: #f6f6f6; -moz-border-radius-topright: 6px; -webkit-border-top-right-radius: 6px; border-top-right-radius: 6px;"&gt;
&lt;img src="%IMAGEPATH%/demo-100.png" style="width: 100px; height: 100px;margin: 0 auto;" /&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr border="0" cellspacing="0" cellpadding="0"&gt;
&lt;td style="vertical-align: top; margin: 0; padding: 0; width: 210px; height: 16px; background: #f6f6f6;"&gt;Need tech help?&lt;/td&gt;
&lt;td style="vertical-align: top; margin: 0; padding: 0; width: 180px; height: 16px; background: #f6f6f6;"&gt;Sales Questions&lt;/td&gt;
&lt;td style="vertical-align: top; margin: 0; padding: 0; width: 210px; height: 16px; background: #f6f6f6;"&gt;Order Demo&lt;/td&gt;
&lt;/tr&gt;
&lt;tr border="0" cellspacing="0" cellpadding="0"&gt;
&lt;td style="vertical-align: top; margin: 0; padding: 0 0 30px; width: 210px; background: #f6f6f6;-moz-border-radius-bottomleft: 6px; -webkit-border-bottom-left-radius: 6px; border-bottom-left-radius: 6px;"&gt;
&lt;a href="http://dev.onlyoffice.org/" target="_blank" style="color: #333;"&gt;Ask the Community&lt;/a&gt;
&lt;/td&gt;
&lt;td style="vertical-align: top; margin: 0; padding: 0 0 30px; width: 180px; background: #f6f6f6;"&gt;
&lt;a href="mailto:sales@onlyoffice.com" style="color: #333;"&gt;Email us&lt;/a&gt;
&lt;/td&gt;
&lt;td style="vertical-align: top; margin: 0; padding: 0 0 30px; width: 210px; background: #f6f6f6;-moz-border-radius-bottomright: 6px; -webkit-border-bottom-right-radius: 6px; border-bottom-right-radius: 6px;"&gt;
&lt;a href="http://www.onlyoffice.com/demo-order.aspx" target="_blank" style="color: #333;"&gt;Send a request&lt;/a&gt;
&lt;/td&gt;
&lt;/tr&gt;</value>
</data>
<data name="HtmlMaster" xml:space="preserve">
<value>&lt;body style="margin: 0; padding: 0; text-align: center; width: 100%; font-family: Arial, sans-serif; font-size: 14px; color: #333;"&gt;
&lt;div style="background-color: #fff; width: 600px; margin: 0 auto; text-align: left;"&gt;
&lt;table cellspacing="0" cellpadding="0" style="font-family: Arial; font-size: 14px; color: #333; background: #fff; text-align: center; width: 600px; margin: 0; padding: 0; border: 0 none; border-collapse: collapse; empty-cells: show; border-spacing: 0;"&gt;
&lt;tbody&gt;
&lt;tr border="0" cellspacing="0" cellpadding="0"&gt;
&lt;td colspan="3" style="margin: 0; padding: 0; background-color: #fff; height: 65px; padding: 20px 0 0 30px;"&gt;
&lt;div style="text-align: left; height: 65px; width: 570px; margin: 0; padding: 0;"&gt;
&lt;a href="%SITEURL%" style="text-decoration: none; display: inline-block; width: 386px; height: 44px; margin: 0; padding: 0;" target="_blank"&gt;
&lt;img src="%LOGO%" style="border: 0px none; width: 386px; height: 44px; margin: 0; padding: 0;" alt="%LOGOTEXT%" /&gt;
&lt;/a&gt;
&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr border="0" cellspacing="0" cellpadding="0"&gt;
&lt;td colspan="3" style="margin: 0; padding: 15px 30px 15px; background-color: #f6f6f6; -moz-border-radius: 6px; -webkit-border-radius: 6px; border-radius: 6px;"&gt;
&lt;div style="font-family: Arial; font-size: 14px; color: #333; margin: 0; padding: 0; width: 540px; height: auto; overflow: hidden; word-wrap: break-word; vertical-align: top; text-align: left; border: 0 none;"&gt;
%CONTENT%
&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
%FOOTER%
&lt;/tbody&gt;
&lt;/table&gt;
&lt;table cellspacing="0" cellpadding="0" style="font-family: Arial; font-size: 14px; color: #333; text-align: center; vertical-align: top; width: 600px; margin: 0; padding: 0; border-collapse: collapse; border: 0; border-spacing: 0; "&gt;
&lt;tbody&gt;
%FOOTERSOCIAL%
&lt;tr border="0" cellspacing="0" cellpadding="0"&gt;
&lt;td colspan="6" style="width: 600px; vertical-align: top; margin: 0; padding: 20px 30px 15px;"&gt;
&lt;p style="color: #7b7b7b; font-family: Arial, Tahoma; font-size: 12px; margin: 0; padding: 0; text-align: center; width: 540px;"&gt;
%TEXTFOOTER%
&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
<value>&lt;body style="margin: 0; padding: 0; text-align: center; width: 100%; font-family: Arial, sans-serif; font-size: 14px; color: #333;"&gt;
&lt;div style="background-color: #fff; width: 600px; margin: 0 auto; text-align: left;"&gt;
&lt;table cellspacing="0" cellpadding="0" style="font-family: Arial; font-size: 14px; color: #333; background: #fff; text-align: center; width: 600px; margin: 0; padding: 0; border: 0 none; border-collapse: collapse; empty-cells: show; border-spacing: 0;"&gt;
&lt;tbody&gt;
&lt;tr border="0" cellspacing="0" cellpadding="0"&gt;
&lt;td colspan="3" style="margin: 0; padding: 0; background-color: #fff; height: 65px; padding: 20px 0 0 30px;"&gt;
&lt;div style="text-align: left; height: 65px; width: 570px; margin: 0; padding: 0;"&gt;
&lt;a href="%SITEURL%" style="text-decoration: none; display: inline-block; width: 386px; height: 44px; margin: 0; padding: 0;" target="_blank"&gt;
&lt;img src="%LOGO%" style="border: 0px none; width: 386px; height: 44px; margin: 0; padding: 0;" alt="%LOGOTEXT%" /&gt;
&lt;/a&gt;
&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr border="0" cellspacing="0" cellpadding="0"&gt;
&lt;td colspan="3" style="margin: 0; padding: 15px 30px 15px; background-color: #f6f6f6; -moz-border-radius: 6px; -webkit-border-radius: 6px; border-radius: 6px;"&gt;
&lt;div style="font-family: Arial; font-size: 14px; color: #333; margin: 0; padding: 0; width: 540px; height: auto; overflow: hidden; word-wrap: break-word; vertical-align: top; text-align: left; border: 0 none;"&gt;
%CONTENT%
&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
%FOOTER%
&lt;/tbody&gt;
&lt;/table&gt;
&lt;table cellspacing="0" cellpadding="0" style="font-family: Arial; font-size: 14px; color: #333; text-align: center; vertical-align: top; width: 600px; margin: 0; padding: 0; border-collapse: collapse; border: 0; border-spacing: 0; "&gt;
&lt;tbody&gt;
%FOOTERSOCIAL%
&lt;tr border="0" cellspacing="0" cellpadding="0"&gt;
&lt;td colspan="6" style="width: 600px; vertical-align: top; margin: 0; padding: 20px 30px 15px;"&gt;
&lt;p style="color: #7b7b7b; font-family: Arial, Tahoma; font-size: 12px; margin: 0; padding: 0; text-align: center; width: 540px;"&gt;
%TEXTFOOTER%
&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;/body&gt;</value>
</data>
<data name="SocialNetworksFooterV10" xml:space="preserve">
<value>&lt;tr border="0" cellspacing="0" cellpadding="0"&gt;
&lt;td style="width: 40px; vertical-align: top; margin: 0; padding: 22px 5px 0 155px;"&gt;
&lt;a href="https://www.facebook.com/pages/OnlyOffice/833032526736775" style="width: 40px; height: 40px; display: block; margin: 0; padding: 0;" target="_blank"&gt;
&lt;img src="%IMAGEPATH%/social-fb-40.png" alt="Facebook" style="width: 40px; height: 40px;" /&gt;
&lt;/a&gt;
&lt;/td&gt;
&lt;td style="width: 40px; vertical-align: top; margin: 0; padding: 22px 5px 0 5px;"&gt;
&lt;a href="https://twitter.com/ONLY_OFFICE" style="width: 40px; height: 40px; display: block; margin: 0; padding: 0;" target="_blank"&gt;
&lt;img src="%IMAGEPATH%/social-tw-40.png" alt="Twitter" style="width: 40px; height: 40px;" /&gt;
&lt;/a&gt;
&lt;/td&gt;
&lt;td style="width: 40px; vertical-align: top; margin: 0; padding: 22px 5px 0 5px;"&gt;
&lt;a href="https://www.onlyoffice.com/blog" style="width: 40px; height: 40px; display: block; margin: 0; padding: 0;" target="_blank"&gt;
&lt;img src="%IMAGEPATH%/social-blog-40.png" alt="ONLYOFFICE" style="width: 40px; height: 40px;" /&gt;
&lt;/a&gt;
&lt;/td&gt;
&lt;td style="width: 40px; vertical-align: top; margin: 0; padding: 22px 5px 0 5px;"&gt;
&lt;a href="https://www.youtube.com/user/onlyofficeTV" style="width: 40px; height: 40px; display: block; margin: 0; padding: 0;" target="_blank"&gt;
&lt;img src="%IMAGEPATH%/social-youtube-40.png" alt="YouTube" style="width: 40px; height: 40x;" /&gt;
&lt;/a&gt;
&lt;/td&gt;
&lt;td style="width: 40px; vertical-align: top; margin: 0; padding: 22px 5px 0 5px;"&gt;
&lt;a href="https://vk.com/onlyoffice" style="width: 40px; height: 40px; display: block; margin: 0; padding: 0;" target="_blank"&gt;
&lt;img src="%IMAGEPATH%/social-vk-40.png" alt="VK" style="width: 40px; height: 40px;" /&gt;
&lt;/a&gt;
&lt;/td&gt;
&lt;td style="width: 40px; vertical-align: top; margin: 0; padding: 22px 155px 0 5px;"&gt;
&lt;a href="https://www.instagram.com/the_onlyoffice" style="width: 40px; height: 40px; display: block; margin: 0; padding: 0;" target="_blank"&gt;
&lt;img src="%IMAGEPATH%/social-inst-40.png" alt="Instagram" style="width: 40px; height: 40px;" /&gt;
&lt;/a&gt;
&lt;/td&gt;
<value>&lt;tr border="0" cellspacing="0" cellpadding="0"&gt;
&lt;td style="width: 40px; vertical-align: top; margin: 0; padding: 22px 5px 0 155px;"&gt;
&lt;a href="https://www.facebook.com/pages/OnlyOffice/833032526736775" style="width: 40px; height: 40px; display: block; margin: 0; padding: 0;" target="_blank"&gt;
&lt;img src="%IMAGEPATH%/social-fb-40.png" alt="Facebook" style="width: 40px; height: 40px;" /&gt;
&lt;/a&gt;
&lt;/td&gt;
&lt;td style="width: 40px; vertical-align: top; margin: 0; padding: 22px 5px 0 5px;"&gt;
&lt;a href="https://twitter.com/ONLY_OFFICE" style="width: 40px; height: 40px; display: block; margin: 0; padding: 0;" target="_blank"&gt;
&lt;img src="%IMAGEPATH%/social-tw-40.png" alt="Twitter" style="width: 40px; height: 40px;" /&gt;
&lt;/a&gt;
&lt;/td&gt;
&lt;td style="width: 40px; vertical-align: top; margin: 0; padding: 22px 5px 0 5px;"&gt;
&lt;a href="https://www.onlyoffice.com/blog" style="width: 40px; height: 40px; display: block; margin: 0; padding: 0;" target="_blank"&gt;
&lt;img src="%IMAGEPATH%/social-blog-40.png" alt="ONLYOFFICE" style="width: 40px; height: 40px;" /&gt;
&lt;/a&gt;
&lt;/td&gt;
&lt;td style="width: 40px; vertical-align: top; margin: 0; padding: 22px 5px 0 5px;"&gt;
&lt;a href="https://www.youtube.com/user/onlyofficeTV" style="width: 40px; height: 40px; display: block; margin: 0; padding: 0;" target="_blank"&gt;
&lt;img src="%IMAGEPATH%/social-youtube-40.png" alt="YouTube" style="width: 40px; height: 40x;" /&gt;
&lt;/a&gt;
&lt;/td&gt;
&lt;td style="width: 40px; vertical-align: top; margin: 0; padding: 22px 5px 0 5px;"&gt;
&lt;a href="https://vk.com/onlyoffice" style="width: 40px; height: 40px; display: block; margin: 0; padding: 0;" target="_blank"&gt;
&lt;img src="%IMAGEPATH%/social-vk-40.png" alt="VK" style="width: 40px; height: 40px;" /&gt;
&lt;/a&gt;
&lt;/td&gt;
&lt;td style="width: 40px; vertical-align: top; margin: 0; padding: 22px 155px 0 5px;"&gt;
&lt;a href="https://www.instagram.com/the_onlyoffice" style="width: 40px; height: 40px; display: block; margin: 0; padding: 0;" target="_blank"&gt;
&lt;img src="%IMAGEPATH%/social-inst-40.png" alt="Instagram" style="width: 40px; height: 40px;" /&gt;
&lt;/a&gt;
&lt;/td&gt;
&lt;/tr&gt;</value>
</data>
<data name="TextForFooterUnsubsribeDocSpace" xml:space="preserve">
<value>Este e-mail é gerado automaticamente e você não precisa respondê-lo.&lt;br /&gt;Você recebeu este e-mail porque é um usuário registrado do &lt;a href="{0}" target="_blank"&gt; DocSpace&lt;/a&gt;.
&lt;br /&gt; Clique aqui para cancelar a assinatura dos e-mails de notificação do DocSpace: &lt;a href="{1}" target="_blank"&gt;Unsubscribe&lt;/a&gt;
&lt;br /&gt;</value>
</data>
</root>

View File

@ -0,0 +1,254 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<data name="HtmlMaster" xml:space="preserve">
<value>&lt;body style="margin: 0; padding: 0; text-align: center; width: 100%; font-family: Arial, sans-serif; font-size: 14px; color: #333;"&gt;
&lt;div style="background-color: #fff; width: 600px; margin: 0 auto; text-align: left;"&gt;
&lt;table cellspacing="0" cellpadding="0" style="font-family: Arial; font-size: 14px; color: #333; background: #fff; text-align: center; width: 600px; margin: 0; padding: 0; border: 0 none; border-collapse: collapse; empty-cells: show; border-spacing: 0;"&gt;
&lt;tbody&gt;
&lt;tr border="0" cellspacing="0" cellpadding="0"&gt;
&lt;td colspan="3" style="margin: 0; padding: 0; background-color: #fff; height: 65px; padding: 20px 0 0 30px;"&gt;
&lt;div style="text-align: left; height: 65px; width: 570px; margin: 0; padding: 0;"&gt;
&lt;a href="%SITEURL%" style="text-decoration: none; display: inline-block; width: 386px; height: 44px; margin: 0; padding: 0;" target="_blank"&gt;
&lt;img src="%LOGO%" style="border: 0px none; width: 386px; height: 44px; margin: 0; padding: 0;" alt="%LOGOTEXT%" /&gt;
&lt;/a&gt;
&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr border="0" cellspacing="0" cellpadding="0"&gt;
&lt;td colspan="3" style="margin: 0; padding: 15px 30px 15px; background-color: #f6f6f6; -moz-border-radius: 6px; -webkit-border-radius: 6px; border-radius: 6px;"&gt;
&lt;div style="font-family: Arial; font-size: 14px; color: #333; margin: 0; padding: 0; width: 540px; height: auto; overflow: hidden; word-wrap: break-word; vertical-align: top; text-align: left; border: 0 none;"&gt;
%CONTENT%
&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
%FOOTER%
&lt;/tbody&gt;
&lt;/table&gt;
&lt;table cellspacing="0" cellpadding="0" style="font-family: Arial; font-size: 14px; color: #333; text-align: center; vertical-align: top; width: 600px; margin: 0; padding: 0; border-collapse: collapse; border: 0; border-spacing: 0; "&gt;
&lt;tbody&gt;
%FOOTERSOCIAL%
&lt;tr border="0" cellspacing="0" cellpadding="0"&gt;
&lt;td colspan="6" style="width: 600px; vertical-align: top; margin: 0; padding: 20px 30px 15px;"&gt;
&lt;p style="color: #7b7b7b; font-family: Arial, Tahoma; font-size: 12px; margin: 0; padding: 0; text-align: center; width: 540px;"&gt;
%TEXTFOOTER%
&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;/body&gt;</value>
</data>
<data name="SocialNetworksFooterV10" xml:space="preserve">
<value>&lt;tr border="0" cellspacing="0" cellpadding="0"&gt;
&lt;td style="width: 40px; vertical-align: top; margin: 0; padding: 22px 5px 0 155px;"&gt;
&lt;a href="https://www.facebook.com/pages/OnlyOffice/833032526736775" style="width: 40px; height: 40px; display: block; margin: 0; padding: 0;" target="_blank"&gt;
&lt;img src="%IMAGEPATH%/social-fb-40.png" alt="Facebook" style="width: 40px; height: 40px;" /&gt;
&lt;/a&gt;
&lt;/td&gt;
&lt;td style="width: 40px; vertical-align: top; margin: 0; padding: 22px 5px 0 5px;"&gt;
&lt;a href="https://twitter.com/ONLY_OFFICE" style="width: 40px; height: 40px; display: block; margin: 0; padding: 0;" target="_blank"&gt;
&lt;img src="%IMAGEPATH%/social-tw-40.png" alt="Twitter" style="width: 40px; height: 40px;" /&gt;
&lt;/a&gt;
&lt;/td&gt;
&lt;td style="width: 40px; vertical-align: top; margin: 0; padding: 22px 5px 0 5px;"&gt;
&lt;a href="https://www.onlyoffice.com/blog" style="width: 40px; height: 40px; display: block; margin: 0; padding: 0;" target="_blank"&gt;
&lt;img src="%IMAGEPATH%/social-blog-40.png" alt="ONLYOFFICE" style="width: 40px; height: 40px;" /&gt;
&lt;/a&gt;
&lt;/td&gt;
&lt;td style="width: 40px; vertical-align: top; margin: 0; padding: 22px 5px 0 5px;"&gt;
&lt;a href="https://www.youtube.com/user/onlyofficeTV" style="width: 40px; height: 40px; display: block; margin: 0; padding: 0;" target="_blank"&gt;
&lt;img src="%IMAGEPATH%/social-youtube-40.png" alt="YouTube" style="width: 40px; height: 40x;" /&gt;
&lt;/a&gt;
&lt;/td&gt;
&lt;td style="width: 40px; vertical-align: top; margin: 0; padding: 22px 5px 0 5px;"&gt;
&lt;a href="https://vk.com/onlyoffice" style="width: 40px; height: 40px; display: block; margin: 0; padding: 0;" target="_blank"&gt;
&lt;img src="%IMAGEPATH%/social-vk-40.png" alt="VK" style="width: 40px; height: 40px;" /&gt;
&lt;/a&gt;
&lt;/td&gt;
&lt;td style="width: 40px; vertical-align: top; margin: 0; padding: 22px 155px 0 5px;"&gt;
&lt;a href="https://www.instagram.com/the_onlyoffice" style="width: 40px; height: 40px; display: block; margin: 0; padding: 0;" target="_blank"&gt;
&lt;img src="%IMAGEPATH%/social-inst-40.png" alt="Instagram" style="width: 40px; height: 40px;" /&gt;
&lt;/a&gt;
&lt;/td&gt;
&lt;/tr&gt;</value>
</data>
<data name="FooterCommonV10" xml:space="preserve">
<value>&lt;tr border="0" cellspacing="0" cellpadding="0"&gt;&lt;td colspan="3" style="height: 10px; line-height: 10px; background: #fff; padding: 0; margin: 0;"&gt;&amp;nbsp;&lt;/td&gt;&lt;/tr&gt;
&lt;tr border="0" cellspacing="0" cellpadding="0"&gt;
&lt;td style="vertical-align: top; margin: 0; padding: 34px 0 0 0; width: 210px; height: 108px; background: #f6f6f6; -moz-border-radius-topleft: 6px; -webkit-border-top-left-radius: 6px; border-top-left-radius: 6px;"&gt;
&lt;img src="%IMAGEPATH%/tech-100.png" style="width: 100px; height: 100px;margin: 0 auto;" /&gt;
&lt;/td&gt;
&lt;td style="vertical-align: top; margin: 0; padding: 34px 0 0 0; width: 180px; height: 108px; background: #f6f6f6;"&gt;
&lt;img src="%IMAGEPATH%/mailus-100.png" style="width: 100px; height: 100px;margin: 0 auto;" /&gt;
&lt;/td&gt;
&lt;td style="vertical-align: top; margin: 0; padding: 34px 0 0 0; width: 210px; height: 108px; background: #f6f6f6; -moz-border-radius-topright: 6px; -webkit-border-top-right-radius: 6px; border-top-right-radius: 6px;"&gt;
&lt;img src="%IMAGEPATH%/demo-100.png" style="width: 100px; height: 100px;margin: 0 auto;" /&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr border="0" cellspacing="0" cellpadding="0"&gt;
&lt;td style="vertical-align: top; margin: 0; padding: 0; width: 210px; height: 16px; background: #f6f6f6;"&gt;Need tech help?&lt;/td&gt;
&lt;td style="vertical-align: top; margin: 0; padding: 0; width: 180px; height: 16px; background: #f6f6f6;"&gt;Sales Questions&lt;/td&gt;
&lt;td style="vertical-align: top; margin: 0; padding: 0; width: 210px; height: 16px; background: #f6f6f6;"&gt;Order Demo&lt;/td&gt;
&lt;/tr&gt;
&lt;tr border="0" cellspacing="0" cellpadding="0"&gt;
&lt;td style="vertical-align: top; margin: 0; padding: 0 0 30px; width: 210px; background: #f6f6f6;-moz-border-radius-bottomleft: 6px; -webkit-border-bottom-left-radius: 6px; border-bottom-left-radius: 6px;"&gt;
&lt;a href="%SUPPORTURL%" target="_blank" style="color: #333;"&gt;Send your question&lt;/a&gt;
&lt;/td&gt;
&lt;td style="vertical-align: top; margin: 0; padding: 0 0 30px; width: 180px; background: #f6f6f6;"&gt;
&lt;a href="mailto:%SALESEMAIL%" style="color: #333;"&gt;Email us&lt;/a&gt;
&lt;/td&gt;
&lt;td style="vertical-align: top; margin: 0; padding: 0 0 30px; width: 210px; background: #f6f6f6;-moz-border-radius-bottomright: 6px; -webkit-border-bottom-right-radius: 6px; border-bottom-right-radius: 6px;"&gt;
&lt;a href="%DEMOURL%" target="_blank" style="color: #333;"&gt;Send a request&lt;/a&gt;
&lt;/td&gt;
&lt;/tr&gt;</value>
</data>
<data name="FooterOpensourceV10" xml:space="preserve">
<value>&lt;tr border="0" cellspacing="0" cellpadding="0"&gt;&lt;td colspan="3" style="height: 10px; line-height: 10px; background: #fff; padding: 0; margin: 0;"&gt;&amp;nbsp;&lt;/td&gt;&lt;/tr&gt;
&lt;tr border="0" cellspacing="0" cellpadding="0"&gt;
&lt;td style="vertical-align: top; margin: 0; padding: 34px 0 0 0; width: 210px; height: 108px; background: #f6f6f6; -moz-border-radius-topleft: 6px; -webkit-border-top-left-radius: 6px; border-top-left-radius: 6px;"&gt;
&lt;img src="%IMAGEPATH%/tech-100.png" style="width: 100px; height: 100px;margin: 0 auto;" /&gt;
&lt;/td&gt;
&lt;td style="vertical-align: top; margin: 0; padding: 34px 0 0 0; width: 180px; height: 108px; background: #f6f6f6;"&gt;
&lt;img src="%IMAGEPATH%/mailus-100.png" style="width: 100px; height: 100px;margin: 0 auto;" /&gt;
&lt;/td&gt;
&lt;td style="vertical-align: top; margin: 0; padding: 34px 0 0 0; width: 210px; height: 108px; background: #f6f6f6; -moz-border-radius-topright: 6px; -webkit-border-top-right-radius: 6px; border-top-right-radius: 6px;"&gt;
&lt;img src="%IMAGEPATH%/demo-100.png" style="width: 100px; height: 100px;margin: 0 auto;" /&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr border="0" cellspacing="0" cellpadding="0"&gt;
&lt;td style="vertical-align: top; margin: 0; padding: 0; width: 210px; height: 16px; background: #f6f6f6;"&gt;Need tech help?&lt;/td&gt;
&lt;td style="vertical-align: top; margin: 0; padding: 0; width: 180px; height: 16px; background: #f6f6f6;"&gt;Sales Questions&lt;/td&gt;
&lt;td style="vertical-align: top; margin: 0; padding: 0; width: 210px; height: 16px; background: #f6f6f6;"&gt;Order Demo&lt;/td&gt;
&lt;/tr&gt;
&lt;tr border="0" cellspacing="0" cellpadding="0"&gt;
&lt;td style="vertical-align: top; margin: 0; padding: 0 0 30px; width: 210px; background: #f6f6f6;-moz-border-radius-bottomleft: 6px; -webkit-border-bottom-left-radius: 6px; border-bottom-left-radius: 6px;"&gt;
&lt;a href="http://dev.onlyoffice.org/" target="_blank" style="color: #333;"&gt;Ask the Community&lt;/a&gt;
&lt;/td&gt;
&lt;td style="vertical-align: top; margin: 0; padding: 0 0 30px; width: 180px; background: #f6f6f6;"&gt;
&lt;a href="mailto:sales@onlyoffice.com" style="color: #333;"&gt;Email us&lt;/a&gt;
&lt;/td&gt;
&lt;td style="vertical-align: top; margin: 0; padding: 0 0 30px; width: 210px; background: #f6f6f6;-moz-border-radius-bottomright: 6px; -webkit-border-bottom-right-radius: 6px; border-bottom-right-radius: 6px;"&gt;
&lt;a href="http://www.onlyoffice.com/demo-order.aspx" target="_blank" style="color: #333;"&gt;Send a request&lt;/a&gt;
&lt;/td&gt;
&lt;/tr&gt;</value>
</data>
</root>

View File

@ -0,0 +1,259 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<data name="TextForFooterUnsubsribeDocSpace" xml:space="preserve">
<value>Acest mesaj de e-mail este generat automat, vă rugăm să nu răspundeţi la acesta scrisiare.&lt;br /&gt;Ați primit acest e-mail pentru că sunteți un utilizator înregistrat al spațiului &lt;a href="{0}" target="_blank"&gt; DocSpace&lt;/a&gt;.
&lt;br /&gt; Faceți clic aici pentru a dezactiva notificările DocSpace prin e-mail: &lt;a href="{1}"  target="_blank"&gt;Unsubscribe&lt;/a&gt;
&lt;br /&gt;</value>
</data>
<data name="SocialNetworksFooterV10" xml:space="preserve">
<value>&lt;tr border="0" cellspacing="0" cellpadding="0"&gt;
&lt;td style="width: 40px; vertical-align: top; margin: 0; padding: 22px 5px 0 155px;"&gt;
&lt;a href="https://www.facebook.com/pages/OnlyOffice/833032526736775" style="width: 40px; height: 40px; display: block; margin: 0; padding: 0;" target="_blank"&gt;
&lt;img src="%IMAGEPATH%/social-fb-40.png" alt="Facebook" style="width: 40px; height: 40px;" /&gt;
&lt;/a&gt;
&lt;/td&gt;
&lt;td style="width: 40px; vertical-align: top; margin: 0; padding: 22px 5px 0 5px;"&gt;
&lt;a href="https://twitter.com/ONLY_OFFICE" style="width: 40px; height: 40px; display: block; margin: 0; padding: 0;" target="_blank"&gt;
&lt;img src="%IMAGEPATH%/social-tw-40.png" alt="Twitter" style="width: 40px; height: 40px;" /&gt;
&lt;/a&gt;
&lt;/td&gt;
&lt;td style="width: 40px; vertical-align: top; margin: 0; padding: 22px 5px 0 5px;"&gt;
&lt;a href="https://www.onlyoffice.com/blog" style="width: 40px; height: 40px; display: block; margin: 0; padding: 0;" target="_blank"&gt;
&lt;img src="%IMAGEPATH%/social-blog-40.png" alt="ONLYOFFICE" style="width: 40px; height: 40px;" /&gt;
&lt;/a&gt;
&lt;/td&gt;
&lt;td style="width: 40px; vertical-align: top; margin: 0; padding: 22px 5px 0 5px;"&gt;
&lt;a href="https://www.youtube.com/user/onlyofficeTV" style="width: 40px; height: 40px; display: block; margin: 0; padding: 0;" target="_blank"&gt;
&lt;img src="%IMAGEPATH%/social-youtube-40.png" alt="YouTube" style="width: 40px; height: 40x;" /&gt;
&lt;/a&gt;
&lt;/td&gt;
&lt;td style="width: 40px; vertical-align: top; margin: 0; padding: 22px 5px 0 5px;"&gt;
&lt;a href="https://vk.com/onlyoffice" style="width: 40px; height: 40px; display: block; margin: 0; padding: 0;" target="_blank"&gt;
&lt;img src="%IMAGEPATH%/social-vk-40.png" alt="VK" style="width: 40px; height: 40px;" /&gt;
&lt;/a&gt;
&lt;/td&gt;
&lt;td style="width: 40px; vertical-align: top; margin: 0; padding: 22px 155px 0 5px;"&gt;
&lt;a href="https://www.instagram.com/the_onlyoffice" style="width: 40px; height: 40px; display: block; margin: 0; padding: 0;" target="_blank"&gt;
&lt;img src="%IMAGEPATH%/social-inst-40.png" alt="Instagram" style="width: 40px; height: 40px;" /&gt;
&lt;/a&gt;
&lt;/td&gt;
&lt;/tr&gt;</value>
</data>
<data name="HtmlMaster" xml:space="preserve">
<value>&lt;body style="margin: 0; padding: 0; text-align: center; width: 100%; font-family: Arial, sans-serif; font-size: 14px; color: #333;"&gt;
&lt;div style="background-color: #fff; width: 600px; margin: 0 auto; text-align: left;"&gt;
&lt;table cellspacing="0" cellpadding="0" style="font-family: Arial; font-size: 14px; color: #333; background: #fff; text-align: center; width: 600px; margin: 0; padding: 0; border: 0 none; border-collapse: collapse; empty-cells: show; border-spacing: 0;"&gt;
&lt;tbody&gt;
&lt;tr border="0" cellspacing="0" cellpadding="0"&gt;
&lt;td colspan="3" style="margin: 0; padding: 0; background-color: #fff; height: 65px; padding: 20px 0 0 30px;"&gt;
&lt;div style="text-align: left; height: 65px; width: 570px; margin: 0; padding: 0;"&gt;
&lt;a href="%SITEURL%" style="text-decoration: none; display: inline-block; width: 386px; height: 44px; margin: 0; padding: 0;" target="_blank"&gt;
&lt;img src="%LOGO%" style="border: 0px none; width: 386px; height: 44px; margin: 0; padding: 0;" alt="%LOGOTEXT%" /&gt;
&lt;/a&gt;
&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr border="0" cellspacing="0" cellpadding="0"&gt;
&lt;td colspan="3" style="margin: 0; padding: 15px 30px 15px; background-color: #f6f6f6; -moz-border-radius: 6px; -webkit-border-radius: 6px; border-radius: 6px;"&gt;
&lt;div style="font-family: Arial; font-size: 14px; color: #333; margin: 0; padding: 0; width: 540px; height: auto; overflow: hidden; word-wrap: break-word; vertical-align: top; text-align: left; border: 0 none;"&gt;
%CONTENT%
&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
%FOOTER%
&lt;/tbody&gt;
&lt;/table&gt;
&lt;table cellspacing="0" cellpadding="0" style="font-family: Arial; font-size: 14px; color: #333; text-align: center; vertical-align: top; width: 600px; margin: 0; padding: 0; border-collapse: collapse; border: 0; border-spacing: 0; "&gt;
&lt;tbody&gt;
%FOOTERSOCIAL%
&lt;tr border="0" cellspacing="0" cellpadding="0"&gt;
&lt;td colspan="6" style="width: 600px; vertical-align: top; margin: 0; padding: 20px 30px 15px;"&gt;
&lt;p style="color: #7b7b7b; font-family: Arial, Tahoma; font-size: 12px; margin: 0; padding: 0; text-align: center; width: 540px;"&gt;
%TEXTFOOTER%
&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;/body&gt;</value>
</data>
<data name="FooterCommonV10" xml:space="preserve">
<value>&lt;tr border="0" cellspacing="0" cellpadding="0"&gt;&lt;td colspan="3" style="height: 10px; line-height: 10px; background: #fff; padding: 0; margin: 0;"&gt;&amp;nbsp;&lt;/td&gt;&lt;/tr&gt;
&lt;tr border="0" cellspacing="0" cellpadding="0"&gt;
&lt;td style="vertical-align: top; margin: 0; padding: 34px 0 0 0; width: 210px; height: 108px; background: #f6f6f6; -moz-border-radius-topleft: 6px; -webkit-border-top-left-radius: 6px; border-top-left-radius: 6px;"&gt;
&lt;img src="%IMAGEPATH%/tech-100.png" style="width: 100px; height: 100px;margin: 0 auto;" /&gt;
&lt;/td&gt;
&lt;td style="vertical-align: top; margin: 0; padding: 34px 0 0 0; width: 180px; height: 108px; background: #f6f6f6;"&gt;
&lt;img src="%IMAGEPATH%/mailus-100.png" style="width: 100px; height: 100px;margin: 0 auto;" /&gt;
&lt;/td&gt;
&lt;td style="vertical-align: top; margin: 0; padding: 34px 0 0 0; width: 210px; height: 108px; background: #f6f6f6; -moz-border-radius-topright: 6px; -webkit-border-top-right-radius: 6px; border-top-right-radius: 6px;"&gt;
&lt;img src="%IMAGEPATH%/demo-100.png" style="width: 100px; height: 100px;margin: 0 auto;" /&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr border="0" cellspacing="0" cellpadding="0"&gt;
&lt;td style="vertical-align: top; margin: 0; padding: 0; width: 210px; height: 16px; background: #f6f6f6;"&gt;Need tech help?&lt;/td&gt;
&lt;td style="vertical-align: top; margin: 0; padding: 0; width: 180px; height: 16px; background: #f6f6f6;"&gt;Sales Questions&lt;/td&gt;
&lt;td style="vertical-align: top; margin: 0; padding: 0; width: 210px; height: 16px; background: #f6f6f6;"&gt;Order Demo&lt;/td&gt;
&lt;/tr&gt;
&lt;tr border="0" cellspacing="0" cellpadding="0"&gt;
&lt;td style="vertical-align: top; margin: 0; padding: 0 0 30px; width: 210px; background: #f6f6f6;-moz-border-radius-bottomleft: 6px; -webkit-border-bottom-left-radius: 6px; border-bottom-left-radius: 6px;"&gt;
&lt;a href="%SUPPORTURL%" target="_blank" style="color: #333;"&gt;Send your question&lt;/a&gt;
&lt;/td&gt;
&lt;td style="vertical-align: top; margin: 0; padding: 0 0 30px; width: 180px; background: #f6f6f6;"&gt;
&lt;a href="mailto:%SALESEMAIL%" style="color: #333;"&gt;Email us&lt;/a&gt;
&lt;/td&gt;
&lt;td style="vertical-align: top; margin: 0; padding: 0 0 30px; width: 210px; background: #f6f6f6;-moz-border-radius-bottomright: 6px; -webkit-border-bottom-right-radius: 6px; border-bottom-right-radius: 6px;"&gt;
&lt;a href="%DEMOURL%" target="_blank" style="color: #333;"&gt;Send a request&lt;/a&gt;
&lt;/td&gt;
&lt;/tr&gt;</value>
</data>
<data name="FooterOpensourceV10" xml:space="preserve">
<value>&lt;tr border="0" cellspacing="0" cellpadding="0"&gt;&lt;td colspan="3" style="height: 10px; line-height: 10px; background: #fff; padding: 0; margin: 0;"&gt;&amp;nbsp;&lt;/td&gt;&lt;/tr&gt;
&lt;tr border="0" cellspacing="0" cellpadding="0"&gt;
&lt;td style="vertical-align: top; margin: 0; padding: 34px 0 0 0; width: 210px; height: 108px; background: #f6f6f6; -moz-border-radius-topleft: 6px; -webkit-border-top-left-radius: 6px; border-top-left-radius: 6px;"&gt;
&lt;img src="%IMAGEPATH%/tech-100.png" style="width: 100px; height: 100px;margin: 0 auto;" /&gt;
&lt;/td&gt;
&lt;td style="vertical-align: top; margin: 0; padding: 34px 0 0 0; width: 180px; height: 108px; background: #f6f6f6;"&gt;
&lt;img src="%IMAGEPATH%/mailus-100.png" style="width: 100px; height: 100px;margin: 0 auto;" /&gt;
&lt;/td&gt;
&lt;td style="vertical-align: top; margin: 0; padding: 34px 0 0 0; width: 210px; height: 108px; background: #f6f6f6; -moz-border-radius-topright: 6px; -webkit-border-top-right-radius: 6px; border-top-right-radius: 6px;"&gt;
&lt;img src="%IMAGEPATH%/demo-100.png" style="width: 100px; height: 100px;margin: 0 auto;" /&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr border="0" cellspacing="0" cellpadding="0"&gt;
&lt;td style="vertical-align: top; margin: 0; padding: 0; width: 210px; height: 16px; background: #f6f6f6;"&gt;Need tech help?&lt;/td&gt;
&lt;td style="vertical-align: top; margin: 0; padding: 0; width: 180px; height: 16px; background: #f6f6f6;"&gt;Sales Questions&lt;/td&gt;
&lt;td style="vertical-align: top; margin: 0; padding: 0; width: 210px; height: 16px; background: #f6f6f6;"&gt;Order Demo&lt;/td&gt;
&lt;/tr&gt;
&lt;tr border="0" cellspacing="0" cellpadding="0"&gt;
&lt;td style="vertical-align: top; margin: 0; padding: 0 0 30px; width: 210px; background: #f6f6f6;-moz-border-radius-bottomleft: 6px; -webkit-border-bottom-left-radius: 6px; border-bottom-left-radius: 6px;"&gt;
&lt;a href="http://dev.onlyoffice.org/" target="_blank" style="color: #333;"&gt;Ask the Community&lt;/a&gt;
&lt;/td&gt;
&lt;td style="vertical-align: top; margin: 0; padding: 0 0 30px; width: 180px; background: #f6f6f6;"&gt;
&lt;a href="mailto:sales@onlyoffice.com" style="color: #333;"&gt;Email us&lt;/a&gt;
&lt;/td&gt;
&lt;td style="vertical-align: top; margin: 0; padding: 0 0 30px; width: 210px; background: #f6f6f6;-moz-border-radius-bottomright: 6px; -webkit-border-bottom-right-radius: 6px; border-bottom-right-radius: 6px;"&gt;
&lt;a href="http://www.onlyoffice.com/demo-order.aspx" target="_blank" style="color: #333;"&gt;Send a request&lt;/a&gt;
&lt;/td&gt;
&lt;/tr&gt;</value>
</data>
</root>

Some files were not shown because too many files have changed in this diff Show More