69 Commits

Author SHA1 Message Date
b1c85fc4d0 Bump version to 1.5.0 with comprehensive documentation and plugin system
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.
2025-11-26 17:02:07 +01:00
9c5a43c5ce Fix guide template variable replacement and enhance documentation
- 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.
2025-11-26 16:50:49 +01:00
f5ac28a74e Add bilingual README documentation (NL/EN) with v1.0.0 info
- 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
2025-11-24 17:01:19 +01:00
d0bfeed9ab Implement dual-license system (AGPL v3 + Commercial)
- Add AGPL v3 license with commercial addendum (LICENSE)
- Add comprehensive license documentation (LICENSE-INFO.md)
- Add contribution guidelines with notification requirements (CONTRIBUTING.md)
- Update version.php with dual-license information

Dual-license model:
- AGPL v3 for open-source use (free, must share modifications)
- Commercial license for proprietary use (paid, €99-€2499)
- Donation tiers for supporters (€25-€1000+)

Requirements for users:
- Must notify author of modifications (via GitLab/email)
- Must create CHANGES.md documenting modifications
- Must share source code (AGPL v3) OR purchase commercial license
- Must maintain attribution to original author

Commercial licensing:
- Individual: €99 (1 developer)
- Business: €499 (10 developers)
- Enterprise: €2499 (unlimited)
- SaaS: €999/year

Contact: commercial@noorlander.info

This licensing structure protects intellectual property while supporting
the open-source community and enabling commercial revenue.
v1.0.0
2025-11-24 16:49:13 +01:00
fcedacee5f Implement code quality improvements and testing infrastructure (v1.0.0)
- 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.
2025-11-24 16:37:39 +01:00
bfd6989060 Add comprehensive security hardening and penetration testing suite
- Fix XSS vulnerability in language parameter with whitelist validation
- Add input sanitization for page parameters (HTML escaping, path traversal protection)
- Implement security headers (CSP, X-Frame-Options, X-Content-Type-Options, Referrer-Policy)
- Block PHP execution in content directory via router protection
- Add parameter length limits (255 chars max)
- Remove X-Powered-By header to prevent version disclosure
- Include automated penetration test suite (40+ security tests)
- Add comprehensive security documentation and test reports

Security improvements protect against XSS, path traversal, code injection,
command injection, template injection, and information disclosure attacks.
All 30 penetration tests pass with 100/100 security score.
2025-11-24 16:03:22 +01:00
8238f3cc22 Change default page from welkom to index 2025-11-24 15:14:26 +01:00
434334c810 Fix SimpleTemplate TypeError with array handling
- 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
2025-11-22 21:32:38 +01:00
4b9551d7e4 Add comprehensive development documentation with execution flow
- 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
2025-11-22 21:20:36 +01:00
25769cef24 Implement dynamic language system with automatic detection
- 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
2025-11-22 21:06:50 +01:00
26f382c41d Fix search input text color visibility
- 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
2025-11-22 18:52:32 +01:00
04a9406f14 Update documentation with complete feature coverage
- 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.
2025-11-22 18:12:34 +01:00
561832161e Fix title extraction to always use filename/directory name instead of content
- 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.
2025-11-22 18:00:35 +01:00
e1e3207305 Add debug logging for directory title processing
- 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
2025-11-22 17:25:26 +01:00
b92d192399 Fix formatDisplayName special cases for directory names
- 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'
2025-11-22 17:07:31 +01:00
dec50951d0 Fix page title extraction to use clean filenames
- 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
2025-11-22 16:59:54 +01:00
79569437e2 Fix directory title display to use formatDisplayName
- 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
2025-11-22 16:53:00 +01:00
b31a82001e Fix formatDisplayName for language-specific directory names
- 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
2025-11-22 16:41:36 +01:00
14a6cae499 Fix page name parsing to support dots in filenames
- 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'
2025-11-22 16:33:16 +01:00
bf2ee9c212 Fix internal markdown links and auto-linking language persistence
- 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
2025-11-22 16:28:19 +01:00
bea9cdfb0c Fix language-specific page loading and correct en/uk naming
- 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)
2025-11-22 16:21:22 +01:00
79eb010fa5 Implement language-specific content system
- 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
2025-11-22 16:14:59 +01:00
9bb21579f7 Fix guide content language and language switcher context
- 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
2025-11-22 16:05:33 +01:00
d95ef42783 Fix language persistence for guide link and navbar brand
- 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
2025-11-22 15:59:27 +01:00
2d934702cd Fix language persistence across navigation and breadcrumbs
- 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
2025-11-22 15:54:40 +01:00
ceeeb5e7b3 Add empty content directory to Git
- 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
2025-11-22 15:45:26 +01:00
0d8e02ae4b Merge branch 'development' 2025-11-22 15:42:19 +01:00
efd9e0b9ff Remove old public/content/ directory from Git
- 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
2025-11-22 15:42:09 +01:00
32c8cf9385 Merge branch 'development' 2025-11-22 15:35:04 +01:00
db39995f7e Update .gitignore: ignore content/ directory instead of public/content/
- Changed from 'public/content/*' to 'content/'
- Matches new content directory structure outside web root
- Improves security by keeping content separate from public files
2025-11-22 15:34:55 +01:00
0ef42c120e Merge branch 'development' 2025-11-22 15:30:06 +01:00
a2b7fcb1a8 ## Complete Multi-language System & Navigation Enhancement
### Features Added:
- **Multi-language Support**: Dutch/English with URL-based switching (?lang=nl|en)
- **Theme Customization**: Configurable header/navigation colors via config.json
- **Navigation Improvements**: Active states, dropdown chevron icons, visual distinction
- **Mobile Responsive**: Separate desktop/mobile search layouts
- **Template System**: Fixed rendering pipeline for all partials

### Technical Fixes:
- Fixed language file path (engine/lang/ vs engine/core/class/../lang/)
- Added template data rendering to layout template
- Implemented navigation active state for default/home page
- Added chevron icons to dropdown folders for visual distinction
- Removed hardcoded navigation opacity class for theme colors

### Files Modified:
- config.json: Added theme and language configuration
- engine/core/class/CodePressCMS.php: Multi-language and navigation logic
- engine/templates/: Enhanced header, footer, navigation, layout
- engine/lang/: Dutch and English translation files
- public/assets/css/mobile.css: Mobile responsive fixes

### Result:
Fully functional multi-language CMS with proper navigation states and theme customization.
2025-11-22 15:29:47 +01:00
e4047aaf09 Merge branch 'development' 2025-11-21 20:23:36 +01:00
863661612a ## Major CodePress CMS Enhancement
### 🚀 New Features
- **League CommonMark Integration**: Replaced basic Markdown parser with full CommonMark 2.7 support
- **Bootstrap Sass Architecture**: Modern SCSS build system with Bootstrap 5.3.8
- **Enhanced Navigation**: Uses filenames instead of H1 titles for consistency
- **Improved Styling**: Transparent navigation backgrounds, no rounded corners

### 🎨 UI/UX Improvements
- Navigation items now use formatted filenames (e.g., "kennis-boven-aantallen" → "Kennis Boven Aantallen")
- Transparent navigation backgrounds with subtle hover effects
- Removed rounded corners from first-level navigation
- 50% opacity navigation background using Bootstrap variables

### 🔧 Technical Improvements
- **Class Organization**: Extracted CodePressCMS and SimpleTemplate to separate files
- **Full PHPDoc Documentation**: Complete documentation for all methods
- **Modern Build Process**: npm scripts for SCSS compilation
- **Enhanced Markdown Support**: Tables, strikethrough, task lists, autolinks
- **Security**: Proper HTML sanitization with CommonMark

### 📦 Dependencies
- Added `league/commonmark` for professional Markdown parsing
- Added `bootstrap` for SCSS-based styling
- Updated `sass` build process

### 🐛 Bug Fixes
- Fixed content directory path configuration
- Resolved navigation title inconsistencies
- Improved Markdown bold/italic formatting
- Fixed homepage 404 issues

### 🔄 Migration Notes
- Content directory moved from `content/` to `public/content/`
- Navigation now displays filenames instead of content H1 titles
- CSS now compiled from SCSS source files

The CMS now provides a professional, modern experience with robust Markdown support and clean, maintainable code architecture.
2025-11-21 20:23:20 +01:00
dfe2df141b Complete CodePress CMS refactoring
- 🏠 Refactored layout system with flexbox
- 🎨 Implemented tab-style navigation with dropdowns
- 📱 Added responsive design with mobile support
- 🔧 Enhanced template system with content type detection
- 📝 Added comprehensive documentation (guide.md, README.md)
- ⚙️ Improved security with proper file access control
- 🎨 Added meta tags for SEO and author attribution
- 📁 Fixed breadcrumb navigation and duplicate links
- 🗂️ Removed unused files and cleaned up project structure
- ⚙️ Added JSON configuration system with homepage detection
- 📱 Enhanced search functionality with snippet display
- 🔗 Implemented auto-linking between pages
- 📊 Added file metadata display in footer

Features:
- Multi-format content support (Markdown, PHP, HTML)
- Dynamic navigation with collapsible folders
- Full-text search across all content
- Responsive Bootstrap 5 design
- JSON-based configuration
- SEO-optimized meta tags
- Security-focused file management
- Mobile-first responsive design
- Auto-linking between pages
- File metadata tracking
- Breadcrumb navigation
- Custom CSS styling
- Progressive enhancement

Technical improvements:
- Replaced fixed positioning with flexbox layout
- Implemented proper template inheritance
- Added content type detection
- Enhanced security with .htaccess
- Optimized for performance
- Added proper error handling
- Implemented caching mechanisms
- Enhanced accessibility features
2025-11-21 16:58:37 +01:00
a86809c243 Refactor: Replace sidebar with horizontal navigation bar
- 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
2025-11-21 14:23:41 +01:00
704cd0ff0c Merge branch 'e.noorlander' 2025-11-19 18:07:15 +01:00
0f1c7234b8 Implement modern sidebar navigation with hamburger menu
- Add responsive sidebar with hamburger toggle functionality
- Implement dual toggle buttons (inner/outer) for better UX
- Fix sidebar positioning to not overlap header and footer
- Add sticky footer with proper z-index layering
- Download and integrate Bootstrap source maps locally
- Optimize toggle icons: smaller, cleaner, no button styling
- Ensure sidebar respects footer boundaries
- Add smooth transitions and hover effects
- Fix active page highlighting and folder auto-expansion
- Create professional W3Schools-style navigation
- Maintain full offline capability with local assets
2025-11-19 18:02:48 +01:00
494ae7dc3b Restructure project for security and offline capability
- 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
2025-11-19 17:05:25 +01:00
277f86346d Enhance directory listing with article previews
- Replaced simple list with card-based layout
- Added article previews (title + excerpt)
- Removed rounded corners (rounded-0)
- Added 'Lees meer' button
- Improved visual hierarchy for folders vs files
2025-11-19 16:05:24 +01:00
8e781fcdc4 Enable directory browsing and clickable breadcrumbs
- 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
2025-11-19 16:02:18 +01:00
f2e06f3a75 Simplify icon design to </..> style
- 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
2025-11-19 15:52:09 +01:00
57fd9f303c Refine icon design for better readability
- Adjusted spacing between elements
- Balanced size of brackets and text
- Improved alignment of </CP> components
- Cleaner SVG path definitions
2025-11-19 15:31:13 +01:00
5f91e6c41c Update icon with larger CP text
- Increased font size of CP text to 16px
- Adjusted positioning for better balance
- Made brackets slightly wider
- Improved visual hierarchy of logo
2025-11-19 15:27:24 +01:00
fdf95cc233 Update footer with E.Noorlander link and new icons
- Added E.Noorlander link to footer pointing to https://noorlander.info
- Updated icons to new </CP> design (white/transparent)
- Improved footer attribution
2025-11-19 15:14:27 +01:00
7d3bc24e13 Fix sidebar collapse functionality
- Restored .sidebar.collapsed CSS class that was accidentally removed
- Sidebar toggle now works correctly with fixed header/footer layout
2025-11-19 15:10:14 +01:00
d948dd72a6 Make header and footer fixed
- 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
2025-11-19 15:08:20 +01:00
d1e6471502 Update footer link to point to CodePress repository
- Updated 'Powered by CodePress CMS' text to be a clickable link
- Link points to https://git.noorlander.info/E.Noorlander/CodePress
- Added target='_blank' and rel='noopener' for security
2025-11-19 15:02:25 +01:00
231c73c5af Fix breadcrumb navigation for directories
- Breadcrumb items for directories are now only clickable if an index file exists
- Prevents 404 errors when clicking on folder names in breadcrumb
- Non-clickable directory items are shown as active text
- Improves navigation UX and prevents broken links
2025-11-19 14:55:33 +01:00
a6461abede Move sidebar toggle to header and fix animation
- Moved toggle button to header (next to logo)
- Removed floating button to prevent content overlap
- Changed sidebar animation to use margin-left for proper layout reflow
- Main content now automatically expands when sidebar collapses
- Simplified JS logic for cleaner toggle behavior
2025-11-19 14:48:05 +01:00