=== Inomarker ===
Contributors: inomarker_team
Tags: иностранный агент, экстремист, террорист, маркировка, СМИ
Requires at least: 5.5
Tested up to: 6.9
Requires PHP: 7.4
Stable tag: 1.5.3
License: GPLv2 or later
License URI: https://www.gnu.org/licenses/gpl-2.0.html

Автоматически помечает упоминания иностранных агентов, террористов и экстремистов в вашем тексте, помогая вам соблюдать правила маркировки.

== Description ==

Этот плагин является официальным коннектором для сервиса Inomarker.ru. Он предназначен для помощи администраторам веб-сайтов в автоматизации маркировки конкретных лиц и организаций, требуемой законодательством Российской Федерации.

Действующее законодательство требует обязательной маркировки упоминаний лиц и организаций, включенных в реестры иностранных агентов, террористов и экстремистов. Ручная проверка тысяч имен отнимает много времени и может привести к человеческим ошибкам.

Плагин Inomarker упрощает этот процесс.

Он подключается к вашей учетной записи Inomarker, ежедневно загружает обновленную базу данных и автоматически сканирует ваши статьи на стороне сервера, прежде чем они будут показаны пользователю.

Ключевые функции:

- Автоматическая маркировка: Плагин автоматически обнаруживает и помечает упоминания на вашем сайте на основе загруженной базы данных.
- Три реестра в одном: работает со списками иностранных агентов, террористов и экстремистов.
- Постоянные исключения: выбранные исключения хранятся отдельно от статистики и не удаляются при ее очистке.
- Безопасная маркировка: использует DOM-анализатор для изменения только текстового содержимого, не нарушая HTML-макет, ссылки или короткие коды.
- Два режима маркировки:
    1. Заголовок: Иван Иванов (лицо, выполняющее функции иностранного агента).
    2. Сноски (*): Иван Иванов* с автоматически сгенерированным блоком сносок в конце статьи.

Этот плагин является инструментом, предназначенным для оказания помощи администраторам веб-сайтов в соблюдении требований к маркировке. Хотя Inomarker стремится поддерживать базу данных в актуальном состоянии, этот плагин не гарантирует 100% соблюдения законодательства или абсолютной защиты от штрафов.

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

Для этого плагина требуется активная подписка на "Виджет" на веб-сайте https://inomarker.ru .

== External Service ==

Для правильной работы этого плагина требуется сторонний сервис Inomarker.ru. Плагин выступает в качестве соединителя с этим сервисом для получения и обновления базы данных иностранных агентов, террористов и экстремистов.

Подробная информация об услуге:
- Провайдер: Inomarker.ru
- URL сервиса: https://inomarker.ru

Передача данных:
Плагин отправляет HTTP-запросы к Inomarker API в следующих двух случаях:

1. Проверка лицензии:
    - Когда: Каждый раз, когда вы нажимаете "Сохранить изменения" в настройках плагина.
    - Конечная точка: `https://inomarker.ru/api/v1/plugin/validate`
    - Отправленные данные: ваш "Ключ API" (указанный в настройках) и "Доменное имя" вашего веб-сайта.
    - Цель: Убедиться, что ваша подписка активна и соответствует домену, на котором установлен плагин.

2. Синхронизация базы данных:
    - Когда: Автоматически раз в день (через WP-Cron) или после активации плагина.
    - Конечная точка: `https://inomarker.ru/api/v1/plugin/regex-data`
    - Отправленные данные: Ваш `Ключ API`.
    - Цель: Загрузить последний список лиц и организаций (сохраненный локально как "inomarker-data.json"), необходимый для текстовой маркировки.

== Terms and Privacy ==

Используя этот плагин, вы соглашаетесь с условиями предоставления услуг Inomarker.ru .
- Условия предоставления услуг https://inomarker.ru/terms-of-use
- Политика конфиденциальности https://inomarker.ru/privacy-policy

== Installation ==

Для подключения плагина требуется активная подписка на продукт Widget в сервисе. Inomarker.ru .

**1. Установка через админ-панель WordPress:**

1. Перейдите в раздел "Плагины" -> "Добавить новый".
2. Введите "Inomarker" в поле поиска.
3. Нажмите "Установить", а затем "Активировать".

**2. Установка вручную (через ZIP-архив):**

1. Загрузите ZIP-архив плагина со страницы репозитория.
2. Перейдите в раздел "Плагины" -> "Добавить новый" -> "Загрузить плагин".
3. Выберите загруженный ZIP-архив и нажмите "Установить".
4. Активируйте плагин.

**3. После активации (обязательный шаг):**

1. Перейдите в "Настройки" -> "Inomarker" в своей админ-панели.
2. Скопируйте свой API-ключ виджета из личного кабинета на https://inomarker.ru/widgets .
3. Вставьте ключ в поле API-ключ виджета и нажмите Сохранить изменения.
4. Плагин автоматически свяжется с сервером Inomarker и подтвердит ваш ключ и домен.
5. Если вы видите статус "АКТИВЕН", вы можете включить плагин, используя переключатель "Статус плагина".
6. Выберите "Стиль разметки" (по умолчанию рекомендуется "В текстовом виде").
7. Готово! Плагин запустит фоновую загрузку данных и пометит ваши статьи.

== Frequently Asked Questions ==

= Замедлит ли этот плагин работу моего веб-сайта? =
Нет. Плагин разработан с учетом высокой производительности.
1. ** Загрузка данных:** Выполняется в фоновом режиме (WP-Cron) один раз в день, не влияя на скорость загрузки для пользователей.
2. **Пометка:** Выполняется на стороне сервера (PHP), а не в браузере (JS). Мы используем `DOMDocument` и `preg_replace_callback' для максимально быстрой обработки. Это намного быстрее, чем у JS-виджета.

= Что произойдет, если истечет срок действия моей подписки на Inomarker? =
Плагин автоматически обнаружит это во время ежедневной синхронизации. Оно:
1. **Отключает ** маркировку на сайте (переключает "inomarker_enabled` на `false").
2. ** Покажет вам большое уведомление в админ-панели о том, что срок действия подписки истек и пометка больше не работает.
3. ** Заблокирует ** возможность включения плагина до тех пор, пока вы не продлите подписку.

= Обязательно ли использовать стиль "сносок"? =
Нет. Самый безопасный и рекомендуемый способ - обозначить это "В тексте" (встроенно). Однако, по мнению медиа-юристов (например, из Центра защиты прав СМИ), использование сносок "*" также является приемлемой практикой. Мы предоставляем вам выбор.

= Почему нижний колонтитул для иностранных агентов (*) такой ОГРОМНЫЙ? =
Это не ошибка дизайна. Это ** прямое требование закона**. Согласно приказу Роскомнадзора № 124, шрифт для обозначения иностранного агента должен быть ** в два раза (2x) крупнее ** основного шрифта вашего сайта. Наш плагин автоматически применяет этот стиль, чтобы обеспечить соблюдение вами законодательства и защитить вас от штрафов.

= Будет ли плагин помечать текст в заголовках? =
Нет. Мы специально исключили заголовки (`<h1>`, `<h2>`, `<h3>`), ссылки (`<a>`), а также "<script>" и "<style>" из обработки, чтобы не нарушать ваш макет и ПОИСКОВАЯ оптимизация.

= Где хранятся данные? =
Плагин загружает файл `inomarker-data.json` и безопасно сохраняет его в папке `wp-content/uploads/`.
Статистика хранится в таблице `wp_inomarker_stats`, а постоянные исключения — независимо в `wp_inomarker_exclusions`. Очистка статистики не удаляет исключения.

1. Страница настроек: Общий вид страницы "Inomarker" в панели администратора WordPress.
2. Статус "Активен": Карточка статуса с активной, подтвержденной подпиской.
3. Статус ошибки: Пример ошибки при вводе неверного ключа или несоответствии домена.
4. Пример пометки "Встроенный" (в тексте): Как выглядит пометка (в круглых скобках) в реальной статье.
5. Пример пометки "Сноски" (*): Как выглядит пометка (звездочками) в статье.
6. Заключительный блок сносок:** Демонстрация юридически корректного блока сносок в конце статьи с разными размерами шрифта.
7. Глобальное уведомление: Как выглядит предупреждение в панели администратора, если срок действия подписки истек.

== Upgrade Notice ==

= 1.5.3 =
Статистика обновляется сразу после добавления или удаления маркируемых сущностей в статье.

= 1.5.2 =
Сохраненные исключения автоматически переносятся в отдельную таблицу и больше не зависят от срока хранения статистики.

== Changelog ==

= 1.5.3 =
* Исправлена синхронизация статистики после изменения найденных сущностей в статье.
* Суточный браузерный throttle теперь учитывает состояние найденных сущностей, а не только время последней отправки.

= 1.5.2 =
* Исключения вынесены в отдельную таблицу и больше не удаляются при очистке статистики.
* Добавлена одноразовая автоматическая миграция ранее сохранённых исключений.

= 1.5.1 =
* Добавлена поддержка кириллицы в url адресе

= 1.5.0 =
* Добавлена настройка "Маркировать через X дней после публикации" для отложенной маркировки статей.
* Статистика страниц нормализуется по каноническому URL без GET-параметров, а накопленные дубли автоматически схлопываются.
* Синхронизация статистики теперь выполняется даже при отсутствии найденных упоминаний: пустые страницы удаляются из статистики, а для неизменных страниц добавлен суточный state-cache.

= 1.4.2 =
* Исправлена обработка контента с шорткодами: маркировка выполняется после их штатного отрабатывания в WordPress.
* Обновлён ключ кэша маркировки: добавлены schema-метка и hash контента для корректной инвалидации.

= 1.4.1 =
* Актуализирована версия плагина.
* Маркировка теперь применяется в ссылках и заголовках (`h1`, `h2`, `h3`).

= 1.4.0 =
* Добавлена защита API статистики: подписанный токен, валидация URL/хоста и ограничение частоты запросов.
* Сбор статистики переведен на атомарный upsert для снижения нагрузки на базу данных.
* Добавлена ежемесячная очистка статистики старше 31 дня (WP-Cron).
* Добавлены индексы таблицы статистики для ускорения фильтрации и сортировки в админке.
* Исправлена стратегия кэширования маркировки: ключ учитывает hash URL и версию кэша.
* Добавлена настройка включения/отключения маркировки по короткой регулярке ("Возможно").

= 1.3.0 =

* Добавлена поддержка автоматических обновлений

= 1.2.1 =

* Обновлено описание readme для соответствия рекомендациям репозитория.

= 1.2.0 =
* Добавлена страница в панели с выводом всех ссылок, где выполняется автоматическое проставление меток + возможность исключить проставление меток определенного значения на выбранной странице

= 1.0.0 =
* Добавлена страница настроек в главном меню Inomarker.
* Реализована мгновенная проверка API-ключа и домена при сохранении.
* Добавлен фоновый процесс (WP-Cron) для ежедневной синхронизации статуса подписки и загрузки `данных".json".
* Основной механизм присвоения меток реализован на стороне сервера с использованием `DOMDocument` и `preg_replace_callback'.
* Добавлена защита от двойного присвоения меток (проверка на `*` или `(` после сопоставления).
* Добавлены два режима разметки: "В тексте" (inline) и "Сноски" (footnote).
* Плагин автоматически помечает публикации, страницы и выдержки (на главной странице, в архивах).
* Добавлено глобальное уведомление в админ-панели о просроченных подписках.
