Files
fitme3070.pt/views/admin/memberships/_form.php
andreandClaude Opus 5.5 f95c9ebc52 feat: contactos editáveis, equipa com título/aptidões, mensalidades e reviews Google
- Contactos: nova página no backoffice (fitme3070_info) e 964 201 137 como
  telefone principal; o telefone secundário só aparece quando existe.
- Equipa: título, aptidões/funções e formações; o cartão mostra foto, nome e
  título e abre um cartão horizontal de detalhe (hover no desktop, toque no
  telemóvel) sem mexer na grelha.
- Mensalidades: cartões editáveis com um destaque, modal de inscrição que
  guarda o pedido (RGPD + estado + campos reservados para o CRM) e avisa o
  ginásio por e-mail; lista de pedidos com estados, notas e CSV.
- Reviews Google via Places API (New), filtradas por classificação mínima e
  em cache configurável; página de configuração com pesquisa do Place ID.
- Assets com ?v=<mtime>: site/assets é servido com cache imutável de 1 ano.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-24 14:58:57 +01:00

64 lines
3.7 KiB
PHP

<?php
// Shared membership form fields, rendered inside the <form> of create.php and
// edit.php. Expects $data (see memberships_defaults()).
$price_val = ($data['price'] ?? '') === null ? '' : (string) ($data['price'] ?? '');
if ($price_val !== '' && is_numeric($price_val)) {
$p = (float) $price_val;
$price_val = number_format($p, floor($p) == $p ? 0 : 2, ',', '');
}
?>
<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="name" required maxlength="100" placeholder="ex.: Off-hours" value="<?= htmlspecialchars($data['name'] ?? '') ?>">
</div>
<div class="col-md-4">
<label class="form-label">Ordem</label>
<input type="number" class="form-control" name="item_order" value="<?= (int) ($data['item_order'] ?? 0) ?>">
<div class="form-text">Menor aparece primeiro.</div>
</div>
<div class="col-12">
<label class="form-label">Descrição curta</label>
<input class="form-control" name="subtitle" maxlength="255" placeholder="ex.: Mensalidade para as horas baixas do ginásio." value="<?= htmlspecialchars($data['subtitle'] ?? '') ?>">
</div>
<div class="col-md-4">
<label class="form-label">Preço (€)</label>
<input class="form-control" name="price" inputmode="decimal" placeholder="ex.: 34,90" value="<?= htmlspecialchars($price_val) ?>">
<div class="form-text">Vazio = «Sob consulta».</div>
</div>
<div class="col-md-5">
<label class="form-label">Texto do preço</label>
<input class="form-control" name="price_suffix" maxlength="60" placeholder="/mês" value="<?= htmlspecialchars($data['price_suffix'] ?? '') ?>">
<div class="form-text">ex.: «/mês» ou «acresce à mensalidade».</div>
</div>
<div class="col-md-3 d-flex align-items-center">
<div class="form-check mt-3">
<input class="form-check-input" type="checkbox" name="is_addon" id="is_addon" value="1" <?= !empty($data['is_addon']) ? 'checked' : '' ?>>
<label class="form-check-label" for="is_addon">Acresce à mensalidade <span class="text-muted small">(mostra «+»)</span></label>
</div>
</div>
<div class="col-12">
<label class="form-label">Incluído</label>
<textarea class="form-control" name="features" rows="5" placeholder="Um ponto por linha"><?= htmlspecialchars($data['features'] ?? '') ?></textarea>
</div>
<div class="col-md-4">
<label class="form-label">Texto do botão</label>
<input class="form-control" name="cta_label" maxlength="40" value="<?= htmlspecialchars($data['cta_label'] ?? 'Inscrever') ?>">
</div>
<div class="col-md-4">
<label class="form-label">Selo do destaque</label>
<input class="form-control" name="featured_label" maxlength="40" value="<?= htmlspecialchars($data['featured_label'] ?? 'Mais popular') ?>">
</div>
<div class="col-md-4 d-flex flex-column justify-content-end gap-1">
<div class="form-check">
<input class="form-check-input" type="checkbox" name="is_featured" id="is_featured" value="1" <?= !empty($data['is_featured']) ? 'checked' : '' ?>>
<label class="form-check-label" for="is_featured">Em destaque</label>
</div>
<div class="form-check">
<input class="form-check-input" type="checkbox" name="is_active" id="is_active" value="1" <?= !empty($data['is_active']) ? 'checked' : '' ?>>
<label class="form-check-label" for="is_active">Visível no site</label>
</div>
</div>
<div class="col-12"><div class="form-text mt-0">Só um cartão pode estar em destaque — ao marcar este, o anterior deixa de estar.</div></div>
</div>