Журнал изменений
This commit completes the module system migration by updating the admin panel and admin management to use module names instead of database IDs, aligning with the new config-based module architecture.
admin/index.php - Admin panel module loading:
-
Panel sidebar (panelblock function):
- Replace: SELECT title, active FROM _modules query
- Use: getModules() iterator for module enumeration
- Direct module name access eliminates database dependency
-
Panel navigation (panel function):
- Replace: SELECT title, active FROM _modules query
- Use: getModules() iterator for building navigation
- Consistent with panelblock implementation
-
Module loader refactoring:
- System modules: Use BASE_DIR constant for absolute paths
- Change: include() → require_once for better error handling
- Custom modules: Remove database lookup for module existence
- Direct filesystem check: file_exists(modules/$name/admin/index.php)
- Clean up: Remove commented experimental code
- Code formatting: Consistent indentation and spacing
admin/modules/admins.php - Admin permissions management:
-
Module list generation (add function):
- Replace: SELECT mid, title FROM _modules query
- Use: getModules() iterator to enumerate available modules
- Change checkbox values: mid (database ID) → title (module name)
- Update permission check: Compare with module name instead of ID
- Storage format: Comma-separated names instead of IDs
-
Permission save handler (save function):
- Parameter type change: 'amodules[]', 'num' → 'amodules[]', 'var'
- Accept module names (strings) instead of numeric IDs
- Implode array to comma-separated string of names
- Database stores: "news,pages,users" instead of "1,5,8"
Benefits:
- No database queries for module enumeration (performance gain)
- Module permissions portable across installations
- Human-readable permission strings for debugging
- Eliminates mid/title mismatch issues during migrations
- Consistent with config-based module architecture
Technical notes:
- Admin permissions stored as module name CSV in database
- Module existence validated by filesystem, not database
- getModules() provides consistent iteration interface
- Backward compatibility maintained for existing installs
Files changed: 2 files Impact: Admin panel, module permissions, panel navigation
admin/modules/modules.php:
- Remove commented debug line (migrateModulesConfig call)
- Delete legacy database-based module scanning code (32 lines)
- Remove obsolete module sync logic from old system
- Clean up empty lines for better readability
admin/modules/newsletter.php:
- Fix setConfigFile parameter order: (file, name, base, update)
- Align with refactored function signature
This commit represents a major architectural change in SLAED CMS, moving module management from database storage to file-based configuration for better performance, portability, and version control integration.
Core changes:
-
Module configuration storage (config/modules.php):
- Rename field: 'inmenu' → 'menu' for clarity
- Store all module settings: active, view, menu, group, side, top
- Configuration now version-controlled and portable
- 26 modules migrated with existing settings preserved
-
New module management functions (core/system.php):
- Add getModules($title = null): Iterator-style module reader
- Returns array: [title, active, view, menu, group, side, top]
- Static iterator for row-by-row processing
- Single module lookup when title provided
- Load modules.php configuration on bootstrap
- Enhance setConfigFile(): array_replace_recursive for deep merging
- Add getModules($title = null): Iterator-style module reader
-
Module synchronization utility (core/admin.php):
- Add updateModulesConfig(): Sync config with filesystem
- Scan modules/ directory for actual modules
- Add new modules with default settings
- Preserve existing module configurations
- Remove entries for deleted modules
- Natural case-insensitive sorting
- Add updateModulesConfig(): Sync config with filesystem
-
Admin module management refactor (admin/modules/modules.php):
-
Remove temporary migration function migrateModulesDbToConfig()
-
Replace database operations with config file operations
-
Update all functions to use config-based storage:
modules():
- Call updateModulesConfig() to sync filesystem
- Read modules via getModules() iterator
- Comment out legacy directory scanning code
edit():
- Parameter change: 'mid' (DB ID) → 'mod' (module name)
- Load settings from config instead of database
- Field renames: mod_group→group, blocks_m→side, blocks_mc→top
- Display module status in edit form
status():
- Update module active state in config file
- Use setConfigFile() instead of SQL UPDATE
save():
- Persist all module settings to config file
- Conditional group assignment (only for view=1)
- Parameter renames throughout: inmenu→menu, mod_group→group
-
-
Setup/upgrade system (setup/index.php):
- Sync setConfigFile() implementation with core
- Add recursive normalization for nested arrays
- Fix parameter order in setConfigFile() calls
- Add update6_3 migration:
- Read all modules from database _modules table
- Generate initial config/modules.php
- Rename inmenu→menu during migration
Benefits:
- No database queries for module configuration (performance)
- Module settings in version control (auditability)
- Easier backup and restore (portability)
- Simpler debugging (readable PHP arrays)
- Atomic updates via setConfigFile() with file locking
Technical details:
- Maintains backward compatibility during upgrade
- Config file auto-regenerates from filesystem scan
- Preserves all existing module settings
- Natural sorting ensures consistent file ordering
- Deep merge allows partial config updates
Files changed: 5 files, ~250 lines modified Database impact: Replaces _modules table reads/writes with config file I/O
- Create config/modules.php with all module settings
- Migrate module data from database to configuration
- Include settings for 26 modules: active, view, inmenu, group, side, top
- Generated by migrateModulesDbToConfig() function
Core changes:
-
Merge config/config_seo.php into core/system.php
- Move $confse SEO configuration array inline
- Remove separate config_seo.php file
- Consolidate configuration loading
-
Enhance setConfigFile() function in core/system.php
- Add recursive normalization for array values
- Convert booleans to string '0'/'1'
- Handle floats, integers, and null values
- Add copyright header to generated files
- Improve type safety and consistency
-
Add module migration utility in admin/modules/modules.php
- Create migrateModulesDbToConfig() function
- Migrate module settings from database to config file
- Extract: active, view, inmenu, group, side, top fields
- Generate config/modules.php via setConfigFile()
Code formatting:
- core/access.php: Convert tabs to spaces, update copyright to 2026
- core/security.php: Fix indentation, add trailing newline
- modules/news/index.php: Reformat code structure
Configuration:
- config/global.php: Regenerate sitekey
Files changed: 7 modified, 1 deleted
- Delete forum module (core/forum.php)
- Remove forum-related images
- Rename admin info files (configure-.html → config-.html)
- Update language files
- Modernize blocks and modules
- Create config/global.php
- Convert all double quotes (") to single quotes (')
- Remove dead commented code (# DELETE block)
- Rename function configNavi() → navi()
- Add return type hints (: void)
- Modernize opendir/readdir → scandir()
- Replace timezone array with timezone_identifiers_list()
- Update require_once to use CONFIG_DIR constant
- Add exit after header redirect
- Implement strict comparisons (===, !==)
- Format code according to SLAED standards