refactor(shop-statuses): migrate to DI, restructure docs into docs/ folder (0.268)

- Migrate ShopStatuses module to Domain + DI architecture
- Add ShopStatusRepository, ShopStatusesController with color picker
- Convert front\factory\ShopStatuses to facade
- Add FormFieldType::COLOR with HTML5 color picker
- Move documentation files to docs/ folder (PROJECT_STRUCTURE, REFACTORING_PLAN, CHANGELOG, FORM_EDIT_SYSTEM, TESTING, DATABASE_STRUCTURE)
- Tests: 254 tests, 736 assertions

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-02-14 10:43:31 +01:00
parent 4efca23069
commit 5e5d3d068a
29 changed files with 1895 additions and 1572 deletions

View File

@@ -308,6 +308,36 @@ class FormFieldRenderer
'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 = '<div class="form-group row">';
$html .= '<label class="col-lg-4 control-label">' . $label . ':</label>';
$html .= '<div class="col-lg-8">';
$html .= '<div style="display:flex;align-items:center;gap:8px;">';
$html .= '<input type="color" id="' . $fieldId . '_picker" value="' . $colorValue . '" style="width:40px;height:34px;padding:2px;border:1px solid #ccc;cursor:pointer;" />';
$html .= '<input type="text" name="' . $fieldName . '" id="' . $fieldId . '" value="' . $colorValue . '" class="form-control" style="max-width:150px;" />';
$html .= '</div>';
$html .= '</div>';
$html .= '</div>';
$html .= '<script>$(function(){'
. 'var $p=$("#' . $fieldId . '_picker"),$t=$("#' . $fieldId . '");'
. '$p.on("input",function(){$t.val(this.value);});'
. '$t.on("input",function(){var v=this.value;if(/^#[0-9a-fA-F]{6}$/.test(v))$p.val(v);});'
. '});</script>';
return $this->wrapWithError($html, $error);
}
public function renderCustom(FormField $field): string
{
return (string)($field->customHtml ?? '');