admin_url('admin-ajax.php'), ) ); // Gifts & settings. wp_localize_script( 'adventi-main', 'adventi_gifts', array( 'items' => get_option('adventi_gifts_settings', array()), ) ); wp_localize_script( 'adventi-main', 'adventi_ajax', array( 'ajax_url' => admin_url('admin-ajax.php'), 'nonce' => wp_create_nonce('adventi_save_lead'), ) ); } add_action('wp_enqueue_scripts', 'adventi_enqueue_assets'); /** * Admin styles / scripts. */ function adventi_admin_enqueue_assets() { // Admin CSS wp_enqueue_style( 'adventi-admin', ADVENTI_PLUGIN_URL . 'assets/css/admin.css', array(), ADVENTI_VERSION ); // Admin JS wp_enqueue_script( 'adventi-admin-js', ADVENTI_PLUGIN_URL . 'assets/js/admin.js', array('jquery'), ADVENTI_VERSION, true ); } add_action('admin_enqueue_scripts', 'adventi_admin_enqueue_assets'); /** * Add dynamic CSS variables based on selected palette. */ function adventi_add_dynamic_css() { if (is_admin()) { return; } $palette = sanitize_text_field(get_option('adventi_color_scheme', 'classic')); $vars = ''; if ('classic' === $palette) { $vars = ' --adventi-primary:#690700; --adventi-secondary:#125b23; --adventi-tertiary:#ffffff; '; } elseif ('snow_blue' === $palette) { $vars = ' --adventi-primary:#7acbe8; --adventi-secondary:#2b3d7e; --adventi-tertiary:#8fa2c3; '; } elseif ('cozy_xmas' === $palette) { $vars = ' --adventi-primary:#70241e; --adventi-secondary:#885944; --adventi-tertiary:#e2b386; '; } if (! empty($vars)) { wp_add_inline_style('adventi-style', ':root{' . $vars . '}'); } } add_action('wp_enqueue_scripts', 'adventi_add_dynamic_css', 20); /** * Admin menu. */ function adventi_admin_menu() { add_menu_page( __('Adventi', 'adventi'), __('Adventi', 'adventi'), 'manage_options', 'adventi-dashboard', 'adventi_dashboard_page', 'dashicons-gift', 56 ); add_submenu_page( 'adventi-dashboard', __('Dashboard', 'adventi'), __('Dashboard', 'adventi'), 'manage_options', 'adventi-dashboard', 'adventi_dashboard_page' ); add_submenu_page( 'adventi-dashboard', __('Leads', 'adventi'), __('Leads', 'adventi'), 'manage_options', 'adventi-leads', 'adventi_leads_page' ); add_submenu_page( 'adventi-dashboard', __('Settings', 'adventi'), __('Settings', 'adventi'), 'manage_options', 'adventi-settings', 'adventi_settings_page' ); } add_action('admin_menu', 'adventi_admin_menu'); /** * Plugin activation: create leads table. */ function adventi_install() { global $wpdb; $table_name = $wpdb->prefix . 'adventi_leads'; $charset_collate = $wpdb->get_charset_collate(); $sql = "CREATE TABLE {$table_name} ( id mediumint(9) NOT NULL AUTO_INCREMENT, name varchar(200) NOT NULL, email varchar(200) NOT NULL, date datetime DEFAULT CURRENT_TIMESTAMP NOT NULL, PRIMARY KEY (id) ) {$charset_collate};"; require_once ABSPATH . 'wp-admin/includes/upgrade.php'; dbDelta($sql); } register_activation_hook(__FILE__, 'adventi_install'); /** * AJAX: save lead. */ function adventi_save_lead() { global $wpdb; $table = $wpdb->prefix . 'adventi_leads'; // ---- NAME ---- $name_raw = isset($_POST['name']) ? wp_unslash($_POST['name']) : ''; $name = preg_replace('/[^a-zA-ZÀ-ÿ\s\-]/u', '', $name_raw); if (empty($name)) { wp_send_json_error(__('Name is required.', 'adventi')); } // ---- EMAIL ---- $email_raw = isset($_POST['email']) ? wp_unslash($_POST['email']) : ''; $email = sanitize_email($email_raw); if (empty($email) || ! is_email($email)) { wp_send_json_error(__('A valid email is required.', 'adventi')); } // ---- INSERT INTO DB ---- $wpdb->insert( $table, array( 'name' => $name, 'email' => $email, ), array('%s', '%s') ); wp_send_json_success(__('Lead saved.', 'adventi')); } add_action('wp_ajax_adventi_save_lead', 'adventi_save_lead'); add_action('wp_ajax_nopriv_adventi_save_lead', 'adventi_save_lead'); /* PASS FRONTEND DATA TO main.js ----------------------------------------------------------*/ add_action('wp_enqueue_scripts', 'adventi_pass_data_to_frontend'); function adventi_pass_data_to_frontend() { if (! is_singular()) return; // Load gifts $gifts = get_option('adventi_gifts_settings', array()); $formatted = array(); // Reformat gifts for JS foreach ($gifts as $day => $gift) { $formatted[$day] = array( 'title' => $gift['title'] ?? '', 'description' => $gift['description'] ?? '', 'code' => $gift['code'] ?? '', 'url' => $gift['url'] ?? '', ); } wp_localize_script( 'adventi-main', 'adventi_settings', array( 'start_date' => get_option('adventi_start_date', ''), ) ); wp_localize_script( 'adventi-main', 'adventi_gifts', array( 'items' => $formatted, ) ); wp_localize_script( 'adventi-main', 'adventi_strings', array( 'day_prefix' => get_option('adventi_day_prefix', 'Day'), 'future_text' => get_option('adventi_future_msg', 'Come back on day'), 'tomorrow_message' => get_option('adventi_tomorrow_message', 'Come back tomorrow for a new surprise!'), 'download_text' => get_option('adventi_download_text', 'Check your link'), ) ); } /** * Shortcode handler: [adventi] */ function adventi_shortcode_handler() { // Return ONLY a placeholder in the page content. return '
'; } add_shortcode('adventi', 'adventi_shortcode_handler');