prefix . 'beta_signups'; $charset_collate = $wpdb->get_charset_collate(); $sql = "CREATE TABLE IF NOT EXISTS $table_name ( id bigint(20) NOT NULL AUTO_INCREMENT, email varchar(255) NOT NULL, platform varchar(20) NOT NULL, created_at datetime DEFAULT CURRENT_TIMESTAMP, PRIMARY KEY (id), UNIQUE KEY email (email) ) $charset_collate;"; require_once(ABSPATH . 'wp-admin/includes/upgrade.php'); dbDelta($sql); } add_action('after_switch_theme', 'addmonths_create_signups_table'); // Handle beta signup AJAX function addmonths_handle_signup() { // Verify nonce if (!wp_verify_nonce($_POST['nonce'], 'beta_signup_nonce')) { wp_send_json_error('Invalid request'); return; } $email = sanitize_email($_POST['email']); $platform = sanitize_text_field($_POST['platform']); if (!is_email($email)) { wp_send_json_error('Invalid email address'); return; } if (!in_array($platform, array('ios', 'android'))) { wp_send_json_error('Invalid platform'); return; } global $wpdb; $table_name = $wpdb->prefix . 'beta_signups'; // Check if email already exists $exists = $wpdb->get_var($wpdb->prepare( "SELECT id FROM $table_name WHERE email = %s", $email )); if ($exists) { wp_send_json_success('Already signed up'); return; } // Insert new signup $result = $wpdb->insert( $table_name, array( 'email' => $email, 'platform' => $platform ), array('%s', '%s') ); if ($result) { wp_send_json_success('Signed up successfully'); } else { wp_send_json_error('Failed to sign up'); } } add_action('wp_ajax_beta_signup', 'addmonths_handle_signup'); add_action('wp_ajax_nopriv_beta_signup', 'addmonths_handle_signup'); // Admin page to view signups function addmonths_admin_menu() { add_menu_page( 'Beta Signups', 'Beta Signups', 'manage_options', 'beta-signups', 'addmonths_signups_page', 'dashicons-email', 30 ); } add_action('admin_menu', 'addmonths_admin_menu'); function addmonths_signups_page() { global $wpdb; $table_name = $wpdb->prefix . 'beta_signups'; // Handle CSV export if (isset($_GET['export']) && $_GET['export'] === 'csv') { $signups = $wpdb->get_results("SELECT * FROM $table_name ORDER BY created_at DESC"); header('Content-Type: text/csv'); header('Content-Disposition: attachment; filename="beta-signups-' . date('Y-m-d') . '.csv"'); $output = fopen('php://output', 'w'); fputcsv($output, array('Email', 'Platform', 'Signed Up')); foreach ($signups as $signup) { fputcsv($output, array($signup->email, $signup->platform, $signup->created_at)); } fclose($output); exit; } $signups = $wpdb->get_results("SELECT * FROM $table_name ORDER BY created_at DESC"); $total = count($signups); $ios_count = $wpdb->get_var("SELECT COUNT(*) FROM $table_name WHERE platform = 'ios'"); $android_count = $wpdb->get_var("SELECT COUNT(*) FROM $table_name WHERE platform = 'android'"); ?>
| Platform | Signed Up | |
|---|---|---|
| email); ?> | platform)); ?> | created_at); ?> |
| No signups yet. | ||