'', 'density' => 1, 'length' => 1000, 'is_wp_post' => '', ]; // Process POST data when nonce is verified if ( isset( $_POST['bulk-form-submit'] ) ) { if ( check_admin_referer( 'ws4agpt-bulk-options-form' ) ) { // Initialize arrays with defaults $titles = $keywords = $links1 = $links2 = $categories = $company = array(); // Validate, unslash, and sanitize each input field if ( isset($_POST['bulk-option-titles']) ) { $titles = array_filter(array_map('trim', explode("\n", sanitize_textarea_field(wp_unslash($_POST['bulk-option-titles']))))); } if ( isset($_POST['bulk-option-keywords']) ) { $keywords = array_filter(array_map('trim', explode("\n", sanitize_textarea_field(wp_unslash($_POST['bulk-option-keywords']))))); } if ( isset($_POST['bulk-option-links1']) ) { $links1 = array_filter(array_map('trim', explode("\n", sanitize_textarea_field(wp_unslash($_POST['bulk-option-links1']))))); } if ( isset($_POST['bulk-option-links2']) ) { $links2 = array_filter(array_map('trim', explode("\n", sanitize_textarea_field(wp_unslash($_POST['bulk-option-links2']))))); } if ( isset($_POST['bulk-option-categories']) ) { $categories = array_filter(array_map('trim', explode("\n", sanitize_textarea_field(wp_unslash($_POST['bulk-option-categories']))))); } if ( isset($_POST['bulk-option-company']) ) { $company = array_filter(array_map('trim', explode("\n", sanitize_textarea_field(wp_unslash($_POST['bulk-option-company']))))); } // Properly sanitize boolean values $is_image = isset($_POST['is_image']) ? sanitize_text_field(wp_unslash($_POST['is_image'])) : 'no'; $is_wp_post = isset($_POST['is_wp_post']) ? sanitize_text_field(wp_unslash($_POST['is_wp_post'])) : 'no'; // Get image related data if image toggle is enabled $imgUrl = $imgAlt = array(); if ( $is_image === 'yes' ) { if ( isset($_POST['bulk-option-image-url']) ) { $imgUrl = array_filter(array_map('trim', explode("\n", sanitize_textarea_field(wp_unslash($_POST['bulk-option-image-url']))))); } if ( isset($_POST['bulk-option-image-alt']) ) { $imgAlt = array_filter(array_map('trim', explode("\n", sanitize_textarea_field(wp_unslash($_POST['bulk-option-image-alt']))))); } } // Validate, unslash, and sanitize numeric inputs $density = isset($_POST['bulk-option-density']) ? absint(wp_unslash($_POST['bulk-option-density'])) : 1; $length = isset($_POST['bulk-option-length']) ? absint(wp_unslash($_POST['bulk-option-length'])) : 1000; $parent = isset($_POST['parent']) ? absint(wp_unslash($_POST['parent'])) : 0; // Validate required fields if ( empty($titles) ) { $result['error']['titles'] = __('Titles are required', 'ai-auto-seo'); } if ( empty($keywords) ) { $result['error']['keywords'] = __('Keywords are required', 'ai-auto-seo'); } // Only proceed if no validation errors if ( !isset($result['error']) ) { // Call the bulk import function $result = $ws4agpt->ws4agpt_bulk_import( $titles, $keywords, $links1, $links2, $categories, $company, $imgUrl, $imgAlt, $length, $density, $is_wp_post, $parent ); } } } elseif ( isset($_POST['bulk-csv-submit']) ) { if ( check_admin_referer('ws4agpt-bulk-options-csv-form') ) { // Validate all required file indices exist if ( isset($_FILES['bulk-options-csv']) && isset($_FILES['bulk-options-csv']['tmp_name']) && isset($_FILES['bulk-options-csv']['name']) && !empty($_FILES['bulk-options-csv']['tmp_name']) ) { // Sanitize the file path and name $csv_file = sanitize_text_field(wp_unslash($_FILES['bulk-options-csv']['tmp_name'])); $csv_name = sanitize_file_name(wp_unslash($_FILES['bulk-options-csv']['name'])); // Validate file type $file_type = wp_check_filetype(basename($csv_name), array('csv' => 'text/csv')); if ( $file_type['ext'] !== 'csv' ) { $result['error'] = __('Please upload a valid CSV file', 'ai-auto-seo'); return; } // Initialize WP_Filesystem global $wp_filesystem; if ( empty($wp_filesystem) ) { require_once(ABSPATH . '/wp-admin/includes/file.php'); WP_Filesystem(); } // Read CSV file using WP_Filesystem $csv_content = $wp_filesystem->get_contents($csv_file); if ( $csv_content !== false ) { // Convert CSV content to array $rows = array(); $lines = explode("\n", $csv_content); $headers = str_getcsv(array_shift($lines)); foreach ($lines as $line) { if ( empty(trim($line)) ) continue; $data = str_getcsv($line); if ( count($data) === count($headers) ) { $row = array(); foreach ($headers as $i => $header) { $row[sanitize_key($header)] = isset($data[$i]) ? sanitize_text_field($data[$i]) : ''; } $rows[] = $row; } } // Process the CSV data using the global instance if ( method_exists($ws4agpt, 'ws4agpt_process_bulk_csv_import') ) { $result = $ws4agpt->ws4agpt_process_bulk_csv_import($rows); } else { $result['error'] = __('Bulk CSV import method not available', 'ai-auto-seo'); } } else { $result['error'] = __('Unable to read CSV file', 'ai-auto-seo'); } } else { $result['error'] = __('Please select a valid CSV file to upload', 'ai-auto-seo'); } } } ?>


$error){?>

' . esc_html($key) . ' : ' . esc_html($error); ?>

 



/>

>

0, 'hide_if_empty' => false, 'taxonomy' => 'ws4agpt_gpt_cat', 'name' => 'parent', 'orderby' => 'name', 'hierarchical' => true, 'show_option_none' => __( 'None','ai-auto-seo'), ); wp_dropdown_categories( $dropdown_args ); ?>


/>