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"); ?>

ITR & GST Submissions

यह पेज हाल की सबमिशन्स दिखाता है। आप CSV के रूप में एक्सपोर्ट भी कर सकते हैं।

ID Form Type Name Email 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); ?>
कोई सबमिशन नहीं मिला।
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. ?>
Scroll to Top