repository->getSettings(); $html = $this->template->render('settings/apaczka', [ 'title' => $this->translator->get('settings.apaczka.title'), 'activeMenu' => 'settings', 'activeSettings' => 'apaczka', 'user' => $this->auth->user(), 'csrfToken' => Csrf::token(), 'settings' => $settings, 'errorMessage' => (string) Flash::get('settings_error', ''), 'successMessage' => (string) Flash::get('settings_success', ''), ], 'layouts/app'); return Response::html($html); } public function save(Request $request): Response { $redirectTo = $this->resolveRedirectPath((string) $request->input('return_to', '/settings/integrations/apaczka')); if (!Csrf::validate((string) $request->input('_token', ''))) { Flash::set('settings_error', $this->translator->get('auth.errors.csrf_expired')); return Response::redirect($redirectTo); } $appId = trim((string) $request->input('app_id', '')); if ($appId === '') { Flash::set('settings_error', $this->translator->get('settings.apaczka.validation.app_id_required')); return Response::redirect($redirectTo); } try { $this->repository->saveSettings([ 'app_id' => $appId, 'app_secret' => trim((string) $request->input('app_secret', '')), ]); Flash::set('settings_success', $this->translator->get('settings.apaczka.flash.saved')); } catch (Throwable $exception) { Flash::set( 'settings_error', $this->translator->get('settings.apaczka.flash.save_failed') . ' ' . $exception->getMessage() ); } return Response::redirect($redirectTo); } public function test(Request $request): Response { $redirectTo = $this->resolveRedirectPath((string) $request->input('return_to', '/settings/integrations/apaczka')); if (!Csrf::validate((string) $request->input('_token', ''))) { Flash::set('settings_error', $this->translator->get('auth.errors.csrf_expired')); return Response::redirect($redirectTo); } try { $services = $this->repository->testConnection($this->apiClient); Flash::set('settings_success', $this->translator->get('settings.apaczka.flash.test_success', [ 'count' => (string) count($services), ])); } catch (Throwable $exception) { Flash::set( 'settings_error', $this->translator->get('settings.apaczka.flash.test_failed') . ' ' . $exception->getMessage() ); } return Response::redirect($redirectTo); } private function resolveRedirectPath(string $candidate): string { $value = trim($candidate); if ($value === '') { return '/settings/integrations/apaczka'; } if (!str_starts_with($value, '/settings/integrations')) { return '/settings/integrations/apaczka'; } return $value; } }