table_name = $wpdb->prefix . 'itr_gst_entries';
register_activation_hook(__FILE__, array($this, 'activate'));
add_action('init', array($this, 'init_hooks'));
add_action('admin_menu', array($this, 'admin_menu'));
add_action('admin_post_export_itr_gst_csv', array($this, 'export_csv'));
}
public function activate() {
$this->create_table();
}
public function init_hooks() {
add_shortcode('itr_form', array($this, 'shortcode_itr_form'));
add_shortcode('gst_apply_form', array($this, 'shortcode_gst_apply_form'));
add_shortcode('gst_written_form', array($this, 'shortcode_gst_written_form'));
add_action('wp_enqueue_scripts', array($this, 'enqueue_scripts'));
add_action('admin_post_nopriv_wp_igs_submit', array($this, 'handle_submission'));
add_action('admin_post_wp_igs_submit', array($this, 'handle_submission'));
}
private function create_table() {
global $wpdb;
$charset_collate = $wpdb->get_charset_collate();
$sql = "CREATE TABLE {$this->table_name} (
id mediumint(9) NOT NULL AUTO_INCREMENT,
form_type varchar(50) NOT NULL,
name varchar(191) NOT NULL,
email varchar(191) NOT NULL,
phone varchar(50) DEFAULT '',
gstin varchar(50) DEFAULT '',
pan varchar(50) DEFAULT '',
details text DEFAULT '',
file_urls text DEFAULT '',
created_at datetime DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (id)
) $charset_collate;";
require_once(ABSPATH . 'wp-admin/includes/upgrade.php');
dbDelta($sql);
}
public function enqueue_scripts() {
wp_enqueue_style('wp-igs-style', plugin_dir_url(__FILE__) . 'assets/style.css');
wp_enqueue_script('wp-igs-js', plugin_dir_url(__FILE__) . 'assets/script.js', array('jquery'), $this->version, true);
wp_localize_script('wp-igs-js', 'wp_igs_ajax', array(
'ajax_url' => admin_url('admin-post.php'),
'nonce' => wp_create_nonce('wp_igs_nonce'),
));
}
private function form_wrapper($form_html) {
ob_start();
?>
build_form('itr');
return $this->form_wrapper($form);
}
public function shortcode_gst_apply_form($atts = array()) {
$form = $this->build_form('gst_apply');
return $this->form_wrapper($form);
}
public function shortcode_gst_written_form($atts = array()) {
$form = $this->build_form('gst_written');
return $this->form_wrapper($form);
}
private function build_form($type) {
$action = esc_url(admin_url('admin-post.php'));
$label = '';
switch ($type) {
case 'itr': $label = 'ITR Submission'; break;
case 'gst_apply': $label = 'GST Application'; break;
case 'gst_written': $label = 'GST Written Request'; break;
default: $label = 'Form';
}
ob_start(); ?>
$files['name'][$i],
'type' => $files['type'][$i],
'tmp_name' => $files['tmp_name'][$i],
'error' => $files['error'][$i],
'size' => $files['size'][$i]
);
$upload = wp_handle_upload($file, array('test_form' => false));
if (!empty($upload['url'])) {
$file_urls[] = esc_url_raw($upload['url']);
}
}
}
global $wpdb;
$inserted = $wpdb->insert(
$this->table_name,
array(
'form_type' => $form_type,
'name' => $name,
'email' => $email,
'phone' => $phone,
'gstin' => $gstin,
'pan' => $pan,
'details' => $details,
'file_urls' => maybe_serialize($file_urls),
),
array('%s','%s','%s','%s','%s','%s','%s','%s')
);
// notify admin
$admin_email = get_option('admin_email');
$subject = "New submission: " . ucfirst($form_type);
$message = "Name: $name\nEmail: $email\nPhone: $phone\nPAN: $pan\nGSTIN: $gstin\nDetails: $details\nFiles: " . implode(', ', $file_urls);
wp_mail($admin_email, $subject, $message);
// redirect back with success message
$redirect = wp_get_referer() ? wp_get_referer() : home_url();
$redirect = add_query_arg('wp_igs_sent', '1', $redirect);
wp_safe_redirect($redirect);
exit;
}
public function admin_menu() {
add_menu_page('ITR & GST Submissions', 'ITR & GST', 'manage_options', 'wp-igs-submissions', array($this, 'admin_page'), 'dashicons-forms', 58);
}
public function admin_page() {
if (!current_user_can('manage_options')) {
return;
}
global $wpdb;
$entries = $wpdb->get_results("SELECT * FROM {$this->table_name} ORDER BY created_at DESC LIMIT 500");
?>
get_results("SELECT * FROM {$this->table_name} ORDER BY created_at DESC LIMIT 500", ARRAY_A);
header('Content-Type: text/csv; charset=utf-8');
header('Content-Disposition: attachment; filename=itr_gst_submissions.csv');
$output = fopen('php://output', 'w');
fputcsv($output, array_keys($rows ? $rows[0] : array('id','form_type','name','email','phone','pan','gstin','details','file_urls','created_at')));
if ($rows) {
foreach ($rows as $row) {
// ensure file_urls is readable
if (isset($row['file_urls'])) {
$row['file_urls'] = maybe_unserialize($row['file_urls']);
if (is_array($row['file_urls'])) $row['file_urls'] = implode(' | ', $row['file_urls']);
}
fputcsv($output, $row);
}
}
fclose($output);
exit;
}
}
new WP_ITR_GST_Forms();
// Minimal inline CSS & JS assets (to keep single-file easy copy) - create assets folder optional
// But if user wants single-file truly, we can also inline small CSS/JS by printing in footer. For simplicity, include optional assets folder.
?>
ITR & GST Submissions
यह पेज हाल की सबमिशन्स दिखाता है। आप CSV के रूप में एक्सपोर्ट भी कर सकते हैं।
| ID | Form Type | Name | Phone | PAN | GSTIN | Details | Files | Created | |
|---|---|---|---|---|---|---|---|---|---|
| id); ?> | form_type); ?> | name); ?> | email); ?> | phone); ?> | pan); ?> | gstin); ?> | details, 20)); ?> |
file_urls); if (is_array($files)) { foreach ($files as $f) { echo "View "; } } ?> |
created_at); ?> |
| कोई सबमिशन नहीं मिला। | |||||||||