119 lines
4.2 KiB
PHP
119 lines
4.2 KiB
PHP
<?php
|
|
|
|
namespace App\Modules\DynamicForms\Libraries;
|
|
|
|
class FieldRenderer
|
|
{
|
|
public static function render(array $field, array $record = []): string
|
|
{
|
|
$value = $record[$field['db_column']] ?? '';
|
|
|
|
switch ($field['type']) {
|
|
case 'date':
|
|
|
|
return '<input class="w-full border border-zinc-300 rounded px-2 py-1" '
|
|
. 'type="date" '
|
|
. 'name="' . esc($field['db_column']) . '" '
|
|
. 'value="' . esc($value) . '">';
|
|
case 'lookup':
|
|
return '<span class="font-semibold">'
|
|
. esc($value)
|
|
. '</span>';
|
|
|
|
case 'select':
|
|
|
|
$html = '<select class="w-full border border-zinc-300 rounded px-2 py-1" '
|
|
. 'name="' . esc($field['db_column']) . '">';
|
|
|
|
foreach ($field['options'] ?? [] as $option) {
|
|
|
|
$selected = ($value == $option[$field['source_value_field']]) ? 'selected' : '';
|
|
|
|
$html .= '<option value="' . $option[$field['source_value_field']] . '" ' . $selected . '>'
|
|
. esc($option[$field['source_label_field']])
|
|
. '</option>';
|
|
}
|
|
|
|
$html .= '</select>';
|
|
|
|
return $html;
|
|
|
|
case 'blob':
|
|
return '<textarea class="w-full border border-zinc-300 rounded px-2 py-1" '
|
|
. 'name="' . esc($field['db_column']) . '" rows="5">'
|
|
. esc($value)
|
|
. '</textarea>';
|
|
|
|
case 'text':
|
|
return '<input class="w-full border border-zinc-300 rounded px-2 py-1" '
|
|
. 'type="text" '
|
|
. 'name="' . esc($field['db_column']) . '" '
|
|
. 'value="' . esc($value) . '">';
|
|
|
|
case 'qr':
|
|
|
|
if (!$value) {
|
|
return '';
|
|
}
|
|
|
|
$go = "inventaire/redirect/" . $value;
|
|
|
|
$qr = new \App\Libraries\QrCodeService();
|
|
$code = $qr->get($go);
|
|
|
|
return '<img src="data:image/png;base64,' . $code . '" width="120">';
|
|
|
|
case 'boolean':
|
|
|
|
$checkedYes = ($value == 1) ? 'checked' : '';
|
|
$checkedNo = ($value == 0) ? 'checked' : '';
|
|
|
|
return '
|
|
<label><input type="radio" name="' . esc($field['db_column']) . '" value="1" ' . $checkedYes . '> Oui</label>
|
|
<label class="ml-3"><input type="radio" name="' . esc($field['db_column']) . '" value="0" ' . $checkedNo . '> Non</label>
|
|
';
|
|
case 'integer':
|
|
return '<input class="w-full border border-zinc-300 rounded px-2 py-1" '
|
|
. 'type="number" '
|
|
. 'step="1" '
|
|
. 'name="' . esc($field['db_column']) . '" '
|
|
. 'value="' . esc($value) . '">';
|
|
|
|
|
|
case 'color':
|
|
|
|
$currentValue = esc($value ?: '#000000');
|
|
$inputId = 'color_' . esc($field['db_column']);
|
|
|
|
$colors = ['#000000','#ffffff','#ff0000','#00ff00','#0000ff','#ffbf80','#ffff00','#ff00ff','#00ffff','#808080'];
|
|
|
|
$html = '<input
|
|
id="' . $inputId . '"
|
|
class="w-full h-10 border border-zinc-300 rounded px-1 py-1 mb-2"
|
|
type="color"
|
|
name="' . esc($field['db_column']) . '"
|
|
value="' . $currentValue . '">';
|
|
|
|
$html .= '<div class="flex gap-2 flex-wrap">';
|
|
|
|
foreach ($colors as $c) {
|
|
$html .= '<button
|
|
type="button"
|
|
class="w-6 h-6 rounded border border-zinc-300"
|
|
style="background:' . $c . '"
|
|
onclick="document.getElementById(\'' . $inputId . '\').value=\'' . $c . '\'">
|
|
</button>';
|
|
}
|
|
|
|
$html .= '</div>';
|
|
|
|
return $html;
|
|
default:
|
|
return '<input class="w-full border border-zinc-300 rounded px-2 py-1" '
|
|
. 'type="text" '
|
|
. 'name="' . esc($field['db_column']) . '" '
|
|
. 'value="' . esc($value) . '">';
|
|
}
|
|
}
|
|
}
|