Panel służy do przeglądu prób, analizy wyników oraz eksportu danych z diagnozy dojrzałości procesowej.
+
+
+
+ Uwaga: aktywne są domyślne dane logowania administratora (admin / admin123). Przed użyciem produkcyjnym ustaw własne wartości DIAGNOSTIC_ADMIN_USER i DIAGNOSTIC_ADMIN_PASS.
+
+
+
+
+
+
+
+
+
+
Panel administratora
+
Operacje i wyniki diagnozy
+
Przeglądaj próby respondentów, śledź skuteczność ukończenia i analizuj wyniki w poszczególnych obszarach.
Gdy użytkownik poda numer telefonu po ukończeniu diagnozy, system wyśle powiadomienie e-mail właśnie na ten adres.
+
+
+
+
+ Aktywna konfiguracja
+
+ Powiadomienia trafiają na: = htmlspecialchars((string)$notificationConfig['effective_email']) ?>
+ Źródło: ustawienie zapisane w panelu administracyjnym.
+
+ Powiadomienia tymczasowo trafią na: = htmlspecialchars((string)$notificationConfig['effective_email']) ?>
+ To fallback testowy z MAIL_TO. Ustaw adres w panelu, aby zarządzać nim bez edycji środowiska.
+
+ Brak ustawionego adresu do powiadomień.
+ Do czasu zapisania adresu w panelu e-mail o nowej prośbie o kontakt nie zostanie wysłany.
+
+
+
+
+
+
+
+
+
+
+
Integracja AI
+
Własny klucz API OpenAI
+
Zapisany tutaj klucz będzie automatycznie używany przez wszystkie obecne wywołania AI w aplikacji: diagnozę, czat i webhook Telegrama.
+
+
+
+
+
+
+
+ Aktywna konfiguracja
+
+ Zapytania AI używają własnego klucza zapisanego w panelu.
+ Zapisany klucz: = htmlspecialchars((string)$openAiConfig['masked_key']) ?>
+ Klucz jest wysyłany centralnie przez LocalAIApi, więc nie trzeba osobno zmieniać endpointów.
+
+ Brak własnego klucza OpenAI w panelu.
+ Do czasu zapisania klucza aplikacja korzysta z domyślnej konfiguracji proxy.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Lista prób
+
Ostatnie odpowiedzi
+
+ = count($attempts) ?> rekordów
+
+
+
+
Brak zapisanych prób
+
Po pierwszym wypełnieniu diagnozy przez użytkownika wyniki pojawią się tutaj automatycznie.
+ = htmlspecialchars($section['name']) ?>
+ = count($section['questions']) ?> pytań w tej sekcji.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/admin.php b/admin.php
index d5e50d1..1a67a87 100644
--- a/admin.php
+++ b/admin.php
@@ -2,132 +2,8 @@
declare(strict_types=1);
require_once __DIR__ . '/app/bootstrap.php';
-if ($_SERVER['REQUEST_METHOD'] === 'POST') {
- $action = $_POST['action'] ?? '';
- if ($action === 'login') {
- $username = trim((string)($_POST['username'] ?? ''));
- $password = (string)($_POST['password'] ?? '');
- if (diagnostic_admin_login($username, $password)) {
- diagnostic_flash_set('success', 'Sesja administratora została rozpoczęta.');
- header('Location: /admin.php');
- exit;
- }
- diagnostic_flash_set('danger', 'Nieprawidłowy login lub hasło administratora.');
- header('Location: /admin.php');
- exit;
- }
- if ($action === 'logout') {
- diagnostic_admin_logout();
- diagnostic_flash_set('info', 'Sesja administratora została zakończona.');
- header('Location: /admin.php');
- exit;
- }
- if ($action === 'save-notification-email') {
- if (!diagnostic_admin_is_authenticated()) {
- diagnostic_flash_set('warning', 'Zaloguj się jako administrator, aby zmienić adres powiadomień.');
- header('Location: /admin.php?tab=settings');
- exit;
- }
-
- $notificationEmail = trim((string)($_POST['notification_email'] ?? ''));
- if (!filter_var($notificationEmail, FILTER_VALIDATE_EMAIL)) {
- diagnostic_flash_set('danger', 'Podaj poprawny adres e-mail administratora do powiadomień o nowych prośbach o kontakt.');
- header('Location: /admin.php?tab=settings');
- exit;
- }
-
- diagnostic_admin_setting_set('admin_notification_email', $notificationEmail);
- diagnostic_flash_set('success', 'Adres e-mail administratora do powiadomień został zapisany.');
- header('Location: /admin.php?tab=settings');
- exit;
- }
- if ($action === 'save-openai-api-key') {
- if (!diagnostic_admin_is_authenticated()) {
- diagnostic_flash_set('warning', 'Zaloguj się jako administrator, aby zapisać klucz OpenAI.');
- header('Location: /admin.php?tab=settings');
- exit;
- }
-
- $openAiApiKey = preg_replace('/\s+/', '', (string)($_POST['openai_api_key'] ?? '')) ?? '';
- if (!diagnostic_openai_api_key_is_valid($openAiApiKey)) {
- diagnostic_flash_set('danger', 'Podaj poprawny klucz API OpenAI. Klucz powinien być kompletny i bez spacji.');
- header('Location: /admin.php?tab=settings');
- exit;
- }
-
- diagnostic_admin_setting_set('openai_api_key', $openAiApiKey);
- diagnostic_flash_set('success', 'Własny klucz API OpenAI został zapisany. Nowe zapytania AI będą używały tego klucza.');
- header('Location: /admin.php?tab=settings');
- exit;
- }
- if ($action === 'remove-openai-api-key') {
- if (!diagnostic_admin_is_authenticated()) {
- diagnostic_flash_set('warning', 'Zaloguj się jako administrator, aby usunąć klucz OpenAI.');
- header('Location: /admin.php?tab=settings');
- exit;
- }
-
- diagnostic_admin_setting_set('openai_api_key', null);
- diagnostic_flash_set('info', 'Zapisany klucz API OpenAI został usunięty. System wrócił do domyślnej konfiguracji proxy.');
- header('Location: /admin.php?tab=settings');
- exit;
- }
- if ($action === 'resend-report') {
- if (!diagnostic_admin_is_authenticated()) {
- diagnostic_flash_set('warning', 'Zaloguj się jako administrator, aby ponownie wysłać raport.');
- header('Location: /admin.php');
- exit;
- }
-
- $attemptId = (int)($_POST['attempt_id'] ?? 0);
- if ($attemptId <= 0) {
- diagnostic_flash_set('danger', 'Nie udało się ustalić, dla której próby należy ponownie wysłać raport.');
- header('Location: /admin.php');
- exit;
- }
-
- $result = diagnostic_admin_resend_report($attemptId);
- if (!empty($result['success'])) {
- $attempt = diagnostic_get_attempt($attemptId);
- $recipient = $attempt['email'] ?? '';
- diagnostic_flash_set('success', 'Raport został wysłany ponownie do klienta' . ($recipient !== '' ? ' (' . $recipient . ')' : '') . '.');
- } else {
- diagnostic_flash_set('danger', 'Nie udało się ponownie wysłać raportu: ' . (string)($result['error'] ?? 'Nieznany błąd.'));
- }
-
- header('Location: /admin.php?attempt=' . $attemptId);
- exit;
- }
-}
-
-if (diagnostic_admin_is_authenticated() && ($_GET['export'] ?? '') === 'csv') {
- header('Content-Type: text/csv; charset=utf-8');
- header('Content-Disposition: attachment; filename="wyniki-diagnozy-' . date('Ymd-His') . '.csv"');
- echo diagnostic_admin_export_csv();
- exit;
-}
-
-$flash = diagnostic_flash_get();
-$meta = diagnostic_meta('Panel administratora', 'Zabezpieczony panel do przeglądu prób diagnozy i wyników dojrzałości procesowej.');
-$definition = diagnostic_quiz_definition();
-$attempts = diagnostic_admin_is_authenticated() ? diagnostic_admin_attempts() : [];
-$stats = diagnostic_admin_is_authenticated() ? diagnostic_admin_stats() : [];
-$selectedAttempt = null;
-if (diagnostic_admin_is_authenticated() && isset($_GET['attempt'])) {
- $selectedAttempt = diagnostic_get_attempt((int)$_GET['attempt']);
-}
-if (!$selectedAttempt && !empty($attempts)) {
- $selectedAttempt = diagnostic_get_attempt((int)$attempts[0]['id']);
-}
-$questionMap = diagnostic_question_map();
-$credentials = diagnostic_admin_credentials();
-$notificationConfig = diagnostic_admin_is_authenticated() ? diagnostic_admin_notification_config() : ['configured_email' => '', 'fallback_email' => '', 'effective_email' => '', 'source' => 'none'];
-$openAiConfig = diagnostic_admin_is_authenticated() ? diagnostic_admin_openai_key_config() : ['configured' => false, 'masked_key' => ''];
-$currentTab = 'overview';
-if (diagnostic_admin_is_authenticated()) {
- $requestedTab = (string)($_GET['tab'] ?? 'overview');
- $currentTab = in_array($requestedTab, ['overview', 'settings'], true) ? $requestedTab : 'overview';
-}
+http_response_code(404);
+$meta = diagnostic_meta('Nie znaleziono strony', 'Ten adres panelu administracyjnego nie jest aktywny.');
?>
@@ -136,353 +12,31 @@ if (diagnostic_admin_is_authenticated()) {
= htmlspecialchars($meta['title']) ?>
-
-
-
-
-
-
-
-
-
+
-
-
-
-
-
- = htmlspecialchars($flash['message']) ?>
-
-
-
-
-
-
-
-
Strefa zabezpieczona
-
Logowanie administratora
-
Panel służy do przeglądu prób, analizy wyników oraz eksportu danych z diagnozy dojrzałości procesowej.
-
-
-
- Uwaga: aktywne są domyślne dane logowania administratora (admin / admin123). Przed użyciem produkcyjnym ustaw własne wartości DIAGNOSTIC_ADMIN_USER i DIAGNOSTIC_ADMIN_PASS.
-
-
-
-
+
+
+
+
404
+
Nie znaleziono strony
+
Ten adres panelu administracyjnego nie jest aktywny.
Gdy użytkownik poda numer telefonu po ukończeniu diagnozy, system wyśle powiadomienie e-mail właśnie na ten adres.
-
-
-
-
- Aktywna konfiguracja
-
- Powiadomienia trafiają na: = htmlspecialchars((string)$notificationConfig['effective_email']) ?>
- Źródło: ustawienie zapisane w panelu administracyjnym.
-
- Powiadomienia tymczasowo trafią na: = htmlspecialchars((string)$notificationConfig['effective_email']) ?>
- To fallback testowy z MAIL_TO. Ustaw adres w panelu, aby zarządzać nim bez edycji środowiska.
-
- Brak ustawionego adresu do powiadomień.
- Do czasu zapisania adresu w panelu e-mail o nowej prośbie o kontakt nie zostanie wysłany.
-
-
-
-
-
-
-
-
-
-
-
Integracja AI
-
Własny klucz API OpenAI
-
Zapisany tutaj klucz będzie automatycznie używany przez wszystkie obecne wywołania AI w aplikacji: diagnozę, czat i webhook Telegrama.
-
-
-
-
-
-
-
- Aktywna konfiguracja
-
- Zapytania AI używają własnego klucza zapisanego w panelu.
- Zapisany klucz: = htmlspecialchars((string)$openAiConfig['masked_key']) ?>
- Klucz jest wysyłany centralnie przez LocalAIApi, więc nie trzeba osobno zmieniać endpointów.
-
- Brak własnego klucza OpenAI w panelu.
- Do czasu zapisania klucza aplikacja korzysta z domyślnej konfiguracji proxy.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
Lista prób
-
Ostatnie odpowiedzi
-
- = count($attempts) ?> rekordów
-
-
-
-
Brak zapisanych prób
-
Po pierwszym wypełnieniu diagnozy przez użytkownika wyniki pojawią się tutaj automatycznie.
Sprawdź, na ile procesy w Twojej firmie są gotowe do wzrostu.
To narzędzie pomaga właścicielom firm, dyrektorom zarządzającym i liderom operacyjnym szybko ocenić dojrzałość operacyjną organizacji, wskazać obszary chaosu i ustalić priorytety zmian.