blueprint->dbGet('modpackchecker', 'curseforge_api_key'); $discord_webhook_url = $this->blueprint->dbGet('modpackchecker', 'discord_webhook_url'); $check_interval = $this->blueprint->dbGet('modpackchecker', 'check_interval'); if ($check_interval == '') { $this->blueprint->dbSet('modpackchecker', 'check_interval', 'daily'); $check_interval = 'daily'; } $license = $this->licenseService->getState(); return $this->view->make( 'admin.extensions.modpackchecker.index', [ 'curseforge_api_key' => $curseforge_api_key, 'discord_webhook_url' => $discord_webhook_url, 'check_interval' => $check_interval, 'license' => $license, 'root' => '/admin/extensions/modpackchecker', 'blueprint' => $this->blueprint, ] ); } public function update(modpackcheckerSettingsFormRequest $request): RedirectResponse { // Handle license activation $orderId = $request->input('order_id'); if (!empty($orderId)) { $currentOrderId = $this->blueprint->dbGet('modpackchecker', 'order_id'); if ($orderId !== $currentOrderId) { $result = $this->licenseService->activate($orderId); if (!$result['success']) { return redirect() ->route('admin.extensions.modpackchecker.index') ->with('error', 'License activation failed: ' . ($result['error'] ?? 'Unknown error')); } } } // Handle license deactivation if ($request->input('deactivate_license') === '1') { $this->licenseService->deactivate(); return redirect() ->route('admin.extensions.modpackchecker.index') ->with('success', 'License deactivated.'); } // Save standard settings $this->blueprint->dbSet('modpackchecker', 'curseforge_api_key', $request->input('curseforge_api_key') ?? ''); // Only save PRO-tier fields if licensed as professional if ($this->licenseService->isProFeatureAllowed()) { $this->blueprint->dbSet('modpackchecker', 'discord_webhook_url', $request->input('discord_webhook_url') ?? ''); $this->blueprint->dbSet('modpackchecker', 'check_interval', $request->input('check_interval') ?? 'daily'); } return redirect() ->route('admin.extensions.modpackchecker.index') ->with('success', 'Settings saved successfully.'); } } class modpackcheckerSettingsFormRequest extends AdminFormRequest { public function rules(): array { return [ 'order_id' => 'nullable|string|max:64', 'deactivate_license' => 'nullable|string', 'curseforge_api_key' => 'nullable|string|max:500', 'discord_webhook_url' => 'nullable|url|max:500', 'check_interval' => 'nullable|in:daily,12h,6h', ]; } public function attributes(): array { return [ 'order_id' => 'Order ID', 'curseforge_api_key' => 'CurseForge API Key', 'discord_webhook_url' => 'Discord Webhook URL', 'check_interval' => 'Check Interval', ]; } }