| Server IP : 54.37.205.81 / Your IP : 216.73.216.76 Web Server : nginx/1.22.1 System : Linux vps-249481fa 6.1.0-50-cloud-amd64 #1 SMP PREEMPT_DYNAMIC Debian 6.1.176-1 (2026-07-02) x86_64 User : debian ( 1000) PHP Version : 8.2.32 Disable Function : NONE MySQL : OFF | cURL : ON | WGET : ON | Perl : ON | Python : OFF | Sudo : ON | Pkexec : OFF Directory : /var/www/cameramodaitalia.it/public/wp-content/themes/camera-regionale-moda/ |
Upload File : |
<?php
/**
* Template Name: Contatti (tema blu/bianco) + CV & marketing
* Description: Pagina contatti con header/footer del tema, layout pulito (no conflitti), upload PDF, consenso marketing, invio a info@cameramodaitalia.it
*/
defined('ABSPATH') || exit;
get_header();
// ===== Config =====
$recipient_email = 'info@cameramodaitalia.it';
$max_file_size = 5 * 1024 * 1024; // 5MB
$allowed_mimes = ['pdf' => 'application/pdf'];
// ===== Logica invio =====
$sent_ok = false;
$errors = [];
$old = ['nome'=>'','email'=>'','telefono'=>'','oggetto'=>'','messaggio'=>'','privacy'=>'','marketing'=>''];
$uploaded_path = null;
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
// Honeypot
if (!empty($_POST['company'])) {
$errors[] = 'Richiesta non valida.';
} else {
// Nonce
if (!isset($_POST['_crmi_nonce']) || !wp_verify_nonce($_POST['_crmi_nonce'], 'crmi_contatti')) {
$errors[] = 'Token non valido. Ricarica la pagina.';
}
// Sanitize
$old['nome'] = sanitize_text_field($_POST['nome'] ?? '');
$old['email'] = sanitize_email($_POST['email'] ?? '');
$old['telefono'] = sanitize_text_field($_POST['telefono'] ?? '');
$old['oggetto'] = sanitize_text_field($_POST['oggetto'] ?? '');
$old['messaggio'] = sanitize_textarea_field($_POST['messaggio'] ?? '');
$old['privacy'] = isset($_POST['privacy']) ? '1' : '';
$old['marketing'] = isset($_POST['marketing']) ? '1' : '';
// Validazioni base
if ($old['nome'] === '') $errors[] = 'Inserisci il nome.';
if ($old['email'] === '' || !is_email($old['email'])) $errors[] = 'Email non valida.';
if ($old['messaggio'] === '') $errors[] = 'Scrivi un messaggio.';
if ($old['privacy'] !== '1') $errors[] = 'Accetta l’informativa privacy.';
// Validazione upload (opzionale)
if (!empty($_FILES['cv']['name'] ?? '')) {
$file = $_FILES['cv'];
if (!empty($file['error']) && $file['error'] !== UPLOAD_ERR_OK) {
$errors[] = 'Errore durante il caricamento del file (codice '.$file['error'].').';
} else {
if ((int)$file['size'] > $max_file_size) {
$errors[] = 'Il file supera la dimensione massima di 5MB.';
} else {
$check = wp_check_filetype_and_ext($file['tmp_name'], $file['name'], $allowed_mimes);
if (!$check['ext'] || !$check['type'] || $check['ext'] !== 'pdf') {
$errors[] = 'Carica un PDF valido.';
}
}
}
}
// Se ok, prepara upload e invio
$attachments = [];
if (!$errors && !empty($_FILES['cv']['name'])) {
require_once ABSPATH . 'wp-admin/includes/file.php';
$uploaded = wp_handle_upload($_FILES['cv'], [
'test_form' => false,
'mimes' => $allowed_mimes,
]);
if (!empty($uploaded['error'])) {
$errors[] = 'Errore upload: ' . $uploaded['error'];
} elseif (!empty($uploaded['file'])) {
$uploaded_path = $uploaded['file'];
$attachments[] = $uploaded_path;
} else {
$errors[] = 'Impossibile completare l’upload del file.';
}
}
if (!$errors) {
$subject = $old['oggetto'] !== '' ? $old['oggetto'] : 'Nuovo messaggio dal form contatti';
$body = "Hai ricevuto un nuovo messaggio dal form contatti:\n\n";
$body .= "Nome: {$old['nome']}\n";
$body .= "Email: {$old['email']}\n";
$body .= "Telefono: {$old['telefono']}\n";
$body .= "Oggetto: {$old['oggetto']}\n";
$body .= "Consenso marketing: " . ($old['marketing'] === '1' ? 'Sì' : 'No') . "\n\n";
$body .= "Messaggio:\n{$old['messaggio']}\n\n";
$body .= "Pagina: " . get_permalink() . "\n";
$headers = [
'Content-Type: text/plain; charset=UTF-8',
'Reply-To: ' . $old['nome'] . ' <' . $old['email'] . '>',
'From: Camera Moda Italia <' . $recipient_email . '>',
];
$sent_ok = wp_mail($recipient_email, $subject, $body, $headers, $attachments);
// Pulizia file temporaneo (GDPR-friendly)
if ($uploaded_path && file_exists($uploaded_path)) {
@unlink($uploaded_path);
}
if ($sent_ok) {
$old = ['nome'=>'','email'=>'','telefono'=>'','oggetto'=>'','messaggio'=>'','privacy'=>'','marketing'=>''];
} else {
$errors[] = 'Errore durante l’invio. Riprova più tardi.';
}
}
}
}
// ID univoco form
$form_id = 'crmi-form-' . wp_generate_password(6, false, false);
?>
<style>
/* ===== Layout scoped: NIENTE classi generiche per evitare sfasamenti ===== */
.crmi-contact { --brand: var(--wp--preset--color--primary, #0d47a1); --ink:#0f172a; --muted:#64748b; --card:#fff; --ring:#e5e7eb; }
.crmi-contact * { box-sizing: border-box; }
.crmi-shell { max-width: 1140px; margin: 0 auto; padding: 20px; }
.crmi-hero {
background: linear-gradient(135deg, var(--brand), #0b3a85);
color: #fff; border-radius: 18px; padding: 32px 24px; margin: 10px 0 22px; }
.crmi-hero h1 { margin: 0 0 6px; font-size: clamp(26px, 4vw, 40px); }
.crmi-hero p { margin: 0; opacity: .95; }
.crmi-grid { display: grid; gap: 22px; grid-template-columns: minmax(0, 1.1fr) minmax(0, .9fr); align-items: start; }
.crmi-card { background: var(--card); border: 1px solid var(--ring); border-radius: 14px; padding: 22px; }
.crmi-card h2 { margin: 0 0 12px; color: var(--brand); font-size: 20px; }
.crmi-form { display: grid; gap: 14px; }
.crmi-row { display: grid; grid-template-columns: 1fr 1fr; gap: 14px; } /* niente .row del tema */
.crmi-label { font-weight: 600; font-size: 14px; color: var(--ink); display:block; margin-bottom:6px; }
.crmi-input, .crmi-textarea, .crmi-file {
width: 100%; padding: 12px 14px; font-size: 16px; color: var(--ink);
border: 1px solid var(--ring); border-radius: 10px; background: #fff;
outline: none; transition: border-color .2s, box-shadow .2s;
}
.crmi-input:focus, .crmi-textarea:focus, .crmi-file:focus { border-color: var(--brand); box-shadow: 0 0 0 4px rgba(13,71,161,.15); }
.crmi-textarea { min-height: 140px; resize: vertical; }
.crmi-actions { display: flex; gap: 12px; align-items: center; flex-wrap: wrap; }
.crmi-btn {
appearance: none; border: none; cursor: pointer; background: var(--brand); color: #fff; font-weight: 700;
padding: 12px 18px; border-radius: 10px; transition: filter .2s, transform .05s; }
.crmi-btn:hover { filter: brightness(1.05); }
.crmi-btn:active { transform: translateY(1px); }
.crmi-muted { color: var(--muted); font-size: 14px; }
.crmi-help { font-size: 13px; color: var(--muted); margin-top: -4px; }
.crmi-alert { padding: 12px 14px; border-radius: 10px; margin-bottom: 14px; font-weight: 600; }
.crmi-alert-ok { background: #e6f2ff; color: #0b3a85; border: 1px solid #bfd7ff; }
.crmi-alert-err { background: #fff2f2; color: #8a1320; border: 1px solid #ffd6d6; }
.crmi-list { list-style: none; margin: 0; padding: 0; }
.crmi-list li { padding: 10px 0; border-bottom: 1px dashed #eaeaea; display: grid; grid-template-columns: 140px 1fr; gap: 10px; }
.crmi-list li:last-child { border-bottom: none; }
.crmi-map { border-radius: 12px; overflow: hidden; border: 1px solid var(--ring); margin-top: 12px; }
.crmi-map iframe { width: 100%; height: 240px; border: 0; display:block; }
/* Honeypot nascosto */
.crmi-hp { position: absolute !important; left: -50000px !important; }
@media (max-width: 980px) {
.crmi-grid { grid-template-columns: 1fr; }
.crmi-list li { grid-template-columns: 1fr; }
.crmi-row { grid-template-columns: 1fr; }
}
</style>
<main class="crmi-contact">
<div class="crmi-shell">
<section class="crmi-hero" role="banner" aria-label="Contattaci">
<h1><?php echo esc_html(get_the_title() ?: 'Contattaci'); ?></h1>
<p>Per informazioni su eventi, corsi e partnership scrivici: rispondiamo il prima possibile.</p>
</section>
<div class="crmi-grid" role="region" aria-label="Contatti e modulo">
<div class="crmi-card" aria-labelledby="form-title">
<h2 id="form-title">Scrivici</h2>
<?php if ($sent_ok): ?>
<div class="crmi-alert crmi-alert-ok" role="status" aria-live="polite">✅ Messaggio inviato con successo.</div>
<?php endif; ?>
<?php if ($errors): ?>
<div class="crmi-alert crmi-alert-err" role="alert" aria-live="assertive">
❌ Controlla i seguenti errori:
<ul>
<?php foreach ($errors as $e): ?>
<li><?php echo esc_html($e); ?></li>
<?php endforeach; ?>
</ul>
</div>
<?php endif; ?>
<form class="crmi-form" id="<?php echo esc_attr($form_id); ?>" method="post" action="<?php echo esc_url(get_permalink()); ?>" enctype="multipart/form-data" novalidate>
<?php wp_nonce_field('crmi_contatti', '_crmi_nonce'); ?>
<!-- Honeypot -->
<div class="crmi-hp">
<label>Company <input type="text" name="company" tabindex="-1" autocomplete="off"></label>
</div>
<div class="crmi-row">
<div>
<label class="crmi-label" for="nome">Nome e cognome *</label>
<input class="crmi-input" id="nome" name="nome" type="text" required autocomplete="name" value="<?php echo esc_attr($old['nome']); ?>">
</div>
<div>
<label class="crmi-label" for="email">Email *</label>
<input class="crmi-input" id="email" name="email" type="email" required autocomplete="email" value="<?php echo esc_attr($old['email']); ?>">
</div>
</div>
<div class="crmi-row">
<div>
<label class="crmi-label" for="telefono">Telefono</label>
<input class="crmi-input" id="telefono" name="telefono" type="tel" inputmode="tel" autocomplete="tel" value="<?php echo esc_attr($old['telefono']); ?>">
</div>
<div>
<label class="crmi-label" for="oggetto">Oggetto</label>
<input class="crmi-input" id="oggetto" name="oggetto" type="text" value="<?php echo esc_attr($old['oggetto']); ?>">
</div>
</div>
<div>
<label class="crmi-label" for="messaggio">Messaggio *</label>
<textarea class="crmi-textarea" id="messaggio" name="messaggio" required placeholder="Raccontaci come possiamo aiutarti..."><?php echo esc_textarea($old['messaggio']); ?></textarea>
</div>
<div>
<label class="crmi-label" for="cv">Allega CV (PDF, max 5MB)</label>
<input class="crmi-file" id="cv" name="cv" type="file" accept="application/pdf">
<p class="crmi-help">Carica solo file in formato PDF. Il file viene eliminato dopo l’invio.</p>
</div>
<div class="crmi-actions">
<label class="crmi-muted">
<input type="checkbox" name="marketing" value="1" <?php checked($old['marketing'], '1'); ?>>
Acconsento a ricevere comunicazioni marketing (eventi, corsi, novità).
</label>
</div>
<div class="crmi-actions">
<label class="crmi-muted">
<input type="checkbox" name="privacy" value="1" <?php checked($old['privacy'], '1'); ?> required>
Ho letto l’<a href="<?php echo esc_url(home_url('/privacy-policy')); ?>" target="_blank" rel="noopener">informativa privacy</a>.
</label>
</div>
<div class="crmi-actions">
<button class="crmi-btn" type="submit">Invia</button>
<span class="crmi-muted">* campi obbligatori</span>
</div>
</form>
</div>
<aside class="crmi-card">
<h2>Contatti</h2>
<ul class="crmi-list" aria-label="Informazioni di contatto">
<li><strong>Email</strong><span><?php echo esc_html($recipient_email); ?></span></li>
<li><strong>Telefono</strong><span>+39 055 747 8076</span></li>
<li><strong>Indirizzo</strong><span>Via Pier Capponi,42 Firenze Italia</span></li>
</ul>
<div class="crmi-map">
<!-- Sostituisci src con la tua mappa -->
<iframe loading="lazy" referrerpolicy="no-referrer-when-downgrade"
src="https://www.google.com/maps/embed?pb=!1m18!1m12!1m3!1d11586.0!2d10.0!3d43.9!2m3!1f0!2f0!3f0!3m2!1i1024!2i768!4f13.1!5e0!3m2!1sit!2sit!4v1699999999"></iframe>
</div>
</aside>
</div>
</div>
</main>
<?php get_footer(); ?>