История коммитов

.
chore(library): update changelog and clean up installer
.
feat(library): implement slug-based URLs
- Add slug columns to library_cats (unique parent+slug) and library_texts
- Add LibraryCategoryPathService and LibraryArticlePathService for path resolution
- Add LibrarySlugService for unique slug generation
- Add LibraryPathController as catch-all dispatcher (mirrors ForumPathController)
- Replace /library/section/{id} and /library/article/{id} routes with /library/{path}
- Update all controllers, templates, and LegacyRedirectHandler to use slug URLs
- Add install/library_slug_converter.php to regenerate slugs from names
.
Merge remote-tracking branch 'origin/9.x' into 9.x
# Conflicts:
# composer.json
.
refactor(rss): remove unused rss module
.
refactor(redirect): migrate to layered architecture
.
refactor(registration): migrate to controller architecture
Split into RegistrationController and ConfirmEmailController.
Extracted user creation and email sending into RegisterUserUseCase.
Added RegistrationFormDTO for passing validated form data.
Email confirmation now uses clean URL /registration/confirm-email.
.
refactor(login): migrate to controller architecture with use cases
Split login/logout into separate controllers and routes (/login, /logout).
Extracted login business logic into PerformLoginUseCase returning LoginResultDTO.
Added LoginStatus enum for match-based controller dispatch.
Updated logout links in both themes to /logout.
.
refactor(language): migrate to controller architecture
.
refactor(comments): replace BBCode editor with CKEditor
Switch comments in downloads and library modules from BBCode/WysiBB to
CKEditor. Text is now stored as HTML and sanitized via HTMLPurifier on
save. Message length validation uses EditorContentNormalizer (same
approach as forum) to correctly handle embedded media.

Add converters for existing data:
- install/downloads_comments_converter.php (download__comments)
- install/library_comments_converter.php (cms_library_comments)
.
refactor(mail): implement outgoing conversations and clean up legacy files