form = $form; } /** * Renderuje pojedyncze pole */ public function renderField(FormField $field): string { $method = 'render' . ucfirst($field->type); if (method_exists($this, $method)) { return $this->$method($field); } // Fallback dla nieznanych typów - renderuj jako text return $this->renderText($field); } /** * Renderuje pole tekstowe */ public function renderText(FormField $field): string { $value = $this->form->getFieldValue($field); $error = $this->form->getError($field->name); $params = [ 'label' => $field->label, 'name' => $field->name, 'id' => $field->id, 'value' => $value ?? '', 'type' => 'text', 'class' => ($field->required ? 'require ' : '') . ($field->attributes['class'] ?? ''), ]; if ($field->placeholder) { $params['placeholder'] = $field->placeholder; } if ($error) { $params['class'] .= ' error'; } return $this->wrapWithError(\Shared\Html\Html::input($params), $error); } /** * Renderuje pole number */ public function renderNumber(FormField $field): string { $value = $this->form->getFieldValue($field); $error = $this->form->getError($field->name); $params = [ 'label' => $field->label, 'name' => $field->name, 'id' => $field->id, 'value' => $value ?? '', 'type' => 'number', 'class' => ($field->required ? 'require ' : '') . ($field->attributes['class'] ?? ''), ]; if ($error) { $params['class'] .= ' error'; } return $this->wrapWithError(\Shared\Html\Html::input($params), $error); } /** * Renderuje pole email */ public function renderEmail(FormField $field): string { $value = $this->form->getFieldValue($field); $error = $this->form->getError($field->name); $params = [ 'label' => $field->label, 'name' => $field->name, 'id' => $field->id, 'value' => $value ?? '', 'type' => 'email', 'class' => ($field->required ? 'require ' : '') . ($field->attributes['class'] ?? ''), ]; if ($error) { $params['class'] .= ' error'; } return $this->wrapWithError(\Shared\Html\Html::input($params), $error); } /** * Renderuje pole password */ public function renderPassword(FormField $field): string { $value = $this->form->getFieldValue($field); return \Shared\Html\Html::input([ 'label' => $field->label, 'name' => $field->name, 'id' => $field->id, 'value' => $value ?? '', 'type' => 'password', 'class' => ($field->required ? 'require ' : '') . ($field->attributes['class'] ?? ''), ]); } /** * Renderuje pole daty */ public function renderDate(FormField $field): string { $value = $this->form->getFieldValue($field); $error = $this->form->getError($field->name); $params = [ 'label' => $field->label, 'name' => $field->name, 'id' => $field->id, 'value' => $value ?? '', 'type' => 'text', 'class' => 'date ' . ($field->required ? 'require ' : '') . ($field->attributes['class'] ?? ''), ]; if ($error) { $params['class'] .= ' error'; } return $this->wrapWithError(\Shared\Html\Html::input($params), $error); } /** * Renderuje pole daty i czasu */ public function renderDatetime(FormField $field): string { $value = $this->form->getFieldValue($field); return \Shared\Html\Html::input([ 'label' => $field->label, 'name' => $field->name, 'id' => $field->id, 'value' => $value ?? '', 'type' => 'text', 'class' => 'datetime ' . ($field->required ? 'require ' : '') . ($field->attributes['class'] ?? ''), ]); } /** * Renderuje przełącznik (switch) */ public function renderSwitch(FormField $field): string { $value = $this->form->getFieldValue($field); // Domyślna wartość dla nowego rekordu if ($value === null && $field->value === true) { $checked = true; } else { $checked = (bool) $value; } return \Shared\Html\Html::input_switch([ 'label' => $field->label, 'name' => $field->name, 'id' => $field->id, 'checked' => $checked, ]); } /** * Renderuje select */ public function renderSelect(FormField $field): string { $value = $this->form->getFieldValue($field); $error = $this->form->getError($field->name); $params = [ 'label' => $field->label, 'name' => $field->name, 'id' => $field->id, 'value' => $value ?? '', 'values' => $field->options, 'class' => ($field->required ? 'require ' : '') . ($field->attributes['class'] ?? ''), ]; if ($error) { $params['class'] .= ' error'; } return $this->wrapWithError(\Shared\Html\Html::select($params), $error); } /** * Renderuje textarea */ public function renderTextarea(FormField $field): string { $value = $this->form->getFieldValue($field); return \Shared\Html\Html::textarea([ 'label' => $field->label, 'name' => $field->name, 'id' => $field->id, 'value' => $value ?? '', 'rows' => $field->attributes['rows'] ?? 4, 'class' => ($field->required ? 'require ' : '') . ($field->attributes['class'] ?? ''), ]); } /** * Renderuje edytor (CKEditor) */ public function renderEditor(FormField $field): string { $value = $this->form->getFieldValue($field); return \Shared\Html\Html::textarea([ 'label' => $field->label, 'name' => $field->name, 'id' => $field->id, 'value' => $value ?? '', 'rows' => max(10, ($field->attributes['rows'] ?? 10)), 'class' => 'editor ' . ($field->required ? 'require ' : '') . ($field->attributes['class'] ?? ''), ]); } /** * Renderuje pole obrazu z filemanagerem */ public function renderImage(FormField $field): string { $value = $this->form->getFieldValue($field); $filemanagerUrl = $field->filemanagerUrl ?? $this->generateFilemanagerUrl($field->id); return \Shared\Html\Html::input_icon([ 'label' => $field->label, 'name' => $field->name, 'id' => $field->id, 'value' => $value ?? '', 'type' => 'text', 'icon_content' => 'przeglądaj', 'icon_js' => "window.open('{$filemanagerUrl}', 'filemanager', 'location=1,status=1,scrollbars=1,width=1100,height=700')", ]); } /** * Renderuje pole pliku */ public function renderFile(FormField $field): string { $value = $this->form->getFieldValue($field); if ($field->useFilemanager) { $filemanagerUrl = $field->filemanagerUrl ?? $this->generateFilemanagerUrl($field->id); return \Shared\Html\Html::input_icon([ 'label' => $field->label, 'name' => $field->name, 'id' => $field->id, 'value' => $value ?? '', 'type' => 'text', 'icon_content' => 'przeglądaj', 'icon_js' => "window.open('{$filemanagerUrl}', 'filemanager', 'location=1,status=1,scrollbars=1,width=1100,height=700')", ]); } return \Shared\Html\Html::input([ 'label' => $field->label, 'name' => $field->name, 'id' => $field->id, 'type' => 'file', 'class' => ($field->required ? 'require ' : '') . ($field->attributes['class'] ?? ''), ]); } /** * Renderuje ukryte pole */ public function renderHidden(FormField $field): string { $value = $this->form->getFieldValue($field); return 'id) . '" ' . 'value="' . htmlspecialchars($value ?? '') . '">'; } /** * Renderuje pole koloru (color picker + text input) */ public function renderColor(FormField $field): string { $value = $this->form->getFieldValue($field); $error = $this->form->getError($field->name); $colorValue = htmlspecialchars($value ?? '#000000', ENT_QUOTES, 'UTF-8'); $fieldName = htmlspecialchars($field->name, ENT_QUOTES, 'UTF-8'); $fieldId = htmlspecialchars($field->id, ENT_QUOTES, 'UTF-8'); $label = htmlspecialchars($field->label, ENT_QUOTES, 'UTF-8'); $html = '