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.
This commit is contained in:
2025-11-24 16:37:39 +01:00
parent bfd6989060
commit fcedacee5f
8 changed files with 2249 additions and 41 deletions

View File

@@ -34,6 +34,13 @@ class CodePressCMS {
*/
public function __construct($config) {
$this->config = $config;
// Load version information
$versionFile = __DIR__ . '/../../../version.php';
if (file_exists($versionFile)) {
$this->config['version_info'] = include $versionFile;
}
$this->currentLanguage = $this->getCurrentLanguage();
$this->translations = $this->loadTranslations($this->currentLanguage);
$this->buildMenu();
@@ -55,23 +62,6 @@ class CodePressCMS {
return in_array($lang, $allowedLanguages) ? $lang : ($this->config['language']['default'] ?? 'nl');
}
/**
* Sanitize page parameter to prevent XSS and path traversal
*
* @param string $page Page parameter
* @return string Sanitized page parameter
*/
private function sanitizePageParameter($page) {
// Remove dangerous characters
$page = preg_replace('/[<>"\']/', '', $page);
// Prevent path traversal
$page = str_replace(['../', '..\\', '..'], '', $page);
// Limit length
$page = substr($page, 0, 255);
// HTML encode
return htmlspecialchars($page, ENT_QUOTES, 'UTF-8');
}
/**
* Get all available languages from lang directory
*
@@ -565,12 +555,6 @@ class CodePressCMS {
*
* @return array Associative array of page paths to display names
*/
private function getAllPageNames() {
$pages = [];
$this->scanForPageNames($this->config['content_dir'], '', $pages);
return $pages;
}
/**
* Recursively scan for page titles in directory
*
@@ -647,8 +631,7 @@ class CodePressCMS {
* @return string Formatted display name
*/
private function formatDisplayName($filename) {
// Debug: log input
error_log("DEBUG: formatDisplayName input: '$filename'");
// Remove language prefixes (nl. or en.) from display names
if (preg_match('/^(nl|en)\.(.+)$/', $filename, $matches)) {
@@ -802,17 +785,6 @@ class CodePressCMS {
*
* @return string Language code ('nl' or 'en')
*/
private function detectLanguage() {
// Simple language detection based on browser Accept-Language header
$acceptLanguage = $_SERVER['HTTP_ACCEPT_LANGUAGE'] ?? '';
if (strpos($acceptLanguage, 'nl') !== false) {
return 'nl';
}
return 'en'; // Default to English
}
/**
* Generate directory listing page
*
@@ -825,8 +797,7 @@ class CodePressCMS {
$pathParts = explode('/', $pagePath);
$dirName = end($pathParts);
// Debug: log what we're working with
error_log("DEBUG: getDirectoryListing - dirName: '$dirName', formatDisplayName result: '" . $this->formatDisplayName($dirName) . "'");
$title = $this->formatDisplayName($dirName) ?: 'Home';
@@ -837,7 +808,6 @@ class CodePressCMS {
];
// Debug: ensure we're returning the right title
error_log("DEBUG: getDirectoryListing returning title: '$title'");
if (!is_dir($dirPath)) {
return [
@@ -963,6 +933,7 @@ class CodePressCMS {
'author_git' => $this->config['author']['git'] ?? '#',
'seo_description' => $this->config['seo']['description'] ?? 'CodePress CMS - Lightweight file-based content management system',
'seo_keywords' => $this->config['seo']['keywords'] ?? 'cms, php, content management, file-based',
'cms_version' => isset($this->config['version_info']) ? 'v' . $this->config['version_info']['version'] : '',
// Theme colors
'header_color' => $this->config['theme']['header_color'] ?? '#0d6efd',
'header_font_color' => $this->config['theme']['header_font_color'] ?? '#ffffff',