# Cyclos 4 PRO

wiki.cyclos.org

# Документация

**General documentation**

# Введение (Features)

Cyclos - это многофункциональное решение для интернет-банкинга, которое легко использовать и поддерживать, гибкое, безопасное и высоконастраиваемое. Cyclos поставляется с набором банковских и платежных опций, полной системой электронной коммерции и каналами доступа для мобильных устройств любого уровня. Мобильный канал предлагает масштабируемую и дешевую возможность для банков расширить свой охват и предложить банковское обслуживание без отделений. Cyclos используется местными банками, сетями C3, MFI, бартерными системами, community currencies и time banks. Динамическая структура Cyclos позволяет организациям «строить» выделенную платежную систему с нуля, просто изменяя конфигурацию (без необходимости вносить изменения в код).

Этот документ предоставляет вам углубленный обзор наборов функций Cyclos:

### Список функций Cyclos 4

Предоставляет подробный обзор множества функций Cyclos 4. Звездочка помещается после функции, чтобы указать:

- \* Запланированные функции
- \*\* Исследования в процессе

### Системная информация Cyclos 4

Информация о структурных вопросах, касающихся Cyclos (архитектура, безопасность, тестирование, совместимость и хостинг)

### Список функций

#### Пользовательские интерфейсы

- Веб-интерфейс
- Плагин для [интеграции с Wordpress](http://www.cyclos.org/wordpress_plugin)
- Мобильное приложение (Android, iOS)
- Мобильный POS (Android, iOS)
- Веб POS
- SMS-операции
- Подключение по API
- POS и карты (поддержка NFC)
- IVR \*
- USSD \*

#### Пользовательские функции

- Регистрация пользователя
- Обновление профиля
- Несколько изображений на профиль
- Несколько адресов
- Пользовательский язык
- Геолокация для каждого адреса (Google Map)
- Несколько телефонов
- Активация телефона для SMS-банкинга
- Управление паролями
- Добавление и управление пользовательскими изображениями
- Загрузка и управление документами
- Настройки уведомлений (для каждого канала)
- Управление контактами
- Поиск в каталоге пользователей
- Показ пользователей/бизнесов на карте
- Поиск пользователей по расстоянию
- Поиск пользователей по группе / филиалу
- Рефералы для бизнеса
- Пользовательские формы
- Пользовательские операции

#### Удобство использования

- Простая навигация
- Персональная dashboard-страница
- Значки быстрых операций
- Быстрый поиск (пользователи, контакты, объявления)
- Обзор статуса (балансы, последний вход и т.д.)
- Уведомления в реальном времени
- Вход с помощью userID, номера телефона или e-mail
- Просмотрщик изображений с навигацией
- Просмотр файла справки

#### Платежи

- Банковские платежи
- Несколько идентификаторов пользователя (например, номер счета, мобильный номер, email)
- Внутренний платеж (между собственными счетами)
- Массовые платежи
- Оплата внешнему (незарегистрированному) пользователю. По email или номеру мобильного телефона.
- Платежи без PIN-кода (опциональные пороги, например, максимальная сумма платежа и дневной лимит)
- Многоуровневое подтверждение транзакций (авторизации)
- Просмотр потоков авторизации
- Показать детали транзакции
- Cash-in cash-out
- Квалификация транзакций
- Просмотр квалификации других пользователей
- Отмена платежей
- Запланированные платежи (рассрочка)
- Погашение кредита \*
- Запросы платежей
- Платежи в интернет-магазине

#### Банкинг

- Несколько валют
- Номера счетов (собственный формат или стандартный, например, IBAN)
- Кредиты \*
- Демередж
- Проценты
- Комиссии за транзакции
- Настройка пользовательских условий для применения комиссий
- Плановые комиссии (взносы)
- Комиссии брокера
- Программы лояльности
- Кредитный лимит группы
- Индивидуальный кредитный лимит
- Журнал изменений кредитного лимита
- Обзор кредитов и поиск
- Сберегательные счета \*
- Минимальная сумма платежа за платеж / день
- Максимальная сумма платежа за платеж / день
- Ограничение назначения платежей (счета, пользователи)
- Правила доступа для каждого типа платежей
- Запросы платежей
- Уникальный идентификатор транзакции для каждой транзакции
- Создание пользовательских полей платежа
- Уникальные настройки платежей для каждого канала (SMS и т.д.)
- Системные счета (дебетовые, сообщества и т.д.)

#### Информация о счете

- Просмотр сводки по счету
- Просмотр текущего баланса
- Просмотр сборов и комиссий
- Просмотр истории платежей
- Печать и экспорт платежей
- Поиск платежей (пользователь, дата, описание и т.д.)
- Просмотр деталей платежа
- Печать деталей платежа
- Динамические фильтры платежей
- Просмотр среднего возраста баланса счета
- Просмотр средней зрелости баланса счета

#### Операторы счета

- Создание групп операторов (пользователем бизнес-типа)
- Определение разрешений для отдельных операторов или групп операторов
- Обзор операторов
- Показ транзакций по оператору
- Отключение оператора

#### Конфигурация системы

- Многосетевая настройка (общий экземпляр)
- Определение филиалов (groupsets)
- Определение URL (доменное имя) для сетей и филиалов
- Настройка видимости группы и филиала
- Локализация (язык, форматирование, часовой пояс) для каждой группы / филиала
- Установка разрешений
- Создание локальных администраторов счетов
- Пользовательские фильтры для поиска пользователей и объявлений
- Создание новых каналов доступа
- Определение генерируемого имени для входа

#### Агенты / Брокеры

- Несколько брокеров на пользователя
- Назначение основного брокера
- Регистрация новых пользователей
- Управление пользовательскими данными (профили, объявления)
- Выполнение операций от имени пользователя
- Определение прав брокера
- Отправка рассылки «моим пользователям»
- Просмотр подключенных пользователей
- Получение уведомлений о пользователях
- Управление паролями пользователя
- Управление доступом пользователя
- Комиссия брокера

#### Управление пользователями

- Регистрация пользователя
- Отключение пользователя
- Блокировка / разблокировка пользователя
- Отключение / включение пользователя
- Удаление пользователя
- Смена группы
- Предоставление индивидуальных разрешений (продукт)
- Выполнение действий от имени пользователя
- Активация «ожидающих» пользователей (публичная регистрация)
- Отправка сообщения пользователю
- Отправка сообщения группе
- Просмотр подключенных пользователей (для каждой роли пользователя)
- Показ активности участников
- Фильтр по региону филиала
- Функции CRM (записи пользователей)
- Комментарии пользователей, поиск по истории
- Определение соглашения о регистрации
- Просмотр истории соглашений пользователя
- Управление документами
- Загрузка документов
- Показ агентов/брокеров
- Показ пользователей агента/брокера

#### Онлайн-маркетплейс

- Создание / редактирование объявления
- Несколько изображений для объявления
- Текст с форматированием для редактирования объявления
- Планирование объявления
- Выбор адреса для каждого объявления
- Пользовательские фильтры поиска (например, предложения / спрос)
- Список новых объявлений
- Просмотр по категориям
- Несколько категорий объявлений
- Создание категорий объявлений
- Поиск по геолокации (фильтр расстояния)
- Связаться с продавцом
- Публичные вопросы/ответы по объявлению
- Уведомление об изменении статуса объявления
- Пользовательские поля объявления
- Уведомления о соответствии объявления

#### Подарочные ваучеры / Баллы лояльности

- Создание и управление типами ваучеров
- Настройка параметров погашения ваучеров (например, возможные дни недели)
- Определение макета ваучера (логотип)
- Генерация QR-кода
- Печать и экспорт ваучеров
- Покупка и печать ваучера пользователем
- Обзор ваучеров и поиск администратором
- Просмотр моих ваучеров пользователем (Веб и Мобильный)

#### Управление контентом

- Интуитивный дизайн сайта (подбор цветов)
- Несколько веб-сайтов (для каждой группы / филиала)
- Создание новых пунктов меню
- Управление контентными страницами
- Создание и управление баннерами
- Управление нижними/верхними колонтитулами
- Управление доской сообщений
- Загрузка логотипов
- Определение логотипа/заголовка для pdf-страниц (например, отчеты)
- Создание новых тем (стили, цвета и изображения)
- Импорт / экспорт тем

#### Переводы

- Несколько переводов (языков) в системе
- Инкрементальные ключи перевода (сохраняются только пользовательские настройки)
- Онлайн-управление переводами
- Просмотр по категориям
- Поиск ключей / значений перевода
- Обновление ключей / значений перевода

#### Аналитика и отчетность

- Данные о расходах
- Данные о доходах
- Количество входов в систему
- Количество пользователей в группах/филиалах
- Процент пользователей, не ведущих торговлю
- Информация об учетной записи
- Объявления
- Ссылки

#### Управление системой

- Создание сетей
- Создание системных администраторов
- Создание администраторов нескольких сетей
- Полноиндексированный поиск
- Установка времени ожидания сеанса
- Создание новых (пользовательских) каналов доступа
- Создание и управление категориями документов
- Импорт пользователей из файла
- Создание новых типов учетных данных (паролей)
- Отправка в поисковые системы (SEO)

#### Обмен сообщениями

- Отправка сообщения пользователю с форматированным текстом
- Отправка массовых сообщений (рассылок) администратором или агентом
- Определение категорий сообщений (для каждой группы пользователей)
- Пересылка внутренних сообщений на e-mail
- История сообщений (входящие, отправленные, корзина)
- Очистка сообщений в корзине через период (автоматическая задача)
- Электронные сообщения между участниками

#### Корзина покупок

- Управление несколькими магазинами
- Управление запасами
- Предупреждение об отсутствии товара
- Управление номерами продуктов
- Определение адреса доставки
- Определение способов / цен доставки
- Определение расчетного времени доставки
- Рекламная цена
- Процесс согласования цены
- Отображение доступных количеств
- Комментарии к продукту
- Отслеживание заказа
- Добавление комментариев к заказу
- Отображение содержимого корзины
- Размещение заказа (оформление)
- Принятие / отклонение заказа
- Генерация номера заказа
- Просмотр истории покупок
- Уведомления об изменении статуса заказа
- Сохраненная корзина покупок (в базе данных)

#### Пароли и аутентификация

- Пароль для входа
- Пароль для транзакций
- Код подтверждения (OTP)
- Смена PIN-кода
- Ввод CAPTCHA в публичных формах
- Полная виртуальная клавиатура (опционально)
- Умная безопасная виртуальная клавиатура (опционально)
- Восстановление пароля (опционально)

#### SMS-банкинг

- Регистрация нового пользователя по SMS
- Получение информации о счете
- Получение деталей платежа
- Совершение платежа
- Активация телефона через SMS (код подтверждения)
- Получение уведомлений по SMS

#### Мобильное приложение

- Приложение для Android и iOS
- Совершение платежа
- Просмотр бизнесов на карте (GPS / геолокация)
- Просмотр баланса счета, кредитных лимитов
- Просмотр истории счета
- Совершение платежа (пользователю, системе)
- Поиск пользователей
- Добавление пользователя в список контактов
- Настраиваемая компоновка
- Настраиваемая начальная страница / логотип
- Добавление пункта меню (значок быстрого доступа)
- Добавление пользовательских страниц в приложение
- Включение режима POS (см. непосредственно ниже)

#### Мобильный POS (Точка продаж)

- Приложение для Android и iOS (включение режима POS в основном мобильном приложении)
- Получение платежа
- Различные идентификаторы пользователя (QR/штрих-код, userID, NFC-карта)
- NFC-карта запустит приложение в режиме POS и откроет страницу получения платежа с пользователем, идентифицированным по NFC-карте
- Форматирование NFC-карты
- Назначение NFC-карты клиенту
- Совершение платежа (cash-out)
- Интерфейс для интеграции со сторонними сетями POS или банкоматов

#### Оповещения и логирование

- Подробное логирование ошибок
- Поиск ошибок по периоду
- Поиск ошибок по пользователю
- Просмотр деталей ошибки (полная трассировка стека)
- Генерация уведомлений об ошибке (email, SMS)

#### Функции бартерной сети

- Поиск пользователей с низкими балансами
- Сопоставление высоких балансов с низкими на картах Google
- Оповещение, когда баланс пользователя ниже нуля в течение определенного времени \*
- Оповещение, когда баланс пользователя превышает определенную сумму в течение определенного времени \*
- Закупки/котировки \*\*
- Платежная стена

### Архитектура

Cyclos 4 построен на корпоративных технологиях Java. Клиент подключается к фронтенд-приложению Google Web Toolkit (GWT) или через один из интерфейсов (см. ниже). Сервер приложений защищен надежным слоем безопасности и использует Spring Framework. Службы на сервере приложений используют JPA (с помощью Querydsl) для связи с сервером базы данных PostGres. Все транзакции хранятся как двойные записи в бухгалтерской системе. Cyclos может работать как автономная система независимо от других валютных систем.  
Страницу с обзором инструментов и фреймворков, используемых для проекта Cyclos, можно посмотреть на [этой странице](http://www.cyclos.org/wiki4/index.php/Tools).  
Бизнес-партнеры и клиенты Cyclos могут запросить доступ к [углубленной архитектурной странице](http://www.cyclos.org/wiki4/index.php/Architecture).

### Совместимость (интерфейсы)

Весь уровень сервисов в Cyclos доступен как API веб-сервисов. Это сделает все функции Cyclos доступными для третьих сторон. Нативные Java-клиенты могут подключаться напрямую через Java remoting по HTTP(S). Клиенты на других языках могут использовать API с сообщениями JSON по HTTP(S). Также доступна клиентская библиотека PHP, которая отражает API сервисов, что значительно упрощает интеграцию.   
Более подробную информацию об API, веб-сервисах и скриптинге можно посмотреть на [странице документации Cyclos](http://www.cyclos.org/documentation).

### Безопасность

С самого начала команда разработчиков Cyclos следовала рекомендациям по безопасности, определенным стандартом ISO 27002. Код постоянно тестируется с помощью расширенного набора автоматизированных тестов безопасности. Разрешения и роли проверяются при каждом запросе на уровне внутренних служб. Были рассмотрены следующие области безопасности / моменты:

- Конфиденциальность, целостность, подлинность гарантируются проверками безопасности в сочетании с http secure (https)
- Устойчивость к атакам, таким как XSS, CSRF, SQL-инъекции
- Все пароли хэшируются с «соленой» SHA2
- Все идентификаторы шифруются при отправке клиенту (браузеру)
- Использование файлов cookie ограничено пользовательской сессией
- Оповещения безопасности для администраторов
- Подробное логирование, включая данные операций, пользователей, временную метку
- Белый список IP-адресов
- Ограничение URL по группе

Для получения подробной информации, пожалуйста, просмотрите [страницу безопасности](http://www.cyclos.org/wiki4/index.php/Security)

### Тестирование

Перед любым программированием пишутся спецификации. Разработка Cyclos работает в соответствии с процессом «разработки через тестирование» (test driven development). Сначала разработчик пишет тестовые случаи (JUnit), а затем код реализации. Тестовые случаи Junit охватывают интеграционные и функциональные тесты, а также исключения. Мы используем фреймворки Maven и Jenkins для запуска тестов и автоматической сборки и развертывания Cyclos три раза в день. Если возникает какая-либо проблема, как программист, так и координатор уведомляются Jenkins.

Онлайн-среда для тестирования сборки доступна по адресу https://test.cyclos.org, различные партнеры имеют свою собственную среду (сеть) в этом экземпляре, чтобы они могли тестировать полную функциональность Cyclos с последними коммитами кода. Jenkins также предоставляет инструмент отчетности для покрытия тестирования, который помогает нам улучшать тестовые случаи.

Все общие конфигурации тестируются нашими тестировщиками. Также тестировщики пытаются протестировать сложные конфигурации, в которых могут возникнуть проблемы. После того, как все тщательно протестировано, мы сначала публикуем новую версию в нашем community instance, где более 1000 сообществ могут воспользоваться преимуществами новых функций. Но, с другой стороны, если есть ошибка, которую мы еще не обнаружили, мы часто находим их там. После того, как Cyclos бесперебойно работает в экземпляре сообщества около недели, мы публикуем нашу новую версию для загрузки. Поскольку существует так много возможных конфигураций, мы всегда рекомендуем клиентам тщательно тестировать все при обновлении до новой версии.

Мы используем [Loadsophia](https://loadosophia.org) для тестирования производительности. Этот сервис позволяет сравнивать результаты тестов производительности с течением времени, что помогает нам точно настраивать производительность.

В зависимости от проекта мы передаем серое и черное тестирование на аутсорсинг внешним компаниям, занимающимся безопасностью. Мобильное приложение и мобильные браузеры тестируются на всех мобильных телефонах, которые нам удается получить. Различные партнеры и внешние тестовые пользователи тестируют мобильное приложение. Как правило, мы сталкиваемся с несколькими ошибками, специфичными для телефона. Благодаря использованию GWT сгенерированный код на стороне клиента хорошо работает со всеми известными веб-браузерами.

### Требования к хостингу

Cyclos может работать на веб-контейнере, таком как Apache Tomcat и Jetty, или на серверах приложений, таких как Glassfish, JBoss, IBM Websphere и Oracle Weblogic. Базой данных для Cyclos является база данных с открытым исходным кодом PostgreSQL. Минимальные требования к объему памяти для запуска одного экземпляра Cyclos составляют 500 Мб. [Руководство по установке](http://documentation.cyclos.org/4.4/cyclos-reference/ch01.html#d0e80) проведет вас через процесс установки.

### Масштабируемость и доступность

База данных Cyclos была оптимизирована для поддержки кластеризации баз данных и синхронной репликации. Существуют различные подходы к обеспечению высокой доступности и решениям отказоустойчивости для Cyclos.

<dl id="bkmrk-%D0%A1%D0%B8%D0%BD%D1%85%D1%80%D0%BE%D0%BD%D0%BD%D0%B0%D1%8F-%D1%80%D0%B5%D0%BF%D0%BB%D0%B8%D0%BA%D0%B0%D1%86%D0%B8"><dt>Синхронная репликация</dt><dd>В настоящее время мы используем для нашего хостинга решение, которое использует как синхронную, так и асинхронную репликацию. Оно предлагает отказоустойчивость, но не балансировку нагрузки, но с мощным главным сервером базы данных оно может обслуживать высокие нагрузки.</dd><dt>Amazon cloud с RDS</dt><dd>Cyclos может быть развернут в облачных сервисах Amazon с [кластеризацией postgres](https://aws.amazon.com/rds/postgresql/).</dd><dt>Docker swarm</dt><dd>Мы планируем поддержку docker swarm, который предлагает встроенную кластеризацию. Начиная с версии 4.5, Cyclos можно развернуть как контейнер для платформы Docker.</dd><dt>Pgpool-II</dt><dd>Мы также работаем над полным решением для кластеризации баз данных с [pgpool](http://pgpool.net/mediawiki/index.php/Main_Page).</dd></dl>**Примечание:** Начиная с версии Cyclos 4.5 все изображения/картинки, документы и файлы могут храниться на внешнем файловом сервере или в сервисе хранения Amazon S3 (по умолчанию они хранятся в базе данных).

# Технологии и фреймворки

Technologies &amp; Frameworks

#### Основные инструменты, используемые для проекта Cyclos:

- 
- [Java Platform](http://www.oracle.com/technetwork/java/javase/downloads/index.html): Язык разработки
- 
- [PostgreSQL](http://www.postgresql.org/): База данных
- 
- [Jira](http://www.atlassian.com/software/jira): Управление проектом и отслеживание проблем
- 
- [Astah](http://astah.net/): UML-моделирование и диаграммы
- 
- [Eclipse](http://eclipse.org/): Среда разработки
- 
- [Eclipse link](http://www.eclipse.org/eclipselink/): Решение для сохранения состояния Java (Java persistence)
- 
- [JPA](http://en.wikipedia.org/wiki/Java_Persistence_API): Фреймворк для сохранения состояния (Persistence framework)
- 
- [Querydsl](http://www.querydsl.com/): Унифицированные запросы для Java
- 
- [Spring](http://projects.spring.io/spring-framework/): Архитектурные слои
- 
- [Maven](http://maven.apache.org/): Сборка проекта
- 
- [GWT](http://www.gwtproject.org/): Google Web Toolkit (библиотеки Java, GUI)
- 
- [GIT](http://en.wikipedia.org/wiki/Git_%28software%29): Репозиторий, контроль версий
- 
- [Jenkins](http://wiki.jenkins-ci.org/display/JENKINS/Meet+Jenkins): Автоматизация сборки, тестирование
- 
- [Load sophia](http://loadosophia.org/): Тестирование производительности
- 
- [Crowdin](http://crowdin.com/): Платформа управления локализацией (переводы)
- 
- [Swagger](http://swagger.io/): REST API
- 
- [Angular Material](https://material.angular.io/): Новый фронтенд (в разработке)

# Техническая информация

**Technical information**

# Архитектура

### Техническое проектирование

#### Обзор архитектуры

В процессе завершения последней версии Cyclos было проведено расширенное исследование различных решений (технологий, фреймворков и платформ) для Cyclos. Основные требования и ограничения для выбора были следующими:

- Долгосрочная поддержка выбранных технологий
- Высокая масштабируемость
- Безопасность
- Простота настройки

Наш вывод заключается в том, что "Spring Framework" и "Google Web Tools (GWT)" предлагают лучшее решение для наших требований. Это текущая архитектура Cyclos:

<div id="bkmrk-" style="text-align: center;">![Архитектура Cyclos 4](https://wiki.cyclos.org/images/3/37/Architecture.png)</div>В приложении есть 4 концептуальных уровня:

- **Клиент**: Может быть веб-браузер, который взаимодействует с cyclos, получая JSON-данные через HTTP от веб-сервера; или клиентское приложение, взаимодействующее через REST с веб-сервисами или использующее Spring HTTP.
- **Веб**: Обрабатывает HTTP-запросы и взаимодействует с нижними уровнями, используя интерфейсы, определенные в проекте `cyclos4-api`. User façade / guest façade являются точками входа в уровень сервисов для обычных веб-клиентов. Клиенты веб-сервисов используют другой фасад.
- **Сервисы**: Точки входа (фасады) являются либо EJB, либо простыми Spring beans (в зависимости от развертывания). Сервисы разделены на 2 компонента: уровень безопасности (отвечает за проверку прав вызывающего на методы) и реализация (выполняет бизнес-правила и доступ к постоянным сущностям). Сервисы используют JPA (с помощью Querydsl), который взаимодействует с сервером базы данных.
- **База данных**: СУБД, которая хранит данные.

*Также Java-клиент может использовать RMI для прямого взаимодействия с уровнем безопасности сервисов (например, CRM-программное обеспечение).*

#### Шаблон MVC

Архитектурный шаблон Model-View-Controller (Модель-Представление-Контроллер) применяется с GWT в Cyclos следующим образом:

#### Модель (Model)

VOs, DTOs и QueryParameters - все это наблюдаемые объекты (подклассы org.cyclos.model.Bean). Они поддерживают регистрацию слушателей для изменений свойств и имеют служебные методы для чтения и записи свойств, поскольку GWT не поддерживает рефлексию напрямую.

#### Контроллер (Controller)

Контроллер выступает посредником между Представлением и Моделью, получая данные из сервисов, обновляя компоненты Представления и отправляя данные обратно в сервисы для сохранения.  
В Cyclos в роли Контроллеров выступают Страницы (подклассы org.cyclos.client.ui.Page). Они создают экземпляры компонентов представления (виджетов) и содержат ссылки на удаленные сервисы.  
Методы Контроллера вызываются Представлением косвенно, например, onSearch(), onSave().  
Когда Представлению требуются дополнительные данные (например, выбор категории объявления при регистрации объявления), ответственность Контроллера - получить эти данные и передать их представлению. Вероятно, в этом случае компонент представления будет иметь метод типа setAdCategories(Collection&lt;AdCategoryVO&gt;).

#### Представление (View)

Визуальное представление данных использует компонентные страницы. В основном страницы строятся путем расширения панели макета (например: SearchFiltersPanel, FormFlowPanel, DataTable, [и т.д.](https://wiki.coopteam.ru/Development_guide#Panels)) и включения элементов ввода, особенно полей (например: TextField, IntegerField, [и т.д.](https://wiki.coopteam.ru/Development_guide#Field_types_.28example_at_FormTestPage.29)).  
Этот компонент показывает значения из Модели (например, &lt;Module&gt;Query) и обновляет их по мере того, как пользователь заполняет поля формы. Это делается с помощью механизма привязки. Класс Field имеет метод bind(), который принимает org.cyclos.model.Bean и имя свойства. Также есть ярлык для него на FormFlowPanel, который принимает имя свойства и поле. Когда привязка выполнена, значение свойства объекта модели автоматически отражается на значении поля, и любые обновления с любой стороны отражаются на другой.

#### Клиент

Клиентское приложение будет взаимодействовать с веб-сервером, отправляя/получая данные в формате JSON по HTTP.  
Веб-сервер будет обращаться к уровню сервисов (в сервере приложений) через интерфейсы. Фактическая реализация будет получена через JNDI lookup, но конфигурация будет выполняться через Spring. Таким образом, мы можем прозрачно изменять локальные интерфейсы на удаленные (разные имена JNDI), когда веб-сервер работает в той же / другой JVM, что и сервер приложений.  
Уровень сервисов реализован с использованием stateless session beans, которые используют JPA EntityManager для доступа к базе данных.

### Область видимости сущностей

Сущности (отображенные с JPA) будут ограничены областью видимости реализации сервиса. Общение между сервисом и верхними уровнями будет осуществляться с использованием DTO и VO, а не самих сущностей. Обычно DTO будут содержать все редактируемые поля сущности, а VO будут содержать только поля, необходимые для конкретных страниц. Это решит некоторые проблемы:

- Во многих случаях для выполнения сложной задачи одной сущности недостаточно, поэтому даже в Cyclos 3 для таких случаев используются DTO (например, платежи выполняются с помощью DoPaymentDTO, а не сущности Payment). Это стандартизирует данный подход.
- Мы решим проблемы с ленивой загрузкой данных. Мы гарантируем, что когда к сущностям осуществляется доступ, существует EntityManager, который прозрачно загружает ленивые связи. Когда данные отправляются на верхние уровни, ни в DTO, ни в VO не будет ленивых прокси или неинициализированных коллекций.

Кроме того, когда необходимо загружать большие объемы данных (в основном отчеты и CSV-выгрузки), это должно обрабатываться на уровне сервисов, и загружаться должно только результирующее содержимое файла (PDF или CSV), а не сами сущности.

### Перечисление модулей (Module Enum)

Cyclos4 организован в модули и подмодули. Список существующих модулей определен в перечислении `org.cyclos.utils.Module` в '''cyclos4-api-core'''. Кроме того, для каждого модуля существует соответствующее перечисление подмодулей, содержащее имеющиеся в нем подмодули.

Основная причина для подмодулей - позволить отправлять переводы приложения по запросу, а не отправлять все переводы сразу. То есть основной веб-клиент может запросить только переводы, необходимые для конкретной страницы.  
Cyclos4 определяет специальный класс Enum, который перечисляет все модули, существующие в приложении. Enum находится в cyclos4\_api, в пакете org.cyclos.model.Module. Также существуют различные перечисления подмодулей, которые определяют подмодули в каждом модуле.  
Эти перечисления используются для генерации ключей перевода через реализации MessageKey, которые определены в Enum с областью видимости 'Module'.  
Например, вызов перевода будет выглядеть так:  
`message(SystemKeys.Configurations.HEADING_ACTIVE)`  
Enum с областью видимости 'Module' (SystemKeys) содержит множество реализаций MessageKey.  
Реализация MessageKey (Configurations) будет иметь метод, ссылающийся на подмодуль.  
Подмодуль будет иметь метод, ссылающийся на модуль.  
Файлы переводов можно найти в cyclos4\_impl/src/META-INF/translations.  
Пример выше будет расположен в файле ''Translation-SYSTEM.properties'', а ключ будет ''CONFIGURATIONS.headingActive''.

### CRUD Сервисы

CRUDService в модели - это сервис, позволяющий выполнять основные операции с базой данных: Create (создать/сбросить), Read (загрузить), Update (сохранить) и Delete (удалить). Большинство интерфейсов Cyclos для сервисов расширяют этот интерфейс CRUDService. Только очень немногие сервисы в Cyclos расширяют nl.strohalm.cyclos.services.Service напрямую.

### Макет

Скриншоты  
Объяснение разделов и элементов макета

### Безопасность

Мы не используем JAAS для безопасности, а наше собственное решение. Это потому, что JAAS обрабатывает только роли, а нам нужно больше. Пожалуйста, ознакомьтесь с [параграфом о безопасности](https://wiki.coopteam.ru/Security) для полного обзора архитектуры безопасности.

### Поток взаимодействия

Вот поток, который происходит, когда клиент вызывает метод сервиса:

1. Запрос отправляется от клиента на сервер с использованием GWT-RPC или механизма связи Spring's HTTP invoker;
2. HTTP-фильтр гарантирует, что получены некоторые основные данные о запросе, такие как сеть и канал;
3. Сервлет Spring обрабатывает запрос и определяет метод сервиса, который нужно вызвать;
4. Используется прокси к интерфейсу сервиса. Этот прокси использует `ServiceFacade` для вызова метода на сервере;
5. Вызывается соответствующий класс `ServiceSecurity`, который применяет правило безопасности;
6. Класс безопасности делегирует вызов фактической реализации сервиса через его локальный интерфейс сервиса;
7. Наконец, реализация сервиса выполняет бизнес-логику.

<div id="bkmrk--1" style="text-align: center;">![Вызов метода сервиса](https://wiki.cyclos.org/images/3/32/Service_method_invocation.jpg)</div>

# Спецификация

<div id="bkmrk-%D0%92%D0%BD%D0%B8%D0%BC%D0%B0%D0%BD%D0%B8%D0%B5%3A-%D0%9D%D0%B0%D0%BF%D0%B8%D1%81%D0%B0%D0%BD%D0%B8%D0%B5-" style="border: 1px solid #a43f50; background-color: #f7d7da; color: #6e212a; padding: 10px; margin: 10px 0; border-radius: 4px;">**Внимание:** Написание спецификаций - это непрерывный процесс, и мы не можем гарантировать, что они всегда актуальны.</div><div id="bkmrk-" style="text-align: center; margin: 15px 0;">![Модули и подмодули](https://wiki.coopteam.ru/Modules%20and%20submodules.jpg)</div>## Спецификации

На этой странице перечислены все спецификации. Для каждого подмодуля в Cyclos существует спецификация. Примеры подмодулей: "Комиссии счета", "Карты", "Адреса" и т.д. Для каждого подмодуля есть "компонент" в Jira и соответствующий "подмодуль" в структуре пакетов Cyclos. Подмодули сгруппированы в модули, такие как "Доступ", "Банкинг", "Управление контентом" и т.д. В этой вики мы используем следующие соглашения об именовании для подмодулей (спецификаций): `<Имя_модуля>_<Имя_подмодуля>`, например, "Access\_Agreements\_logs".

- Спецификация состоит из страниц и может иметь один или несколько разделов страницы, например, страница сведений, страница поиска и список результатов поиска.
- На странице **[Шаблоны](https://wiki.coopteam.ru/Templates)** есть шаблоны для всех спецификаций[.](https://wiki.coopteam.ru/Specifications_Automatic)

## Основное приложение

### Доступ

- Соглашения 
    - [Управление соглашениями](https://wiki.coopteam.ru/Access_-_Manage_agreements)
    - [Принятые соглашения](https://wiki.coopteam.ru/Access_-_Accepted_agreements)
- Каналы 
    - [Управление каналами](https://wiki.coopteam.ru/Access_-_Manage_channels)
    - [Пользовательские каналы](https://wiki.coopteam.ru/Access_-_User_channels_access)
- [PIN-код устройства](https://wiki.coopteam.ru/Access_-_Device_Pins)
- Методы идентификации 
    - [Методы идентификации пользователя](https://wiki.coopteam.ru/Access_-_User_identification_methods)
    - [Клиенты доступа](https://wiki.coopteam.ru/Access_-_Access_clients)
    - [Токены](https://wiki.coopteam.ru/Access_-_Tokens)
- [Провайдеры идентификации](https://wiki.coopteam.ru/Access_-_Identity_providers)
- [Вход](https://wiki.coopteam.ru/Access_-_Login)
- OAuth2 / OpenID connect 
    - [Авторизованные приложения](https://wiki.coopteam.ru/Access_-_Oidc_authorizations)
    - [Клиенты](https://wiki.coopteam.ru/Access_-_Oidc_clients)
    - [Страницы согласия](https://wiki.coopteam.ru/Access_-_Oidc_consent)
- [Пароли](https://wiki.coopteam.ru/Access_-_Passwords)
- [Типы паролей](https://wiki.coopteam.ru/Access_-_Password_types)
- [Доверенные устройства](https://wiki.coopteam.ru/Access_-_Trusted_devices)

### Банкинг

- Счета 
    - [Лимиты баланса счета](https://wiki.coopteam.ru/Account_balance_limits)
    - [Информация о счете](https://wiki.coopteam.ru/Account_information)
    - [Балансы пользователей](https://wiki.coopteam.ru/User_balances)
    - [Обзор платежей](https://wiki.coopteam.ru/Payments_overview)
    - [Обзор лимитов счета](https://wiki.coopteam.ru/Account_limits_overview)
- [Комиссии счета](https://wiki.coopteam.ru/Banking_-_Account_fees)
- [Типы счетов](https://wiki.coopteam.ru/Banking_-_Account_types)
- [Авторизации](https://wiki.coopteam.ru/Banking_-_Authorizations)
- [Уровни авторизации](https://wiki.coopteam.ru/Banking_-_Authorization_levels)
- [Роли авторизации](https://wiki.coopteam.ru/Banking_-_Authorization_roles)
- [Валюты](https://wiki.coopteam.ru/Banking_-_Currencies)
- [Оплата](https://wiki.coopteam.ru/Banking_-_Pay)
- [Счетчик зрелости](https://wiki.coopteam.ru/Banking_-_Maturity_counter)
- Транзакции 
    - [Выполнить платеж](https://wiki.coopteam.ru/Do%20payment)
    - [Получить платежи](https://wiki.coopteam.ru/Receive%20payments)
    - [Запланированные платежи](https://wiki.coopteam.ru/Scheduled%20payments)
    - [Запросы платежей](https://wiki.coopteam.ru/Payment%20requests)
    - [Внешние платежи](https://wiki.coopteam.ru/External%20payments)
- [Поля транзакции](https://wiki.coopteam.ru/Banking_-_Transaction_fields)
- [Переводы](https://wiki.coopteam.ru/Banking_-_Transfers)
- [Комиссии за перевод](https://wiki.coopteam.ru/Banking_-_Transfer_fees)
- [Фильтры переводов](https://wiki.coopteam.ru/Banking_-_Transfer_filters)
- [Статус перевода](https://wiki.coopteam.ru/Banking_-_Transfer_status)
- [Типы переводов](https://wiki.coopteam.ru/Banking_-_Transfer_types)
- [Ваучеры](https://wiki.coopteam.ru/Banking_-_Vouchers)
- [Конфигурации ваучеров](https://wiki.coopteam.ru/Banking_-_Voucher_configurations)
- [Шаблоны ваучеров](https://wiki.coopteam.ru/Banking_-_Voucher_templates)
- [Типы ваучеров](https://wiki.coopteam.ru/Banking_-_Voucher_types)

### Управление контентом

- Элементы контента 
    - [Баннеры](https://wiki.coopteam.ru/Content_management_-_Website_banners)
    - [Логотипы](https://wiki.coopteam.ru/Content_management_-_Logos)
    - [Меню и страницы](https://wiki.coopteam.ru/Content_management_-_Website_menu_items)
    - [Мобильные страницы](https://wiki.coopteam.ru/Content_management_-_Mobile_pages)
    - [Статический контент](https://wiki.coopteam.ru/Content_management_-_Static_contents)
    - [Темы](https://wiki.coopteam.ru/Content_management_-_Themes)
- [Документы](https://wiki.coopteam.ru/Content_management_-_Documents).
- [Категории документов](https://wiki.coopteam.ru/Content_management_-_Document_categories)
- [Поля документов](https://wiki.coopteam.ru/Content_management_-_Document_fields)
- [Электронные письма](https://wiki.coopteam.ru/Content_management_-_Emails)
- [Категории изображений](https://wiki.coopteam.ru/Content_management_-_Image_categories)
- [Мобильные страницы](https://wiki.coopteam.ru/Content_management_-_Mobile_pages)
- [Статический контент](https://wiki.coopteam.ru/Content_management_-_Static_contents)
- [Темы](https://wiki.coopteam.ru/Content_management_-_Themes)
- Переводы 
    - [Перевод приложения](https://wiki.coopteam.ru/Content_management_-_Application_translation)
    - [Перевод данных](https://wiki.coopteam.ru/Content_management_-_Data_translation)

### Маркетплейс

- Объявления 
    - [Объявления (обычные и интернет-магазин)](https://wiki.coopteam.ru/Advertisements)
    - [Вопросы по объявлениям](https://wiki.coopteam.ru/Ad%20questions)
- [Категории](https://wiki.coopteam.ru/Marketplace_-_Categories)
- [Поля](https://wiki.coopteam.ru/Marketplace_-_Fields)
- [Интересы](https://wiki.coopteam.ru/Marketplace_-_Interests)
- [Способы доставки интернет-магазина](https://wiki.coopteam.ru/Marketplace_-_Webshop_delivery_methods)
- Интернет-магазин 
    - [Корзина покупок](https://wiki.coopteam.ru/Shopping%20cart)
    - [Продажи](https://wiki.coopteam.ru/Sales)
    - [Покупки](https://wiki.coopteam.ru/Purchases)
- [Настройки интернет-магазина](https://wiki.coopteam.ru/Marketplace_-_Webshop%20settings)

### Обмен сообщениями

- Оповещения 
    - [Системные оповещения](https://wiki.coopteam.ru/System_alerts)
    - [Пользовательские оповещения](https://wiki.coopteam.ru/User_alerts)
- [Журналы ошибок](https://wiki.coopteam.ru/Messaging_-_Error_logs)
- [Приглашение](https://wiki.coopteam.ru/Messaging_-_Invite)
- [Списки рассылки](https://wiki.coopteam.ru/Messaging_-_Mailing_lists)
- [Сообщения](https://wiki.coopteam.ru/Messaging_-_Messages)
- [Категории сообщений](https://wiki.coopteam.ru/Messaging_-_Message_categories)
- [Уведомления](https://wiki.coopteam.ru/Messaging_-_Notifications)
- [Настройки уведомлений](https://wiki.coopteam.ru/Messaging_-_Notification_settings)

### Прочее

- Специальные страницы 
    - Домашняя страница
    - Страница входа
    - [Справка / Руководство](https://wiki.coopteam.ru/Other_-_Help)
    - [Страница первоначальной настройки](https://wiki.coopteam.ru/Other_-_First_time_initialization_page)
- Виджеты 
    - [Просмотр иерархий](https://wiki.coopteam.ru/Other_-_Browse_hierarchies)
    - [Просмотрщик изображений](https://wiki.coopteam.ru/Other_-_Image_viewer)
    - [Менеджер изображений](https://wiki.coopteam.ru/Other_-_Image_manager)
    - [Поля формы](https://wiki.coopteam.ru/Other_-_Form_fields)
    - [Быстрый поиск](https://wiki.coopteam.ru/Other_-_Quick_search)

### Система

- [Конфигурации](https://wiki.coopteam.ru/System_-_Configurations)
- [Каналы](https://wiki.coopteam.ru/Channels)
- [Журналы сущностей](https://wiki.coopteam.ru/System_-_Entity_logs)
- [Форматы экспорта](https://wiki.coopteam.ru/System_-_Export_formats)
- [Точки расширения](https://wiki.coopteam.ru/System_-_Extension_points)
- [Поля](https://wiki.coopteam.ru/System_-_Fields)
- [Изображения](https://wiki.coopteam.ru/System_-_Images)
- [Импорты](https://wiki.coopteam.ru/System_-_Imports)
- [Перехватчики](https://wiki.coopteam.ru/System_-_Interceptors)
- [Языки](https://wiki.coopteam.ru/System_-_Languages)
- [Лицензирование](https://wiki.coopteam.ru/System_-_Licensing)
- [Сети](https://wiki.coopteam.ru/System_-_Networks)
- Пользовательские операции 
    - [Операции](https://wiki.coopteam.ru/System_-_Operations)
    - [Поля операций](https://wiki.coopteam.ru/System_-_Operation_fields)
- [Отчеты](https://wiki.coopteam.ru/System_-_Reports)
- [Запланированные задачи](https://wiki.coopteam.ru/System_-_Scheduled_tasks)
- [Скрипты](https://wiki.coopteam.ru/System_-_Scripts)
- [Настройка](https://wiki.coopteam.ru/System_-_Setup)
- [Конфигурации SMS-операций](https://wiki.coopteam.ru/System_-_Sms_operation_configurations)
- [Веб-сервисы](https://wiki.coopteam.ru/System_-_Web_services)
- [Мастера](https://wiki.coopteam.ru/System_-_Wizards)
- [Поля мастера](https://wiki.coopteam.ru/System_-_Wizard_fields)
- [Шаги мастера](https://wiki.coopteam.ru/System_-_Wizard_steps)

### Пользователи

- [Адреса](https://wiki.coopteam.ru/Users_-_Addresses)
- [Брокерство](https://wiki.coopteam.ru/Users_-_Brokering)
- [Массовые действия](https://wiki.coopteam.ru/Users_-_Bulk_actions)
- [Контакты](https://wiki.coopteam.ru/Users_-_Contacts)
- [Поля контактов](https://wiki.coopteam.ru/Users_-_Contact_fields)
- [Контактная информация](https://wiki.coopteam.ru/Users_-_Contact_infos)
- [Поля контактной информации](https://wiki.coopteam.ru/Users_-_Contact_info_fields)
- Панель управления 
    - [Статус панели управления](https://wiki.coopteam.ru/Dashboard%20status)
    - [Действия на панели управления](https://wiki.coopteam.ru/Dashboard%20actions)
- [Настройки панели управления](https://wiki.coopteam.ru/Users_-_Dashboard_settings)
- [Поля](https://wiki.coopteam.ru/Users_-_Fields)
- [Группы](https://wiki.coopteam.ru/Users_-_Groups)
- [Операторы](https://wiki.coopteam.ru/Users_-_Operators)
- [Группы операторов](https://wiki.coopteam.ru/Users_-_Operator_groups)
- [Телефоны](https://wiki.coopteam.ru/Users_-_Phones)
- [Контроль конфиденциальности](https://wiki.coopteam.ru/Users_-_Privacy_controls)
- [Настройки конфиденциальности](https://wiki.coopteam.ru/Users_-_Privacy_settings)
- [Продукты](https://wiki.coopteam.ru/Users_-_Products)
- [Записи](https://wiki.coopteam.ru/Users_-_Records)
- [Поля записей](https://wiki.coopteam.ru/Users_-_Record_fields)
- [Разделы записей](https://wiki.coopteam.ru/Users_-_Record_sections)
- [Типы записей](https://wiki.coopteam.ru/Users_-_Record_types)
- Отзывы 
    - [Общие отзывы](https://wiki.coopteam.ru/General_references)
    - [Отзывы о платежах](https://wiki.coopteam.ru/Payment_feedback)
- Пользователи 
    - [Пользователи](https://wiki.coopteam.ru/Users)
    - [Подключенные пользователи](https://wiki.coopteam.ru/Connected_users)
    - [Контакты](https://wiki.coopteam.ru/Contacts)
    - [Операторы](https://wiki.coopteam.ru/Operators)
- [Разделы пользователей](https://wiki.coopteam.ru/Users_-_User_sections)

## Мобильное приложение

- [Счета](https://wiki.coopteam.ru/Mobile_application_-_Accounts)
- [Контакты](https://wiki.coopteam.ru/Mobile_application_-_Contacts)
- [Платеж](https://wiki.coopteam.ru/Mobile_application_-_Payment)

## WebPOS

- [Платеж](https://wiki.coopteam.ru/WebPOS_-_Payment)
- [Страницы](https://wiki.coopteam.ru/WebPOS_-_Pages)

# Страницы спецификаций

**Specification pages**

# Система - Сети

## Описание

Сети являются высшим уровнем категоризации в Cyclos. Краткое объяснение можно найти в разделе [Сети в концепциях](https://wiki.coopteam.ru/Concepts#Networks).

## Бизнес-правила

### Глобальные администраторы

- Управление сетями (например, создание, удаление) осуществляется пользователями, принадлежащими встроенной группе 'глобальные администраторы'.
- Когда сеть создается (глобальным или многосетевым администратором, или через API), будет создана одна встроенная группа под названием 'администраторы сети', эти администраторы сети имеют фиксированные разрешения (см. [Группы пользователей](https://wiki.coopteam.ru/Users_-_Groups)).
- Глобальные администраторы могут переключаться на сеть. При переключении на сеть глобальный или многосетевой администратор будет иметь те же разрешения, что и группа 'администраторы сети'.

### Многосетевые администраторы

- Администраторы, принадлежащие группе, созданной на глобальном уровне, являются частью группы 'Многосетевой администратор'. Обратите внимание, что эти многосетевые группы перечислены в том же списке, что и встроенная группа 'Глобальные администраторы'. Многосетевым администраторам могут быть предоставлены разрешения на управление определенными сетями. Им также могут быть предоставлены разрешения на создание новых сетей, и в этом случае они могут управлять ими автоматически.
- Многосетевые администраторы могут переключаться между сетями, которыми они управляют, из списка сетей или переключателя сети в меню статуса.

### Область действия сети

- Все пользователи в системе, которые не входят в группу глобальных или многосетевых администраторов, будут автоматически работать в 'области действия' сети, сеть будет отображаться (и реагировать) как единая система (совместимость будет доступна через 'глобальные' сущности, как объясняется далее).
- 'Администраторы сети' могут создавать новые группы администраторов в своей сети. Вместе с этими группами 'администраторы сети' управляют сетью.

### Локальные и глобальные сущности

- Большинство сущностей являются локальными, что означает, что ими можно управлять и даже просматривать только на локальном (сетевом) уровне. Примеры локальных сущностей: продукты, соглашения, типы записей, категории сообщений, категории объявлений и т.д.
- Примеры глобальных сущностей: Группы, языки, конфигурации, каналы, схемы телефонов, системные изображения и сущности, связанные с учетными записями (чтобы быстро получить обзор всех глобальных сущностей, вы можете просто войти как глобальный администратор).
- Помимо управления локальными сетевыми сущностями, локальный (сетевой) администратор может видеть и 'использовать' все глобальные сущности, но не может редактировать или удалять их. Глобальные сущности просто 'доступны' для локального использования. Например, поля профиля могут быть определены глобально. Сетевой администратор просто выберет поля профиля, которые он/она хочет использовать в локальном продукте. И добавит пользовательские поля профиля при необходимости.
- Группы и конфигурации, определенные на глобальном уровне, являются особыми случаями. Они глобальны, но не видны на сетевом уровне.
- В некоторых случаях глобальный администратор как сетевой администратор имеет доступ к той же функции (например, журналы ошибок). Но глобальный администратор увидит все ошибки в системе, а сетевой администратор - только ошибки, сгенерированные в пределах их сетевой области.

**Примечание:** Концепция локальных и глобальных сущностей может показаться сложной. Но для сетевого администратора это довольно просто. Для сетевого администратора будут просто некоторые сущности, которые он/она не может изменить. Они будут вести себя просто как 'встроенные' сущности. Которые можно либо использовать, либо нет.

### Доступ

- Глобальный администратор может создавать сети и управлять ими через меню (Управление системой - Сети). На странице сведений о сети глобальный администратор может изменить свойства сети, например, имя и URL доступа.
- Чтобы глобальный администратор мог управлять самой сетью (например, создавать группы, учетные записи, продукты, пользователей и т.д.), глобальный администратор должен войти в сеть через единственный селектор 'переключатель' в правом верхнем меню (между вошедшим пользователем и опциями выхода). Выбор 'Глобальное администрирование' вернет администратора в режим глобального администрирования. (опция переключателя - это просто 'дополнительная' возможность, чтобы избежать необходимости глобальным администраторам создавать локальных администраторов для каждой сети, которой они хотят управлять)
- Сетевой администратор никогда не увидит никаких опций, касающихся других сетей. Сетевому администратору даже не нужно знать о существовании других сетей.

### Совместимость

(эта функция очень сложна и еще не реализована, поскольку ее можно легко выполнить в пределах одной сети, статус - по требованию)

В деталях сети будет опция 'доступные сети'. Это должно показывать двухуровневый вариант выбора, сети и группы внутри сетей. (аналогично множественному выбору groupset/group). Таким образом, глобальный администратор может разрешить группам из определенных сетей выполнять операции (например, платежи) между ними. Конечно, администратору сначала нужно будет создать глобальную валюту, учетную запись и т.д. Сетевому администратору нужно будет добавить учетную запись и межсетевой тип транзакции в локальный продукт.

**Примечание:** Глобальные учетные записи будут работать немного иначе, чем локальные. Например, комиссии за транзакции по глобальным счетам не могут применяться к конкретным пользователям и группам (как в локальных счетах), а только к сетям.

## Уведомления

При создании новой сети будет отправлено уведомление. Идея в том, что в будущем системным администраторам можно будет назначать определенные сети для управления, а также предоставлять разрешение на создание новых сетей, которыми они, очевидно, могут управлять. Эти системные администраторы, вероятно, будут 'провайдерами услуг Cyclos', которые не будут иметь 'полных' прав системного администратора, таких как создание новых каналов и типов паролей. При создании новой сети полный системный администратор может захотеть быть проинформированным о создании новой сети.

## Страницы

### Страница поиска (фильтры)

<table border="1" cellpadding="3" cellspacing="0" id="bkmrk-%D0%9F%D0%BE%D0%BB%D1%8F-%D0%A2%D0%B8%D0%BF-%D0%9F%D1%80%D0%B0%D0%B2%D0%B8%D0%BB%D0%B0-%D0%9D%D0%B0%D0%B7"><thead><tr><th style="background-color: #ffff8f;" width="300">Поля</th><th style="background-color: #ffff8f;" width="200">Тип</th><th style="background-color: #ffff8f;" width="900">Правила</th></tr></thead><tbody><tr><td>Название</td><td>Текст</td><td>Позволяет администратору искать сеть с определенным именем.</td></tr><tr><td>Внутреннее имя</td><td>Текст</td><td>Позволяет администратору искать сеть с определенным внутренним именем.</td></tr><tr><td>Показывать только по умолчанию</td><td>Логический</td><td>Позволяет администратору искать сеть, помеченную как сеть по умолчанию.</td></tr><tr><td>Управляется группой</td><td>Одиночный выбор с группами глобальных администраторов</td><td>Позволяет администратору показывать сети, назначенные определенной группе глобальных администраторов - Значение по умолчанию "все".

</td></tr><tr><td>Создать</td><td>Кнопка действия</td><td>Переходит на страницу сведений о сети для добавления новой сети выбранного типа. - Отображается слева (первый элемент).
- Доступные варианты: 
    - Пустая сеть: Открывает страницу редактирования для ручного создания новой Сети
    - Мастер сети: Запускает мастер для辅助ственного создания новой Сети

</td></tr><tr><td>Сортировать по</td><td>Кнопка действия</td><td>Позволяет выбрать порядок списка результатов. Доступные варианты: - Дата создания (по умолчанию)
- Имя

</td></tr></tbody></table>

### Результаты поиска (список)

*\* Автоматически показывает все сети, отсортированные по умолчанию по дате создания.*  
*\* Над списком слева находится кнопка сортировки (аналогично поиску пользователей) с опцией сортировки по дате создания или по алфавиту.*  
*Отключенные сети отображаются зачеркнутыми в списке результатов поиска.*

<table border="1" cellpadding="3" cellspacing="0" id="bkmrk-%D0%9F%D0%BE%D0%BB%D1%8F-%D0%A2%D0%B8%D0%BF-%D0%9F%D1%80%D0%B0%D0%B2%D0%B8%D0%BB%D0%B0-%D0%9D%D0%B0%D0%B7-1"><thead><tr><th style="background-color: #ffff8f;" width="300">Поля</th><th style="background-color: #ffff8f;" width="200">Тип</th><th style="background-color: #ffff8f;" width="900">Правила</th></tr></thead><tbody><tr><td>Название</td><td>Текст</td><td>Название сети.</td></tr><tr><td>Внутреннее имя</td><td>Текст</td><td>Внутреннее имя сети.</td></tr><tr><td>Переключиться</td><td>Иконка</td><td>Позволяет (по клику) переключиться на указанную сеть.</td></tr><tr><td>По умолчанию</td><td>Иконка</td><td>Показывает, какая сеть является сетью по умолчанию. Может быть только одна сеть по умолчанию. Эта сеть не перейдет в глобальный режим при доступе по основному URL. Например, communities.cyclos.org попадет в сеть 'communities', потому что она определена как сеть по умолчанию. Если бы это было не так, она попала бы в глобальный URL (communities.cyclos.org/global).</td></tr><tr><td>Удалить</td><td>Иконка</td><td>Удаляет эту Сеть. Возможно только если Сеть никогда не использовалась (не имеет данных).</td></tr></tbody></table>

### Страница сведений

<table border="1" cellpadding="3" cellspacing="0" id="bkmrk-%D0%9F%D0%BE%D0%BB%D1%8F-%D0%A2%D0%B8%D0%BF-%D0%9F%D1%80%D0%B0%D0%B2%D0%B8%D0%BB%D0%B0-%D0%9D%D0%B0%D0%B7-2"><thead><tr><th style="background-color: #ffff8f;" width="300">Поля</th><th style="background-color: #ffff8f;" width="200">Тип</th><th style="background-color: #ffff8f;" width="900">Правила</th></tr></thead><tbody><tr><td>Название</td><td>Текст</td><td>Здесь можно указать название сети. - Максимум 50 символов.
- Обязательное.

</td></tr><tr><td>Внутреннее имя</td><td>Текст</td><td>Здесь можно указать внутреннее имя сети. Это необходимо для веб-сервисов. - Внутреннее имя может быть определено только на глобальном уровне (не сетевым администратором). К сети всегда можно получить доступ через глобальный URL и внутреннее имя как путь. Даже если корневой URL в конфигурации по умолчанию сети был изменен.
- Максимум 50 символов.
- Обязательное.

</td></tr><tr><td>Описание</td><td>Текст</td><td> </td></tr><tr><td>URL по умолчанию</td><td>Только для чтения</td><td>- Видимо только при редактировании (скрыто при создании).

</td></tr><tr><td>Дата создания</td><td>Только для чтения</td><td>- Видимо только при редактировании (скрыто при создании).

</td></tr><tr><td>Включено</td><td>Логический</td><td>Позволяет администратору отключить/включить группу. - По умолчанию отмечено как включено;
- Если отключено, никакие связанные сущности/информация о сети недоступны в Cyclos.

</td></tr><tr><td>По умолчанию</td><td>Логический</td><td>Позволяет администратору установить сеть как сеть по умолчанию. См. правила сопоставления сетей в разделе [Бизнес-правила](#Business_rules). - Когда сеть устанавливается как сеть по умолчанию, у предыдущей сети по умолчанию (если таковая была) флаг по умолчанию снимается.
- Видимо только для глобальных администраторов (многосетевые администраторы не могут изменять, только просматривать это значение).

</td></tr><tr><td>Родительская конфигурация</td><td>Одиночный выбор</td><td>Определяет конфигурацию, которая будет родительской для конфигурации по умолчанию сети. - В качестве опций должны отображаться все глобальные конфигурации.
- Обязательное и редактируемое при вставке. Только для чтения при редактировании.

</td></tr><tr><td>Управляется группами</td><td>Ссылки</td><td>Показывает ссылку для каждой из групп, которые управляют этой сетью.</td></tr><tr><td>Переключиться на эту сеть</td><td>Кнопка действия</td><td>Позволяет переключиться на сеть. Видимо после сохранения и включения сети.</td></tr><tr><td>Сохранить</td><td>Кнопка действия</td><td>Сохраняет сеть.</td></tr></tbody></table>

# Системные конфигурации

## Описание

Конфигурация определяет, как Cyclos выглядит, ощущается и ведет себя для групп вошедших пользователей или для гостей. Некоторые примеры параметров, которые можно установить в конфигурации: язык, адрес, макет адреса, формат чисел, почтовый сервер и многое другое.

Также большинство элементов управления контентом привязаны к теме. Например, для каждой конфигурации вы можете редактировать видимые баннеры. Однако эти элементы управления контентом редактируются через меню контента:

- [Баннеры](https://wiki.coopteam.ru/Content_management_-_Website_banners)
- [Логотипы](https://wiki.coopteam.ru/Content_management_-_Logos)
- [Меню и страницы](https://wiki.coopteam.ru/Content_management_-_Website_menu_items)
- [Мобильные страницы](https://wiki.coopteam.ru/Content_management_-_Mobile_pages)
- [Статический контент](https://wiki.coopteam.ru/Content_management_-_Static_contents)
- [Темы](https://wiki.coopteam.ru/Content_management_-_Themes)

## Бизнес-правила

Конфигурации определяются иерархическим образом. Существует одна, встроенная конфигурация, которая является системной по умолчанию. Эта системная конфигурация по умолчанию всегда является корнем любого дерева конфигураций. При создании новой конфигурации необходимо выбрать существующую «родительскую» конфигурацию, это может быть системная конфигурация по умолчанию или любая другая конфигурация, которой администратор имеет право управлять. Это означает, что все конфигурации происходят прямо или косвенно от (встроенной) системной конфигурации по умолчанию. Администратор может выбрать наследование параметров от соответствующей «родительской» конфигурации или настроить их (выбрав значок редактирования). Также можно «заблокировать» параметры (выбрав значок блокировки), когда параметры заблокированы, конфигурации нижнего уровня не могут их больше изменять. Конфигурации, имеющие дочерние конфигурации, не могут быть удалены. Кроме того, конфигурации могут быть установлены для определенных гостей (соответствующих параметру URL) и/или для конкретных пользователей (через группу и/или набор групп).

Во время выполнения всегда используется наиболее специфичная конфигурация для гостей:

- Специфичный гость (соответствующий параметру URL), если есть
- Системная по умолчанию

Для вошедших пользователей группа определяет конфигурацию, которая будет применена. Группа имеет свойство конфигурации; конфигурация не имеет свойства группы. Группа может иметь только одну конфигурацию и **должна** иметь конфигурацию - она не может быть нулевой. Наборы групп также имеют конфигурацию. Конфигурация набора групп определяет только то, какой будет конфигурация по умолчанию в форме для создания новой группы. Однако администратор может просто выбрать другую конфигурацию для этой новой группы. Конфигурация по умолчанию при создании нового набора групп всегда *системная по умолчанию*.

Как указано выше, группа пользователей может иметь только одну конфигурацию. Однако конфигурация всегда является частью иерархического дерева конфигураций. Новая конфигурация всегда должна расширять конфигурацию более высокого уровня. Это означает, что все конфигурации в системе являются частью иерархического дерева конфигураций. Встроенная конфигурация 'глобальная по умолчанию' является вершиной иерархии.

### Применимость конфигурации

При просмотре Cyclos как гость (не вошедший в систему) конфигурация, которая будет применена, определяется URL (доменом или путем), к которому пользователь обращается. URL/путь определен в конфигурации.  
Когда пользователь входит в Cyclos, будет применена конфигурация, привязанная к группе пользователя. Обратите внимание, что при этом не учитывается URL/путь доступа, определенный в конфигурации группы пользователя.  
Пользователь может войти по URL/пути, определенному в конфигурации на более высоком уровне. Но единственная разница в том, что он входит по другому URL. То, что он видит (макет, страницы и т.д.), берется из конфигурации, привязанной к его группе пользователей.  
Пример, система со следующими двумя конфигурациями:  
\* Config1: привязана к group1, URL: www.mybank.com  
\* Config2: привязана к group2, расширяет config1, путь: www.mybank.com/city  
\* Пользователь из group2 может получить доступ к обоим доменам, www.mybank.com/city и www.mybank.com. И получит тот же результат после входа в систему.  
\* Пользователь из group1 может получить доступ только по URL www.mybank.com

#### Ограничения

- Также можно установить в конфигурации 'доступ только по URL/пути'. Это означает, что пользователи могут входить только по пути (не по URL/путям, определенным на более высоком уровне). Преимущество этого в том, что вы можете ограничить特定ный доступ (например, для глобальных администраторов или доступа к веб-сервисам) путем, который может быть труднонаходимым, например www.domain.com/sdlf893knd9234rd.
- Ограничения 'доступ только по URL/пути', а также ограничения белого списка применяются при установлении сеанса.
- Если у глобального администратора есть сеанс, он может переключаться на конфигурации нижнего уровня без применения ограничений. Поэтому при реализации ограничений по IP и URL важно, чтобы группы глобальных администраторов высшего уровня имели аналогичные или более строгие разрешения.

#### Правила для полей

- По умолчанию для каждого поля отображается значение конфигурации более высокого уровня, справа от поля отображается значок редактирования, чтобы настроить поле.
- Когда поле не настроено (т.е. унаследовано), отображается значок редактирования.
- Когда поле не отредактировано (не настроено), значок блокировки не отображается.
- Когда поле настроено, отображается значок возврата к унаследованному значению.
- Когда поле настроено и не заблокировано, отображается зеленый значок разблокировки.
- Когда поле настроено и заблокировано, отображается желтый значок блокировки.
- Когда поле заблокировано в конфигурации более высокого уровня, отображается серый значок блокировки.
- В случае наследования от конфигурации более высокого уровня выбранных опций в поле множественного выбора есть только два варианта: 
    - Когда поле настроено и заблокировано на уровне конфигурации более высокого уровня, все дочерние элементы должны следовать определениям в родительской конфигурации.
    - Когда поле настроено и не заблокировано, каждая последующая конфигурация может выбирать среди доступных опций до тех пор, пока на одном уровне поле не будет заблокировано.

## Разрешения

- `<permission id="SYSTEM_CONFIGURATION_VIEW"/>` - Позволяет администратору видеть все конфигурации.
- `<permission id="SYSTEM_CONFIGURATION_MANAGE"/>` - Позволяет администратору управлять всеми конфигурациями.
- `<permission id="SPECIFIC_CONFIGURATION_MANAGE"/>` - Позволяет администратору управлять конкретными конфигурациями, выбранными в его разрешениях.
- `<permission id="SPECIFIC_CONFIGURATION_MANAGE_CONTENT"/>` - Позволяет администратору управлять только контентом конкретных конфигураций, выбранных в его разрешениях, администратору не разрешено вносить изменения в саму конфигурацию.

## Страницы

### Поиск (фильтры)

<table border="1" cellpadding="3" cellspacing="0" id="bkmrk-%D0%9F%D0%BE%D0%BB%D1%8F-%D0%A2%D0%B8%D0%BF-%D0%9F%D1%80%D0%B0%D0%B2%D0%B8%D0%BB%D0%B0-%D0%A4%D0%B8%D0%BB"><thead><tr><th style="background-color: #ffff8f;" width="300">Поля</th><th style="background-color: #ffff8f;" width="200">Тип</th><th style="background-color: #ffff8f;" width="900">Правила</th></tr></thead><tbody><tr><td>Фильтр по группам</td><td>Множественный выбор</td><td>Позволяет фильтровать по группам</td></tr><tr><td>Название</td><td>Текст</td><td>Позволяет фильтровать по названию конфигурации</td></tr><tr><td>URL</td><td>Текст</td><td>Позволяет фильтровать по URL (определенному в конфигурации) - Видимо только в режиме расширенного поиска

</td></tr><tr><td>Создать</td><td>Мульти-кнопка действия</td><td>При создании новой конфигурации необходимо выбрать существующую «родительскую» конфигурацию, это может быть системная конфигурация по умолчанию или любая другая конфигурация, которой администратор имеет право управлять. При нажатии на выбранную опцию открывается пустая страница сведений для создания новой конфигурации на основе выбранной «родительской» конфигурации.</td></tr><tr><td>Расширенный</td><td>Кнопка действия</td><td>Переключиться в расширенный режим - Видимо только в режиме простого поиска

</td></tr><tr><td>Простой</td><td>Кнопка действия</td><td>Переключиться в простой режим - Видимо только в режиме расширенного поиска

</td></tr></tbody></table>

### Результаты поиска (список)

*\* Автоматически показывает все конфигурации, отображаемые иерархически и отсортированные по алфавиту по имени.*

<table border="1" cellpadding="3" cellspacing="0" id="bkmrk-%D0%9F%D0%BE%D0%BB%D1%8F-%D0%A2%D0%B8%D0%BF-%D0%9F%D1%80%D0%B0%D0%B2%D0%B8%D0%BB%D0%B0-%D0%9D%D0%B0%D0%B7"><thead><tr><th style="background-color: #ffff8f;" width="300">Поля</th><th style="background-color: #ffff8f;" width="200">Тип</th><th style="background-color: #ffff8f;" width="900">Правила</th></tr></thead><tbody><tr><td>Название</td><td>Текст (только чтение)</td><td>Показывает название конфигурации и значок стрелки перед названием, указывающий на местоположение в иерархии конфигураций.</td></tr><tr><td>URL</td><td>Текст (только чтение)</td><td>URL конфигурации.</td></tr><tr><td>Предпросмотр</td><td>Иконка</td><td>Отображает настройки выбранных конфигураций в режиме только для просмотра. Он показывает «активную» конфигурацию, то есть объединяет все примененные настройки (включая унаследованные от конфигураций более высокого уровня).</td></tr><tr><td>Удалить</td><td>Иконка</td><td>Позволяет администратору удалить конфигурацию. - Видимо только если администратор имеет разрешение `<permission id="SYSTEM_CONFIGURATION_MANAGE"/>`.
- Конфигурация может быть удалена только если она не используется и/или если у нее нет дочерних элементов.

</td></tr></tbody></table>

### Страница сведений

<table border="1" cellpadding="3" cellspacing="0" id="bkmrk-%D0%9F%D0%BE%D0%BB%D1%8F-%D0%A2%D0%B8%D0%BF-%D0%9F%D1%80%D0%B0%D0%B2%D0%B8%D0%BB%D0%B0-%D0%A0%D0%BE%D0%B4"><thead><tr><th style="background-color: #ffff8f;" width="300">Поля</th><th style="background-color: #ffff8f;" width="200">Тип</th><th style="background-color: #ffff8f;" width="900">Правила</th></tr></thead><tbody><tr><td>Родительская</td><td>Текст (только чтение)</td><td>Указывает, какая конфигурация является непосредственным родителем, от которого происходит новая конфигурация. Все конфигурации расширяются непосредственно от другой конфигурации, являющейся либо основной конфигурацией, которая является частью базы данных по умолчанию (системная по умолчанию), либо любой другой конфигурацией нижнего уровня. - Не видима для системной по умолчанию.
- Определение реализовано на верхнем уровне, когда зафиксировано, не может быть изменено в нисходящей конфигурации.

</td></tr><tr><td>Название</td><td>Текст</td><td>Название конфигурации. - Обязательное.
- Должно быть уникальным.
- Максимальная длина 100 символов.

</td></tr><tr><td>Описание</td><td>Текст</td><td>Здесь можно поместить пояснительный текст для конфигурации.</td></tr><tr><td>Основной URL</td><td>Текст</td><td>Корневой URL. - Должен быть действительным URL. Либо URL основного веб-приложения, включая внутреннее имя сети (например, commmunities.cyclos.org/network1), либо «собственный» домен, разрешаемый на IP-адрес домена основного веб-приложения (например, http://www.mydomain.org, указывающий на communities.cyclos.org).
- Не должно существовать 2 конфигураций с одинаковой комбинацией корневого URL.
- Редактируется только глобальными администраторами.

</td></tr><tr><td>URL путь</td><td>Текст</td><td>Путь от корневого URL для区分ния этой конфигурации от других в той же сети. Например, если корневой путь глобальной конфигурации по умолчанию - http://www.server.org, а внутреннее имя сети - 'England', то путь 'London' будет соответствовать запросам к http://www.server.org/england/london. - Не может содержать: Может содержать только буквы, цифры, точки, дефисы или знаки плюс
- Максимум 50 символов.
- Следующие зарезервированные слова нельзя использовать как имя пути: cyclos, js, images, content, web-rpc, java-rpc
- Нет опции 'путь' в конфигурации сети по умолчанию или Глобальной конфигурации по умолчанию.

</td></tr><tr><td>Используется группами</td><td>Ссылки</td><td>Показывает группы, currently использующие эту конфигурацию, со ссылками на страницу сведений - Пользователи, которые не вошли в систему (гости), обращающиеся с Корневым URL или Путем (см. выше), получат текущую конфигурацию
- Вошедшие пользователи могут получить доступ только к конфигурациям, в которых указана их группа.
- Нет опции 'Используется группами' в Глобальной конфигурации по умолчанию.

</td></tr><tr><td colspan="3" style="background-color: #ffffcc;">**Данные пользователя**</td></tr><tr><td>Поля профиля с контролем конфиденциальности</td><td>Множественный выбор</td><td>Выбранные поля будут включены в списки контроля конфиденциальности (см.: Конфигурация системы - Конфигурация пользователя - Списки контроля конфиденциальности)</td></tr><tr><td>Требовать e-mail</td><td>Логический</td><td>Определяет, требуется ли электронная почта для пользователей с этой конфигурацией.</td></tr><tr><td>Уникальный e-mail</td><td>Логический</td><td>Определяет, должен ли e-mail быть уникальным. - Появляется только в конфигурациях верхнего уровня (глобальная, сетевая по умолчанию)
- **Примечание** Отмена уникальности e-mail effectively отключает e-mail как метод идентификации для доступа или выполнения/получения платежей в этой конфигурации и ее受影响ных дочерних конфигурациях. Пожалуйста, действуйте осторожно.

</td></tr><tr><td>Проверять e-mail при</td><td>Множественный выбор</td><td>Определяет, когда e-mail должен быть подтвержден пользователем - видимо только когда выбран "Требовать e-mail"
- Доступные опции: 
    - Публичная регистрация
    - Регистрация администраторами
    - Регистрация брокерами
    - Регистрация участником
    - Регистрация оператора участником
    - Изменение email самим пользователем
    - Изменение email администратором
    - Изменение email брокером
    - Импортированные пользователи

</td></tr><tr><td>Настройка конфиденциальности email по умолчанию</td><td>Одиночный выбор</td><td>Когда пользователь регистрируется или изменяет свой профиль, он может определить, скрывать или показывать свой email для других. Здесь администратор может выбрать значение по умолчанию для этой настройки. Как правило, для бизнесов это значение будет видимым, а для потребителей - скрытым. Опции: - Приватный (Скрыт для других пользователей)
- Видим для других пользователей

</td></tr><tr><td>Требовать изображение профиля</td><td>Логический</td><td>Когда выбрано, пользователь должен загрузить изображение профиля при регистрации.</td></tr><tr><td>Изображение по умолчанию для новых зарегистрированных пользователей</td><td>Изображение</td><td>Когда пользователи регистрируются без загрузки изображения профиля, показывается изображение по умолчанию для всей системы. С помощью этой настройки можно иметь настроенные изображения профиля по умолчанию для каждой конфигурации/группы.</td></tr><tr><td>Генерируемое имя для входа</td><td>Логический</td><td>Определяет, будут ли новые пользователи с этой конфигурацией иметь автоматически сгенерированные имена пользователей (когда отмечено) или им нужно будет предоставить имя пользователя вручную (когда не отмечено). Когда имя пользователя генерируется автоматически, длина будет максимальной, установленной в поле "Длина генерируемого имени для входа". Имя пользователя будет целым числом, когда будет достигнуто максимальное количество цифр, будет добавлена еще одна цифра.</td></tr><tr><td>Длина генерируемого имени для входа</td><td>Целое число</td><td>Длина генерируемых имен пользователей. - Видимо только когда отмечен checkbox "Генерируемое имя для входа".

</td></tr><tr><td>Регулярное выражение для имени для входа</td><td>Текст</td><td>Определяет регулярную маску, используемую для проверки введенных вручную имен пользователей. - Видимо только когда checkbox "генерируемое имя для входа" не отмечен (имя пользователя вводится вручную).
- Использует стандартные регулярные выражения Java http://docs.oracle.com/javase/7/docs/api/java/util/regex/Pattern.html
- Если используются веб-сервисы, пожалуйста, не разрешайте использование двоеточия ":", потому что оно используется для разделения имени пользователя и пароля. Так что не добавляйте "\\p" или "\\:".

</td></tr><tr><td>Длина имени пользователя</td><td>Диапазон целых чисел</td><td>Определяет минимальное и максимальное количество символов для имен пользователей. - Видимо только когда checkbox "Генерируемое имя для входа" не отмечен.

</td></tr><tr><td>Индивидуальная директория документов</td><td>Одиночный выбор</td><td>Конфигурация менеджера контента, в свойствах cyclos</td></tr></tbody></table>

## Каналы (Вкладка)

Каналы описаны на выделенной [вики-странице](https://wiki.coopteam.ru/Channels).