PNG  IHDR* pHYs+ IDATx]n#; cdLb Ǚ[at¤_:uP}>!Usă cag޿ ֵNu`ݼTâabO7uL&y^wFٝA"l[|ŲHLN밪4*sG3|Dv}?+y߉{OuOAt4Jj.u]Gz*҉sP'VQKbA1u\`& Af;HWj hsO;ogTu uj7S3/QzUr&wS`M$X_L7r2;aE+ώ%vikDA:dR+%KzƉo>eOth$z%: :{WwaQ:wz%4foɹE[9<]#ERINƻv溂E%P1i01 |Jvҗ&{b?9g=^wζXn/lK::90KwrюO\!ջ3uzuGv^;騢wq<Iatv09:tt~hEG`v;3@MNZD.1]L:{ծI3`L(÷ba")Y.iljCɄae#I"1 `3*Bdz>j<fU40⨬%O$3cGt]j%Fߠ_twJ;ABU8vP3uEԑwQ V:h%))LfraqX-ۿX]v-\9I gl8tzX ]ecm)-cgʒ#Uw=Wlێn(0hPP/ӨtQ“&J35 $=]r1{tLuǮ*i0_;NƝ8;-vݏr8+U-kruȕYr0RnC]*ެ(M:]gE;{]tg(#ZJ9y>utRDRMdr9㪩̞zֹb<ģ&wzJM"iI( .ꮅX)Qw:9,i좜\Ԛi7&N0:asϓc];=ΗOӣ APqz93 y $)A*kVHZwBƺnWNaby>XMN*45~ղM6Nvm;A=jֲ.~1}(9`KJ/V F9[=`~[;sRuk]rєT!)iQO)Y$V ی ۤmzWz5IM Zb )ˆC`6 rRa}qNmUfDsWuˤV{ Pݝ'=Kֳbg,UҘVz2ﴻnjNgBb{? ߮tcsͻQuxVCIY۠:(V뺕 ٥2;t`@Fo{Z9`;]wMzU~%UA蛚dI vGq\r82iu +St`cR.6U/M9IENDB`view = new View(); $this->db = Database::getInstance(); // BrevoService'i yükle if (file_exists(APP_PATH . '/includes/BrevoService.php')) { require_once APP_PATH . '/includes/BrevoService.php'; } } public function index() { // SEO - İletişim Sayfası (Title: 52 karakter, Description: 160 karakter) $this->view->set('page_title', 'İletişim'); $this->view->set('page_description', 'Ankara beyaz eşya kombi servisi iletişim. Çankaya ve Keçiören şubelerimiz. Telefon: 0312 466 0 667. Servis formu, fiyat teklifi ve genel iletişim formlarımız. Hemen ulaşın.'); $this->view->set('page_keywords', 'ankara beyaz eşya servisi telefon, ankara kombi servisi iletişim, anka servis telefon, çankaya servis telefon, keçiören servis telefon'); $this->view->render('contact/index'); } public function send() { if ($_SERVER['REQUEST_METHOD'] !== 'POST') { Helper::redirect(Helper::url('/iletisim')); } // CSRF kontrolü $token = $_POST['csrf_token'] ?? ''; if (!Helper::verifyCsrfToken($token)) { $_SESSION['error'] = 'Güvenlik hatası!'; Helper::redirect(Helper::url('/iletisim')); } $ipAddress = $this->enforceSpamProtection(Helper::url('/iletisim'), 3, 600); // Form verilerini al $name = trim($_POST['name'] ?? ''); $email = trim($_POST['email'] ?? ''); $phone = Helper::normalizePhone(trim($_POST['phone'] ?? '')); $subject = trim($_POST['subject'] ?? ''); $message = trim($_POST['message'] ?? ''); // Validasyon $errors = []; if (empty($name)) $errors[] = 'Ad Soyad gereklidir.'; if (empty($phone)) $errors[] = 'Telefon numarası gereklidir.'; if (empty($message)) $errors[] = 'Mesaj gereklidir.'; // E-posta opsiyonel ama girilmişse geçerli olmalı if (!empty($email) && !filter_var($email, FILTER_VALIDATE_EMAIL)) { $errors[] = 'Geçerli bir e-posta adresi giriniz.'; } if (!empty($errors)) { $_SESSION['errors'] = $errors; $_SESSION['form_data'] = $_POST; Helper::redirect(Helper::url('/iletisim')); } // Veritabanına kaydet try { $this->db->insert('contact_messages', [ 'name' => $name, 'email' => $email, 'phone' => $phone, 'subject' => $subject, 'message' => $message, 'ip_address' => $ipAddress, 'created_at' => date('Y-m-d H:i:s') ]); // Brevo ile e-posta gönder try { $brevoService = new BrevoService(); $formData = [ 'name' => $name, 'email' => $email, 'phone' => $phone, 'subject' => $subject, 'message' => $message ]; // Admin'e bildirim gönder $brevoService->sendContactFormNotification($formData); // Müşteriye onay e-postası gönder (e-posta varsa) if (!empty($email)) { $brevoService->sendCustomerContactConfirmation($formData); } } catch (Exception $e) { // E-posta gönderim hatası form gönderimini engellemez if (defined('DEBUG_MODE') && DEBUG_MODE) { error_log('E-posta gönderim hatası: ' . $e->getMessage()); } } $_SESSION['success'] = 'Mesajınız başarıyla gönderildi. En kısa sürede size dönüş yapacağız.'; } catch (Exception $e) { $_SESSION['error'] = 'Bir hata oluştu. Lütfen tekrar deneyin.'; } Helper::redirect(Helper::url('/iletisim')); } public function servisFormu() { // SEO - Servis Formu Sayfası (Title: 56 karakter, Description: 160 karakter) $this->view->set('page_title', 'Servis Talep Formu'); $this->view->set('page_description', 'Ankara beyaz eşya kombi servisi talep formu. Buzdolabı, çamaşır makinesi, bulaşık makinesi, kombi, klima ve televizyon servis talebi oluşturun. Aynı gün hizmet.'); $this->view->set('page_keywords', 'ankara servis formu, beyaz eşya servis talebi, kombi servis talebi, ankara teknik servis formu'); $this->view->render('contact/servis-formu'); } public function fiyatTeklifi() { // SEO - Fiyat Teklifi Sayfası (Title: 58 karakter, Description: 160 karakter) $this->view->set('page_title', 'Fiyat Teklifi'); $this->view->set('page_description', 'Ankara beyaz eşya kombi servisi fiyat teklifi alın. Şeffaf fiyatlandırma, gizli ücret yok. Buzdolabı, çamaşır makinesi, kombi, klima ve televizyon tamiri için ücretsiz teklif.'); $this->view->set('page_keywords', 'ankara servis fiyat teklifi, beyaz eşya tamiri fiyat, kombi tamiri fiyat, ücretsiz fiyat teklifi ankara'); $this->view->render('contact/fiyat-teklifi'); } public function servisFormuGonder() { if ($_SERVER['REQUEST_METHOD'] !== 'POST') { Helper::redirect(Helper::url('/iletisim/servis-formu')); } $token = $_POST['csrf_token'] ?? ''; if (!Helper::verifyCsrfToken($token)) { $_SESSION['error'] = 'Güvenlik hatası!'; Helper::redirect(Helper::url('/iletisim/servis-formu')); } $ipAddress = $this->enforceSpamProtection(Helper::url('/iletisim/servis-formu'), 3, 600); $name = trim($_POST['name'] ?? ''); $email = trim($_POST['email'] ?? ''); $phone = Helper::normalizePhone(trim($_POST['phone'] ?? '')); $address = trim($_POST['address'] ?? ''); $device_type = trim($_POST['device_type'] ?? ''); $device_brand = trim($_POST['device_brand'] ?? ''); $device_model = trim($_POST['device_model'] ?? ''); $problem_description = trim($_POST['problem_description'] ?? ''); $preferred_date = trim($_POST['preferred_date'] ?? ''); $preferred_time = trim($_POST['preferred_time'] ?? ''); $errors = []; if (empty($name)) $errors[] = 'Ad Soyad gereklidir.'; if (empty($phone)) $errors[] = 'Telefon numarası gereklidir.'; if (empty($device_type)) $errors[] = 'Cihaz tipi gereklidir.'; if (empty($device_brand)) $errors[] = 'Marka gereklidir.'; if (empty($problem_description)) $errors[] = 'Arıza açıklaması gereklidir.'; // E-posta opsiyonel ama girilmişse geçerli olmalı if (!empty($email) && !filter_var($email, FILTER_VALIDATE_EMAIL)) { $errors[] = 'Geçerli bir e-posta adresi giriniz.'; } if (!empty($errors)) { $_SESSION['errors'] = $errors; $_SESSION['form_data'] = $_POST; Helper::redirect(Helper::url('/iletisim/servis-formu')); } try { $this->db->insert('service_requests', [ 'name' => $name, 'email' => $email, 'phone' => $phone, 'address' => $address, 'device_type' => $device_type, 'device_brand' => $device_brand, 'device_model' => $device_model, 'problem_description' => $problem_description, 'preferred_date' => !empty($preferred_date) ? $preferred_date : null, 'preferred_time' => $preferred_time, 'ip_address' => $ipAddress, ]); // Brevo ile e-posta gönder try { $brevoService = new BrevoService(); $formData = [ 'name' => $name, 'email' => $email, 'phone' => $phone, 'address' => $address, 'device_type' => $device_type, 'device_brand' => $device_brand, 'device_model' => $device_model, 'problem_description' => $problem_description, 'service_date' => $preferred_date, 'service_time' => $preferred_time, 'city' => 'Ankara' // Varsayılan olarak Ankara ]; // Admin'e bildirim gönder (müşteriye onay e-postası da burada gönderilir) $brevoService->sendServiceNotification($formData); } catch (Exception $e) { // E-posta gönderim hatası form gönderimini engellemez if (defined('DEBUG_MODE') && DEBUG_MODE) { error_log('E-posta gönderim hatası: ' . $e->getMessage()); } } $_SESSION['success'] = 'Servis talebiniz başarıyla oluşturuldu. En kısa sürede size dönüş yapacağız.'; } catch (Exception $e) { $_SESSION['error'] = 'Bir hata oluştu. Lütfen tekrar deneyin.'; } Helper::redirect(Helper::url('/iletisim/servis-formu')); } public function fiyatTeklifiGonder() { if ($_SERVER['REQUEST_METHOD'] !== 'POST') { Helper::redirect(Helper::url('/iletisim/fiyat-teklifi')); } $token = $_POST['csrf_token'] ?? ''; if (!Helper::verifyCsrfToken($token)) { $_SESSION['error'] = 'Güvenlik hatası!'; Helper::redirect(Helper::url('/iletisim/fiyat-teklifi')); } $ipAddress = $this->enforceSpamProtection(Helper::url('/iletisim/fiyat-teklifi'), 3, 600); $name = trim($_POST['name'] ?? ''); $email = trim($_POST['email'] ?? ''); $phone = Helper::normalizePhone(trim($_POST['phone'] ?? '')); $device_type = trim($_POST['device_type'] ?? ''); $device_brand = trim($_POST['device_brand'] ?? ''); $device_model = trim($_POST['device_model'] ?? ''); $problem_description = trim($_POST['problem_description'] ?? ''); $errors = []; if (empty($name)) $errors[] = 'Ad Soyad gereklidir.'; if (empty($phone)) $errors[] = 'Telefon numarası gereklidir.'; if (empty($device_type)) $errors[] = 'Cihaz tipi gereklidir.'; if (empty($device_brand)) $errors[] = 'Marka gereklidir.'; if (empty($problem_description)) $errors[] = 'Arıza açıklaması gereklidir.'; // E-posta opsiyonel ama girilmişse geçerli olmalı if (!empty($email) && !filter_var($email, FILTER_VALIDATE_EMAIL)) { $errors[] = 'Geçerli bir e-posta adresi giriniz.'; } if (!empty($errors)) { $_SESSION['errors'] = $errors; $_SESSION['form_data'] = $_POST; Helper::redirect(Helper::url('/iletisim/fiyat-teklifi')); } try { $this->db->insert('price_quotes', [ 'name' => $name, 'email' => $email, 'phone' => $phone, 'device_type' => $device_type, 'device_brand' => $device_brand, 'device_model' => $device_model, 'problem_description' => $problem_description, 'ip_address' => $ipAddress, ]); // Brevo ile e-posta gönder try { $brevoService = new BrevoService(); $formData = [ 'name' => $name, 'email' => $email, 'phone' => $phone, 'device_type' => $device_type, 'device_brand' => $device_brand, 'device_model' => $device_model, 'problem_description' => $problem_description ]; // Admin'e bildirim gönder $brevoService->sendPriceQuoteNotification($formData); // Müşteriye onay e-postası gönder (e-posta varsa) if (!empty($email)) { $brevoService->sendCustomerPriceQuoteConfirmation($formData); } } catch (Exception $e) { // E-posta gönderim hatası form gönderimini engellemez if (defined('DEBUG_MODE') && DEBUG_MODE) { error_log('E-posta gönderim hatası: ' . $e->getMessage()); } } $_SESSION['success'] = 'Fiyat teklifi talebiniz başarıyla gönderildi. En kısa sürede size dönüş yapacağız.'; } catch (Exception $e) { $_SESSION['error'] = 'Bir hata oluştu. Lütfen tekrar deneyin.'; } Helper::redirect(Helper::url('/iletisim/fiyat-teklifi')); } private function enforceSpamProtection($redirectUrl, $rateLimitMax = 5, $timeWindow = 300) { $honeypot = trim($_POST['website'] ?? ''); $ipAddress = Helper::getIpAddress(); // Honeypot kontrolü (bot tespiti) if (!Helper::checkHoneypot($honeypot)) { $_SESSION['errors'] = ['Spam girişimi tespit edildi. Lütfen tekrar deneyin.']; $_SESSION['form_data'] = $_POST; Helper::redirect($redirectUrl); } // Rate limiting (çok fazla istek kontrolü) if (!Helper::checkRateLimit($ipAddress, $rateLimitMax, $timeWindow)) { $_SESSION['errors'] = ['Çok fazla istek gönderdiniz. Lütfen birkaç dakika sonra tekrar deneyin.']; $_SESSION['form_data'] = $_POST; Helper::redirect($redirectUrl); } return $ipAddress; } }