diff --git a/konfigurator-mail.php b/konfigurator-mail.php index 779b361..da02168 100644 --- a/konfigurator-mail.php +++ b/konfigurator-mail.php @@ -3,7 +3,7 @@ session_start(); require_once 'phpmailer/class.phpmailer.php'; require_once 'phpmailer/class.smtp.php'; -function send_email( $email, $reply, $subject, $text, $attachment = null ) +function send_email( $email, $reply, $subject, $text, $attachments = array() ) { $mail = new PHPMailer; $mail -> IsSMTP(); @@ -27,17 +27,88 @@ function send_email( $email, $reply, $subject, $text, $attachment = null ) $mail -> isHTML( true ); $mail -> Subject = $subject; $mail -> Body = $text; - - if ($attachment && isset($attachment['tmp_name']) && file_exists($attachment['tmp_name'])) { - $mail->addAttachment($attachment['tmp_name'], $attachment['name']); + + // Obsługa wielu załączników + if (is_array($attachments) && count($attachments) > 0) { + foreach ($attachments as $attachment) { + if (isset($attachment['tmp_name']) && file_exists($attachment['tmp_name'])) { + $mail->addAttachment($attachment['tmp_name'], $attachment['name']); + } + } } return $mail -> send(); } + +function validate_file($file) { + $maxSize = 10 * 1024 * 1024; // 10MB + $allowedExtensions = array('jpg', 'jpeg', 'png', 'pdf', 'doc', 'docx', 'xls', 'xlsx'); + $allowedMimeTypes = array( + 'image/jpeg', + 'image/jpg', + 'image/png', + 'application/pdf', + 'application/msword', + 'application/vnd.openxmlformats-officedocument.wordprocessingml.document', + 'application/vnd.ms-excel', + 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' + ); + + // Sprawdź czy plik istnieje + if (!isset($file['tmp_name']) || !file_exists($file['tmp_name'])) { + return array('valid' => false, 'error' => 'Plik nie istnieje'); + } + + // Sprawdź rozmiar + if ($file['size'] > $maxSize) { + return array('valid' => false, 'error' => 'Plik jest za duży (max 10MB)'); + } + + // Sprawdź rozszerzenie + $fileExtension = strtolower(pathinfo($file['name'], PATHINFO_EXTENSION)); + if (!in_array($fileExtension, $allowedExtensions)) { + return array('valid' => false, 'error' => 'Niedozwolone rozszerzenie pliku'); + } + + // Sprawdź MIME type + $finfo = finfo_open(FILEINFO_MIME_TYPE); + $mimeType = finfo_file($finfo, $file['tmp_name']); + finfo_close($finfo); + + if (!in_array($mimeType, $allowedMimeTypes)) { + return array('valid' => false, 'error' => 'Niedozwolony typ pliku'); + } + + return array('valid' => true); +} if ($_SERVER['REQUEST_METHOD'] === 'POST') { $configData = json_decode($_POST['configData'], true); - $file = isset($_FILES['attachment']) ? $_FILES['attachment'] : null; + // Pobierz wszystkie załączniki + $attachments = array(); + $attachments_count = isset($_POST['attachments_count']) ? intval($_POST['attachments_count']) : 0; + + // Walidacja liczby załączników (max 10) + if ($attachments_count > 10) { + echo json_encode(['status' => 'error', 'message' => 'Maksymalnie 10 załączników']); + exit(); + } + + for ($i = 0; $i < $attachments_count; $i++) { + $fileKey = 'attachment_' . $i; + if (isset($_FILES[$fileKey])) { + $file = $_FILES[$fileKey]; + + // Walidacja pliku + $validation = validate_file($file); + if (!$validation['valid']) { + echo json_encode(['status' => 'error', 'message' => 'Błąd walidacji pliku: ' . $validation['error']]); + exit(); + } + + $attachments[] = $file; + } + } $to = 'kontakt@ostal.pl'; $subject = 'ostal.pl - Konfigurator'; @@ -94,7 +165,18 @@ if ($_SERVER['REQUEST_METHOD'] === 'POST') { $message .= ''; } - if (send_email($to, $configData['step_4']['email'], $subject, $message, $file)) { + // Dodaj informację o załącznikach + if (count($attachments) > 0) { + $message .= '
Załączniki (' . count($attachments) . '):
'; + $message .= 'Orientacyjny budżet całorocznego ogrodu zimowego zwykle mieści się w przedziale 120 000 – 180 000 zł netto
- -
- Ogród zimowy standard z szybami Ug=1,1 na dachu i ścianach i z jednymi drzwiami tarasowymi uchylno-przesuwnymi PSK na frontowej ścianie 2,5x2,2m. Bez osłon przeciwsłonecznych (nadaje się w zacienione miejsca).
-
- Ogród zimowy Comfort z szybami Ug=1,1 na dachu i ścianach i z dwoma drzwiami tarasowymi uchylno-przesuwnymi PSK na frontowej ścianie 2,5x2,2m + boczna ściana 3 kwatery 1 skrzydło PSK + osłona przeciwsłoneczna dachu, 2 osłony Veranda ster. elektr.
-
- Ogród zimowy premium z szybami energooszczędnymi Ug=0,5 na dachu i ścianach i z dwoma drzwiami tarasowymi. 1 szt. uchylno-przesuwnymi PSK na frontowej ścianie 2,5x2,2m + 1 szt. drzwi HS na bocznej ścianie 1 skrzydło + komplet osłon przeciwsłonecznych na dachu, 2 osłony Veranda ster. elektr. z czujnikiem słońce wiatr + 1 szt. osłony przeciwsłoneczne żaluzje C80 na bocznych ścianach ster. el. + okno HS w dachu przesuwane, sterowane el. + oświetlenie punktowe LED z pilotem. Montaż na co drugiej krokwi.
-
+ - Szyby izolacyjne Ug=1,1 na dachu i ścianach.
+- 1 szt. drzwi tarasowe uchylno-przesuwnymi PSK na frontowej ścianie.
+- Bez osłon przeciwsłonecznych. (w zacienione miejsca)
+ - Szyby izolacyjne Ug=1,1 na dachu i ścianach.
+- 2 szt. drzwi tarasowych uchylno-przesuwnymi PSK na ścianie frontowej i ścianie bocznej.
+- Komplet osłon przeciwsłonecznych na dachu. 2 osłony Veranda ster. Elektr + pilot.
+ - Szyby Energooszczędne Ug=0,5 na dachu i ścianach.
+- 1 szt. drzwi tarasowych uchylno-przesuwnymi PSK na frontowej ścianie + 1 szt. drzwi unoszono przesuwne HS na bocznej ścianie.
+- Komplet osłon przeciwsłonecznych na dachu. 2 osłony Veranda ster. Elektr. + pilot + czujnik słoneczno-wiatrowy.
+- Osłony przeciwsłoneczne ścian żaluzje C80 sterowane ele. + pilot.
+- Okno HS w dachu przesuwane, sterowane ele.
+- oświetlenie punktowe LED z pilotem.
{{acfData.acf.step_4.attachment}}
- +Przeciągnij pliki tutaj lub kliknij aby wybrać
+Dozwolone: JPG, PNG, PDF, DOC, DOCX, XLS, XLSX (max 10MB każdy)
+{{ fileError }}