/** * 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(); YDS KURSU - Yds Yökdil Kursu

Yds Yökdil Kursu

YDS KURSU

YDS YÖKDİL KURSU

YDS YÖKDİL KURSU, pek çok kurum ve kuruluşta geçerli olan YDS’yi en iyi sonuçlarla tamamlamanız için hazırlanmış donanımlı bir programdır. Günümüzde hayatın vazgeçilmez bir parçası olan internetle entegre edilmiş kurs sistemi, yabancı dil eğitiminin yalnızca bir tuş kadar uzağınızda olmasını sağlar.

YDS YÖKDİL KURSU, birebir takip sistemi, kolay iletişim imkânı ve çalışan bir gruba dahil olarak rekabet duygusuna kapılma fırsatı sunduğu için, bu alandaki tüm rakiplerinden ayrılarak bir adım öne çıkar. Süreç içerisinde uluslararası bağlantılar kurmanızı destekler ve dil öğrenme sürecinde sıkça karşılaşılan sorunları aşmanızı sağlar.

YDS YÖKDİL KURSU Nedir?

YDS YÖKDİL KURSU, pek çok özel ve kamusal kurumda geçerliliği olan YDS’ye, yıllarını dil öğrenimine adamış ve işini büyük bir tutkuyla yapan YDS YÖKDİL KURSU koordinatörlüğünde hazırlanmanızı sağlar. YDS YÖKDİL KURSU sayesinde sınav hazırlık sürecinde hem YDS YÖKDİL KURSU ile hem de sizler gibi bu sınava hazırlanan diğer rakiplerinizle sürekli iletişim içinde olabilirsiniz.

YDS YÖKDİL KURSU‘na başlamadan önce, YDS yeterlilik seviyeniz belirlenir. Ardından seviyenize ve hedeflerinize uygun bir program hazırlanır. Sonrasında sizin gibi çalışan ve belli bir hedef uğrunda çabalayan insanlarla tanışmanız ve bu kişilerle sürekli irtibatta kalmanız sağlanır.

YDS YÖKDİL KURSU sisteminin en önemli parçalarından biri olan Akıllı Kelime Sistemi’ne dahil edilirsiniz. Bu sistem sayesinde yabancı dil öğrenme sürecinde en sık karşılaşılan problemlerden biri olan kelime ezberleme zorluğu ve kelimeleri unutma problemini profesyonel bir dokunuşla aşmış olursunuz.

YDS YÖKDİL KURSU Online

Günümüz şartlarında hemen hemen herkes zamanla yarışmakta ve pek çok kişi, gün içinde sevdiklerine hatta bazen kendine bile yeterince özen gösterecek zamanı bulamamaktadır. Hayatın yoğunluğu ve koşturmacası içinde dil öğrenmek isteyen pek çok kişi zaman sıkıntısından dolayı dil öğrenimini ertelemektedir.

YDS YÖKDİL KURSU Online, şekilde tasarlanmış ve günün her saatinde erişim sağlayabileceğiniz bir formatta kurgulanmıştır. Bu sayede internetiniz olmadığında bile sisteme girebilmekte ve programınızda o gün izlemeniz gerektiği belirtilen dersleri dinleyebilmektesiniz.

Ayrıca tamamen size özel hazırlanmış olan programa ne kadar uyduğunuz ve çalışmalarınızı nasıl bir disiplinle yönettiğinizle ilgili sıkı şekilde takip edilirsiniz. Bu sayede sınav sürecinde sıkça yaşanan sorunlardan biri olan motivasyon kaybını minimum seviyede yaşarsınız.

YDS YÖKDİL KURSU Fiyatları

Hayatın maliyetinin her geçen gün artması, yüz yüze gerçekleşen tüm gelişim kurslarının fiyatlarının artmasına neden olduğu gibi yabancı dil ve YDS YÖKDİL KURSU fiyatları alanında da artış yaşanmasına neden olmuştur. Ancak online gerçekleştirilen eğitimler, daima piyasaya kıyasla daha uygun fiyatlı ve avantajlıdır.

YDS YÖKDİL KURSU fiyatları, güncel koşullar baz alınarak uygun bir ücretle belirlenir. Kurs ücretlerimiz ve eğitim programımız hakkında daha fazla bilgi almak için Whatsapp, Instagram veya Mail üzerinden bizimle iletişime geçebilirsiniz.

YDS Uzaktan Eğitim Paketleri

YDS uzaktan eğitim paketleri, birebir öğrenci ihtiyacına uygun bir şekilde hazırlanır. Kayıt sonrasında öğrenci, YDS YÖKDİL KURSU ile birebir görüşme gerçekleştirir ve bu görüşme sırasında öğrencinin dil seviyesi tespit edilir. Ardından öğrencinin dil seviyesine uygun bir program hazırlanır.

Hazırlanan program sonrasında öğrenci, kendi gibi YDS’ye hazırlanan rakiplerinin olduğu eğitim grubuna dahil olur ve sınav psikolojisine girmeye başlar. Dahil olduğu bu ortam sayesinde rekabet duygusunu yaşar ve sürekli daha ileri gitmek için çalışır. Bu süreçte YDS YÖKDİL KURSU tarafından sürekli takip edilir ve haftalık olarak programı hazırlanır.

Dil öğrenme sürecinde karşılaşılan en önemli zorluklardan biri öğrenilenleri kısa süre içerisinde unutmaktır. Dil öğrenmek emek ve tekrar gerektiren bir süreçtir. Dil öğreniminin en önemli püf noktası düzenli tekrar yapmak ve mümkün olduğunca dile maruz kalmaktır.

YDS YÖKDİL KURSU öğrencileri için hazırlamış olduğu YDS programında tekrara büyük önem vermektedir. Geliştirmiş olduğu Akıllı Kelime Sistemi ile kelimelerin akılda kalıcı olmasını ve sürekli pekiştirilmesini sağlamaktadır.

YDS Online Eğitim

YDS Online Eğitim sürecini bir fırsata dönüştürmek istiyorsanız yapabileceğiniz en akıllıca hamle, YDS YÖKDİL KURSU ile çalışmaya karar vermek olacaktır. Hakan Hoca 20 yıllık tecrübesi ve dil öğretmeye olan tutkusuyla öğrencilerinin hedeflerine ulaşması için daima büyük bir özveriyle ilerlemiş ve dil öğrenimi alanındaki tüm gelişmeleri takip ederek yeni gelişmeleri gerçekleştiren tarafta yer almıştır.

YDS Online Eğitim sistemiyle öğrencilerini Telegram ve Whatsapp grupları üzerinden bir araya getirmekte ve bu platformlarda iletişimde kalmalarını sağlayarak rekabet duygusunu güçlendirmektedir. Kişiye özel soru çözümleriyle eksiklerinizi üzerine gitmenizi sağlamakta ve eksiklerinizi iyi bilmenize yardımcı olarak bu eksiklikleri öğrenmenizi ve sınava tam donanımlı bir şekilde girmenizi sağlamaktadır.

YDS YÖKDİL KURSU Tavsiye

YDS YÖKDİL KURSU seçimi yapılırken oldukça dikkatli olunmalı ve bu işin piyasası iyice araştırılmalıdır. Uygun fiyatlı olduğu için herhangi bir yüz yüze veya online kuruma öncelik verilmemeli, kurs ve hocanın performansı değerlendirilmelidir.

Sadece daha uygun fiyat seçeneği sunduğu için tercih edilen kurumlardan çoğu zaman verim alınamamakta ve harcanan para boşa gitmektedir. Bu nedenle kurs ve hocanın performansı değerlendirilmeli ve performansa uygun bir şekilde ücret değerlendirmesi yapılmalıdır.

YDS YÖKDİL KURSU Farkı

Hakan Hoca şu anda dil öğreniminde sayılı hocalar arasında yer almaktadır ve kendisini bu noktaya taşıyan en büyük dönüm noktalarından biri İngilizce hocasıdır. Kendi öyküsünde de görüldüğü gibi eğitim sürecinde doğru insanlara denk gelmek veya doğru insanları tercih etmek hayati derecede önem taşıyan büyük bir hamledir.

Hakan Hoca tüm çalışmalarında öğrencilerinin çıkarlarını en üst seviyede tutmuştur. Bu bağlamda eğitim paketlerine daima birebir soru çözümlerini ve öğrencilerin birbirleriyle sürekli iletişimde kalmalarını sağlayacak grupları dahil etmiştir. Bu sayede öğrencilerinin dil alanında her anlamda yetkinlik kazanmasına, yeni bağlantılar kurmasına yardımcı olmuş ve pek çok öğrencisini hedefine ulaştırmıştır.

Hakan Hoca King ile çalışmak ve YDS sınavından istediğiniz başarıyı elde etmek için iletişim kanallarımız üzerinden bizimle iletişime geçebilirsiniz.