﻿=== KDA Media Button ===
Contributors: deniskey
Tags: media, classic-editor, images, folder, upload
Requires at least: 5.0
Tested up to: 7.0
Stable tag: 1.3.0
Requires PHP: 7.2
License: GPL-2.0-or-later
License URI: https://www.gnu.org/licenses/gpl-2.0.html

Плагин добавляет в классический редактор WordPress кнопку для выбора изображений из папки на сервере и вставки их в запись. Поддерживает загрузку новых файлов, выбор существующих, настройку папки, разрешённых форматов и прав доступа. Полностью переводим (включены русский и английский языки).

== Description ==

KDA Media Button расширяет классический редактор WordPress новой кнопкой. При нажатии открывается всплывающее окно с доступом к структуре сайта:

* Просмотр папок относительно заданной базовой папки.
* Загрузка новых изображений прямо в текущую папку.
* Выбор существующего изображения и вставка в запись.

Плагин полностью настраивается со страницы параметров:

* **Доступная папка** -- путь относительно корня сайта. Плагин может работать только внутри этой папки, что защищает остальную файловую систему.
* **Разрешённые форматы** -- список расширений через запятую. Если оставить пустым, разрешены все распространённые форматы изображений (jpg, jpeg, png, gif, webp, svg, ico, bmp, tiff, tif, avif).
* **Роли** -- выберите, какие роли (например, Администратор, Редактор) будут видеть кнопку в редакторе.
* **Класс ссылки** -- задайте CSS-класс для ссылки на изображение или оставьте пустым, чтобы отключить.
* **Журнал активности** -- опционально ведёт лог загрузок, удалений, создания и переименования папок.

= Работа с изображениями =

После выбора изображения можно настроить вставку:

* **Размер** -- вставить оригинал (Full) или сгенерированную копию (Thumbnail / Medium / Large).
* **Выравнивание** -- Нет, Слева, По центру или Справа (добавляет соответствующий класс WordPress).
* **Alt текст** -- альтернативный текст для вставляемого изображения.
* **Ссылка на полный размер** -- обернуть изображение в ссылку на полный файл со встроенным лайтбоксом.
* **Метаданные** -- разрешение (ширина×высота) и размер файла показываются перед вставкой, есть живой превью.

Можно выбрать несколько изображений и вставить их как галерею шорткодом `[kda_media_button_gallery]`:

`[kda_media_button_gallery urls="https://.../a.jpg,https://.../b.jpg" size="medium" columns="3" link="none"]`

= Управление файлами =

Всплывающее окно позволяет управлять структурой папок:

* Создавать новые подпапки.
* Переименовывать файлы и папки.
* Удалять файлы и папки (рекурсивно).

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

* Выход за пределы базовой папки блокируется.
* Загружаемые файлы проверяются по списку разрешённых форматов и обрабатываются через стандартный API загрузки WordPress.
* Все AJAX-запросы защищены nonces и проверкой ролей/прав.

== Installation ==

1. Загрузите папку `kda-media-button` в `/wp-content/plugins/`.
2. Активируйте плагин в меню «Плагины».
3. Перейдите в **Настройки → KDA Media Button** и задайте доступную папку, форматы и роли.
4. В классическом редакторе появится кнопка «Вставить изображение из папки».

== Frequently Asked Questions ==

= Работает ли с редактором блоков (Гутенберг)? =

Нет. Поддержка Гутенберга отключена. Плагин работает только с классическим редактором.

= Может ли плагин получить доступ к любой папке на сервере? =

Нет. Доступ ограничен папкой, заданной на странице настроек (относительно корня сайта). Directory traversal заблокирован.

= Какие форматы изображений разрешены по умолчанию? =

Все распространённые форматы изображений. Ограничить список можно на странице настроек.

== Upgrade Notice ==

= 1.3.0 =
Улучшения и исправления ошибок.

= 1.2.24 =
Удалён жёстко прописанный путь к папке по умолчанию. Сохранение пустого поля «Доступная папка» теперь отклоняется с ошибкой.

= 1.2.23 =
Исправлена обработка папки по умолчанию, когда в базе хранится пустое значение. Поле папки теперь всегда показывает корректный путь.


= 1.2.22 =
Удалена поддержка блока Gutenberg и файлы блока. Публичные стили галереи по умолчанию отключены.

= 1.2.21 =
Исправлен fallback для папки по умолчанию в настройках и сохранение значения при сохранении формы.

= 1.2.20 =
Обновлён формат пути к доступной папке по умолчанию.

= 1.2.19 =
Добавлен русский readme, исправлена информация о поддерживаемых языках.

= 1.2.18 =
Исправления и улучшения.

== Changelog ==

= 1.3.0 =

* Улучшения и исправления ошибок.

= 1.2.24 =

* Удалён жёстко прописанный путь к папке по умолчанию.
* Сохранение пустого поля «Доступная папка» теперь отклоняется с ошибкой.

= 1.2.23 =

* Исправлена обработка папки по умолчанию, когда в базе хранится пустое значение. Поле папки теперь всегда показывает корректный путь.

= 1.2.22 =

* Удалена поддержка блока Gutenberg и файлы блока.
* Публичные стили галереи по умолчанию отключены.

= 1.2.21 =

* Исправлен fallback для папки по умолчанию в настройках и сохранение значения при сохранении формы.

= 1.2.20 =
Обновлён формат пути к доступной папке по умолчанию.

= 1.2.19 =
Добавлен русский readme, исправлена информация о поддерживаемых языках.

= 1.2.18 =

* Security: blocked symlink escapes in path resolution and required `edit_posts`/`edit_pages` capability for REST access.
* Fixed `size` AJAX handler reading an undefined variable (size was always ignored).
* Refactored legacy admin-ajax handlers to reuse the shared core functions (single validation path).
* Cached image metadata (`getimagesize`) in a request-persisted manifest to speed up browsing.
* Added a result limit to recursive search.
* Unified image/shortcode rendering with responsive `srcset`; resized-cache filenames now include a per-folder hash to avoid collisions.
* SVG uploads/replacements are sanitized on save.
* Temporarily disabled Gutenberg block support.
* Registered the block via `register_block_type_from_metadata` (matches `block.json` `apiVersion: 2`); activity log is no longer autoloaded.

= 1.2.16 =

* Added Gutenberg block "Media from Folder" (`kda-media-button/media`).
* Added REST API endpoints: `browse`, `size`, `srcset`, `tree`, `upload`, `mkdir`, `rename`, `delete`, `clear_log`, `duplicate`, `bulk_delete`, `bulk_move`, `replace_image`.
* Added recursive folder search with subfolder checkbox.
* Added bulk delete, bulk move, file duplicate, copy URL (single + bulk).
* Added responsive `srcset`/`sizes` to gallery shortcode.
* Added non-image file support (inserted as links).
* Added WP-CLI commands: `wp kda-media-button clean-cache` and `wp kda-media-button rebuild-cache`.
* Added replace-image overwrite endpoint.
* Added settings page tabs: General, Permissions, Advanced, Activity log.
* Added keyboard navigation (arrow keys + Enter) and skeleton loaders.
* Added dark theme support (`prefers-color-scheme: dark`) and mobile breakpoint.

= 1.2.14 =

* Minor fixes and usability improvements.

= 1.0.0 =

* First version.
* Classic editor button opening a folder browser popup.
* Upload and select images with insertion into the post.
* Settings page: base folder, allowed formats and role restriction.

