Extrai os campos comuns (nome, cor, ícone/upload, ordem, descrição, e a biblioteca de ícones disponíveis) para _form.php, seguindo o padrão de events/ e memberships/. A diferença genuína entre criar e editar — o bloco de ícone mostra pré-visualização e checkbox "remover imagem atual" só quando já existe um registo — fica como um if ($item === null) explícito dentro do parcial, tal como o hero_image em events/. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
54 lines
3.4 KiB
PHP
54 lines
3.4 KiB
PHP
<?php
|
|
// Shared modalidade form fields, rendered inside the <form> of both create.php and
|
|
// edit.php. Expects:
|
|
// $data : associative array with every modalidades column (nome, cor, icon,
|
|
// descricao, item_order)
|
|
// $item : the existing row on edit (for the current icon preview/remove
|
|
// checkbox), or null
|
|
// $icons : rows from db_flaticon_list($pdo) — the shared icon library
|
|
$item = $item ?? null;
|
|
?>
|
|
<div class="row g-3">
|
|
<div class="col-md-8"><label class="form-label">Nome <span class="text-danger">*</span></label>
|
|
<input class="form-control" name="nome" required value="<?= htmlspecialchars($data['nome'] ?? '') ?>"></div>
|
|
<div class="col-md-4"><label class="form-label">Cor</label>
|
|
<input type="color" class="form-control form-control-color" name="cor" value="<?= htmlspecialchars($data['cor'] ?? '#808080') ?>"></div>
|
|
<?php if ($item === null): ?>
|
|
<div class="col-md-6"><label class="form-label">Ícone (nome do ficheiro)</label>
|
|
<input class="form-control" name="icon" placeholder="ex: crossfit.png" value="<?= htmlspecialchars($data['icon'] ?? '') ?>">
|
|
<div class="form-text">Escolha um da biblioteca abaixo, ou carregue um novo.</div></div>
|
|
<div class="col-md-6"><label class="form-label">Carregar imagem</label>
|
|
<input type="file" class="form-control" name="icon_file" accept=".png,.jpg,.jpeg,.gif,.webp,.svg">
|
|
<div class="form-text">Substitui o nome acima. Máx. 2 MB.</div></div>
|
|
<?php else: ?>
|
|
<div class="col-md-6"><label class="form-label">Ícone</label>
|
|
<input class="form-control" name="icon" value="<?= htmlspecialchars($data['icon'] ?? '') ?>">
|
|
<?php if (!empty($item['icon'])): ?><div class="form-text"><img src="<?= base_url('uploads/modalidades/icons/' . $item['icon']) ?>" style="height:28px;"> atual</div><?php endif; ?></div>
|
|
<div class="col-md-6"><label class="form-label">Carregar imagem</label>
|
|
<input type="file" class="form-control" name="icon_file" accept=".png,.jpg,.jpeg,.gif,.webp,.svg">
|
|
<div class="form-text">Substitui o ícone atual. Máx. 2 MB.</div>
|
|
<?php if (!empty($item['icon'])): ?>
|
|
<div class="form-check mt-2">
|
|
<input class="form-check-input" type="checkbox" name="remove_icon" id="remove_icon" value="1">
|
|
<label class="form-check-label small" for="remove_icon">Remover imagem atual</label>
|
|
</div>
|
|
<?php endif; ?></div>
|
|
<?php endif; ?>
|
|
<div class="col-md-3"><label class="form-label">Ordem</label>
|
|
<input type="number" class="form-control" name="item_order" value="<?= (int) ($data['item_order'] ?? 0) ?>" min="0"></div>
|
|
<div class="col-12"><label class="form-label">Descrição</label>
|
|
<textarea class="form-control js-wysiwyg" data-wysiwyg-height="200" name="descricao" rows="3"><?= htmlspecialchars($data['descricao'] ?? '') ?></textarea></div>
|
|
</div>
|
|
<?php if ($icons): ?>
|
|
<div class="mt-3"><label class="form-label small text-muted">Ícones disponíveis</label>
|
|
<div class="d-flex flex-wrap gap-3">
|
|
<?php foreach ($icons as $icon): ?>
|
|
<div class="text-center" style="width:90px">
|
|
<img src="<?= base_url('uploads/modalidades/icons/' . $icon['name']) ?>" alt="" style="height:28px" onerror="this.style.display='none'">
|
|
<div class="small text-muted text-truncate"><?= htmlspecialchars($icon['name']) ?></div>
|
|
</div>
|
|
<?php endforeach; ?>
|
|
</div>
|
|
</div>
|
|
<?php endif; ?>
|