diff --git a/Dockerfile b/Dockerfile
index 83ee8aab..482ec279 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -3,31 +3,39 @@
# -------------------
FROM node:alpine AS appbuild
-RUN apk add --update --no-cache p7zip
+RUN apk add --update --no-cache \
+ p7zip \
+ python2 \
+ build-base \
+ curl \
+ php7 \
+ php7-json \
+ php7-phar \
+ php7-iconv \
+ php7-openssl \
+ php7-dom \
+ php7-mbstring \
+ php7-xml \
+ php7-xmlwriter \
+ php7-ctype \
+ php7-tokenizer
+
+# Install Composer
+RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer
WORKDIR /usr/src/app
COPY ./package.json ./
-RUN npm install
COPY . ./
-RUN npm run build:prod
-# RUN npm run build
-
-
-# ------------------------
-# Build Stage 2 (composer)
-# ------------------------
-FROM composer AS apibuild
-
-WORKDIR /app
-COPY ./src/api ./
-RUN composer install
+RUN npm install
+# RUN npm run build:prod
+RUN npm run build
# --------------------------
-# Build Stage 3 (php-apache)
+# Build Stage 2 (php-apache)
# This build takes the production build from staging builds
# --------------------------
FROM php:7.3-apache
@@ -43,7 +51,9 @@ RUN a2enmod rewrite expires
WORKDIR $PROJECT
COPY --from=appbuild /usr/src/app/dist ./
-RUN rm -rf ./api/*
-COPY --from=apibuild /app ./api/
-RUN chmod 777 ./api
+RUN mkdir ./api/db && chown 33:33 ./api && chown 33:33 ./api/db && \
+ mkdir ./api/logs && chown 33:33 ./api/logs
+
EXPOSE 80
+
+VOLUME $PROJECT/api/db
diff --git a/docker-compose.yml b/docker-compose.yml
index cca2b66a..3a13d834 100644
--- a/docker-compose.yml
+++ b/docker-compose.yml
@@ -7,3 +7,8 @@ services:
context: .
ports:
- "8081:80"
+ volumes:
+ - database:/var/www/html/api/db
+
+volumes:
+ database:
diff --git a/src/api/index.php b/src/api/index.php
index 51d888e2..17a16dc5 100644
--- a/src/api/index.php
+++ b/src/api/index.php
@@ -11,7 +11,7 @@
require './vendor/autoload.php';
-R::setup('sqlite:taskboard.sqlite');
+R::setup('sqlite:db/taskboard.sqlite');
$container = new DI\Container();
AppFactory::setContainer($container);
diff --git a/src/app/settings/user-settings/user-settings.component.html b/src/app/settings/user-settings/user-settings.component.html
index a076a0a0..31d665ad 100644
--- a/src/app/settings/user-settings/user-settings.component.html
+++ b/src/app/settings/user-settings/user-settings.component.html
@@ -40,6 +40,7 @@
{{ strings['settings_globalOptions'] }}
+
Add Yours?
diff --git a/src/json/ru.json b/src/json/ru.json
new file mode 100644
index 00000000..cf958365
--- /dev/null
+++ b/src/json/ru.json
@@ -0,0 +1,235 @@
+{
+ "reset": "Сброс",
+ "none": "Отсутствует",
+ "yes": "Да",
+ "no": "Нет",
+ "save": "Сохранить",
+ "cancel": "Отмена",
+ "sortBy": "Сортировать по",
+ "loading": "Загрузка",
+
+ "dashboard": "Панель",
+ "boards": "Доски",
+ "files": "Обзор файлов",
+ "attachment": "Вложение",
+ "settings": "Настройки",
+ "logout": "Выход",
+
+ "settings_userSettings": "Мои настройки",
+ "settings_changePassword": "Сменить пароль",
+ "settings_currentPassword": "Текущий пароль",
+ "settings_newPassword": "Новый пароль",
+ "settings_verifyPassword": "Повторите пароль",
+ "settings_changeUsername": "Сменить логин",
+ "settings_newUsername": "Новый логин",
+ "settings_changeEmail": "Сменить EMail",
+ "settings_newEmail": "Новый Email",
+ "settings_blank": "Очистить для отмены",
+ "settings_globalOptions": "Глобальные опции",
+ "settings_displayLanguage": "Язык интерфейса",
+ "settings_selectDefaultBoard": "Доска по-умолчанию",
+ "settings_newTasks": "Новые задачи появляются в колонке",
+ "settings_bottom": "снизу",
+ "settings_top": "сверху",
+ "settings_optionsDisplay": "Отображать задачи одна-к-одной в колонках?",
+ "settings_optionsAnimate": "Отображать анимации?",
+ "settings_optionsAssignee": "Отображать исполнителя в карточке задачи?",
+
+ "settings_userAdmin": "Управление пользователями",
+ "settings_user": "Пользователь",
+ "settings_email": "Email",
+ "settings_securityLevel": "Уровень доступа",
+ "settings_defaultBoard": "Доска по-умолчанию",
+ "settings_actions": "Действия",
+ "settings_edit": "Редактировать",
+ "settings_removeUser": "Удалить пользователя",
+ "settings_addUser": "Добавить пользователя",
+ "settings_editUser": "Редактировать пользователя",
+ "settings_saveUser": "Сохранить пользователя",
+ "settings_confirmUserRemoval": "Подтвердите удаление пользователя",
+ "settings_removeUserWarning": "Удаление пользователя не может быть отменено.",
+ "settings_continue": "Продолжить?",
+ "settings_username": "Логин",
+ "settings_password": "Пароль",
+ "settings_emailPlaceholder": "Новый Email - очистить, чтобы отключить",
+ "settings_defaultBoardHelp": "Выбор доски по-умолчанию добавляет пользователя на эту доску.",
+ "settings_boardAccess": "Доступ к доске",
+ "settings_boardAdmin": "Управление доской",
+ "settings_admin": "Администратор",
+ "settings_usernameRequired": "Логин обязателен.",
+ "settings_passwordRequired": "Пароль обязателен.",
+ "settings_verifyError": "Пароли не совпадают.",
+ "settings_emailError": "Неверный EMail.",
+
+ "settings_boardAdministration": "Управление досками",
+ "settings_currentBoards": "Текущие доски",
+ "settings_showByUser": "Отображать по пользователям",
+ "settings_filterBy": "Сортировать по",
+ "settings_allBoards": "Все доски",
+ "settings_active": "Активные",
+ "settings_inactive": "Неактивные",
+ "settings_anyUser": "Любой пользователь",
+ "settings_creationNew": "Создание (сначала новые)",
+ "settings_creationOld": "Создание (сначала старые)",
+ "settings_name": "Название",
+ "settings_columns": "Колонки",
+ "settings_categories": "Категории",
+ "settings_users": "Пользователи",
+ "settings_editBoard": "Изменить доску",
+ "settings_addBoard": "Добавить доску",
+ "settings_removeBoard": "Удалить доску",
+ "settings_confirmBoardRemoval": "Подтвердите удаление доски",
+ "settings_removeBoardWarning": "Удаление доски не может быть отменено.",
+ "settings_boardName": "Название доски",
+ "settings_removeColumn": "Удалить колонку",
+ "settings_columnName": "Название колонки",
+ "settings_addColumn": "Добавить колонку",
+ "settings_removeCategory": "Удалить категорию",
+ "settings_categoryName": "Название категории",
+ "settings_defaultTaskColor": "Цвет задач по-умолчанию",
+ "settings_addCategory": "Добавить категорию",
+ "settings_issueTrackers": "Системы отслеживания ошибок",
+ "settings_issueTrackersHelp": "Образец URL: https://github.com/kiswa/TaskBoard/issues/%BUGID% Образец RegExp: (?:Issue)?#(\\d+)",
+ "settings_issueTrakcerUrl": "URL системы отслеживания ошибок - используйте %BUGID% как заменитель",
+ "settings_issueTrackerRegExp": "BUGID RegExp",
+ "settings_addIssueTracker": "Добавить систему отслеживания ошибок",
+ "settings_selectUsers": "Выбор пользователей",
+ "settings_boardAdminMessage": "Добавление администратора доски дает ему право управления доской.",
+ "settings_adminAccessMessage": "Администраторы системы имеют доступ ко всем доскам и здесь не перечислены.",
+ "settings_saveBoard": "Сохранить доску",
+ "settings_noBoards": "Вы не присоединены ни к одной доске. Свяжитесь с администратором, чтобы вас добавили.",
+ "settings_noBoardsAdmin": "Нет текущих досок. Нажмите кнопку Добавить доску ниже, чтобы добавить.",
+ "settings_boardNameError": "Название доски обязательно.",
+ "settings_columnError": "Должна быть хоть одна колонка.",
+
+ "settings_automaticActions": "Автоматические действия",
+ "settings_currentAction": "Текущие действия",
+ "settings_board": "Доска",
+ "settings_trigger": "Триггер",
+ "settings_action": "Действие",
+ "settings_remove": "Удалить",
+ "settings_inactiveBoardMessage": "Неактивная доска.",
+ "settings_removeAutoAction": "Удалить автоматическое действие",
+ "settings_triggerMoveToColumn": "Задача перемещается в колонку:",
+ "settings_triggerAssignedToUser": "Задача назначается пользователю:",
+ "settings_triggerAddedToCategory": "Задача добавляется в категорию:",
+ "settings_triggerPointsChanged": "Поинты задачи меняются.",
+ "settings_actionSetColor": "Установить цвет задачи:",
+ "settings_actionSetCategory": "Установить категорию задачи:",
+ "settings_actionAddCategory": "Добавить категорию к задаче:",
+ "settings_actionSetAssignee": "Установить исполнителя задачи:",
+ "settings_actionAddAssignee": "Добавить исполнителя к задаче:",
+ "settings_actionClearDueDate": "Очистить срок выполнения задачи.",
+ "settings_actionAlterColor": "Изменять цвет задачи от поинтов.",
+ "settings_addAction": "Добавить действие",
+ "settings_selectBoard": "Выбор доски",
+ "settings_selectTrigger": "Выбор триггера",
+ "settings_selectAction": "Выбор действия",
+ "settings_selectColumn": "Выбор колонки",
+ "settings_selectUser": "Выбор пользователя",
+ "settings_selectCategory": "Выбор категории",
+ "settings_selectAssignee": "Выбор исполнителя",
+ "settings_alterByPoints": "Изменить цвет от поинтов",
+ "settings_noActions": "Не найдены автоматические действия. Обратитесь к администратору, чтобы создать.",
+ "settings_noActionsAdmin": "Не найдены автоматические действия. Используйте форму Добавить действие ниже, чтобы добавить.",
+
+ "boards_selectBoard": "Выбор доски",
+ "boards_selectColumn": "Выбор колонки",
+ "boards_hideFiltered": "Скрыть отфильтрованное",
+ "boards_userFilter": "Фильтр по пользователю",
+ "boards_categoryFilter": "Фильтр по категории",
+ "boards_noBoards": "Нет досок",
+ "boards_noBoardsMessageUser": "Вы не присоединены ни к одной доске. Свяжитесь с администратором, чтобы вас добавили.",
+ "boards_noBoardsMessageAdmin": "Добавьте доску в настройках.",
+ "boards_noDefault": "Нет доски по-умолчанию",
+ "boards_noDefaultMessage": "Вы не выбрали доску по-умолчанию. Вы можете выбрать её в настройках профиля",
+ "boards_noDefaultMessage2": "или выберете доску из списка выше.",
+
+ "boards_collapseAllTasks": "Свернуть все задачи",
+ "boards_expandAllTasks": "Раскрыть все задачи",
+ "boards_tasksInColumn": "Задачи в колонке",
+ "boards_expandColumn": "Раскрыть колонку",
+ "boards_collapseColumn": "Свернуть колонку",
+ "boards_editTaskLimit": "Редактировать лимит задач",
+ "boards_noLimit": "без ограничений",
+ "boards_limitCancel": "Отменить изменения",
+ "boards_limitSave": "Сохранить изменения",
+ "boards_quickAdd": "Быстрое добавление задачи - только название",
+ "boards_confirmRemoveTask": "Подтвердите удаление задачи",
+ "boards_confirmWarning": "Удаление задачи не может быть отменено.",
+ "boards_confirmContinue": "Продолжить?",
+ "boards_confirmRemoveAttachment": "Подтвердите удаление вложения",
+ "boards_confirmWarningAttachment": "Удаление вложения не может быть отменено.",
+ "boards_confirmRemoveComment": "Подтвердите удаление комментария",
+ "boards_confirmWarningComment": "Удаление комментария не может быть отменено.",
+
+ "boards_addTask": "Добавить задачу",
+ "boards_editTask": "Изменить задачу",
+ "boards_viewTask": "Просмотр задачи",
+ "boards_removeTask": "Удаление задачи",
+ "boards_moveTask": "Переместить в колонку",
+
+ "boards_taskTitle": "Название",
+ "boards_taskTitlePlaceholder": "Название задачи",
+ "boards_taskDescription": "Описание",
+ "boards_taskDescriptionPlaceholder": "Что надо сделать?",
+ "boards_taskAssignees": "Исполнители",
+ "boards_taskActivity": "Активность",
+ "boards_taskCategories": "Категории",
+ "boards_taskColumn": "Колонка",
+ "boards_taskColor": "Цвет",
+ "boards_taskDateDue": "Срок выполнения",
+ "boards_taskPoints": "Поинты",
+ "boards_saveTask": "Сохранить задачу",
+
+ "boards_copyTaskTo": "Копировать на доску",
+ "boards_moveTaskTo": "Переместить на доску",
+ "boards_copyMoveHelp": "Задача будет помещена в первой колонке выбранной доски.",
+ "boards_expandTask": "Раскрыть задачу",
+ "boards_collapseTask": "Свернуть задачу",
+ "boards_taskAssignedTo": "Назначена для исполнения",
+ "boards_taskUnassigned": "Не назначена",
+ "boards_taskDue": "Срок",
+ "boards_taskCategory": "Категория",
+ "boards_taskCurrentColumn": "Текущая колонка",
+
+ "boards_taskComments": "Комментарии",
+ "boards_taskAddComment": "Добавить комментарий",
+ "boards_taskEditComment": "Изменить комментарий",
+ "boards_taskRemoveComment": "Удалить комментарий",
+ "boards_postedBy": "Опубликовано",
+ "boards_editedBy": "Отредактировано",
+
+ "boards_taskAttachments": "Вложения",
+ "boards_taskAddAttachment": "Добавить вложение",
+ "boards_taskEditAttachment": "Изменить вложение",
+ "boards_taskRemoveAttachment": "Удалить вложение",
+ "boards_taskNoFileError": "Выбор файла для загрузки.",
+ "boards_taskUpload": "Загрузить",
+ "boards_taskUploadedBy": "Загружено",
+ "boards_taskUploadedOn": "в",
+ "boards_taskView": "Просмотр",
+ "boards_taskDownload": "Скачать",
+
+ "boards_task": "Задача",
+ "boards_taskComplete": "Завершена",
+ "boards_taskCopied": "скопирована на доску",
+ "boards_taskMoved": "перемещена на доску",
+
+ "boards_filterByAny": "Любой",
+ "boards_filterByUnassigned": "Не назначена",
+ "boards_filterByUncategorized": "Без категории",
+
+ "boards_sortByPosition": "Позиция",
+ "boards_sortByDueDate": "Срок выполнения",
+ "boards_sortByLastModified": "Последнее изменение",
+ "boards_sortByPoints": "Поинты",
+
+ "dashboard_boardsAndTasks": "Доски и задачи",
+ "dashboard_myBoards": "Мои доски",
+ "dashboard_myTasks": "Мои задачи",
+ "dashboard_tasksInCategory": "Задачи в категории",
+ "dashboard_details": "Подробности",
+ "dashboard_analytics": "Аналитика"
+}
+
diff --git a/src/json/ru_api.json b/src/json/ru_api.json
new file mode 100644
index 00000000..27e1b07d
--- /dev/null
+++ b/src/json/ru_api.json
@@ -0,0 +1,83 @@
+{
+ "api_accessRestricted": "Доступ ограничен.",
+ "api_badLogin": "Неверный логин или пароль.",
+ "api_firstLoginWarn": "Это ваш первый вход, поменяйте свой пароль в настройках.",
+ "api_firstLogin": "Зайдите в настройки, чтобы создать свою первую доску.",
+ "api_invalidToken": "Неверный ключ доступа.",
+ "api_loggedOut": "Вы вышли из системы.",
+ "api_noAttachmentId": "Не найдено вложение ID ",
+ "api_noAttachmentHash": "Не найдено вложение по хэшу ",
+ "api_attachmentFailed": "Ошибка добавления вложения. Попробуйте еще раз.",
+ "api_attachmentSucceed": "Вложение добавлено.",
+ "api_uploadFailed": "Ошибка загрузки вложения. Попробуйте еще раз.",
+ "api_attachmentPermission": "Не хватает прав для удаления вложения.",
+ "api_attachmentNoRemove": "Ошибка удаления вложения. Не найдено вложение ID ",
+ "api_attachmentRemoved": "Вложение удалено ",
+ "api_noActions": "Нет автоматических действий в базе данных.",
+ "api_actionError": "Ошибка добавления действия. Проверьте настройки и попробуйте еще раз.",
+ "api_actionAdded": "Автоматическое действие добавлено.",
+ "api_actionRemoveError": "Ошибка удаления действия. Не найдено действие ID ",
+ "api_actionRemoved": "Автоматическое действие удалено.",
+ "api_noBoards": "Нет досок в базе данных.",
+ "api_noBoardId": "Не найдена доска ID ",
+ "api_boardError": "Ошибка добавления доски. Проверьте настройки и попробуйте еще раз.",
+ "api_boardAdded": "Доска добавлена ",
+ "api_boardUpdateError": "Ошибка изменения доски. Проверьте настройки и попробуйте еще раз.",
+ "api_boardUpdated": "Доска изменена ",
+ "api_boardRemoveError": "Ошибка удаления доски. Не найдена доска ID ",
+ "api_boardRemoved": "Доска удалена ",
+ "api_noColumnId": "Не найдена колонка ID ",
+ "api_columnError": "Ошибка добавления колонки. Попробуйте еще раз.",
+ "api_columnAdded": "Колонка добавлена ",
+ "api_columnUpdateError": "Ошибка изменения колонки. Попробуйте еще раз.",
+ "api_columnUpdated": "Колонка изменена ",
+ "api_columnRemoveError": "Ошибка удаления колонки. Не найдена колонка ID ",
+ "api_columnRemoved": "Колонка удалена ",
+ "api_noCommentId": "Не найден комментарий ID ",
+ "api_commentError": "Ошибка добавления комментария. Попробуйте еще раз.",
+ "api_commentAdded": "Комментарий добавлен.",
+ "api_commentUpdateError": "Ошибка изменения комментария. Попробуйте еще раз.",
+ "api_commentUpdated": "Комментарий изменен.",
+ "api_commentRemoveError": "Ошибка удаления комментария. Не найден комментарий ID ",
+ "api_commentRemoved": "Комментарий удален.",
+ "api_noTaskId": "Не найдена задача ID ",
+ "api_taskError": "Ошибка добавления задачи. Проверьте настройки и попробуйте еще раз.",
+ "api_taskAdded": "Задача добавлена ",
+ "api_taskUpdateError": "Ошибка изменения задачи. Попробуйте еще раз.",
+ "api_taskUpdated": " Задача изменена ",
+ "api_taskRemoveError": "Ошибка удаления задачи. Не найдена задача ID ",
+ "api_taskRemoved": "Задача удалена ",
+ "api_taskAutoColor": "Цвет задачи изменен автоматическим действием.",
+ "api_taskAutoCategory": "Категории задачи изменены автоматическим действием.",
+ "api_taskAutoAssignee": "Исполнители задачи изменены автоматическим действием.",
+ "api_taskAutoDate": "Срок задачи изменен автоматическим действием.",
+ "api_noUserId": "Не найден пользователь ID ",
+ "api_userError": "Ошибка добавления пользователя. Проверьте настройки и попробуйте еще раз.",
+ "api_userAdded": "Пользователь добавлен ",
+ "api_userUpdateError": "Ошибка изменения пользователя. Проверьте настройки и попробуйте еще раз.",
+ "api_userUpdated": "Пользователь изменен ",
+ "api_userOptError": "Ошибка изменения настроек пользователя. Проверьте настройки и попробуйте еще раз.",
+ "api_userOptUpdated": "Настройки пользователя изменены.",
+ "api_userRemoveError": "Ошибка удаления пользователя. Не найден пользователь ID ",
+ "api_userRemoved": "Пользователь удален ",
+ "api_usernameExists": "Пользователь существует. Измените логин и попробуйте еще раз.",
+ "api_userBadPword": "Ошибка изменения пользователя. Неверный пароль.",
+
+ "mail_sent": "Email отправлен.",
+ "mail_error": "Ошибка отправки Email.",
+ "mail_subject": "Оповещение TaskBoard",
+
+ "mail_template_openBoardLink": "
Открыть TaskBoard",
+
+ "mail_template_newBoard": "%username% добавил доску %boardName%.",
+ "mail_template_newComment": "%username% добавил комментарий на доске %boardName%.
Задача: %taskName%
Комментарий: %comment%",
+ "mail_template_newTask": "%username% добавил задачу на доске %boardName%.
Задача: %taskName%
Описание: %taskDescription%
Срок: %taskDueDate%
Исполнители: %taskAssignees%
Категории: %taskCategories%
Поинты: %taskPoints%
Колонка: %taskColumnName%
Позиция: %taskPosition%",
+
+ "mail_template_editBoard": "%username% изменил доску %boardName%.",
+ "mail_template_editComment": "%username% изменил комментарий на доске %boardName%.
Задача: %taskName%
Комментарий: %comment%",
+ "mail_template_editTask": "%username% изменил задачу на доске %boardName%.
Задача: %taskName%
Описание: %taskDescription%
Срок: %taskDueDate%
Исполнители: %taskAssignees%
Категории: %taskCategories%
Поинты: %taskPoints%
Column: %taskColumnName%
Позиция: %taskPosition%",
+
+ "mail_template_removeBoard": "%username% удалил доску %boardName%.",
+ "mail_template_removeComment": "%username% удалил комментарий на доске %boardName%.
Задача: %taskName%",
+ "mail_template_removeTask": "%username% удалил задачу на доске %boardName%
Задача: %taskName%"
+}