/** * HKS Landing Page Plugin - Dynamic & Secure * * @package HKS_Landing * @version 2.0.0 * @author Hakan Hoca * * Security Features: * - CSRF Protection (WordPress Nonces) * - SQL Injection Prevention (Prepared Statements) * - XSS Protection (Data Sanitization) * - Rate Limiting * - Honeypot Field * - IP Logging * * Clean Code: * - PSR-12 Standards * - Single Responsibility Principle * - DRY (Don't Repeat Yourself) * - Modular Architecture */ /* Plugin Name: HKS Landing Page Dynamic Description: Dinamik, güvenli ve clean code ile yazılmış landing page sistemi Version: 2.0.0 Author: Hakan Hoca Text Domain: hks-landing */ if (!defined('ABSPATH')) { exit; // Doğrudan erişimi engelle } /** * Main Plugin Class */ class HKS_Landing_Plugin { /** * Plugin version */ private const VERSION = '2.0.0'; /** * Database table name */ private const TABLE_NAME = 'hks_applications'; /** * Nonce action */ private const NONCE_ACTION = 'hks_form_submit'; /** * Rate limit: max submissions per IP per hour */ private const RATE_LIMIT = 5; /** * Singleton instance */ private static $instance = null; /** * Get singleton instance */ public static function get_instance() { if (self::$instance === null) { self::$instance = new self(); } return self::$instance; } /** * Constructor */ private function __construct() { $this->init_hooks(); } /** * Initialize WordPress hooks */ private function init_hooks() { register_activation_hook(__FILE__, [$this, 'activate']); register_deactivation_hook(__FILE__, [$this, 'deactivate']); add_action('wp_ajax_hks_submit_form', [$this, 'handle_form_submission']); add_action('wp_ajax_nopriv_hks_submit_form', [$this, 'handle_form_submission']); add_action('admin_menu', [$this, 'add_admin_menu']); add_action('wp_enqueue_scripts', [$this, 'enqueue_scripts']); add_shortcode('hks_landing', [$this, 'render_landing_page']); } /** * Plugin activation */ public function activate() { $this->create_database_table(); $this->set_default_options(); flush_rewrite_rules(); } /** * Plugin deactivation */ public function deactivate() { flush_rewrite_rules(); } /** * Create database table */ private function create_database_table() { global $wpdb; $table_name = $wpdb->prefix . self::TABLE_NAME; $charset_collate = $wpdb->get_charset_collate(); $sql = "CREATE TABLE IF NOT EXISTS {$table_name} ( id bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT, name varchar(255) NOT NULL, phone varchar(50) NOT NULL, exam varchar(50) NOT NULL, field varchar(50) NOT NULL, target_score int(3) NOT NULL, daily_hours decimal(3,1) NOT NULL, message text, ip_address varchar(45) NOT NULL, user_agent text, status varchar(20) DEFAULT 'pending', created_at datetime DEFAULT CURRENT_TIMESTAMP, updated_at datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, PRIMARY KEY (id), KEY ip_address (ip_address), KEY created_at (created_at), KEY status (status) ) {$charset_collate};"; require_once ABSPATH . 'wp-admin/includes/upgrade.php'; dbDelta($sql); } /** * Set default options */ private function set_default_options() { $defaults = [ 'hks_whatsapp_number' => '905052991316', 'hks_enable_notifications' => '1', 'hks_notification_email' => get_option('admin_email'), 'hks_recaptcha_site_key' => '', 'hks_recaptcha_secret_key' => '', ]; foreach ($defaults as $key => $value) { if (get_option($key) === false) { add_option($key, $value); } } } /** * Handle form submission via AJAX */ public function handle_form_submission() { try { // Security: Verify nonce if (!isset($_POST['nonce']) || !wp_verify_nonce($_POST['nonce'], self::NONCE_ACTION)) { throw new Exception('Güvenlik doğrulaması başarısız.'); } // Security: Check honeypot if (!empty($_POST['website'])) { throw new Exception('Bot tespit edildi.'); } // Security: Verify reCAPTCHA v3 if configured $this->verify_recaptcha_token($_POST['recaptcha_token'] ?? ''); // Security: Rate limiting $this->check_rate_limit(); // Validate and sanitize input $data = $this->validate_and_sanitize_input($_POST); // Save to database $application_id = $this->save_application($data); // Send notification $this->send_notification($data, $application_id); // Success response wp_send_json_success([ 'message' => 'Başvurunuz alındı! En kısa sürede WhatsApp\'tan dönüş yapacağım.', 'application_id' => $application_id, ]); } catch (Exception $e) { // Error response wp_send_json_error([ 'message' => $e->getMessage(), ]); } } /** * Check rate limit */ private function check_rate_limit() { global $wpdb; $ip = $this->get_client_ip(); $table_name = $wpdb->prefix . self::TABLE_NAME; $one_hour_ago = date('Y-m-d H:i:s', strtotime('-1 hour')); $count = $wpdb->get_var($wpdb->prepare( "SELECT COUNT(*) FROM {$table_name} WHERE ip_address = %s AND created_at > %s", $ip, $one_hour_ago )); if ($count >= self::RATE_LIMIT) { throw new Exception('Çok fazla başvuru yaptınız. Lütfen 1 saat sonra tekrar deneyin.'); } } /** * Validate and sanitize input */ private function validate_and_sanitize_input($post_data) { $data = []; // Name validation if (empty($post_data['name'])) { throw new Exception('Ad Soyad alanı zorunludur.'); } $data['name'] = sanitize_text_field($post_data['name']); // Phone validation if (empty($post_data['phone'])) { throw new Exception('Telefon alanı zorunludur.'); } $phone = sanitize_text_field($post_data['phone']); if (!preg_match('/^[0-9\s\+\-\(\)]+$/', $phone)) { throw new Exception('Geçersiz telefon numarası.'); } $data['phone'] = $phone; // Exam validation if (empty($post_data['exam']) || !in_array($post_data['exam'], ['yokdil', 'yds'])) { throw new Exception('Geçersiz sınav seçimi.'); } $data['exam'] = sanitize_text_field($post_data['exam']); // Field validation if (empty($post_data['field']) || !in_array($post_data['field'], ['saglik', 'fen', 'sosyal'])) { throw new Exception('Geçersiz alan seçimi.'); } $data['field'] = sanitize_text_field($post_data['field']); // Target score validation $target = intval($post_data['target']); if ($target < 50 || $target > 100) { throw new Exception('Hedef puan 50-100 arasında olmalıdır.'); } $data['target_score'] = $target; // Daily hours validation $daily = floatval($post_data['daily']); if ($daily < 1 || $daily > 10) { throw new Exception('Günlük çalışma süresi 1-10 saat arasında olmalıdır.'); } $data['daily_hours'] = $daily; // Message (optional) $data['message'] = !empty($post_data['message']) ? sanitize_textarea_field($post_data['message']) : ''; // Additional data $data['ip_address'] = $this->get_client_ip(); $data['user_agent'] = sanitize_text_field($_SERVER['HTTP_USER_AGENT'] ?? ''); return $data; } /** * Save application to database */ private function save_application($data) { global $wpdb; $table_name = $wpdb->prefix . self::TABLE_NAME; $result = $wpdb->insert( $table_name, $data, [ '%s', // name '%s', // phone '%s', // exam '%s', // field '%d', // target_score '%f', // daily_hours '%s', // message '%s', // ip_address '%s', // user_agent ] ); if ($result === false) { throw new Exception('Veritabanı hatası. Lütfen tekrar deneyin.'); } return $wpdb->insert_id; } /** * Send notification email */ private function send_notification($data, $application_id) { if (get_option('hks_enable_notifications') !== '1') { return; } $to = get_option('hks_notification_email'); $subject = 'Yeni HKS Başvurusu - ' . $data['name']; $message = "Yeni bir başvuru alındı:\n\n"; $message .= "Başvuru ID: {$application_id}\n"; $message .= "Ad Soyad: {$data['name']}\n"; $message .= "Telefon: {$data['phone']}\n"; $message .= "Sınav: " . strtoupper($data['exam']) . "\n"; $message .= "Alan: " . ucfirst($data['field']) . "\n"; $message .= "Hedef Puan: {$data['target_score']}\n"; $message .= "Günlük Süre: {$data['daily_hours']} saat\n"; if (!empty($data['message'])) { $message .= "Mesaj: {$data['message']}\n"; } $message .= "\nIP: {$data['ip_address']}\n"; $message .= "Tarih: " . date('d.m.Y H:i') . "\n"; wp_mail($to, $subject, $message); } /** * Get client IP address */ private function get_client_ip() { $ip_keys = [ 'HTTP_CLIENT_IP', 'HTTP_X_FORWARDED_FOR', 'HTTP_X_FORWARDED', 'HTTP_X_CLUSTER_CLIENT_IP', 'HTTP_FORWARDED_FOR', 'HTTP_FORWARDED', 'REMOTE_ADDR' ]; foreach ($ip_keys as $key) { if (array_key_exists($key, $_SERVER) === true) { foreach (explode(',', $_SERVER[$key]) as $ip) { $ip = trim($ip); if (filter_var($ip, FILTER_VALIDATE_IP) !== false) { return $ip; } } } } return '0.0.0.0'; } /** * Add admin menu */ public function add_admin_menu() { add_menu_page( 'HKS Başvurular', 'HKS Başvurular', 'manage_options', 'hks-applications', [$this, 'render_admin_page'], 'dashicons-welcome-learn-more', 30 ); add_submenu_page( 'hks-applications', 'HKS Ayarlar', 'Ayarlar', 'manage_options', 'hks-settings', [$this, 'render_settings_page'] ); } /** * Render admin page */ public function render_admin_page() { global $wpdb; $table_name = $wpdb->prefix . self::TABLE_NAME; // Handle status update if (isset($_POST['update_status']) && isset($_POST['application_id'])) { check_admin_referer('hks_update_status'); $application_id = intval($_POST['application_id']); $status = sanitize_text_field($_POST['status']); $wpdb->update( $table_name, ['status' => $status], ['id' => $application_id], ['%s'], ['%d'] ); echo '

Durum güncellendi.

'; } // Get applications $applications = $wpdb->get_results( "SELECT * FROM {$table_name} ORDER BY created_at DESC LIMIT 100" ); include plugin_dir_path(__FILE__) . 'admin/applications.php'; } /** * Render settings page */ public function render_settings_page() { if (isset($_POST['save_settings'])) { check_admin_referer('hks_save_settings'); update_option('hks_whatsapp_number', sanitize_text_field($_POST['whatsapp_number'])); update_option('hks_enable_notifications', isset($_POST['enable_notifications']) ? '1' : '0'); update_option('hks_notification_email', sanitize_email($_POST['notification_email'])); update_option('hks_recaptcha_site_key', sanitize_text_field($_POST['recaptcha_site_key'])); update_option('hks_recaptcha_secret_key', sanitize_text_field($_POST['recaptcha_secret_key'])); echo '

Ayarlar kaydedildi.

'; } include plugin_dir_path(__FILE__) . 'admin/settings.php'; } /** * Enqueue scripts */ public function enqueue_scripts() { if (is_page() && has_shortcode(get_post()->post_content, 'hks_landing')) { $recaptcha_site_key = get_option('hks_recaptcha_site_key'); if (!empty($recaptcha_site_key)) { wp_enqueue_script( 'hks-recaptcha', 'https://www.google.com/recaptcha/api.js?render=' . urlencode($recaptcha_site_key), [], null, true ); } wp_enqueue_script( 'hks-landing-js', plugin_dir_url(__FILE__) . 'assets/js/hks-landing.js', ['jquery'], self::VERSION, true ); wp_localize_script('hks-landing-js', 'hksAjax', [ 'ajaxurl' => admin_url('admin-ajax.php'), 'nonce' => wp_create_nonce(self::NONCE_ACTION), 'whatsapp' => get_option('hks_whatsapp_number', '905052991316'), 'recaptchaSiteKey' => $recaptcha_site_key, ]); } } /** * Verify reCAPTCHA token */ private function verify_recaptcha_token($token) { $secret = get_option('hks_recaptcha_secret_key'); if (empty($secret)) { return; } if (empty($token)) { throw new Exception('Güvenlik doğrulaması eksik.'); } $response = wp_remote_post('https://www.google.com/recaptcha/api/siteverify', [ 'timeout' => 10, 'body' => [ 'secret' => $secret, 'response' => $token, 'remoteip' => $this->get_client_ip(), ], ]); if (is_wp_error($response)) { throw new Exception('Güvenlik doğrulaması başarısız.'); } $data = json_decode(wp_remote_retrieve_body($response), true); $score = isset($data['score']) ? (float) $data['score'] : 0.0; $success = isset($data['success']) ? (bool) $data['success'] : false; if (!$success || $score < 0.5) { throw new Exception('Güvenlik doğrulaması başarısız.'); } } /** * Render landing page */ public function render_landing_page($atts) { ob_start(); include plugin_dir_path(__FILE__) . 'templates/landing-page.php'; return ob_get_clean(); } } // Initialize plugin HKS_Landing_Plugin::get_instance(); ANA SAYFA - Yds Yökdil Kursu

Yds Yökdil Kursu

Kısaca Biz

20+ Yıllık Tecrübe…

Hedeflediğiniz puan garantili yökdil eğitimi için sadece bize merhaba deyin. Neden mi? Çünkü 20+ yıllık tecrübemiz, kendimize özel taktik ve eğitim sistemimizle sektöre yön veriyoruz. Akıllı pdf sistemimiz ile ezber yapmadan çok kolay şekilde öğrendiğinize siz bile inanamayacaksınız. O zaman kendinize bir iyilik yapın bize merhaba deyin

900+
saat video ders

264+
adaylara özel kurs

14.928
saat video ders

98%
adaylara özel kurs

Başarı Garantili

YÖKDİL Eğitim Programları

Uzaktan eğitim paketleri bire bir öğrenci ihtiyacına uygun olacak şekilde hazırlanır. Kayıt sonrasında öğrenci, Hakan Hoca ile bire bir görüşme gerçekleştirir, bu görüşme esnasında öğrencinin dil seviyesi tespit edilir.

Kurumsal Anlaşmalar

Mutlu Öğrencilerimizden Birkaçı

Başarı hikayeleri sıradanlığı yıkar! Hakan Hoca King'de, öğrencilerimiz kendi potansiyellerinin sınırlarını zorluyor. Bir öğrencimiz, sadece 2.5 ayda 31 puandan 80 puana yükselerek, YDS'de dikkatleri üzerine çekti. Biz, başarının anahtarını sunuyoruz. Siz de Hakan Hoca King ailesine katılın, hedeflerinizi yakalayın

Kübra Güngör 31 Puandan 80 Puanı 2.5 Ayda Kazandı!

Hakan Hoca'nın rehberliğiyle öğrencilerimiz başarıdan başarıya koşuyor! Bir öğrencimiz Hakan Hoca ile çalışarak 75 puan elde etti. Hakan Hoca'nın eğitim ve motivasyonuyla, öğrencilerimiz sadece notlarını değil, aynı zamanda kendilerine olan güvenlerini de yükseltiyorlar. Hakan Hoca King ailesine katılarak siz de başarıya giden yolda adımlarınızı atmaya başlayın ve hedeflerinizi yakalayın

Sibel Mutlu Hakan Hoca King İle 75 Puan!

Bir öğrencimiz daha Hakan Hoca King ile başarının kapılarını araladı! 41.25 puanla başladı ve sadece Hakan Hoca King'de geçirdiği süre içinde 61.25 puana yükseldi. Bizimle, hedeflerinizi aşarak yeni zirvelere tırmanın. Başarıya giden yolu Hakan Hoca King ile keşfedin!

Mahmut Varlı 41.25'den 61.25'e Uzanan Başarı

Hakan hocam sayenizde çok şükür istediğim puanı alabildim. Küçük Çocuğum olduğu için verdiğiniz ödev ve reçetelerine tam anlamıyla gerçekleştiremesem de, ders kayıtlarını izleyerek ve taktiklerle hedefimi gerçekleştirebildim size ve ekibinize çok teşekkür ederim

Mehmet Kişiye özel HKS Sistemi ile hedef puanını 3 ayda aldım

Hakan hoca ve ekibi gerek sorularımla gerekse nokta atış yönlendirmeleriyle günde ortalama 2 saat çalışarak bana bu puanı aldırdılar. Kesinlikle herkese öneriyorum.

Filiz Hakan Hoca'nın online gruplarıyla istediğim puanı tek seferde alabildim

Sıkça Sorulan Sorular

Kafanıza takılanlar, öğrenmek istediğiniz sorularınızın yanıtlarını burada bulabilirsiniz!

Erişim süreleri kamp paketlerinde 6 ay diğer paketlerde 12 aydır.

Size bir link gönderiyoruz. Buradan indirebiliyorsunuz.

Hafta içi akşam oluyor.Aldığınız programa göre değişiyor.

60 ile 100 arası kişiden oluşuyor.

Kullanıcı adı ve şifrenizle web sitemizden ya da uygulamamızdan izleyebilirsiniz.

Evet. HKS sisteminde gün içinde Hakanhocamıza direk whatsapp üzerinden soru sorabiliyor ve açıklamalı cevap alabiliyorsunuz.

Verilen programa yüzde 80 uymanız ancak hedef puanı alamadığınızda bir sonraki eğitimlerimizden ekstra ücret alınmamaktadır.

Hayır.Sistem otomatik olarak görüntünüzü açmanızı engelliyor

Hakan hocamız ile 10 dakikalık telefon görüşmesinden sonra size hangi sınavda ne kadar sürede 70 aldırabileceğine karar veriyor ve sistemi başlatıyor. Bugüne kadar yaklaşık 21 yıl tecrübe ve en az 20.000 öğrenci tecrübesinden dolayı başarı oranı yüzde 95’tir.

Bu sizin hedef puanınıza ve yaşam yoğunluğunuza göre değişen bir durumdur. En iyi cevabı Hakan hocamız ile yapacağınız telefon görüşmesinden sonra elde edebilirsiniz

Öğrenciler hep kendileriyle titiz bir şekilde ilgilendiğimizi, takip ettiğimizi, ödevlendirdiğimizi söylerler. Hakan hocamızın bizzat yönettiği ekibi ile beraber pdfler oluşturduğu bunları size sunduğu YDS YÖKDİL eğitimlerinde hedef ve sonuç odaklı olmamız önemli diğer tercih nedeninizdir.

Çok çalışarak değil sistemli çalışarak, neyi, ne zaman, nasıl, ne kadar çözeceğinizi ve çalışacağınızı bizzat HAKAN hocamız tarafından size koçluk yapıldığı YDS YÖKDİL hazırlık kurslarımız bizi tercih nedenlerinizden biridir.

Süreçte gerekli tüm dökümanları AKILLI PDF SİSTEMİ yani APS sistemi ile size sağladığımız için gerek materyal israfı ya da fazlalığı ile boşuna zaman kaybetmiyorsunuz gerekse doğru ve nokta atışlar yapıyorsunuz. Bu da diğer önemli tercih sebebinizdir.

YDS ve YÖKDİL hazırlık sürecinde en önemli detay süreçte sizin motive olmanızdır. Bu anlamda Hakan hocamız ve ekibi özel whatsapp grubunda sorularınıza cevap verir ve sizi hep yönlendirirler. Hakan hocanın soruları kısa sürede çözdüreceği taktikleri sizin en önemli tercih sebeplerinizden birkaçıdır.

Tabi ki 1 gün içinde deneyerek karar verip satın alabilirsiniz.

21 yıllık tecrübe

Taktiksel sistem

Az zamanınızı etkin kullandırabilme

Koçluk

Whatsapp soru sistemi

APS sistemi (Akıllı PDF Sistemi)

Hayır. Sadece geçerli mazeret belirterek(taşınma, boşanma, kaza, hastalık gibi)hizmeti dondurabilirsiniz. Bu online gruplarda geçerli değildir.

Kesinlikle hayır.Hakan hocamızın sistemi her puan için yeterlidir. Dışardan ekstra bir şeye gerek yok.

Canlı ders ile öğrencilerimiz haftalık Hakan hocamız ile bizzat ders yapmaktadır ve dolayısıyla bu onların motivasyonunu yüksek tutar. Süreç içerisinde daha sonuç odaklı ve düzenli ilerleyerek hedefe varılır.

Kayıtlı derslerimiz tüm seviyedeki aday öğrencilerimiz için uygundur. Her hedef puana göre sistemimiz mevcuttur.