Merge includes:
- Version bump to 1.5.0 with comprehensive changelog
- Fixed guide template variable replacement bug
- Complete guide documentation rewrite
- Plugin system implementation (HTMLBlock, MQTTTracker)
- Enhanced bilingual support throughout the system
- Improved template system and layouts
- Enhanced security and code quality improvements
Resolves merge conflicts in README files, keeping version 1.5.0.
Major features and improvements:
- Fix critical guide template variable replacement bug
- Complete guide documentation rewrite with examples
- Implement plugin system with HTMLBlock and MQTTTracker plugins
- Enhanced bilingual support (NL/EN) throughout the system
- Improved template system with better layout options
- Enhanced security headers and code quality
- Updated documentation and configuration examples
Version 1.5.0 represents a significant milestone with improved
documentation, plugin architecture, and bug fixes.
- Fix template variable replacement in guide pages by removing {{}} brackets
- Escape code blocks in guide markdown to prevent template processing
- Completely rewrite guide documentation with comprehensive CMS features
- Add bilingual guide support (English/Dutch) with detailed examples
- Enhance CodePressCMS core with improved guide page handling
- Update template system with better layout and footer components
- Improve language files with additional translations
- Update configuration with enhanced theme and language settings
Resolves issue where guide pages were showing replaced template variables
instead of displaying them as documentation examples.
- Add README.en.md for English documentation
- Update README.md with language selector and v1.0.0 info
- Include dual-license information (AGPL v3 + Commercial)
- Add quality metrics (Security: 100/100, Code: 98/100)
- Add comprehensive feature documentation
- Add installation and configuration guides
- Add class documentation for developers
- Add README.en.md for English documentation
- Update README.md with language selector and v1.0.0 info
- Include dual-license information (AGPL v3 + Commercial)
- Add quality metrics (Security: 100/100, Code: 98/100)
- Add comprehensive feature documentation
- Add installation and configuration guides
- Add class documentation for developers
- Remove unused functions (sanitizePageParameter, getAllPageNames, detectLanguage)
- Remove most debug error_log statements from production code
- Add structured logging system with Logger class (DEBUG/INFO/WARNING/ERROR levels)
- Implement version tracking system (version.php v1.0.0)
- Display version number in footer template
- Add comprehensive functional test suite (50+ tests, 92% pass rate)
- Add detailed improvement report with implementation status (VERBETER_RAPPORT.md)
Code quality improvements:
- 41 lines of unused code removed
- Cleaner, more maintainable codebase
- Professional logging infrastructure
- Version tracking for releases
Testing additions:
- Functional test plan with 20 categories
- Detailed test report with 50+ test cases
- 92% success rate on functional tests
Overall quality score improved from 96/100 to 98/100.
- Fix htmlspecialchars() receiving arrays instead of strings
- Add proper type checking for string, array, and other types
- Convert arrays to JSON for safe template rendering
- Remove unused German and French language files
- Add DEVELOPMENT.md with complete architecture overview
- Document exact loading order and function call sequence
- Include security checkpoints and data flow analysis
- Provide practical development workflow and coding standards
- Add getAvailableLanguages() method to scan lang directory automatically
- Add getNativeLanguageName() method for proper language display names
- Enhance SimpleTemplate engine to support array iteration with {{#array}} syntax
- Update header template to use dynamic language dropdown with native names
- Add German (de.php) and French (fr.php) language files as examples
- Fix search input text color to use black text for better visibility
- Languages now appear automatically when added to engine/lang/ without code changes
- Add search-input class to both desktop and mobile search inputs
- Set dark text color (#212529) for search input visibility
- Add placeholder styling with lighter color (#6c757d)
- Compile SCSS to CSS with new search input styles
Resolves: White text on white background issue in search fields
- Add language support documentation
- Document all template variables and configuration options
- Add URL structure and routing information
- Include directory listings and file naming conventions
- Document search functionality and SEO features
- Add breadcrumb navigation and theme customization
- Include security features and responsive design
- Update both English and Dutch guides
Guides now cover all CodePress CMS features and functions.
- Remove H1 and HTML title extraction from parse methods
- Always use formatDisplayName() for consistent filename-based titles
- Add file path parameters to parseMarkdown() and parseHTML()
- Fix directory precedence to check directories before files
- Update AGENTS.md with title vs filename clarification
- Remove debug code from templates and methods
Resolves: Page titles now consistently show file/directory names
without language prefixes and extensions, never content titles.
- Add debug output to getDirectoryListing() method
- Add debug_page_title to template data for troubleshooting
- Investigate why directory listings show 'Untitled' in footer
- Directory content shows correct H1 title but page_title is wrong
- Restrict special case handling (phpinfo, ICT) to exact filenames only
- Prevent special cases from overriding directory names like 'nl.test'
- Directory names now use formatDisplayName() without special case overrides
- This ensures 'nl.test' directory displays as 'Test' not 'Untitled'
- Add fallback in scanForPageTitles to use clean filename when no title found in content
- Extract clean filename using basename() and formatDisplayName() for page titles
- Ensures page titles are always clean (without language prefixes and extensions)
- Footer now shows correct page titles for all content types
- Consistent title handling for files, directories, and auto-linking
- Apply formatDisplayName() to directory names in getDirectoryListing()
- This ensures language prefixes are removed from directory titles
- nl.php-testen directory now displays as 'Php-testen' instead of 'Nl.php-testen'
- Footer now shows correct page titles for directories
- Consistent display naming for both files and directories
- Add regex to handle nl.php-testen -> php-testen patterns
- Remove test directories that were cluttering navigation
- Clean up content directory to remove test files
- Language filtering now works correctly for both files and directories
- Navigation shows only relevant content for selected language
- Change regex to only remove file extensions (.md, .php, .html) not all dots
- Fix en.test.md and nl.testpagina.md 404 errors caused by over-aggressive regex
- Update all references to use instead of
- Language-specific pages with dots in names now load correctly
- Pages like 'en.test.md' work as expected without being truncated to 'en'
- Add language parameter to autoLinkPageTitles() method
- Fix internal links to include current language (?page=x&lang=en)
- Remove broken header ID syntax from English guide
- Ensure all auto-generated internal links maintain language context
- Internal page links now work correctly across language switches
- Fix getPage() to search for language-specific files (en.test.md, nl.test.md)
- Correct guide file naming: uk.codepress.md → en.codepress.md
- Update scanDirectory() filtering: uk → en for consistency
- Update formatDisplayName() cleaning: uk → en for consistency
- Language-specific pages now load correctly without 404 errors
- Pages display with clean names (without language prefixes)
- Rename guide files: nl.md → nl.codepress.md, en.md → uk.codepress.md
- Add language filtering in scanDirectory() for nl.* and uk.* files/folders
- Update formatDisplayName() to remove language prefixes from display names
- Update getGuidePage() to use new naming convention (en → uk mapping)
- Content with nl. prefix only shows when Dutch language is selected
- Content with uk. prefix only shows when English language is selected
- Change getGuidePage() to use currentLanguage instead of detectLanguage()
- Add lang_switch_url template variable for proper context-aware switching
- Language switcher now stays on guide page when switching languages
- Guide content now displays in correct language based on URL parameter
- Add lang parameter to guide link in footer template
- Add lang parameter to navbar brand link in header template
- Ensures language selection persists when clicking logo or guide icon
- Completes language persistence across all navigation elements
- Add lang parameter to all navigation links in scanDirectory method
- Update homepage link in navigation template to include current language
- Fix breadcrumb navigation to preserve language parameter
- Ensure language selection persists when clicking any navigation element
- Added content/.gitkeep to track empty content directory
- Updated .gitignore to allow .gitkeep but ignore other content files
- Ensures content/ directory is visible on Git server
- Maintains security by ignoring actual content files
- Deleted all files from public/content/ that were tracked
- Content is now stored in content/ directory (ignored by .gitignore)
- Improves security by keeping content outside web root
- Matches new directory structure
- Changed from 'public/content/*' to 'content/'
- Matches new content directory structure outside web root
- Improves security by keeping content separate from public files
- Remove sidebar and toggle functionality
- Add Bootstrap navbar with dropdown menus
- Move navigation to top between header and content
- Update menu rendering for Bootstrap dropdowns
- Clean up unused files (header.mustache, sidebar.mustache, sidebar.js)
- Add guide link with book icon in footer
- Simplify layout structure
- Remove duplicate code and fix syntax errors
- Add .gitignore for node_modules and other temp files
- Move content outside public web root for security
- Consolidate all code and assets in engine/ directory
- Download Bootstrap locally for offline functionality
- Update public/ to contain only entry point files
- Add router.php for PHP development server security
- Update README.md with new structure and setup instructions
- Block direct access to content files via URL
- Maintain clean separation between content and code
- Made all breadcrumb items clickable
- Added automatic directory listing generation for folders without index files
- Folders now show a list of their contents instead of 404
- Improved navigation UX by allowing browsing through folder structure
- Changed icon to minimalist </..> design
- Unified icon.svg and favicon.svg to be identical
- Improved readability at small sizes
- Removed text in favor of abstract dots representation
- Added E.Noorlander link to footer pointing to https://noorlander.info
- Updated icons to new </CP> design (white/transparent)
- Improved footer attribution
- Updated CSS layout to use flexbox for full-height layout
- Header and footer are now fixed (flex-shrink: 0)
- Main content area scrolls independently between header and footer
- Sidebar also scrolls independently
- Ensures header and footer are always visible