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

.
refactor(install): move the installer to Twig
The installer gets the environment the plan reserved for it: it runs before
there is a site, so its templates see no visitor, no csrf token and no modules,
only the theme it ships with.

- the five steps and the layout become @install/*.twig; the namespace comes
from InstallTemplatePaths, so a theme can override any of them
- the steps pass their data explicitly instead of pushing it into a shared
engine with addData()
- the repeated field markup of steps 3 and 4 became a macro, and the field
errors go through the component the rest of the site uses

Nothing renders Plates any more; the package stays until the classes around it
are removed.
.
refactor(view): move the error pages and the pagination to Twig, drop Plates from HTTP
The last templates Plates still served become @theme/pages/errors/{403,404}.twig
and @theme/components/pagination.twig, so nothing in the HTTP layer names a
Plates template any more.

- ExceptionResponseFactory, Pagination and PaginationFactory take
RendererInterface; pageNotFound() and PageNotFoundException default to the
Twig page
- RendererInterface is TwigRenderer now: the Plates engine, its renderer, the
bridge extension and the delegating renderer leave the container, and
ControllerContext stops registering template folders
- AdminControllerContext loses the four counter queries it ran on every request
of the panel for a sidebar that is rendered by AdminRuntime now
- themes/admin is deleted whole and themes/default/templates/system with it;
the installer keeps its own engine, so the package stays for now
.
refactor(mail): give the emails their own Twig environment
The six email templates move to @theme/emails/*.twig and are rendered by an
environment of their own: a message has no request behind it, so nothing of the
visitor, the csrf token or the build assets is offered there, and every address
it prints is absolute.

- MailRenderer takes the locale as an argument and puts the translator of the
process back afterwards, so a batch of messages in different languages leaves
nothing behind; EmailSender no longer mutates a shared engine
- a row queued before this change still names its Plates template and is mapped
to the Twig one of the same name
- twig:lint, twig:compile and i18n:scan pick the environment a template belongs
to, otherwise the mail functions read as unknown to them
.
refactor(comments): move the comment pages to Twig
The legacy Comments printed four Plates templates; they become
@theme/pages/comments-{list,reply,delete}.twig plus
@theme/components/comments-form.twig, and the class renders through
RendererInterface.

- the author name, the address and the browser were printed unescaped and now
go through autoescape; the comment text and the answer keep their markup as
Twig\Markup
- the URLs of the actions carried & inside the data, which the template
escaped a second time; they are built raw now and the redirect no longer has
to undo the escaping
- the templates_namespace argument is gone: all three callers passed 'system',
and after the themes merged there is nothing left to choose
- whether the address of an author may be shown is decided by the class, not by
the Plates $user global
.
refactor(view): render access errors through Twig
The access middlewares and the error renderers took Johncms\System\View\Render
and named Plates templates; they now take RendererInterface and name Twig ones.

- the admin gates render @admin/pages/errors/403.twig, which is what the plan
reserved for a middleware that knows it guards the panel
- the public gates and both error renderers render @theme/pages/result.twig
- ForumErrorRenderer::render() and DownloadsErrorRenderer::render() become
response(), since they no longer wrap the legacy engine
- the error branches of FileCommentsController move too; the page itself stays
on Plates, because the legacy Comments prints its own layout
.
refactor(contacts): move the admin pages to Twig
The four admin templates of the module become @contacts/admin/*.twig and the
four controllers return ViewResponse.

- the status filters of the list and the multilingual fields of the settings
were built in the templates and now come from the controllers
- the message text goes through the nl2br filter, which escapes before it
inserts the breaks
.
refactor(consent): move the admin pages to Twig
The six admin templates of the module become @consent/admin/*.twig and the five
controllers return ViewResponse.

- the module's ckeditor wrapper is gone: the consent form includes the theme
component
- the per-field validation messages go through @theme/components/field-errors
.
refactor(news): move the admin pages to Twig
The seven admin templates of the module become @news/admin/*.twig and the three
controllers return ViewResponse; the delete confirmation stays a fragment,
since it is shown in a modal.

- the SpecialChars cast is gone from NewsArticle and NewsSection: it escaped on
read, and with autoescape a name carrying markup reached the page escaped
twice. Every consumer of these fields is Twig now
- the module's ckeditor wrapper is gone: the article form includes the theme
component
- the flash messages are no longer escaped in the controller
.
refactor(collections): move the admin pages to Twig
The nine admin templates of the module become @collections/admin/*.twig and the
four controllers return ViewResponse; system::pages/result becomes
@admin/pages/result.twig.

- the module's own ckeditor wrapper is gone: the item form includes the theme
component
- the delete confirmation is one template for collections, sections, fields and
items, as it was
.
refactor(view): merge the five ckeditor wrappers into one theme component
Every module that edits formatted text carried its own copy of the same
wrapper, differing only in the field name and whether uploading is on. They
become @theme/components/editor.twig, taking those as parameters.

The plan called for this once a fourth copy appeared; there were five.