formId = $formId; $this->title = $title; $this->data = $data; $this->fields = $fields; $this->tabs = $tabs; $this->actions = $actions; $this->method = $method; $this->action = $action; $this->backUrl = $backUrl; $this->persist = $persist; $this->hiddenFields = $hiddenFields; $this->languages = $languages; $this->validationErrors = $validationErrors; } /** * Sprawdza czy formularz ma zakładki */ public function hasTabs(): bool { return count($this->tabs) > 0; } /** * Sprawdza czy formularz ma sekcje językowe */ public function hasLangSections(): bool { foreach ($this->fields as $field) { if ($field->type === FormFieldType::LANG_SECTION) { return true; } } return false; } /** * Zwraca pola dla konkretnej zakładki */ public function getFieldsForTab(string $tabId): array { return array_filter($this->fields, function (FormField $field) use ($tabId) { return $field->tabId === $tabId && $field->type !== FormFieldType::LANG_SECTION; }); } /** * Zwraca sekcje językowe dla konkretnej zakładki */ public function getLangSectionsForTab(string $tabId): array { return array_filter($this->fields, function (FormField $field) use ($tabId) { return $field->type === FormFieldType::LANG_SECTION && $field->langSectionParentTab === $tabId; }); } /** * Pobiera wartość pola z danych lub sesji (persist) */ public function getFieldValue(FormField $field, $languageId = null, ?string $langFieldName = null) { $fieldName = $field->name; // Dla sekcji językowych - pobierz wartość z data[lang_id][field_name] if ($languageId !== null && $langFieldName !== null) { $fieldName = $langFieldName; return $this->data['languages'][$languageId][$fieldName] ?? null; } // Zwykłe pole - najpierw sprawdź sesję (persist), potem dane if ($this->persist && isset($_SESSION['form_persist'][$this->formId][$fieldName])) { return $_SESSION['form_persist'][$this->formId][$fieldName]; } return $this->data[$fieldName] ?? $field->value; } /** * Sprawdza czy pole ma błąd walidacji */ public function hasError(string $fieldName, $languageId = null): bool { if ($this->validationErrors === null) { return false; } if ($languageId !== null) { return isset($this->validationErrors[$fieldName][$languageId]); } return isset($this->validationErrors[$fieldName]); } /** * Pobiera komunikat błędu dla pola */ public function getError(string $fieldName, $languageId = null): ?string { if ($languageId !== null) { return $this->validationErrors[$fieldName][$languageId] ?? null; } return $this->validationErrors[$fieldName] ?? null; } /** * Czyści dane persist z sesji */ public function clearPersist(): void { if (isset($_SESSION['form_persist'][$this->formId])) { unset($_SESSION['form_persist'][$this->formId]); } } /** * Zapisuje dane do sesji (persist) */ public function saveToPersist(array $data): void { if (!isset($_SESSION['form_persist'])) { $_SESSION['form_persist'] = []; } $_SESSION['form_persist'][$this->formId] = $data; } }