ЧТМ:Расширения/BatchTools: различия между версиями
| (не показано 6 промежуточных версий 2 участников) | |||
| Строка 1: | Строка 1: | ||
{{Extension | {{Extension | ||
|Имя = BatchTools | |Имя = BatchTools | ||
| Фон = non_vocal_instrumentalist | |Фон = non_vocal_instrumentalist | ||
|name = BatchTools | |name = BatchTools | ||
|status = beta | |status = beta | ||
|type = specialpage | |type = specialpage | ||
|author = | |author = Diman Russkov | ||
|description = Предоставляет | |description = Предоставляет графический интерфейс для массовых операций со страницами, файлами и участниками. | ||
|version = '''[[/1.45/0.9|0.9]]''' (текущая) | |version = '''[[/1.45/0.9|0.9]]''' (текущая) | ||
|requires = MediaWiki 1.45.0+ | |requires = MediaWiki 1.45.0+ | ||
|db_changes = Нет | |||
}} | }} | ||
| Строка 23: | Строка 24: | ||
# Скачайте файлы расширения и поместите их в директорию <code>extensions/BatchTools</code> вашего сервера. | # Скачайте файлы расширения и поместите их в директорию <code>extensions/BatchTools</code> вашего сервера. | ||
# Добавьте следующую строку в конец файла <code>LocalSettings.php</code>: | # Добавьте следующую строку в конец файла <code>LocalSettings.php</code>: | ||
# <syntaxhighlight lang="php">wfLoadExtension( 'BatchTools' );</syntaxhighlight> | # <syntaxhighlight lang="php" line>wfLoadExtension( 'BatchTools' );</syntaxhighlight> | ||
# Перейдите на страницу <code>Special:Version</code> вашей вики, чтобы убедиться, что расширение успешно установлено. | # Перейдите на страницу <code>Special:Version</code> вашей вики, чтобы убедиться, что расширение успешно установлено. | ||
| Строка 77: | Строка 78: | ||
Чтобы выдать права на '''все''' массовые инструменты стандартной группе администраторов (<code>sysop</code>), добавьте следующий код в <code>LocalSettings.php</code>: | Чтобы выдать права на '''все''' массовые инструменты стандартной группе администраторов (<code>sysop</code>), добавьте следующий код в <code>LocalSettings.php</code>: | ||
<syntaxhighlight lang="php"> | <syntaxhighlight lang="php" line> | ||
$wgGroupPermissions['sysop']['deletebatch'] = true; | $wgGroupPermissions['sysop']['deletebatch'] = true; | ||
$wgGroupPermissions['sysop']['undeletebatch'] = true; | $wgGroupPermissions['sysop']['undeletebatch'] = true; | ||
| Строка 106: | Строка 107: | ||
Содержимое рабочей области сохраняется в сессии вашего браузера. Если вы случайно закроете вкладку, обновите страницу или перейдёте в другой инструмент, ваша таблица и введённые в неё данные не пропадут. Для очистки буфера предусмотрена кнопка «Очистить таблицу». | Содержимое рабочей области сохраняется в сессии вашего браузера. Если вы случайно закроете вкладку, обновите страницу или перейдёте в другой инструмент, ваша таблица и введённые в неё данные не пропадут. Для очистки буфера предусмотрена кнопка «Очистить таблицу». | ||
== Руководство по инструментам | == Руководство по инструментам == | ||
=== Удаление (Delete) === | === Работа со страницами === | ||
==== Удаление (Delete) ==== | |||
Инструмент для массового удаления страниц. | Инструмент для массового удаления страниц. | ||
* '''Формат ввода:''' Список названий страниц (по одной на строке). | * '''Формат ввода:''' Список названий страниц (по одной на строке). | ||
* '''Особенности:''' При добавлении расширение проверит, существуют ли эти страницы. Если страница уже удалена или имеет некорректное имя, она будет отмечена красным предупреждением и заблокирована для выбора. Операция заносится в журнал удалений с указанной вами причиной. | * '''Особенности:''' При добавлении расширение проверит, существуют ли эти страницы. Если страница уже удалена или имеет некорректное имя, она будет отмечена красным предупреждением и заблокирована для выбора. Операция заносится в журнал удалений с указанной вами причиной. | ||
=== Восстановление (Restore) === | ==== Восстановление (Restore) ==== | ||
Инструмент для массового восстановления удалённых страниц. | Инструмент для массового восстановления удалённых страниц. | ||
* '''Формат ввода:''' Список удалённых страниц (по одной на строке). | * '''Формат ввода:''' Список удалённых страниц (по одной на строке). | ||
* '''Особенности:''' Расширение проверяет техническую корректность названия страницы. При выполнении восстанавливаются '''все''' удалённые правки и версии файлов, привязанные к данному названию. Если страница не была удалена (или у неё нет удалённых ревизий), система сообщит об этом в отчёте после выполнения. | * '''Особенности:''' Расширение проверяет техническую корректность названия страницы. При выполнении восстанавливаются '''все''' удалённые правки и версии файлов, привязанные к данному названию. Если страница не была удалена (или у неё нет удалённых ревизий), система сообщит об этом в отчёте после выполнения. | ||
=== Защита (Protect) === | ==== Защита (Protect) ==== | ||
Инструмент для массового изменения уровня защиты страниц. | Инструмент для массового изменения уровня защиты страниц. | ||
* '''Формат ввода:''' Список названий страниц (по одной на строке). | * '''Формат ввода:''' Список названий страниц (по одной на строке). | ||
| Строка 126: | Строка 129: | ||
** В таблице-буфере можно задать уникальный уровень или срок защиты для каждой отдельной страницы перед выполнением. | ** В таблице-буфере можно задать уникальный уровень или срок защиты для каждой отдельной страницы перед выполнением. | ||
=== Переименование (Move) === | ==== Переименование (Move) ==== | ||
Инструмент для массового переименования страниц. | Инструмент для массового переименования страниц. | ||
* '''Формат ввода:''' Записи в формате <code>Старое название|Новое название</code> (по одной на строке). Если указать просто старое название (без <code>|</code>), в качестве нового будет подставлено оно же (это полезно, чтобы затем вручную прописать новые имена прямо в таблице). | * '''Формат ввода:''' Записи в формате <code>Старое название|Новое название</code> (по одной на строке). Если указать просто старое название (без <code>|</code>), в качестве нового будет подставлено оно же (это полезно, чтобы затем вручную прописать новые имена прямо в таблице). | ||
| Строка 136: | Строка 139: | ||
** Защита от дурака: система выдаст ошибку, если старое и новое имя совпадают, если новое имя некорректно, или если целевая страница уже существует (API MediaWiki безопасно отклонит такое действие). | ** Защита от дурака: система выдаст ошибку, если старое и новое имя совпадают, если новое имя некорректно, или если целевая страница уже существует (API MediaWiki безопасно отклонит такое действие). | ||
== | === Работа с участниками === | ||
=== Блокировка (Block) === | ==== Блокировка (Block) ==== | ||
Один из самых продвинутых инструментов расширения, позволяющий настраивать гибкие ограничения сразу для списка пользователей или IP-адресов. | Один из самых продвинутых инструментов расширения, позволяющий настраивать гибкие ограничения сразу для списка пользователей или IP-адресов. | ||
* '''Формат ввода:''' Список имён участников или IP-адресов (по одному на строке). | * '''Формат ввода:''' Список имён участников или IP-адресов (по одному на строке). | ||
| Строка 148: | Строка 151: | ||
** Инструмент автоматически проверяет, существует ли пользователь (если это не IP). Несуществующие пользователи помечаются ошибкой и не блокируются. | ** Инструмент автоматически проверяет, существует ли пользователь (если это не IP). Несуществующие пользователи помечаются ошибкой и не блокируются. | ||
=== Разблокировка (Unblock) === | ==== Разблокировка (Unblock) ==== | ||
Простой инструмент для массового снятия блокировок. | Простой инструмент для массового снятия блокировок. | ||
* '''Формат ввода:''' Имя участника или IP-адрес (по одному на строке). | * '''Формат ввода:''' Имя участника или IP-адрес (по одному на строке). | ||
* '''Особенности:''' Снимает активную блокировку с указанием причины в журнале. Если участник не был заблокирован, операция будет безопасно пропущена. | * '''Особенности:''' Снимает активную блокировку с указанием причины в журнале. Если участник не был заблокирован, операция будет безопасно пропущена. | ||
=== Создание аккаунтов (Create Accounts) === | ==== Создание аккаунтов (Create Accounts) ==== | ||
Инструмент для массовой регистрации новых участников администратором (записи в журнале помечаются как созданные другим пользователем). | Инструмент для массовой регистрации новых участников администратором (записи в журнале помечаются как созданные другим пользователем). | ||
* '''Формат ввода:''' Записи в формате <code>Имя|Пароль|Email</code> (по одной на строке). Поля разделяются вертикальной чертой. Email указывать не обязательно. | * '''Формат ввода:''' Записи в формате <code>Имя|Пароль|Email</code> (по одной на строке). Поля разделяются вертикальной чертой. Email указывать не обязательно. | ||
| Строка 161: | Строка 164: | ||
** Создание происходит с использованием безопасного API <code>AuthManager</code>. | ** Создание происходит с использованием безопасного API <code>AuthManager</code>. | ||
== | === Создание контента === | ||
=== Создание страниц (Create Pages) === | ==== Создание страниц (Create Pages) ==== | ||
Инструмент для массовой генерации однотипных страниц на основе шаблона и переменных (полезно для создания сотен карточек товаров, городов, заготовок статей). | Инструмент для массовой генерации однотипных страниц на основе шаблона и переменных (полезно для создания сотен карточек товаров, городов, заготовок статей). | ||
* '''Формат ввода:''' Записи в формате <code>Название страницы|Переменная 1|Переменная 2|Переменная 3</code>. | * '''Формат ввода:''' Записи в формате <code>Название страницы|Переменная 1|Переменная 2|Переменная 3</code>. | ||
| Строка 171: | Строка 174: | ||
** '''Защита от перезаписи:''' По умолчанию инструмент игнорирует (выдаёт ошибку) страницы, которые уже существуют. Но если поставить галочку «Перезаписывать существующие», инструмент обновит текст существующих страниц (работает как обычная правка). | ** '''Защита от перезаписи:''' По умолчанию инструмент игнорирует (выдаёт ошибку) страницы, которые уже существуют. Но если поставить галочку «Перезаписывать существующие», инструмент обновит текст существующих страниц (работает как обычная правка). | ||
=== Загрузка файлов (Upload) === | ==== Загрузка файлов (Upload) ==== | ||
Единственный инструмент, который работает не через текстовое поле, а напрямую с файловой системой вашего компьютера. | Единственный инструмент, который работает не через текстовое поле, а напрямую с файловой системой вашего компьютера. | ||
* '''Формат выбора:''' Нажмите кнопку «Выбрать файлы» и выделите нужное количество изображений или документов в диалоговом окне операционной системы (можно выбирать сразу несколько файлов). | * '''Формат выбора:''' Нажмите кнопку «Выбрать файлы» и выделите нужное количество изображений или документов в диалоговом окне операционной системы (можно выбирать сразу несколько файлов). | ||
| Строка 183: | Строка 186: | ||
== Changelog == | == Changelog == | ||
{{Начало скрытого блока|Changelog}} | {{Начало скрытого блока|Changelog}} | ||
<syntaxhighlight lang=" | <syntaxhighlight lang="markdown" line># История изменений (BatchTools) | ||
Все заметные изменения в этом проекте будут документироваться в данном файле. | Все заметные изменения в этом проекте будут документироваться в данном файле. | ||
Формат основан на стандартах Keep a Changelog. | Формат основан на стандартах Keep a Changelog. | ||
## [0.9.0] — 2026-06-03 | |||
### Добавлено | |||
- **Новый инструмент «Массовая загрузка файлов»**: Позволяет одновременно выбирать и загружать несколько файлов на вики. | |||
- **Интерактивный интерфейс выбора файлов**: Разработан полностью реактивный клиентский JavaScript-интерфейс. С помощью `DataTransfer` API файлы добавляются в таблицу «на лету» с мгновенным предпросмотром размера и имени, без необходимости промежуточного сохранения тяжёлых файлов в PHP-сессии. | |||
- **Индивидуальная и массовая настройка файлов**: Инструмент поддерживает быстрое переименование файлов перед загрузкой, задание индивидуального текста/описания, а также быструю синхронизацию общего описания для всех файлов разом. | |||
- Опция игнорирования предупреждений (например, для перезаписи существующих дубликатов). | |||
- Новое системное право доступа `uploadbatch` и соответствующая вкладка в навигации. | |||
- Системное сообщение `action-batchtools` для корректного отображения названия группы прав в стандартных ошибках движка. | |||
### Изменено | |||
- **Улучшена обработка глобальной ошибки доступа**: В классе `SpecialBatchTools` исправлен выброс исключения `PermissionsError`. Теперь при отсутствии всех возможных прав выводится корректное, переведённое кастомное сообщение `batchtools-error-nopermissions` вместо системной ошибки, ссылающейся на право `deletebatch`. | |||
- **Локализация (ru)**: Алиас служебной страницы на русском языке изменён с `Пакетные_инструменты` на `Массовые_инструменты` для соответствия остальному переводу интерфейса. | |||
## [0.8.0] — 2026-05-25 | ## [0.8.0] — 2026-05-25 | ||
Текущая версия от 04:44, 3 июня 2026
| BatchTools | |
| Название | BatchTools |
|---|---|
| Тип | specialpage |
| Автор | Diman Russkov |
| Описание | Предоставляет графический интерфейс для массовых операций со страницами, файлами и участниками. |
| Версия | 0.9 (текущая) |
| Требования | MediaWiki 1.45.0+ |
| Изменения в БД | Нет |
Расширение BatchTools (Массовые инструменты) добавляет в MediaWiki служебную страницу Special:BatchTools, которая позволяет администраторам выполнять рутинные массовые операции через удобный графический интерфейс.
В отличие от многих скриптов или ботов, расширение предоставляет концепцию «Рабочей области» (Workspace) — промежуточной таблицы-буфера. Вы можете массово добавить список страниц или участников, применить к ним общие быстрые настройки (например, задать один срок блокировки для всех), затем точечно скорректировать параметры для отдельных строк и только после этого запустить процесс выполнения.
Системные требования
[править код]- MediaWiki: 1.45.0 или новее.
- PHP: Поддерживаемая версия для вашей версии MediaWiki.
- Обязательно наличие OOUI (встроено в современные версии MediaWiki по умолчанию).
Установка
[править код]- Скачайте файлы расширения и поместите их в директорию
extensions/BatchToolsвашего сервера. - Добавьте следующую строку в конец файла
LocalSettings.php: wfLoadExtension( 'BatchTools' );
- Перейдите на страницу
Special:Versionвашей вики, чтобы убедиться, что расширение успешно установлено.
Настройка прав доступа
[править код]По умолчанию само расширение не предоставляет доступ ни к одному из инструментов. Инструменты появляются на служебной странице динамически, только если у пользователя есть соответствующие права (permissions).
Расширение регистрирует 9 новых прав. Вы можете раздать их существующим группам (например, администраторам) или создать отдельную группу (например, `batch-admin`), используя файл LocalSettings.php.
Список доступных прав
[править код]| Право | Описание | Вкладка интерфейса |
|---|---|---|
deletebatch
|
Позволяет массово удалять список страниц. | Удаление |
undeletebatch
|
Позволяет массово восстанавливать удалённые страницы. | Восстановление |
protectbatch
|
Позволяет устанавливать или изменять уровни защиты сразу для множества страниц, включая каскадную защиту. | Защита |
movebatch
|
Позволяет массово переименовывать страницы (с возможностью создания редиректов и переноса подстраниц). | Переименование |
blockbatch
|
Позволяет массово блокировать учётные записи и IP-адреса (поддерживает как полные, так и частичные блокировки). | Блокировка |
unblockbatch
|
Позволяет массово снимать блокировки с участников и IP-адресов. | Разблокировка |
createaccountbatch
|
Позволяет администратору массово регистрировать новые учётные записи с заданными паролями и email-адресами. | Создание аккаунтов |
createpagebatch
|
Позволяет массово создавать новые страницы на основе единого шаблона текста и переменных. | Создание страниц |
uploadbatch
|
Позволяет загружать несколько файлов одновременно, задавая им новые имена и общие описания. | Загрузка |
Пример настройки в LocalSettings.php
[править код]Чтобы выдать права на все массовые инструменты стандартной группе администраторов (sysop), добавьте следующий код в LocalSettings.php:
$wgGroupPermissions['sysop']['deletebatch'] = true;
$wgGroupPermissions['sysop']['undeletebatch'] = true;
$wgGroupPermissions['sysop']['protectbatch'] = true;
$wgGroupPermissions['sysop']['movebatch'] = true;
$wgGroupPermissions['sysop']['blockbatch'] = true;
$wgGroupPermissions['sysop']['unblockbatch'] = true;
$wgGroupPermissions['sysop']['createaccountbatch'] = true;
$wgGroupPermissions['sysop']['createpagebatch'] = true;
$wgGroupPermissions['sysop']['uploadbatch'] = true;
Примечание: Даже если у пользователя есть право, например, deletebatch, система перед выполнением операции всё равно проверит стандартные права MediaWiki (может ли этот участник удалять конкретную страницу delete). Это гарантирует безопасность и соблюдение базовых ограничений вики.
Общий принцип работы (Рабочая область)
[править код]Одной из главных особенностей BatchTools является использование безопасной двухэтапной схемы работы, основанной на концепции «Рабочей области» (Workspace). Это защищает от случайных ошибок при массовых действиях.
Стандартный рабочий процесс для любой вкладки выглядит так:
- Блок добавления (Верхняя часть): Вы вставляете список страниц или участников (обычно по одному на строке) в большое текстовое поле. В некоторых инструментах здесь же можно указать параметры по умолчанию (например, срок блокировки или текст страницы).
- Синхронизация (Быстрые настройки): Нажатие кнопки «Применить настройки к таблице» применяет заданные вами общие параметры ко всем выбранным элементам в буфере.
- Таблица-буфер (Рабочая область): Добавленные элементы появляются в таблице ниже. На этом этапе никаких действий в вики ещё не произошло.
- Инструмент автоматически проверяет валидность данных (например, существует ли страница, которую вы хотите удалить). Невалидные строки зачёркиваются и исключаются из обработки.
- Вы можете снять галочки с отдельных строк, если передумали их обрабатывать.
- Вы можете изменить настройки для каждой конкретной строки прямо в таблице (например, переименовать одну из 100 страниц по другому правилу).
- Выполнение: Вы указываете общую причину (журналируемое действие) и нажимаете финальную кнопку выполнения.
Сохранение состояния (Session persistence): Содержимое рабочей области сохраняется в сессии вашего браузера. Если вы случайно закроете вкладку, обновите страницу или перейдёте в другой инструмент, ваша таблица и введённые в неё данные не пропадут. Для очистки буфера предусмотрена кнопка «Очистить таблицу».
Руководство по инструментам
[править код]Работа со страницами
[править код]Удаление (Delete)
[править код]Инструмент для массового удаления страниц.
- Формат ввода: Список названий страниц (по одной на строке).
- Особенности: При добавлении расширение проверит, существуют ли эти страницы. Если страница уже удалена или имеет некорректное имя, она будет отмечена красным предупреждением и заблокирована для выбора. Операция заносится в журнал удалений с указанной вами причиной.
Восстановление (Restore)
[править код]Инструмент для массового восстановления удалённых страниц.
- Формат ввода: Список удалённых страниц (по одной на строке).
- Особенности: Расширение проверяет техническую корректность названия страницы. При выполнении восстанавливаются все удалённые правки и версии файлов, привязанные к данному названию. Если страница не была удалена (или у неё нет удалённых ревизий), система сообщит об этом в отчёте после выполнения.
Защита (Protect)
[править код]Инструмент для массового изменения уровня защиты страниц.
- Формат ввода: Список названий страниц (по одной на строке).
- Быстрые настройки: Вы можете выбрать уровень защиты для действий «Правка» и «Переименование», а также задать срок окончания защиты. Доступные уровни (например, Только автоподтверждённые или Только администраторы) автоматически подгружаются из настроек вашей вики (
$wgRestrictionLevels). - Особенности:
- Поддерживается включение/выключение Каскадной защиты (Cascade protection).
- В таблице-буфере можно задать уникальный уровень или срок защиты для каждой отдельной страницы перед выполнением.
Переименование (Move)
[править код]Инструмент для массового переименования страниц.
- Формат ввода: Записи в формате
Старое название|Новое название(по одной на строке). Если указать просто старое название (без|), в качестве нового будет подставлено оно же (это полезно, чтобы затем вручную прописать новые имена прямо в таблице). - Быстрые настройки:
- Оставить перенаправление (Leave redirect): Да / Нет.
- Переименовать подстраницы (Move subpages): Да / Нет.
- Особенности:
- В рабочей таблице для каждой страницы есть отдельное текстовое поле «Новое название», что позволяет быстро редактировать имена на лету.
- Защита от дурака: система выдаст ошибку, если старое и новое имя совпадают, если новое имя некорректно, или если целевая страница уже существует (API MediaWiki безопасно отклонит такое действие).
Работа с участниками
[править код]Блокировка (Block)
[править код]Один из самых продвинутых инструментов расширения, позволяющий настраивать гибкие ограничения сразу для списка пользователей или IP-адресов.
- Формат ввода: Список имён участников или IP-адресов (по одному на строке).
- Быстрые настройки: Блок настроек разделён на две части, зависящие от выбранного типа блокировки («Во всём проекте» или «Частичная»).
- Глобальные опции: Запрет на создание учётных записей, отправку email, правку своей страницы обсуждения. Для IP можно включить автоблокировку и жёсткую блокировку (hardblock). Для бессрочных блокировок доступна опция скрытия имени участника (hideuser).
- Частичная блокировка: Позволяет заблокировать правки только на определённых страницах (названия через запятую) или в определённых пространствах имён (ID пространств через запятую). Дополнительно можно запретить конкретные действия: загрузку файлов, переименование, создание страниц или отправку благодарностей.
- Особенности:
- В таблице-буфере для каждой строки есть кнопка «Опции ▾». При нажатии на неё разворачивается детальная панель, где можно переопределить все настройки блокировки (включая страницы для частичной блокировки) индивидуально для каждого участника.
- Инструмент автоматически проверяет, существует ли пользователь (если это не IP). Несуществующие пользователи помечаются ошибкой и не блокируются.
Разблокировка (Unblock)
[править код]Простой инструмент для массового снятия блокировок.
- Формат ввода: Имя участника или IP-адрес (по одному на строке).
- Особенности: Снимает активную блокировку с указанием причины в журнале. Если участник не был заблокирован, операция будет безопасно пропущена.
Создание аккаунтов (Create Accounts)
[править код]Инструмент для массовой регистрации новых участников администратором (записи в журнале помечаются как созданные другим пользователем).
- Формат ввода: Записи в формате
Имя|Пароль|Email(по одной на строке). Поля разделяются вертикальной чертой. Email указывать не обязательно. - Быстрые настройки: Поле «Установить один пароль для всех». Если вы хотите сгенерировать аккаунты с одинаковым временным паролем (например, для студентов или сотрудников), введите его здесь и нажмите синхронизацию.
- Особенности:
- В таблице предусмотрена встроенная проверка (валидация). Если пароль для аккаунта остался пустым, поле подсветится красным, а кнопка выполнения будет заблокирована, чтобы предотвратить ошибки API.
- Создание происходит с использованием безопасного API
AuthManager.
Создание контента
[править код]Создание страниц (Create Pages)
[править код]Инструмент для массовой генерации однотипных страниц на основе шаблона и переменных (полезно для создания сотен карточек товаров, городов, заготовок статей).
- Формат ввода: Записи в формате
Название страницы|Переменная 1|Переменная 2|Переменная 3. - Шаблонизатор: В поле «Общий текст» вы пишете вики-разметку будущей страницы. Там, где должны быть уникальные данные из таблицы, используйте маркеры
$1,$2и$3. - Особенности:
- Живой предпросмотр (Live-preview): В таблице-буфере вы можете развернуть детали строки и увидеть итоговый вики-текст страницы. Если вы измените переменную в таблице, текст моментально обновится!
- Защита от перезаписи: По умолчанию инструмент игнорирует (выдаёт ошибку) страницы, которые уже существуют. Но если поставить галочку «Перезаписывать существующие», инструмент обновит текст существующих страниц (работает как обычная правка).
Загрузка файлов (Upload)
[править код]Единственный инструмент, который работает не через текстовое поле, а напрямую с файловой системой вашего компьютера.
- Формат выбора: Нажмите кнопку «Выбрать файлы» и выделите нужное количество изображений или документов в диалоговом окне операционной системы (можно выбирать сразу несколько файлов).
- Быстрые настройки:
- Общее описание: Позволяет задать одинаковый текст (например, лицензию или категории) для всех загружаемых файлов.
- Игнорировать предупреждения: Позволяет загружать файлы, даже если MediaWiki ругается на дубликаты.
- Особенности:
- В рабочей таблице инструмент показывает размер файлов.
- Вы можете изменить Конечное имя файла прямо в таблице. Например, если вы выбрали файл
IMG_2023.jpg, вы можете переименовать его вЛоготип_компании.jpgперед загрузкой на сервер. Инструмент автоматически очистит префиксы вродеФайл:, если вы случайно их скопируете.
Changelog
[править код]# История изменений (BatchTools)
Все заметные изменения в этом проекте будут документироваться в данном файле.
Формат основан на стандартах Keep a Changelog.
## [0.9.0] — 2026-06-03
### Добавлено
- **Новый инструмент «Массовая загрузка файлов»**: Позволяет одновременно выбирать и загружать несколько файлов на вики.
- **Интерактивный интерфейс выбора файлов**: Разработан полностью реактивный клиентский JavaScript-интерфейс. С помощью `DataTransfer` API файлы добавляются в таблицу «на лету» с мгновенным предпросмотром размера и имени, без необходимости промежуточного сохранения тяжёлых файлов в PHP-сессии.
- **Индивидуальная и массовая настройка файлов**: Инструмент поддерживает быстрое переименование файлов перед загрузкой, задание индивидуального текста/описания, а также быструю синхронизацию общего описания для всех файлов разом.
- Опция игнорирования предупреждений (например, для перезаписи существующих дубликатов).
- Новое системное право доступа `uploadbatch` и соответствующая вкладка в навигации.
- Системное сообщение `action-batchtools` для корректного отображения названия группы прав в стандартных ошибках движка.
### Изменено
- **Улучшена обработка глобальной ошибки доступа**: В классе `SpecialBatchTools` исправлен выброс исключения `PermissionsError`. Теперь при отсутствии всех возможных прав выводится корректное, переведённое кастомное сообщение `batchtools-error-nopermissions` вместо системной ошибки, ссылающейся на право `deletebatch`.
- **Локализация (ru)**: Алиас служебной страницы на русском языке изменён с `Пакетные_инструменты` на `Массовые_инструменты` для соответствия остальному переводу интерфейса.
## [0.8.0] — 2026-05-25
### Добавлено
- **Новый инструмент «Массовое создание страниц по шаблону»**: Генерация и публикация списков статей на базе общего текста-шаблона.
- **Параметрический генератор**: Поддерживается до 3 переменных (`$1`, `$2`, `$3`) при импорте строк в формате `Название|Переменная1|Переменная2|Переменная3`.
- **Живой предпросмотр контента**: Интегрирован клиентский JavaScript-сценарий, который на лету выполняет подстановку переменных в общий текст шаблона и отображает итоговый результат в детальной раскрывающейся строке таблицы.
- **Опция «Перезаписывать существующие»**: Позволяет использовать инструмент как для создания новых страниц (`EDIT_NEW`), так и для массовой правки существующих (`EDIT_UPDATE`).
- Автоматическая установка флага бота (`EDIT_FORCE_BOT`), если у текущего администратора есть право `bot`.
- Новое право доступа `createpagebatch`.
### Изменено
- **Повышена стабильность обработчика ошибок**: В методе `BatchToolHandler::formatStatusError()` доработана валидация типов (`Status` и `StatusValue`) для предотвращения PHP Fatal Error в случае несовместимости с изменениями в будущих релизах MediaWiki.
---
## [0.7.0] — 2026-05-25
### Добавлено
- **Новый инструмент «Массовое создание аккаунтов»**: Позволяет быстро регистрировать группы участников списком.
- **Импорт пользователей**: Поддерживается формат импорта `Имя|Пароль|Email` (электронная почта не является обязательной).
- **Нативное журналирование**: Успешно созданные учётные записи регистрируются в официальном логе регистрации участников MediaWiki (`newusers/create2` — «учётная запись создана администратором»).
- **Интерактивная валидация паролей**: На страницу добавлен JavaScript-сценарий, который на лету проверяет заполненность паролей у выбранных пользователей. Строки с пустыми паролями подсвечиваются красным, а кнопка отправки формы блокируется до ввода корректных данных.
- Панель быстрых настроек для мгновенного назначения единого пароля всем пользователям в таблице-буфере.
- Новое право доступа `createaccountbatch`.
### Изменено
- **Визуальная оптимизация навигации**: Названия всех вкладок служебной страницы в файлах локализации сокращены для экономии места (например, «Массовое удаление» -> «Удаление», «Массовая защита» -> «Защита»). Это делает верхнее меню более компактным и улучшает его отображение на мобильных устройствах и планшетах.
---
## [0.6.0] — 2026-05-25
### Добавлено
- **Новый инструмент «Массовая блокировка»**: Позволяет одновременно блокировать группы участников или IP-адресов.
- **Интерактивные параметры блокировки**: Каждая строка таблицы снабжена раскрывающейся панелью детальных настроек. Поддерживаются:
* Глобальная (Sitewide) или частичная (Partial) блокировка (с ограничением редактирования конкретных страниц или ID пространств имён).
* Тонкая настройка запретов: создание учётных записей, отправка писем, редактирование собственной страницы обсуждения, автоблокировка IP и скрытие имени пользователя.
* Ограничения на специфические действия: загрузка файлов, переименование страниц, создание страниц и отправка благодарностей.
- **Новый инструмент «Массовая разблокировка»**: Быстрое снятие ограничений со списков участников или IP-адресов.
- Новые права доступа `blockbatch` и `unblockbatch`.
### Изменено
- **Полная унификация интерфейса (UX)**: Инструменты «Массовое удаление» и «Массовое восстановление» полностью переведены на использование интерактивного рабочего стола (`BatchWorkspaceBase`).
- Все 5 вкладок расширения теперь работают по общему стандарту: предварительный импорт списков в таблицу-буфер, валидация существования объектов в реальном времени, возможность выборочной обработки чекбоксами и очистки рабочей области.
- Унифицированы и упорядочены системные сообщения и переводы в файлах `en.json` и `ru.json`.
---
## [0.5.0] — 2026-05-24
### Добавлено
- **Новый инструмент «Массовое переименование страниц»**: Позволяет быстро переносить группы страниц на новые названия.
- **Импорт парных списков**: Поддерживается формат `Старое название|Новое название` при добавлении страниц в интерактивную таблицу.
- **Индивидуальные настройки переноса**: Для каждой страницы в таблице можно отредактировать новое имя вручную, а также настроить флаги «Оставить перенаправление» и «Переименовать подстраницы».
- Новое право доступа `movebatch`.
### Изменено
- **Улучшено отображение ошибок (UI/UX)**: В базовый класс `BatchToolHandler` добавлен метод `formatStatusError()`. Он автоматически очищает сообщения об ошибках, возвращаемые ядром MediaWiki, от HTML-тегов, медиа-файлов, вики-разметки и лишних переносов строк перед выводом пользователю [6].
- Все существующие обработчики (`MassDeleteHandler`, `MassUndeleteHandler`, `MassProtectHandler`) переведены на использование нового метода форматирования ошибок для обеспечения единого чистого стиля интерфейса [6].
---
## [0.4.0] — 2026-05-24
### Добавлено
- **Новый инструмент «Массовая защита страниц»**: Позволяет одновременно ограничивать права на редактирование и перемещение для группы страниц.
- **Интерактивный рабочий стол (Workspace)**: Добавлен промежуточный буфер (таблица) на основе сессий, где можно гибко настраивать параметры для каждой страницы индивидуально перед отправкой запроса.
- **Интеграция с базой данных**: При добавлении страниц в таблицу автоматически считываются их текущие ограничения и сроки защиты с помощью `RestrictionStore`.
- **Быстрые настройки**: Добавлена панель для массовой синхронизации параметров (уровней защиты, сроков действия и флага каскадной защиты) для выбранных строк с помощью встроенного JavaScript-сценария.
- Поддержка **каскадной защиты** (автоматической защиты всех шаблонов и файлов, включённых в страницу).
- Новый базовый класс `BatchWorkspaceBase` для упрощения создания других инструментов, работающих через сессионный буфер таблиц.
- Новое системное право доступа `protectbatch`.
### Изменено
- Оптимизирован метод `SpecialBatchTools::printSessionResult()`: формирование ключей успешного выполнения и ошибок переведено на динамический шаблон `batchtools-mass{$action}-...`. Это избавляет от необходимости писать новые конструкции ветвления при добавлении будущих инструментов.
---
## [0.3.0] — 2026-05-24
### Изменено
- **Архитектурный рефакторинг**: Основной класс служебной страницы `SpecialBatchTools` разделён на изолированные компоненты. Логика работы с кодом перенесена во вложенное пространство имён `Handlers`.
- Создан абстрактный класс `BatchToolHandler`, определяющий структуру для всех будущих пакетных инструментов и предоставляющий удобные методы-хелперы для работы с контекстом MediaWiki.
- Логика массового удаления вынесена в самостоятельный класс `MassDeleteHandler`.
- Логика массового восстановления вынесена в самостоятельный класс `MassUndeleteHandler`.
- Код `SpecialBatchTools` существенно сокращён и переведён на декларативный роутинг вкладок. Это упростит добавление новых пакетных инструментов в будущем.
---
## [0.2.0] — 2026-05-24
### Добавлено
- Новые локализованные сообщения об ошибках при недостатке прав доступа на чтение, удаление или восстановление конкретной страницы.
### Безопасность и исправления
- **Ужесточение проверок прав**: Внедрена проверка прав на уровне отдельных страниц перед выполнением действий.
- Заблокирована возможность несанкционированного удаления/восстановления страниц, скрытых от пользователя настройками прав или сторонними расширениями ограничений доступа (благодаря обязательной проверке права `read` через `$authority->definitelyCan`).
- Добавлена проверка на возможность удаления защищённых страниц — если у пользователя нет явного права на удаление конкретной статьи, она будет пропущена с выводом ошибки, не прерывая обработку остального списка.
---
## [0.1.0] — 2026-05-24
### Добавлено
- Создана служебная страница `Special:BatchTools` (с поддержкой ЧПУ-алиаса «Пакетные инструменты» на русском языке).
- Реализована вкладка «Массовое удаление» для быстрой очистки ненужных страниц списком.
- Реализована вкладка «Массовое восстановление» для группового возврата ранее удалённых страниц.
- Добавлены новые права доступа: `deletebatch` (для удаления) и `undeletebatch` (для восстановления).
- Интегрирована локализация интерфейса на английском (`en`) и русском (`ru`) языках.
### Безопасность и ограничения
- Добавлена проверка прав пользователя (Authority) перед выполнением любых операций.
- Реализована защита от межсайтовой подделки запросов (CSRF) с помощью механизма Edit Token ядра MediaWiki.
- Введено ограничение на размер пакета: за одну операцию допускается обрабатывать не более 500 страниц.
- Реализовано экранирование имён страниц при выводе ошибок для предотвращения уязвимостей типа XSS.
| BatchTools | |||
|---|---|---|---|
|
|||