{source}<?php
defined('_JEXEC') or die;
use Joomla\CMS\Factory;
use Joomla\CMS\HTML\HTMLHelper;
use Joomla\CMS\Mail\MailHelper;
use Joomla\CMS\Session\Session;
use Joomla\CMS\Uri\Uri;
$app = Factory::getApplication();
$input = $app->getInput();
$config = Factory::getConfig();
// Email del sito (Configurazione Globale)
$siteFromEmail = (string) $config->get('mailfrom');
$siteFromName = (string) $config->get('fromname');
// Helper: escape output HTML
if (!function_exists('gw_e')) {function gw_e($str) {
return htmlspecialchars((string)$str, ENT_QUOTES, 'UTF-8');
}
}
// Stato
$sentOk = false;
$errors = [];
// Valori (per ripopolare in caso di errori)
$nome = $input->getString('gw_nome', '');
$cognome = $input->getString('gw_cognome', '');
$telefono= $input->getString('gw_telefono', '');
$email = $input->getString('gw_email', '');
$motivo = $input->getString('gw_motivo', '');
// Submit?
if ($input->getMethod() === 'POST' && $input->post->getInt('gw_submit', 0) === 1)
{// CSRF token
if (!Session::checkToken())
{
$errors[] = 'Sessione scaduta. Ricarica la pagina e riprova.';
}
// Sanitizzazione base
$nome = trim($nome);
$cognome = trim($cognome);
$telefono = trim($telefono);
$email = trim($email);
$motivo = trim($motivo);
// Validazioni
if ($nome === '') $errors[] = 'Inserisci il nome.';
if ($cognome === '') $errors[] = 'Inserisci il cognome.';
if ($telefono === '') $errors[] = 'Inserisci il telefono.';
if ($email === '' || !MailHelper::isEmailAddress($email)) $errors[] = 'Inserisci una email valida.';
if ($motivo === '') $errors[] = 'Inserisci il motivo del contatto.';
// “Telefono” permissivo ma ripulito
$telefono_norm = preg_replace('/[^0-9+\s().-]/', '', $telefono);
// Se ok, invia email
if (empty($errors))
{
$mailer = Factory::getMailer();
// Oggetto
$subjectUser = 'Conferma ricezione richiesta';
$subjectAdmin = 'Nuova richiesta dal sito';
// Corpo email (testo semplice, robusto)
$fullName = $nome . ' ' . $cognome;
$bodyUser =
"Hi $fullName,
abbiamo ricevuto la tua richiesta. Ti ricontatteremo al più presto.
Riepilogo:
- Nome: $nome
- Cognome: $cognome
- Telefono: $telefono_norm
- Email: $email
- Motivo: $motivo
Grazie.";$bodyAdmin =
"Nuova richiesta dal sito:
- Nome: $nome
- Cognome: $cognome
- Telefono: $telefono_norm
- Email: $email
- Motivo: $motivo
IP: " . $input->server->getString('REMOTE_ADDR', 'n/d') . "
Pagina: " . Uri::current();// 1) Mail al gestore (da mail di sito)
$mailer->clearAllRecipients();
$mailer->setSender([$siteFromEmail, $siteFromName]);
$mailer->addRecipient($siteFromEmail); // gestore = mailfrom
$mailer->setSubject($subjectAdmin);
$mailer->setBody($bodyAdmin);
$sendAdmin = $mailer->Send();
// 2) Mail all'utente (da mail di sito)
$mailer->clearAllRecipients();
$mailer->setSender([$siteFromEmail, $siteFromName]);
$mailer->addRecipient($email);
// reply-to verso il gestore (così l’utente risponde al sito, non al nulla)
$mailer->addReplyTo([$siteFromEmail, $siteFromName]);
$mailer->setSubject($subjectUser);
$mailer->setBody($bodyUser);
$sendUser = $mailer->Send();
if ($sendAdmin !== true)
{
$errors[] = 'Invio al gestore non riuscito. Controlla configurazione email di Joomla.';
}
if ($sendUser !== true)
{
$errors[] = 'Invio conferma all’utente non riuscito. Controlla configurazione email di Joomla.';
}
if (empty($errors))
{
$sentOk = true;
// Svuota campi dopo invio
$nome = $cognome = $telefono = $email = $motivo = '';
}
}
}
?>
<style>
/* Form chiaro, pulito, “premium” */
.gw-form-wrap{
max-width: 720px;
margin: 18px auto;
padding: 18px;
border-radius: 14px;
background: #fff4d2;
border: 1px solid rgba(0,0,0,.08);
box-shadow: 0 10px 30px rgba(0,0,0,.15);
color: #111;
font-family: -apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Arial,sans-serif;
}
.gw-form-title{
font-size: 20px;
font-weight: 700;
margin: 0 0 12px;
letter-spacing: .2px;
color: #000; /* richiesto: titolo nero */
}
.gw-grid{
display: grid;
grid-template-columns: 1fr 1fr;
gap: 12px;
}
@media (max-width: 640px){
.gw-grid{ grid-template-columns: 1fr; }
}
.gw-field label{
display:block;
font-size: 12px;
margin: 6px 0 6px;
color: #000; /* richiesto: label nere */
}
/* Input + textarea: area bianca e testo nero */
.gw-field input,
.gw-field textarea{
width:100%;
box-sizing:border-box;
padding: 11px 12px;
border-radius: 10px;
border: 1px solid rgba(0,0,0,.18);
background: #ffffff; /* richiesto: bianco dentro */
color: #000000; /* richiesto: testo nero */
outline: none;
}
/* Focus coerente su tema chiaro */
.gw-field input:focus,
.gw-field textarea:focus{
border-color: rgba(120,180,255,.75);
box-shadow: 0 0 0 3px rgba(120,180,255,.22);
}
.gw-actions{
margin-top: 14px;
display:flex;
gap: 10px;
align-items:center;
}
.gw-btn{
appearance:none;
border: 0;
border-radius: 12px;
padding: 11px 16px;
font-weight: 700;
cursor:pointer;
background: rgba(120,180,255,.95);
color: rgba(0,0,0,.88);
}
.gw-btn:hover{ filter: brightness(1.05); }
.gw-note{
font-size: 12px;
color: rgba(0,0,0,.60); /* nota leggibile su sfondo chiaro */
}
.gw-alert{
margin: 10px 0 12px;
padding: 10px 12px;
border-radius: 12px;
border: 1px solid rgba(0,0,0,.10);
}
.gw-alert.ok{
background: rgba(60,200,120,.15);
border-color: rgba(60,200,120,.25);
color: #111;
}
.gw-alert.err{
background: rgba(255,80,80,.13);
border-color: rgba(255,80,80,.22);
color: #111;
}
.gw-alert ul{
margin: 6px 0 0 18px;
}
</style>
<div class="gw-form-wrap">
<div class="gw-form-title">Contattaci</div>
<?php if ($sentOk): ?>
<div class="gw-alert ok">
Richiesta inviata. Controlla la tua email per la conferma.
</div>
<?php endif; ?>
<?php if (!empty($errors)): ?>
<div class="gw-alert err">
Qualcosa non torna:
<ul>
<?php foreach ($errors as $er): ?>
<li><?php echo gw_e($er); ?></li>
<?php endforeach; ?>
</ul>
</div>
<?php endif; ?>
<form method="post" action="<?php echo gw_e(Uri::current()); ?>" autocomplete="on">
<div class="gw-grid">
<div class="gw-field">
<label for="gw_nome">Nome</label>
<input id="gw_nome" name="gw_nome" type="text" value="<?php echo gw_e($nome); ?>" required>
</div>
<div class="gw-field">
<label for="gw_cognome">Cognome</label>
<input id="gw_cognome" name="gw_cognome" type="text" value="<?php echo gw_e($cognome); ?>" required>
</div>
<div class="gw-field">
<label for="gw_telefono">Telefono</label>
<input id="gw_telefono" name="gw_telefono" type="tel" value="<?php echo gw_e($telefono); ?>" required>
</div>
<div class="gw-field">
<label for="gw_email">Email</label>
<input id="gw_email" name="gw_email" type="email" value="<?php echo gw_e($email); ?>" required>
</div>
<div class="gw-field" style="grid-column: 1 / -1;">
<label for="gw_motivo">Motivo del contatto</label>
<textarea id="gw_motivo" name="gw_motivo" rows="5" required><?php echo gw_e($motivo); ?></textarea>
</div>
</div>
<div class="gw-actions">
<button class="gw-btn" type="submit">Invia</button>
<div class="gw-note">Invieremo una conferma alla tua email e notificheremo il gestore.</div>
</div>
<input type="hidden" name="gw_submit" value="1">
<?php echo HTMLHelper::_('form.token'); ?>
</form>
</div>{/source}