ЧТМ:Расширения/BatchTools: различия между версиями
Нет описания правки |
|||
| (не показано 11 промежуточных версий 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) ==== | ||
Единственный инструмент, который работает не через текстовое поле, а напрямую с файловой системой вашего компьютера. | Единственный инструмент, который работает не через текстовое поле, а напрямую с файловой системой вашего компьютера. | ||
* '''Формат выбора:''' Нажмите кнопку «Выбрать файлы» и выделите нужное количество изображений или документов в диалоговом окне операционной системы (можно выбирать сразу несколько файлов). | * '''Формат выбора:''' Нажмите кнопку «Выбрать файлы» и выделите нужное количество изображений или документов в диалоговом окне операционной системы (можно выбирать сразу несколько файлов). | ||
| Строка 181: | Строка 184: | ||
** Вы можете изменить '''Конечное имя файла''' прямо в таблице. Например, если вы выбрали файл <code>IMG_2023.jpg</code>, вы можете переименовать его в <code>Логотип_компании.jpg</code> перед загрузкой на сервер. Инструмент автоматически очистит префиксы вроде <code>Файл:</code>, если вы случайно их скопируете. | ** Вы можете изменить '''Конечное имя файла''' прямо в таблице. Например, если вы выбрали файл <code>IMG_2023.jpg</code>, вы можете переименовать его в <code>Логотип_компании.jpg</code> перед загрузкой на сервер. Инструмент автоматически очистит префиксы вроде <code>Файл:</code>, если вы случайно их скопируете. | ||
== | == Changelog == | ||
{{Начало скрытого блока|Changelog}} | |||
<syntaxhighlight lang="markdown" line># История изменений (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.</syntaxhighlight> | |||
{{Конец скрытого блока}} | |||
{{BatchTools}} | |||
[[Категория:ЧТМ:Расширения]] | |||