table = $wpdb->prefix . 'dncr_leads';
add_action('init', array($this,'register_shortcodes'));
register_activation_hook(__FILE__, array($this,'activate'));
add_action('wp_enqueue_scripts', array($this,'front_assets'));
add_action('wp_ajax_dncr_submit_lead', array($this,'handle_submit'));
add_action('wp_ajax_nopriv_dncr_submit_lead', array($this,'handle_submit'));
add_action('admin_menu', array($this,'admin_menu'));
add_action('admin_post_dncr_export_csv', array($this,'export_csv'));
}
public function activate(){
global $wpdb;
$charset_collate = $wpdb->get_charset_collate();
$sql = "CREATE TABLE {$this->table} (
id bigint(20) unsigned NOT NULL AUTO_INCREMENT,
name varchar(200) NOT NULL,
phone varchar(50) NOT NULL,
email varchar(150) DEFAULT NULL,
service varchar(50) NOT NULL,
city varchar(100) DEFAULT 'Delhi',
message text DEFAULT NULL,
utm_source varchar(200) DEFAULT NULL,
created_at datetime DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (id)
) $charset_collate;";
require_once(ABSPATH . 'wp-admin/includes/upgrade.php');
dbDelta($sql);
}
public function register_shortcodes(){
add_shortcode('dncr_lead_form', array($this,'render_form'));
}
public function front_assets(){
wp_enqueue_style('dncr-style', plugins_url('dncr-style', __FILE__));
// inline CSS (unique look)
$css = "
.dncr-lead-wrap{max-width:720px;margin:20px auto;padding:22px;border-radius:12px;box-shadow:0 6px 20px rgba(0,0,0,0.08);background:linear-gradient(135deg,#ffffff,#f9fbff)}
.dncr-lead-wrap h3{margin-top:0;font-size:22px}
.dncr-row{display:flex;gap:10px}
.dncr-col{flex:1}
.dncr-input, .dncr-select, .dncr-textarea{width:100%;padding:10px;border:1px solid #e6e6e6;border-radius:8px}
.dncr-btn{display:inline-block;padding:10px 16px;border-radius:8px;border:none;cursor:pointer}
.dncr-success{color:green;margin-top:10px}
";
wp_add_inline_style('dncr-style',$css);
wp_enqueue_script('dncr-script', plugins_url('dncr-script', __FILE__), array('jquery'), false, true);
$js = "
jQuery(function($){
$(document).on('submit','.dncr-form',function(e){
e.preventDefault();
var \$f = $(this);
var data = \$f.serialize();
data += '&action=dncr_submit_lead';
$.post('" . admin_url('admin-ajax.php') . "', data, function(resp){
if(resp.success){\$f.find('.dncr-result').html('
nonce,'dncr_nonce_field');
global $wpdb;
$name = sanitize_text_field($_POST['name'] ?? '');
$phone = sanitize_text_field($_POST['phone'] ?? '');
$email = sanitize_email($_POST['email'] ?? '');
$service = sanitize_text_field($_POST['service'] ?? 'ITR');
$city = sanitize_text_field($_POST['city'] ?? 'Delhi');
$message = sanitize_textarea_field($_POST['message'] ?? '');
$utm = sanitize_text_field($_POST['utm_source'] ?? '');
if(empty($name) || empty($phone)){
wp_send_json_error('Name and mobile number are required.');
}
$inserted = $wpdb->insert($this->table, array(
'name'=>$name,
'phone'=>$phone,
'email'=>$email,
'service'=>$service,
'city'=>$city,
'message'=>$message,
'utm_source'=>$utm
), array('%s','%s','%s','%s','%s','%s','%s'));
if($inserted){
// email notification to admin
$admin = get_option('admin_email');
$subject = "New Lead - {$service} ({$city})";
$body = "Name: {$name}\nPhone: {$phone}\nEmail: {$email}\nService: {$service}\nCity: {$city}\nMessage: {$message}\nUTM: {$utm}";
wp_mail($admin, $subject, $body);
wp_send_json_success('Lead saved');
} else {
wp_send_json_error('Failed to save.');
}
}
public function admin_menu(){
add_menu_page('DNCR Leads', 'DNCR Leads', 'manage_options', 'dncr-leads', array($this,'admin_page'),'dashicons-businessperson', 58);
}
public function admin_page(){
if(!current_user_can('manage_options')) return;
global $wpdb;
$leads = $wpdb->get_results("SELECT * FROM {$this->table} ORDER BY created_at DESC LIMIT 500");
?>
get_results("SELECT * FROM {$this->table} ORDER BY created_at DESC LIMIT 500", ARRAY_A);
header('Content-Type: text/csv');
header('Content-Disposition: attachment; filename="dncr-leads.csv"');
$out = fopen('php://output','w');
if($rows){
fputcsv($out, array_keys($rows[0]));
foreach($rows as $r) fputcsv($out, $r);
}
fclose($out);
exit;
}
}
new DNCR_Lead_Generator();
// EOF
Thank you! Our team will contact you shortly.
');\$f[0].reset();}
else { \$f.find('.dncr-result').html(''+resp.data+'
'); }
}, 'json');
});
});
";
wp_add_inline_script('dncr-script',$js);
}
public function render_form($atts=array()){
$atts = shortcode_atts(array('title'=>'Get expert ITR & GST help - Delhi NCR'), $atts, 'dncr_lead_form');
ob_start();
?>
DNCR Leads
| ID | Name | Phone | Service | City | Message | Created | |
|---|---|---|---|---|---|---|---|
| id);?> | name);?> | phone);?> | email);?> | service);?> | city);?> | message);?> | created_at);?> |