self::CLOUDFLARE_CAPTCHA_KEY, // Technischer Name für die Identifikation 'isActive' => false, // Standardmäßig deaktiviert 'config' => [ 'siteKey' => '', 'secretKey' => '', ], ]; } public function update(Connection $connection): void { $configId = $connection->fetchOne( 'SELECT id FROM system_config WHERE configuration_key = :key AND sales_channel_id IS NULL LIMIT 1', ['key' => self::CONFIG_KEY] ); if ($configId === false) { // Fallback: Eintrag existiert nicht -> Erstelle ihn mit CloudFlare Captcha // Normalerweise existiert der Core-Eintrag bereits schon. $connection->insert('system_config', [ 'id' => Uuid::randomBytes(), 'configuration_key' => self::CONFIG_KEY, 'configuration_value' => json_encode(['_value' => [self::CLOUDFLARE_CAPTCHA_KEY => $this->getCloudflareDefaultConfig()]]), 'sales_channel_id' => null, 'created_at' => (new \DateTime())->format(Defaults::STORAGE_DATE_TIME_FORMAT), ]); return; } // Eintrag existiert, hole aktuellen Wert $currentValueJson = $connection->fetchOne( 'SELECT configuration_value FROM system_config WHERE id = :id', ['id' => $configId] ); $configValue = ['_value' => []]; // Standard, falls JSON leer oder ungültig if (!empty($currentValueJson)) { $decoded = json_decode($currentValueJson, true); if (json_last_error() === JSON_ERROR_NONE && isset($decoded['_value']) && is_array($decoded['_value'])) { $configValue = $decoded; } else { // Log oder Fehlerbehandlung, wenn JSON-Struktur kaputt ist. // Für die Migration wird mit einem leeren Array fortgesetzt oder abgebrochen. error_log('TurnstileReMaster Migration: Invalid JSON structure found for ' . self::CONFIG_KEY); // return; // Oder Abbruch, wenn es zu riskant ist } } // Prüfen, ob CloudFlare Captcha schon da ist if (isset($configValue['_value'][self::CLOUDFLARE_CAPTCHA_KEY])) { return; // Nichts zu tun } // CloudFlare Captcha hinzufügen $configValue['_value'][self::CLOUDFLARE_CAPTCHA_KEY] = $this->getCloudflareDefaultConfig(); // Aktualisierte Konfiguration speichern $connection->update( 'system_config', [ 'configuration_value' => json_encode($configValue), 'updated_at' => (new \DateTime())->format(Defaults::STORAGE_DATE_TIME_FORMAT), ], ['id' => $configId] ); } public function updateDestructive(Connection $connection): void { // Nichts zu tun hier } }