override = Override::getInstance(); $this->context = Context::getContext(); $this->container = ServiceContainer::getInstance(); // Admin-Berechtigung prüfen $this->checkAdminPermission(); } /** * Override-Übersicht anzeigen */ public function index() { $overrides = $this->override->getOverrideList(); $statistics = $this->override->getOverrideStatistics(); $data = [ 'overrides' => $overrides, 'statistics' => $statistics, 'page_title' => 'Override-Verwaltung', 'breadcrumb' => [ ['title' => 'Dashboard', 'url' => '/admin/dashboard'], ['title' => 'Override-Verwaltung', 'url' => '/admin/override'] ] ]; return $this->render('admin/override/index', $data); } /** * Override erstellen */ public function create() { if ($this->request->isPost()) { $this->handleCreateOverride(); } $modules = $this->getAvailableModules(); $overrideTypes = ['class', 'template', 'controller']; $data = [ 'modules' => $modules, 'override_types' => $overrideTypes, 'page_title' => 'Override erstellen', 'breadcrumb' => [ ['title' => 'Dashboard', 'url' => '/admin/dashboard'], ['title' => 'Override-Verwaltung', 'url' => '/admin/override'], ['title' => 'Override erstellen', 'url' => '/admin/override/create'] ] ]; return $this->render('admin/override/create', $data); } /** * Override bearbeiten */ public function edit($id) { $override = $this->getOverrideById($id); if (!$override) { $this->redirect('/admin/override'); } if ($this->request->isPost()) { $this->handleEditOverride($id); } $modules = $this->getAvailableModules(); $overrideTypes = ['class', 'template', 'controller']; $data = [ 'override' => $override, 'modules' => $modules, 'override_types' => $overrideTypes, 'page_title' => 'Override bearbeiten', 'breadcrumb' => [ ['title' => 'Dashboard', 'url' => '/admin/dashboard'], ['title' => 'Override-Verwaltung', 'url' => '/admin/override'], ['title' => 'Override bearbeiten', 'url' => '/admin/override/edit/' . $id] ] ]; return $this->render('admin/override/edit', $data); } /** * Override löschen */ public function delete($id) { $override = $this->getOverrideById($id); if (!$override) { $this->setFlashMessage('error', 'Override nicht gefunden'); $this->redirect('/admin/override'); } if ($this->override->removeOverride($override['override_key'], $override['module_name'])) { $this->setFlashMessage('success', 'Override erfolgreich gelöscht'); } else { $this->setFlashMessage('error', 'Fehler beim Löschen des Overrides'); } $this->redirect('/admin/override'); } /** * Override aktivieren/deaktivieren */ public function toggle($id) { $override = $this->getOverrideById($id); if (!$override) { $this->setFlashMessage('error', 'Override nicht gefunden'); $this->redirect('/admin/override'); } $newStatus = !$override['active']; if ($this->override->updateOverrideStatus($id, $newStatus)) { $statusText = $newStatus ? 'aktiviert' : 'deaktiviert'; $this->setFlashMessage('success', "Override erfolgreich $statusText"); } else { $this->setFlashMessage('error', 'Fehler beim Ändern des Override-Status'); } $this->redirect('/admin/override'); } /** * Override-Validierung */ public function validate($id) { $override = $this->getOverrideById($id); if (!$override) { $this->setFlashMessage('error', 'Override nicht gefunden'); $this->redirect('/admin/override'); } $validationResults = $this->override->validateOverride($id); $data = [ 'override' => $override, 'validation_results' => $validationResults, 'page_title' => 'Override-Validierung', 'breadcrumb' => [ ['title' => 'Dashboard', 'url' => '/admin/dashboard'], ['title' => 'Override-Verwaltung', 'url' => '/admin/override'], ['title' => 'Override-Validierung', 'url' => '/admin/override/validate/' . $id] ] ]; return $this->render('admin/override/validate', $data); } /** * Override-Backup erstellen */ public function backup($id) { $override = $this->getOverrideById($id); if (!$override) { $this->setFlashMessage('error', 'Override nicht gefunden'); $this->redirect('/admin/override'); } if ($this->override->createBackup($id)) { $this->setFlashMessage('success', 'Backup erfolgreich erstellt'); } else { $this->setFlashMessage('error', 'Fehler beim Erstellen des Backups'); } $this->redirect('/admin/override'); } /** * Override-Backup wiederherstellen */ public function restore($id, $backupId) { $override = $this->getOverrideById($id); if (!$override) { $this->setFlashMessage('error', 'Override nicht gefunden'); $this->redirect('/admin/override'); } if ($this->override->restoreBackup($id, $backupId)) { $this->setFlashMessage('success', 'Backup erfolgreich wiederhergestellt'); } else { $this->setFlashMessage('error', 'Fehler beim Wiederherstellen des Backups'); } $this->redirect('/admin/override'); } /** * Override-Statistiken */ public function statistics() { $statistics = $this->override->getOverrideStatistics(); $performanceData = $this->override->getPerformanceData(); $compatibilityData = $this->override->getCompatibilityData(); $data = [ 'statistics' => $statistics, 'performance_data' => $performanceData, 'compatibility_data' => $compatibilityData, 'page_title' => 'Override-Statistiken', 'breadcrumb' => [ ['title' => 'Dashboard', 'url' => '/admin/dashboard'], ['title' => 'Override-Verwaltung', 'url' => '/admin/override'], ['title' => 'Override-Statistiken', 'url' => '/admin/override/statistics'] ] ]; return $this->render('admin/override/statistics', $data); } /** * Override-Einstellungen */ public function settings() { if ($this->request->isPost()) { $this->handleSettingsUpdate(); } $settings = $this->override->getSettings(); $data = [ 'settings' => $settings, 'page_title' => 'Override-Einstellungen', 'breadcrumb' => [ ['title' => 'Dashboard', 'url' => '/admin/dashboard'], ['title' => 'Override-Verwaltung', 'url' => '/admin/override'], ['title' => 'Override-Einstellungen', 'url' => '/admin/override/settings'] ] ]; return $this->render('admin/override/settings', $data); } /** * Override erstellen verarbeiten */ private function handleCreateOverride() { $data = $this->request->getPost(); $validation = $this->validateOverrideData($data); if (!$validation['valid']) { $this->setFlashMessage('error', $validation['message']); return; } $overrideKey = $data['override_type'] . '_' . $data['original_path']; $overridePath = $this->override->generateOverridePath( $data['module_name'], $data['override_type'], $data['original_path'] ); // Override-Verzeichnisse erstellen $this->override->createOverrideDirectories($data['module_name']); // Override registrieren switch ($data['override_type']) { case 'class': $this->override->registerClassOverride( $data['original_path'], $overridePath, $data['module_name'] ); break; case 'template': $this->override->registerTemplateOverride( $data['original_path'], $overridePath, $data['module_name'] ); break; case 'controller': $this->override->registerControllerOverride( $data['original_path'], $overridePath, $data['module_name'] ); break; } $this->setFlashMessage('success', 'Override erfolgreich erstellt'); $this->redirect('/admin/override'); } /** * Override bearbeiten verarbeiten */ private function handleEditOverride($id) { $data = $this->request->getPost(); $validation = $this->validateOverrideData($data); if (!$validation['valid']) { $this->setFlashMessage('error', $validation['message']); return; } if ($this->override->updateOverride($id, $data)) { $this->setFlashMessage('success', 'Override erfolgreich aktualisiert'); } else { $this->setFlashMessage('error', 'Fehler beim Aktualisieren des Overrides'); } $this->redirect('/admin/override'); } /** * Override-Daten validieren */ private function validateOverrideData($data) { if (empty($data['module_name'])) { return ['valid' => false, 'message' => 'Modul-Name ist erforderlich']; } if (empty($data['override_type'])) { return ['valid' => false, 'message' => 'Override-Typ ist erforderlich']; } if (empty($data['original_path'])) { return ['valid' => false, 'message' => 'Original-Pfad ist erforderlich']; } // Prüfen ob Modul existiert if (!$this->moduleExists($data['module_name'])) { return ['valid' => false, 'message' => 'Modul existiert nicht']; } // Prüfen ob Original-Datei existiert if (!$this->originalFileExists($data['original_path'], $data['override_type'])) { return ['valid' => false, 'message' => 'Original-Datei existiert nicht']; } return ['valid' => true]; } /** * Verfügbare Module abrufen */ private function getAvailableModules() { $modulesDir = __DIR__ . '/../../../modules/'; $modules = []; if (is_dir($modulesDir)) { $moduleDirs = scandir($modulesDir); foreach ($moduleDirs as $dir) { if ($dir !== '.' && $dir !== '..' && is_dir($modulesDir . $dir)) { $configFile = $modulesDir . $dir . '/config.json'; if (file_exists($configFile)) { $config = json_decode(file_get_contents($configFile), true); $modules[$dir] = $config['name'] ?? $dir; } else { $modules[$dir] = $dir; } } } } return $modules; } /** * Override nach ID abrufen */ private function getOverrideById($id) { return $this->override->getOverrideById($id); } /** * Prüfen ob Modul existiert */ private function moduleExists($moduleName) { $modulePath = __DIR__ . '/../../../modules/' . $moduleName; return is_dir($modulePath); } /** * Prüfen ob Original-Datei existiert */ private function originalFileExists($path, $type) { $basePath = __DIR__ . '/../../../'; switch ($type) { case 'class': return file_exists($basePath . 'app/classes/' . $path); case 'template': return file_exists($basePath . 'templates/' . $path); case 'controller': return file_exists($basePath . 'app/controllers/' . $path); default: return file_exists($basePath . $path); } } /** * Einstellungen aktualisieren */ private function handleSettingsUpdate() { $data = $this->request->getPost(); foreach ($data['settings'] as $key => $value) { $this->override->updateSetting($key, $value); } $this->setFlashMessage('success', 'Einstellungen erfolgreich aktualisiert'); $this->redirect('/admin/override/settings'); } /** * Admin-Berechtigung prüfen */ private function checkAdminPermission() { $employee = $this->context->getEmployee(); if (!$employee || !$employee->hasPermission('override_management')) { $this->setFlashMessage('error', 'Keine Berechtigung für Override-Verwaltung'); $this->redirect('/admin/dashboard'); } } }