Журнал изменений
Все admin-фрагменты, ранее лежавшие в templates/admin/fragments/new/, перенесены в корень templates/admin/fragments/. PHP-вызовы в admin-модулях обновлены: new/hidden → hidden, new/textarea → textarea и т.д. Метка _CHECKOP в bulk-action формах оформлена через span.sl-action-label.
Core changes:
- Admin templates (templates/admin/fragments/):
- Move new/{hidden,input,textarea,select,select-option,file-input} to root
- Move new/{code-block,code-hljs,code-row,code-table,graphic,msg-center} to root
- Move new/{ajax-textarea-form,view-field} to root
- Add link.html and list-bottom.html fragments
- Delete link-btn.html and link-btn-blank.html (replaced by link.html)
- Delete residual new/button.html (already exists at root)
- Admin CSS (templates/admin/assets/css/new.css, system.css):
- Add .sl-action-label styles for bulk-action form labels
- Admin modules (admin/modules/comments.php, modules/news/admin/index.php, modules/shop/admin/index.php):
- Wrap _CHECKOP with span.sl-action-label instead of bare string + colon
- news/admin: extract pager into variable; use list-bottom fragment for footer
- news/admin: add sl-th-center class to checkbox column header
Benefits:
- Admin fragment namespace consistent with frontend (no new/ prefix)
- Bulk-action label has semantic markup for CSS styling
Technical notes:
- templates/admin/fragments/new/ directory fully removed
- link-btn/link-btn-blank replaced by generic link.html fragment
template.php передаёт sourceType/sourceName в getView, чтобы сообщения об ошибке показывали реальный тип («fragment») и имя файла, а не «view». editor.php переключён с new/select, new/select-option на корневые фрагменты.
Core changes:
- Template engine (core/classes/template.php):
Pass sourceType and sourceName through getView for accurate error context
- reportTemplateError and getTemplateDebugComment now receive fragment type/name
- sanitizeData unsets the two new local vars to prevent template leakage
- Improve getTemplateErrorMessage for render-failed vs not-found distinction
- Editor class (core/classes/editor.php):
- Replace getHtmlFrag('new/select-option', ...) with getHtmlFrag('select-option', ...)
- Replace getHtmlFrag('new/select', ...) with getHtmlFrag('select', ...)
Benefits:
- Clearer error diagnostics when a fragment render fails
- Editor fragment calls aligned with root-level fragment architecture
Technical notes:
- No interface changes; getView signature extended with optional params (default '')
- editor.php: fragments select and select-option exist at root level in all themes
Константа _CHECKOP использовалась как метка перед select-элементом в bulk-action формах. Длинная формулировка «The action marked with» заменена на «Action» во всех 6 языковых файлах. Теперь метка выводится через span.sl-action-label и не нуждается в хвостовом двоеточии.
Core changes:
- Language constants (lang/{de,en,fr,pl,ru,uk}.php):
- Replace verbose _CHECKOP definition with short «Action» equivalent
Benefits:
- Removes redundant colon-suffix logic from PHP callers
- Consistent short label across all locales
Technical notes:
- Change is backward-compatible: same constant key _CHECKOP, new value
Два новых фрагмента для admin-шаблонов: универсальная кнопка-ссылка и полноценный шаблон монитора системы.
Core changes:
- link-btn.html:
Ссылка с href, title, class и label — без target="_blank" (в отличие от link-btn-blank.html)
- basic-monitor.html:
- Полный HTML/CSS/JS шаблон для страницы системного монитора
- Карточки: CPU, память, диск, uptime, сервер, PHP, MySQL
- CSS-переменные (--bg-card, --primary, --accent и др.)
- SVG-knobs для метрик нагрузки; таблицы процессов и расширений
Benefits:
- link-btn покрывает внутренние ссылки (дополняет link-btn-blank)
- basic-monitor централизует разметку монитора в шаблоне
Technical notes:
- basic-monitor содержит встроенные <style> и <script>
- Рендерится через {% if show_layout %} условный блок
Добавить два новых фрагмента для admin-шаблонов и объявить global $tpl в двух функциях monitor.php.
Core changes:
- foot-controls.html:
Условный рендер: top_label (ссылка-якорь наверх), time_html, license_html, debug_html в футере admin-страницы
- link-btn-blank.html:
- Ссылка с target="_blank", классом и title-атрибутом
- admin/modules/monitor.php:
global $tpl добавлен в getMonitorServerStats() и getMonitorRuntimeStats()
Benefits:
- Фрагменты foot-controls и link-btn-blank повторно используемы
- monitor-функции получают доступ к $tpl для рендера
Technical notes:
- foot-controls использует OnClick="Upper(...)" (legacy scroll-хелпер)
Переписать modules/pages/index.php по образцу modules/news/index.php: new/ фрагменты, getTplPager с url_extra, устранить SQL-инъекции, привести код к конвенциям SLAED.
Core changes:
- pages() — список страниц:
- getTplContentCard → new/card (width: 100) + new/grid
- setArticleNumbers → getTplPager с url_extra
- $cat/$ncat → прямой $ncat; $field/$orderby inline → if/elseif/else
- SQL: "cid = '".$ncat."'" → 'cid = '.(int)$ncat; array_map('intval')
- $ismoder/$token перед loop; edit_href/delete_href с name=pages + token
- $offset = (int)(($num - 1) * $unum) — убрано двойное присваивание
- view() — просмотр страницы:
- getTplContentView → new/view (единый шаблон)
- fields через getTplFieldsOut; pagebreak-поддержка сохранена
- Связанные записи: assoc-логика → new/related + new/related-item
- liste() — табличный список:
- liste-wrap/liste-basic → new/table + new/table-row-liste
- add() / send():
- hometext/bodytext/field type 'raw'; getTplPreviewContent
- INSERT многострочный; (int)$user[0]; $db убран из add()
- new/alert + getStopText
Benefits:
- Устранены SQL-инъекции; единообразие с Etalon
- Консистентные edit_href/delete_href (name=pages)
Technical notes:
- 4-space indentation; switch ($op) с пробелом
- $user убран из globals pages()
Переписать modules/faq/index.php по образцу modules/news/index.php: new/ фрагменты, getTplPager с url_extra, устранить SQL-инъекции, сохранить уникальную quicklinks-логику FAQ.
Core changes:
- faq() — список FAQ:
- getTplContentCard → new/card (width: 100) + new/grid
- setArticleNumbers → getTplPager с url_extra
- $field/$arrayelement убраны; $pagei = (int)$pag - 1
- SQL-инъекции устранены; $ismoder/$token перед loop
- edit_href/delete_href с name=faq + token
- $limit = (!$ncat) ? 'LIMIT ...' : '' — без LIMIT при $ncat
- Pager рендерится только при !$ncat (show-all режим при категории)
- Quicklinks (сохранены):
- faq-quicklinks-open/row/close фрагменты
- $orderbyf вычисляется только в elseif ($ncat)
- filterTextHighlight($ftitle, $word) в quicklinks-row
- view() — просмотр FAQ:
- getTplContentView → new/view; поля без extra-блоков (FAQ прост)
- $pagei = (int)$pag - 1; $iso для date('c', ...)
- liste() / add() / send():
- new/table + new/table-row-liste; getTplPreviewContent
- $db убран из add(); INSERT многострочный; (int)$user[0]
Benefits:
- Устранены SQL-инъекции; единообразие с Etalon
- Quicklinks-паттерн FAQ сохранён полностью
Technical notes:
- 4-space indentation; switch ($op) с пробелом
- $user убран из globals faq()
Переписать modules/media/index.php по образцу modules/news/index.php: new/ фрагменты, getTplPager с url_extra, устранить SQL-инъекции, исправить баг с $size, привести код к конвенциям SLAED.
Core changes:
- media() — список медиа:
- getTplContentCard → new/card (width: 100) + new/grid
- setArticleNumbers → getTplPager с url_extra
- $cat/$ncat → прямой $ncat; $field убран
- SQL: инъекции устранены; array_map('intval', $cids)
- $ismoder/$token перед loop; edit_href/delete_href с name=media + token
- $ptitle = title + subtitle для SEO/заголовка
- view() — просмотр медиа:
- getTplContentView → new/view
extra-поля: year, director, roles, createdby, duration, lang, format, quality, size, released, note, mlinks, links_label
- mlinks построен из поля links (ed2k/magnet/http ссылки)
Исправлен баг: $einfo вместо $size в ed2k-loop (outer $size больше не затирается в цикле ссылок)
- $broc → 'broken'; 'download' не передаётся (нет стрима)
- liste() / assoc / add() / send():
- Те же паттерны что в files/links
Benefits:
- Устранены SQL-инъекции; единообразие с Etalon
- Исправлен баг переменной $size в ed2k-loop
Technical notes:
- new/view покрывает все media-поля через условные блоки
- 4-space indentation; switch ($op) с пробелом
Переписать modules/links/index.php по образцу modules/news/index.php: new/ фрагменты, getTplPager с url_extra, устранить SQL-инъекции, привести код к конвенциям SLAED.
Core changes:
- links() — список ссылок:
- getTplContentCard → new/card (width: 100) + new/grid
- setArticleNumbers → getTplPager с url_extra
- $cat/$ncat → прямой $ncat; $field/$orderby inline → if/elseif/else
- SQL: "cid = '".$ncat."'" → 'cid = '.(int)$ncat; array_map('intval')
- $ismoder/$token перед loop; edit_href/delete_href с name=links + token
- getVar('get', 'cat', 'num') — убрано двойное присваивание $cat=$ncat
- view() — просмотр ссылки:
- getTplContentView → new/view
- extra-поля home переданы как raw; описание в description/bodytext
- liste() — табличный список:
- liste-wrap/liste-basic → new/table + new/table-row-liste
- assoc-блок:
- assoc-wrap/assoc-basic → new/related + new/related-item
- add() / send():
- hometext/bodytext type 'raw'/'text'; getTplPreviewContent
- INSERT многострочный; (int)$user[0]; $db убран из add()
Benefits:
- Устранены SQL-инъекции; единообразие с Etalon
- Консистентные edit_href/delete_href (name=links)
Technical notes:
- 4-space indentation; switch ($op) с пробелом
Переписать modules/files/index.php по образцу modules/news/index.php: new/ фрагменты, getTplPager с url_extra, устранить SQL-инъекции, привести код к конвенциям SLAED.
Core changes:
- files() — список файлов:
- getTplContentCard → new/card (width: 100) + new/grid
- setArticleNumbers → getTplPager с url_extra
- $cat/$ncat → прямой $ncat; $field удалён
- $ismoder/$token вынесены перед loop
- edit_href: name=files&op=files_add; delete_href: name=files&op=files_delete + token
- SQL: "cid = '".$ncat."'" → 'cid = '.(int)$ncat; array_map('intval', $cids)
- view() — просмотр файла:
- getTplContentView → new/view (единый шаблон)
- delete_href: добавлен name=files
- Поля size, version, email, home переданы в new/view как extra-поля
- add() / send():
- hometext/bodytext type 'raw'; getTplPreviewContent
- INSERT многострочный; (int)$user[0]
- $db убран из globals add()
Benefits:
- Устранены SQL-инъекции (prepared statements)
- Единообразие с Etalon-стандартом
- name=files во всех admin-ссылках
Technical notes:
- 4-space indentation; switch ($op) с пробелом
- new/view покрывает extra-поля через условные блоки