Skip to main content

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

Sign3x — компонент для MODX 3, реализующий хранение, управление и подписание PDF-документов простой электронной подписью (ПЭП) в соответствии с Федеральным законом № 63-ФЗ «Об электронной подписи». Подпись фиксирует ФИО подписанта, должность, дату/время и уникальный SHA-256 хэш-ключ.

1. Требования

Компонент Версия Примечание
MODX Revolution 3.x Обязательно
PHP 8.1 или выше Обязательно
MySQL / MariaDB любая актуальная Обязательно
pdoTools любая актуальная Необязательно — нужно только при использовании Fenom-шаблонов (&fenom=`1`)
FPDI + TCPDF Входят в пакет — нужны только для визуального штампа в PDF

2. Установка

  1. Установите пакет через MODX Менеджер пакетов (или скопируйте файлы вручную).
  2. После установки в базе данных автоматически создаются две таблицы:
    • sign3x_documents — документы
    • sign3x_profiles — профили подписантов
  3. Перейдите в Системные настройки → Пространство имён: sign3x и настройте параметры (см. раздел Системные настройки).
  4. Обязательно создайте профили подписантов во вкладке «Сотрудники» для всех пользователей, которые должны иметь право подписи.

Права доступа. Панель управления Sign3x доступна только пользователям, прошедшим авторизацию в менеджере MODX (mgr). Право подписи дополнительно ограничивается группами пользователей через настройку sign3x_allowed_groups.

3. Системные настройки

Все настройки находятся в пространстве имён sign3x. Откройте: Администрирование → Системные настройки → фильтр «sign3x».

Основные

Ключ настройки По умолчанию Описание
sign3x_allowed_groups (пусто) ID групп пользователей с правом подписи. Несколько значений через запятую: 1,5,12. Sudo-пользователи проверку группы не проходят — им достаточно иметь профиль подписанта.
sign3x_secret_salt (пусто) Секретная соль для формирования SHA-256 хэш-ключа. Задайте произвольную сложную строку. Никогда не меняйте после первого подписания — это делает существующие хэш-ключи невалидными.
sign3x_upload_dir assets/sign3x/uploads/ Директория загрузки PDF-файлов относительно корня сайта. Должна быть доступна для записи веб-сервером.
sign3x_filename_mode translit Формирование имени файла: translit — транслитерация, original — исходное имя, unique — уникальный UUID.
sign3x_delete_files Да Удалять физические PDF-файлы при удалении документа из системы.
sign3x_frontend_css assets/components/sign3x/css/frontend.css URL встроенных фронтенд-стилей. Если поле пустое — стили не подключаются.

Визуальный PDF-штамп

Ключ настройки По умолчанию Описание
sign3x_pdf_stamp Нет Включить добавление визуального штампа в PDF при подписании.
sign3x_pdf_stamp_mode overlay Режим: overlay — поверх последней страницы, newpage — отдельная страница «Лист ЭЦП».
sign3x_stamp_title ЭЛЕКТРОННАЯ ПОДПИСЬ (ПЭП) Заголовок штампа (оба режима).
sign3x_stamp_page_title ЛИСТ ЭЛЕКТРОННОЙ ПОДПИСИ Заголовок страницы подписи (newpage).
sign3x_stamp_hash_label Программный ключ (SHA-256): Подпись над хэш-ключом (newpage).
sign3x_stamp_law_text Текст о соответствии ФЗ № 63-ФЗ Текст о соответствии законодательству внутри рамки (newpage).
sign3x_stamp_verify_text Текст о верификации Текст под рамкой (newpage).
sign3x_stamp_footer_text Сформировано автоматически системой Sign3x Нижний колонтитул страницы (newpage).

4. Администрирование

Панель управления Sign3x открывается через меню: Дополнения → Sign3x. Интерфейс состоит из двух вкладок.

4.1. Вкладка «Сотрудники»

Здесь управляются профили подписантов — записи, связывающие пользователя MODX с его ФИО и должностью.

Поле Описание
Пользователь MODX Привязанный аккаунт из пользователей менеджера
ФИО Полное имя подписанта (фиксируется в подписи)
Должность Должность подписанта (фиксируется в подписи)

Важно: Пользователь должен одновременно иметь профиль подписанта и входить в одну из групп, указанных в sign3x_allowed_groups. При отсутствии хотя бы одного условия кнопка «Подписать» не отображается. Исключение — пользователи с флагом sudo: для них проверка членства в группе пропускается.

4.2. Вкладка «Документы»

Таблица всех загруженных документов с поиском, пагинацией и цветовой индикацией.

  • Серая строка — черновик (status = 0, не подписан)
  • Зелёная строка — подписан (status = 1)

Поиск выполняется по: названию документа, ФИО подписанта, хэш-ключу.

Кнопка Описание Условие
Загрузить документ Загружает PDF-файл и создаёт документ со статусом «Черновик» Всегда доступна
Подписать Открывает диалог подтверждения подписи Только черновики + наличие права подписи у текущего пользователя
Удалить Удаляет документ из БД (и файл, если включена настройка) Всегда доступна; требует подтверждения

4.3. Процесс подписания

  1. Нажмите кнопку «Подписать» рядом с нужным документом.
  2. В модальном окне отобразится:
    • Название документа и ссылка для предпросмотра PDF
    • Ваши ФИО, должность и дата/время подписания
    • Предупреждение о необратимости действия
  3. Нажмите «Подтвердить». Система:
    • Фиксирует ФИО, должность и точное время подписания в базе данных
    • Генерирует уникальный SHA-256 хэш-ключ
    • Устанавливает статус документа = «Подписан»
    • Если включён PDF-штамп — добавляет визуальный штамп в файл

Подписание необратимо. Подписанный документ нельзя перевести обратно в статус «Черновик» средствами интерфейса.

5. Сниппет Sign3x

Сниппет выводит подписанные документы (status = 1) на страницах сайта с пиктограммой электронной подписи и информацией о подписанте.

5.1. Параметры сниппета

Параметр Тип По умолчанию Описание
&id int не задан ID конкретного документа. Если задан — выводит только этот документ.
&limit int 20 Максимальное количество документов. Сортировка по дате подписания (новые первые).
&tpl string sign3x.doc.default Шаблон для одного документа: имя чанка или inline Fenom (@INLINE {$name}, требует &fenom=`1`).
&fenom 0 / 1 0 Обрабатывать шаблон через Fenom (pdoTools). При 1 используется синтаксис {$placeholder}.

Плейсхолдеры в шаблонах

Плейсхолдер Описание
id ID документа
name Название документа (HTML-экранировано)
file_url Полный URL до PDF-файла
file_path Путь к файлу относительно корня сайта
signer_fio ФИО подписанта
signer_position Должность подписанта
signed_at Дата и время подписания (дд.мм.гггг чч:мм:сс)
hash_key SHA-256 хэш-ключ подписи
aria_label Полный ARIA-текст для пиктограммы (доступность)
assets_url URL директории assets/ — для ссылок на иконки SVG

5.2. Примеры вызова

<!-- Вывод последних 20 подписанных документов, дефолтный шаблон -->
[[!Sign3x]]

<!-- С лимитом -->
[[!Sign3x? &limit=`5`]]

<!-- Один конкретный документ -->
[[!Sign3x? &id=`3`]]

<!-- Свой чанк (MODX-синтаксис) -->
[[!Sign3x? &tpl=`sign3x.doc.bs5`]]

<!-- Свой чанк (Fenom-синтаксис, требует pdoTools) -->
[[!Sign3x? &tpl=`sign3x.doc.bs5.fenom` &fenom=`1`]]

<!-- Inline Fenom-шаблон -->
[[!Sign3x? &tpl=`@INLINE <a href="{$file_url}">{$name}</a>` &fenom=`1`]]

6. Готовые чанки

Компонент поставляется с шестью готовыми чанками-шаблонами:

Чанк CSS-фреймворк Синтаксис Примечание
sign3x.doc.default Встроенный (frontend.css) MODX [[+]] Чанк по умолчанию
sign3x.doc.default.fenom Встроенный (frontend.css) Fenom {$} Требует pdoTools
sign3x.doc.bs5 Bootstrap 5 MODX [[+]]
sign3x.doc.bs5.fenom Bootstrap 5 Fenom {$} Требует pdoTools
sign3x.doc.uikit3 UIKit 3 MODX [[+]]
sign3x.doc.uikit3.fenom UIKit 3 Fenom {$} Требует pdoTools

Все чанки доступны для редактирования через Элементы → Чанки. Содержат: SVG-иконку подписи, всплывающую подсказку с ФИО/должностью/датой/хэшем, ссылку на PDF и ARIA-атрибуты для доступности.

7. Fenom-шаблоны

Fenom — движок шаблонов с синтаксисом {$var} и условиями {if}...{/if}, предоставляемый компонентом pdoTools. Не зависит от настройки MODX «Разрешить Fenom на страницах».

Когда использовать Fenom-чанки: когда нужна логика в шаблоне — условный вывод полей, циклы. Например, показывать должность только если она задана.

Сравнение синтаксиса

Задача MODX-синтаксис Fenom-синтаксис
Вывод переменной [[+name]] {$name}
Условный блок {if $signer_position}...{/if}
Экранирование Выполнено в PHP Выполнено в PHP

Пример Fenom-чанка с условием:

<div class="sign3x-document">
  <span class="sign3x-stamp" aria-label="{$aria_label}">
    <img src="{$assets_url}components/sign3x/img/sign3x.svg" width="32" height="32" alt="">
  </span>
  <a href="{$file_url}">{$name}</a>
  {if $signer_position}
    <small>{$signer_position}</small>
  {/if}
</div>

Вызов сниппета с Fenom-чанком:

[[!Sign3x? &tpl=`sign3x.doc.default.fenom` &fenom=`1`]]

8. CSS и стили

Встроенные стили подключаются автоматически, если настройка sign3x_frontend_css не пуста. Чтобы отключить встроенные стили и использовать свой CSS — очистите настройку sign3x_frontend_css.

Ключевые CSS-классы

Класс Описание
.sign3x-list Обёртка при дефолтном шаблоне: вертикальный flex-список с отступами
.sign3x-document Один документ: flex-строка (иконка + ссылка)
.sign3x-stamp Элемент-триггер иконки с всплывающей подсказкой
.sign3x-stamp-icon SVG-иконка электронной подписи
.sign3x-stamp-tooltip Всплывающая подсказка с данными подписи
.sign3x-stamp-key Хэш-ключ (моноширинный шрифт, авто-перенос)
.sign3x-doc-link Ссылка на PDF-документ

9. Визуальный штамп в PDF

При включённой настройке sign3x_pdf_stamp после подписания в PDF-файл добавляется визуальный штамп. Библиотеки FPDI и TCPDF входят в состав пакета.

Режимы штампа

Режим Описание
overlay Синий прямоугольный штамп поверх последней страницы документа (правый нижний угол)
newpage Отдельная страница «Лист электронной подписи» добавляется в конец документа

При успешном создании штампа оригинальный файл заменяется подписанной версией, путь обновляется в базе данных. При ошибке документ сохраняется без штампа — ошибка логируется в журнал MODX.

Все тексты в штампе настраиваются через системные настройки группы sign3x_stamp_*.

10. Верификация подписи

Каждая подпись сопровождается уникальным SHA-256 хэш-ключом. Хэш формируется из следующих данных:

SHA-256(id|name|file_path|fio|position|signed_at|salt)
Компонент Значение
id ID документа в базе данных
name Название документа
file_path Путь к файлу на момент подписания
fio ФИО подписанта из профиля
position Должность подписанта из профиля
signed_at Точная дата/время подписания (MySQL datetime)
salt Секретная соль из настройки sign3x_secret_salt

Хэш-ключ отображается:

  • В таблице документов (вкладка «Документы»)
  • В tooltip-подсказке на сайте при наведении на иконку подписи
  • В PDF-штампе (если включён)

Не изменяйте sign3x_secret_salt после первого подписания. Изменение соли сделает невозможным воспроизведение хэш-ключей и фактически аннулирует проверяемость всех существующих подписей.