Skip to content

Fix: preserve file extension when upload_translit is enabled - #91

Open
Ibochkarev wants to merge 3 commits into
3.xfrom
fix/16787-upload-translit-preserve-extension
Open

Fix: preserve file extension when upload_translit is enabled#91
Ibochkarev wants to merge 3 commits into
3.xfrom
fix/16787-upload-translit-preserve-extension

Conversation

@Ibochkarev

@Ibochkarev Ibochkarev commented Aug 21, 2026

Copy link
Copy Markdown
Member

Что сделано

При включённом upload_translit запускаем FURL-фильтрацию только на basename и возвращаем оригинальное расширение. Правила alias больше не сжёвывают .jpg.

applyUploadTranslitToFile() делает работу: сплит pathinfo(), friendly_alias_max_length => 0 (имена загрузок игнорируют cap длины FURL), filterPathSegment() на basename, затем пересобираем имя и срабатываем OnFileManagerFileRename, если изменилось. Dotfiles вроде .htaccess и пустые результаты фильтра держат оригинальное имя.

modMediaSourceTest покрывает кейс длинного имени + max_length, alphanumeric-ограничение (photo.jpg), составные имена, lowercase basename и имена без расширения.

Зачем нужно

upload_translit + friendly_alias_max_length раньше обрезали всё имя файла. verylongfilename.jpg становился verylongfilenam, терял расширение и ломал delete / MoreGallery. При friendly_alias_restrict_chars = alpha или alphanumeric тот же full-name-путь превращал photo.jpg в photo-jpg.

Refs modxcms#16787.

Как проверить

  1. Включите upload_translit.
  2. Задайте friendly_alias_max_length поменьше (15).
  3. Загрузите verylongfilename.jpg.
  4. Проверьте, что хранимое имя всё ещё verylongfilename.jpg.
  5. Задайте friendly_alias_restrict_chars в alphanumeric, загрузите photo.jpg, проверьте, что остаётся photo.jpg.
  6. Удалите файл и подтвердите, что это работает.
  7. Запустите modMediaSourceTest для автоматической проверки.

Связанные

Оригинал: modxcms#16826

Extract translit logic to applyUploadTranslitToFile, use filterFilename
for basename-only filtering so extension is preserved. Add modX::filterFilename
for upload-specific character restriction.

Refs modxcms#16787
Stop truncating uploaded filenames via friendly_alias_max_length so
extensions stay intact. Drop the filterFilename pathinfo split and cover
the modxcms#16787 regression in modMediaSourceTest.
Split uploaded names with pathinfo so FURL rules cannot rewrite or
strip the extension, keep max_length disabled for uploads, and cover
alphanumeric restrict in tests.
@Ibochkarev Ibochkarev changed the title Fix: сохранять расширение файла при включённом upload_translit Fix: preserve file extension when upload_translit is enabled Aug 21, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant