Чтение RSS каналов

Журнал изменений

Фильтр и поиск

Всего: 415 Доступных коммитов | Отфильтровано: 415 Коммиты | Страница: 11 / 42
28.02.2026
Chore: remove obsolete template file and fix billing variable name
Автор: Eduard Laas | Дата: 02:17 28.02.2026

Removes the stale templates/lite/0index.php which contained hardcoded site-specific navigation and SQL queries inside a presentation layer — a structural anti-pattern not compatible with the current template architecture. Also corrects a renamed variable reference in billing.html.

Core changes:

  1. templates/lite/0index.php:
  2. Delete entire file (184 lines) * Contained hardcoded menu HTML, direct DB queries, and

mixed presentation/business logic
  • Incompatible with {%placeholder%} template architecture
  1. modules/money/templates/billing.html:
  2. Replace $site_logo with $logo to match renamed config variable
  3. Add missing newline at end of file

Benefits: - Eliminates hardcoded SQL inside template layer - Fixes broken variable reference in billing invoice template - Reduces dead code footprint in templates/lite/

Technical notes: - templates/lite/0index.php was not referenced by any active module - billing.html $logo aligns with current config naming convention

Fix: add explicit type casts in cutstr() for safety
Автор: Eduard Laas | Дата: 02:17 28.02.2026

Adds (string) cast for $strip and (int) cast for $size at the top of cutstr() to prevent type coercion issues when callers pass non-scalar or null values.

Core changes:

  1. cutstr() (core/system.php):
  2. Add (string)$strip cast before length check * Prevents TypeError on null input

  3. Add (int)$size cast before arithmetic * Ensures consistent numeric behaviour

Benefits: - Prevents silent type coercion bugs at string truncation boundary - Aligns with PHP 8.4 strict-type expectations - Defensive guard for legacy call sites passing untyped values

Technical notes: - No change to function signature or return type - Backward compatible: existing callers unaffected

27.02.2026
Docs: update project documentation for SLAED 6.3 modernization phase
Автор: Eduard Laas | Дата: 23:31 27.02.2026

Synchronize all project documentation with the changes implemented in the current modernization phase: getVar() coverage, func_get_args() elimination, tpl_eval/tpl_func/tpl_warn removal, setRedirect() introduction, filterMarkdown() addition, and migration progress update to ~80% complete.

Core changes:

  1. README.md:
  2. Migration badge and text: 75% → 80% complete
  3. Tech Stack: added filterMarkdown() (safe Markdown parser) to Security line
  4. Completed section: added func_get_args() elimination, tpl_eval/tpl_func/tpl_warn removal, setRedirect(), filterMarkdown() entries

  5. Documentation table: added TESTS.md row
  6. CONTRIBUTING.md:
  7. getVar() type reference: added 'let', 'word', 'title', 'field', 'raw' types; corrected 'var' description (was "Raw variable"; now "Alphanumeric/underscore/dash")

  8. Admin Module Conventions: replaced manual header()/exit section with full setRedirect() documentation including signature and all parameters

  9. Template Functions: tpl_eval/tpl_func/tpl_warn marked as fully REMOVED (not deprecated) — calling them causes fatal error

  10. SECURITY.md:
  11. Version 6.3.0 changelog: added getVar() core coverage, func_get_args removed, tpl_eval/tpl_func/tpl_warn removed, filterMarkdown added, setRedirect added

  12. Removed (Insecure) table: added tpl_func() row, func_get_args() row, inline header()+exit row

  13. UPGRADING.md:
  14. Template Functions migration: tpl_eval/tpl_func changed from "deprecated" to "fully removed — causes fatal error in 6.3.x"; added tpl_func() row

  15. New section: Admin Redirects — setRedirect() with full signature and examples
  16. New section: Admin Help Files — info file rename table (en.html → english.html)
  17. Migration Checklist: updated tpl_eval item, added setRedirect and info rename
  18. Version History: expanded Major Changes list with all 6.3 improvements
  19. docs/TEMPLATES.md:
  20. [!WARNING] → [!CAUTION]: tpl_eval/tpl_func/tpl_warn have been REMOVED (not "will be removed") — updated wording and added tpl_func() to table

  21. docs/TESTS.md:
  22. Minor alignment with current test suite structure
  23. CODE_OF_CONDUCT.md:
  24. Added contribution guideline note for variable naming in examples and patches
  25. docs/DISCUS.md / docs/PARSE.md:
  26. Status lines updated to reflect filterMarkdown() implementation status

Benefits: - Documentation accurately reflects current codebase state - getVar() type table is complete and correct for all contributors - setRedirect() fully documented — replaces scattered header()/exit patterns - No invented functionality — all documented features verified in source

Technical notes: - docs/DISCUS.md and docs/PARSE.md are temporary working files - filterMarkdown() signature: (string $src, bool $safe, string $mod): string - setRedirect() signature: (string $url, bool $refer, int $code): never

Test: add informational audit tests; harden SecurityValidationTest
Автор: Eduard Laas | Дата: 23:30 27.02.2026

Add two new informational test suites for language constant usage and unused function detection; update SecurityValidationTest to convert the include-inside-functions check from a hard assertion to an informational STDERR report with deduplication and truncation.

Core changes:

  1. New test: tests/LanguageConstantsUsageTest.php:
  2. Scans language/.php, admin/language/.php, modules//language/.php
  3. Counts total defined constants vs. actual usage in PHP source
  4. Reports: total, unused, low-use (1-2 occurrences), top unused/low-used
  5. Informational only — no hard assertions that would block CI
  6. New test: tests/UnusedCodeAuditTest.php:
  7. Scans core/*.php for defined functions vs. usage in project source
  8. Reports unused functions, low-use functions, top candidates for removal
  9. Scans local variables for unused assignment candidates (heuristic)
  10. Informational only — assists human review, does not fail CI
  11. Updated: tests/SecurityValidationTest.php (testNoIncludesInsideFunctions):
  12. $errors[] hard assert → informational STDERR report
  13. Deduplication: $seen[] map prevents double-counting same file:line
  14. Truncation: output capped at 30 warnings + "... and N more" summary
  15. Rationale: legacy SLAED codebase has many include-inside-functions patterns that require staged migration; hard failure blocked test runs

  16. Updated: tests/LanguageValidationTest.php:
  17. Minor cleanup and alignment with new audit test patterns

Benefits: - Two new audit tools surface unused code and dead language constants - SecurityValidationTest no longer fails CI on known legacy patterns - All audit output goes to STDERR — visible in verbose mode, not in summary

Technical notes: - Both new tests extend PHPUnit TestCase with self::assertTrue(true) anchor - Output format: plain text with key metrics for human readability - Tests run after: ./vendor/bin/phpunit (no additional configuration needed)

Refactor: migrate templates from positional $arg[N] to named {%placeholder%} syntax
Автор: Eduard Laas | Дата: 23:29 27.02.2026

Replace all positional $arg[N] variable references in HTML template files with named {%placeholder%} tokens compatible with setTemplateBasic(). This completes the migration from tpl_eval()/tpl_func() (removed) to the strtr-based template renderer introduced in SLAED 6.3.

Core changes:

  1. Admin templates (templates/admin/*.html):
  2. login.html: $arg[1]→{%route%}, $arg[2]→{%nickname%}, $arg[3]→{%password%}, $arg[4]→{%captcha%}, $arg[5]→{%login%}

  3. registration.html: all $arg[N] → named placeholders
  4. comment.html: positional args → semantic names (username, avatar, rank, etc.)
  5. voting-close/open/post/view.html: updated to named placeholders
  6. index.php (admin theme entry): positional variable references updated
  7. Default theme templates (templates/default/*.html):
  8. comment.html: $arg[1-25] → {%id%}, {%username%}, {%avatar%}, {%rank%}, {%post_count%}, {%user_rate%}, {%hclass%}, etc.

  9. login.html / login-logged.html / login-without.html: named placeholders
  10. privat-message.html: message template fully updated
  11. basic-search.html, basic-media-view.html: search/media templates updated
  12. liste-basic.html, liste-open.html: list templates updated
  13. block-voting.html: voting block placeholder names
  14. Lite theme templates (templates/lite/*.html, templates/lite/0index.php):
  15. Same pattern applied: all $arg[N] → {%named%} placeholders
  16. comment.html, privat-message.html, basic-search.html, basic-media-view.html

Benefits: - Template variables are now self-documenting (name conveys meaning) - setTemplateBasic() uses strtr() with named keys — no eval() required - Template maintenance simplified: no need to count positional arg indices - All CRLF → LF normalized; missing EOF newlines added

Technical notes: - setTemplateBasic(string $tpl, array $vars): string uses strtr($raw, $vars) - Template files loaded from templates/$theme/$name.html by getThemeFile() - Callers (module index.php files) updated to pass named key arrays

Chore: remove closing ?> tags and modernize array syntax in module support files
Автор: Eduard Laas | Дата: 23:29 27.02.2026

Remove trailing PHP close tags from language files (clients, whois) per PSR-12; update array() → [] syntax in modules/clients/pclzip.lib.php for PHP 8.4 style consistency.

Core changes:

  1. Close tag removal (modules/clients/language/.php, modules/whois/language/.php):
  2. lang-english.php, lang-french.php, lang-german.php, lang-polish.php, lang-russian.php, lang-ukrainian.php (clients module)

  3. en.php, de.php, fr.php, pl.php, ru.php, uk.php (whois module)
  4. Trailing ?> removed from all 12 language files
  5. Array syntax modernization (modules/clients/pclzip.lib.php):
  6. array() → [] for option arrays in PclZip::add() and related methods
  7. No logic change — purely syntactic modernization

Benefits: - PSR-12 compliant: PHP-only files must not have closing ?> tags - Eliminates risk of accidental whitespace output after closing tag - Consistent array syntax throughout the codebase

Technical notes: - pclzip.lib.php is a vendored library; only array syntax touched, no logic - Language files: 12 files × 1 line removed = 12 deletions

Refactor: modernize frontend modules — PHP 8.4 types, config access, list() syntax
Автор: Eduard Laas | Дата: 23:28 27.02.2026

Add return type declarations to all module functions; replace list() with [] destructuring; update config access from module-specific globals ($conffo, $confnews, etc.) to $conf['module_name']['key']; modernize setHead() calls with explicit title arrays.

Core changes:

  1. Return type declarations added (all 29 module index files):
  2. account(), newuser(), finnewuser() → : void
  3. forum(), topic_view(), post_add() → : void
  4. news(), view(), add_news() → : void
  5. All public-facing module functions now have explicit return types
  6. list() → [] destructuring (modules with SQL result rows):
  7. forum/index.php: all while(list(...)) → while([...]) in topic/post loops
  8. files/index.php, media/index.php, shop/index.php, links/index.php
  9. news/index.php, pages/index.php, faq/index.php, jokes/index.php
  10. All sql_fetchrow() result assignments updated
  11. Config access modernization (forum/index.php):
  12. global $conffo removed from all forum functions
  13. $conffo['listnum'] → $conf['forum']['listnum']
  14. $conffo['defis'] → $conf['forum']['defis']
  15. $conffo['pop'] → $conf['forum']['pop']
  16. $conffo['pnum'] → $conf['forum']['pnum']
  17. setHead() with explicit titles (account/index.php):
  18. setHead() → setHead(['title' => _USERREGLOGIN])
  19. setHead() → setHead(['title' => _REGNEWUSER])
  20. setHead() → setHead(['title' => _ACCOUNTCREATED])
  21. Pattern applied across all account flow functions
  22. Miscellaneous cleanup:
  23. Unused $catlink variable removed from forum/index.php
  24. whois/index.php: geo_ip lookup updated to current API
  25. search/index.php: query variable cleanup
  26. voting/index.php: type declarations added

Benefits: - PHP 8.4 compatible — all functions have explicit return types - $conffo/$confnews/etc. global removal reduces import surface - list() removal aligns with PHP 7.1+ best practices throughout - setHead() with title enables proper SEO meta generation

Technical notes: - Config access via $conf['module']['key'] — no behavioral change - [] destructuring is functionally identical to list() in all contexts - 29 module files modified across 5 module subdirectories

Refactor: modernize admin panel — $afile, SQL hardening, command injection guard
Автор: Eduard Laas | Дата: 23:27 27.02.2026

Replace deprecated $aroute alias with $afile throughout admin/index.php; harden SHOW TABLE STATUS queries in database.php and monitor.php against SQL injection via database/table name validation; add command injection guard in monitor.php getCommandOutput(); update editor info pages.

Core changes:

  1. Alias replacement (admin/index.php):
  2. global $aroute → global $afile in getAdminPanelBlocks() and getAdminPanel()
  3. All $aroute.'.php?name=' → $afile.'.php?name=' references updated
  4. SQL hardening (admin/modules/database.php):
  5. $confdb['name'] → $dbname = preg_replace('#[^a-zA-Z0-9_]#', '', ...) before use
  6. Empty $dbname guard added — returns early with warning on invalid DB name
  7. SHOW TABLE STATUS, ANALYZE TABLE, OPTIMIZE TABLE, REPAIR TABLE: $confdb['name'] replaced with sanitized $dbname throughout

  8. Table name now validated with preg_match('#^[a-zA-Z0-9_]+$#') before queries
  9. Variable renaming: $rowResult/$rowData → $res/$row (SLAED naming convention)
  10. $infoText → $info (short naming convention)
  11. SQL hardening (admin/modules/monitor.php):
  12. SHOW TABLE STATUS FROM: $confdb['name'] → $dbname with same sanitization
  13. $dbname empty guard added — skips DB stats block if name is invalid
  14. Removed uptime block that used platform-specific /proc/uptime path
  15. Command injection guard (admin/modules/monitor.php):
  16. getCommandOutput(): added preg_match for shell metacharacters [;&|`><\r\n]
  17. Returns [] immediately if command string contains dangerous characters
  18. Editor info pages updated (admin/info/editor/*.html):
  19. Reference to core/geo_ip.php and $COUNTRY_NAMES removed
  20. Updated to: "Use user_geo_ip() output as the valid country value reference"

Benefits: - SHOW TABLE STATUS SQL injection prevented via name sanitization - Table-level query injection prevented via table name whitelist validation - Command injection in exec() calls blocked by metacharacter guard - $aroute deprecated alias fully removed from admin panel code

Technical notes: - admin/modules/blocks.php: minor 1-line cleanup (unused variable) - admin/modules/messages.php: 4-line formatting/variable rename cleanup - Database name regex: [^a-zA-Z0-9_] — matches MySQL identifier rules

Fix: remove debug output from FTPClient::getDirListing()
Автор: Eduard Laas | Дата: 23:27 27.02.2026

Remove accidental debug statements left in plugins/filemanager/include/ftp_class.php that were leaking server information: shell_exec('whoami'), ftp_pwd() echo, and error_get_last() echo were all outputting sensitive data to the HTTP response.

Core changes:

  1. Debug statements removed (ftp_class.php — getDirListing()):
  2. echo shell_exec('whoami').' is who i am' — exposes OS username
  3. echo 'Current directory is now: '.ftp_pwd(...) — exposes directory path
  4. echo error_get_last() — exposes internal PHP error details

Benefits: - Prevents server username and directory structure disclosure to clients - Eliminates shell_exec() output from HTTP responses - Closes information-disclosure vulnerability in FTP file manager

Technical notes: - getDirListing() return value unchanged — only debug echo statements removed - Missing newline at EOF also added for POSIX compliance

Chore: remove deprecated core/geo_ip.php and core/geo_ip.dat
Автор: Eduard Laas | Дата: 23:26 27.02.2026

Delete the legacy MaxMind-based geo-IP lookup module (geo_ip.php + binary data file geo_ip.dat). The module relied on an outdated GeoIP binary format and an unmaintained lookup class; functionality replaced by the user_geo_ip() helper in core/user.php which uses a maintained alternative.

Core changes:

  1. Files deleted:
  2. core/geo_ip.dat — binary MaxMind GeoLite database (outdated format)
  3. core/geo_ip.php — PHP wrapper class for the binary database

Benefits: - Removes ~80 KB unmaintained binary from repository - Eliminates dependency on deprecated GeoIP binary format - Reduces core/ directory size and maintenance surface

Technical notes: - Callers updated to use user_geo_ip() output for country name reference - admin/info/editor/*.html updated to reflect the new reference source - No module functionality lost — geo lookups remain available via user_geo_ip()

Всего: 415 на 42 страницах по 10 на каждой странице

Хотите опробовать SLAED CMS в действии?

Технологии

PHP MySQL HTML 5 CSS 3 jQuery jQuery UI

Контакты

  • D-49179, Deutschland
    Ostercappeln, Im Siek 6
  • +49 176 61966679

  • https://slaed.net
Идеи и предложения
Обратная связь