File: /home/luxbsolr/cardsord.store/wp-content/plugins/Csv_Uploader/csv-product-importer.php
<?php
/**
* Plugin Name: Fast CSV Product Importer
* Plugin URI: https://github.com/adnane/fast-csv-product-importer
* Description: A high-performance WordPress plugin for importing WooCommerce products from CSV files with advanced field mapping, validation, and batch processing capabilities. Optimized for super fast uploading with smart image handling and duplicate management.
* Version: 1.2.0
* Author: Adnane
* Author URI: https://github.com/adnaneas
* Text Domain: fast-csv-importer
* Domain Path: /languages
* Requires at least: 5.0
* Tested up to: 6.3
* Requires PHP: 7.4
* WC requires at least: 5.0
* WC tested up to: 8.0
* Woo: 12345678:abcdef1234567890abcdef1234567890
* License: GPL v2 or later
*
* @package FastCSVProductImporter
* @author Adnane
* @version 1.1.0
*/
// Prevent direct access
if (!defined('ABSPATH')) {
exit;
}
// Define plugin constants
define('FCPI_VERSION', '1.0.0');
define('FCPI_PLUGIN_FILE', __FILE__);
define('FCPI_PLUGIN_DIR', plugin_dir_path(__FILE__));
define('FCPI_PLUGIN_URL', plugin_dir_url(__FILE__));
define('FCPI_PLUGIN_BASENAME', plugin_basename(__FILE__));
/**
* Main plugin class
*/
class FastCSVProductImporter {
/**
* Single instance of the plugin
*/
private static $instance = null;
/**
* Get single instance
*/
public static function get_instance() {
if (null === self::$instance) {
self::$instance = new self();
}
return self::$instance;
}
/**
* Constructor
*/
private function __construct() {
$this->init_hooks();
}
/**
* Initialize hooks
*/
private function init_hooks() {
add_action('init', array($this, 'init'));
add_action('plugins_loaded', array($this, 'check_dependencies'));
add_action('before_woocommerce_init', array($this, 'declare_compatibility'));
// Increase PHP limits for large file uploads
add_filter('upload_size_limit', array($this, 'increase_upload_limit'), 999);
add_action('admin_init', array($this, 'increase_php_limits'));
}
/**
* Increase upload size limit
*/
public function increase_upload_limit($bytes) {
return 2147483648; // 2GB in bytes
}
/**
* Increase PHP execution limits for CSV processing
*/
public function increase_php_limits() {
if (isset($_GET['page']) && strpos($_GET['page'], 'fcpi-') !== false) {
@ini_set('memory_limit', '1024M');
@ini_set('max_execution_time', '600');
@ini_set('post_max_size', '2048M');
@ini_set('upload_max_filesize', '2048M');
}
}
/**
* Initialize plugin
*/
public function init() {
// Load text domain for translations
load_plugin_textdomain('fast-csv-importer', false, dirname(FCPI_PLUGIN_BASENAME) . '/languages');
// Include required files
$this->includes();
// Initialize components if dependencies are met
if ($this->dependencies_met()) {
$this->init_components();
$this->register_product_attributes();
}
}
/**
* Register product attributes like brand
*/
private function register_product_attributes() {
// Register brand attribute taxonomy
if (!taxonomy_exists('pa_brand')) {
register_taxonomy('pa_brand', 'product', array(
'labels' => array(
'name' => 'Brand',
'singular_name' => 'Brand',
),
'public' => true,
'show_ui' => true,
'show_in_menu' => true,
'show_in_nav_menus' => true,
'hierarchical' => false,
'rewrite' => array('slug' => 'brand'),
'capabilities' => array(
'manage_terms' => 'manage_product_terms',
'edit_terms' => 'edit_product_terms',
'delete_terms' => 'delete_product_terms',
'assign_terms' => 'assign_product_terms',
),
));
}
}
/**
* Include required files
*/
private function includes() {
require_once FCPI_PLUGIN_DIR . 'includes/class-fcpi-admin.php';
require_once FCPI_PLUGIN_DIR . 'includes/class-fcpi-csv-parser.php';
require_once FCPI_PLUGIN_DIR . 'includes/class-fcpi-product-mapper.php';
require_once FCPI_PLUGIN_DIR . 'includes/class-fcpi-validator.php';
// Use enhanced batch processor if available
if (file_exists(FCPI_PLUGIN_DIR . 'includes/class-fcpi-batch-processor-enhanced.php')) {
require_once FCPI_PLUGIN_DIR . 'includes/class-fcpi-batch-processor-enhanced.php';
} else {
require_once FCPI_PLUGIN_DIR . 'includes/class-fcpi-batch-processor.php';
}
// Use rebuilt components if available
if (file_exists(FCPI_PLUGIN_DIR . 'includes/class-fcpi-automapper-rebuilt.php')) {
require_once FCPI_PLUGIN_DIR . 'includes/class-fcpi-automapper-rebuilt.php';
} else {
require_once FCPI_PLUGIN_DIR . 'includes/class-fcpi-automapper.php';
}
if (file_exists(FCPI_PLUGIN_DIR . 'includes/class-fcpi-ajax-handler-rebuilt.php')) {
require_once FCPI_PLUGIN_DIR . 'includes/class-fcpi-ajax-handler-rebuilt.php';
} else {
require_once FCPI_PLUGIN_DIR . 'includes/class-fcpi-ajax-handler.php';
}
// Include debug file temporarily
if (file_exists(FCPI_PLUGIN_DIR . 'debug.php')) {
require_once FCPI_PLUGIN_DIR . 'debug.php';
}
}
/**
* Initialize plugin components
*/
private function init_components() {
// Initialize admin interface
if (is_admin()) {
new FCPI_Admin();
}
// Initialize AJAX handlers - Use rebuilt version if available
if (class_exists('FCPI_Ajax_Handler_Rebuilt')) {
new FCPI_Ajax_Handler_Rebuilt();
} else {
new FCPI_Ajax_Handler();
}
}
/**
* Declare WooCommerce feature compatibility
*/
public function declare_compatibility() {
if (class_exists('Automattic\WooCommerce\Utilities\FeaturesUtil')) {
// Declare compatibility with WooCommerce High-Performance Order Storage (HPOS)
\Automattic\WooCommerce\Utilities\FeaturesUtil::declare_compatibility(
'custom_order_tables',
FCPI_PLUGIN_FILE,
true
);
// Declare compatibility with WooCommerce order cache
\Automattic\WooCommerce\Utilities\FeaturesUtil::declare_compatibility(
'orders_cache',
FCPI_PLUGIN_FILE,
true
);
}
// Legacy compatibility for older WooCommerce versions
if (class_exists('WC_Admin_Notices')) {
add_filter('woocommerce_admin_features', array($this, 'add_wc_admin_features'));
}
}
/**
* Add WooCommerce admin features for legacy compatibility
*/
public function add_wc_admin_features($features) {
return $features;
}
/**
* Check if dependencies are met
*/
public function check_dependencies() {
if (!$this->dependencies_met()) {
add_action('admin_notices', array($this, 'dependency_notice'));
}
}
/**
* Check if required dependencies are active
*/
private function dependencies_met() {
return class_exists('WooCommerce');
}
/**
* Display dependency notice
*/
public function dependency_notice() {
$message = __('Fast CSV Product Importer requires WooCommerce to be installed and activated.', 'fast-csv-importer');
echo '<div class="notice notice-error"><p>' . esc_html($message) . '</p></div>';
}
/**
* Plugin activation
*/
public function activate() {
// Activation is now handled by fcpi_activate_plugin() function
// This method is kept for backward compatibility
}
/**
* Plugin deactivation
*/
public function deactivate() {
// Deactivation is now handled by fcpi_deactivate_plugin() function
// This method is kept for backward compatibility
}
/**
* Clean up temporary files
*/
private function cleanup_temp_files() {
$upload_dir = wp_upload_dir();
$temp_dir = $upload_dir['basedir'] . '/fcpi-temp/';
if (is_dir($temp_dir)) {
$files = glob($temp_dir . '*');
$cleanup_time = time() - (get_option('fcpi_auto_cleanup_days', 7) * DAY_IN_SECONDS);
foreach ($files as $file) {
if (filemtime($file) < $cleanup_time) {
unlink($file);
}
}
}
}
}
/**
* Plugin activation callback
*/
function fcpi_activate_plugin() {
// Create database table
global $wpdb;
$table_name = $wpdb->prefix . 'fcpi_import_logs';
$charset_collate = $wpdb->get_charset_collate();
$sql = "CREATE TABLE IF NOT EXISTS $table_name (
id mediumint(9) NOT NULL AUTO_INCREMENT,
import_id varchar(32) NOT NULL,
status varchar(20) NOT NULL DEFAULT 'pending',
total_rows int(11) NOT NULL DEFAULT 0,
processed_rows int(11) NOT NULL DEFAULT 0,
successful_rows int(11) NOT NULL DEFAULT 0,
failed_rows int(11) NOT NULL DEFAULT 0,
error_log longtext,
file_path longtext,
mapping_data longtext,
started_at datetime DEFAULT CURRENT_TIMESTAMP,
completed_at datetime NULL,
PRIMARY KEY (id),
KEY import_id (import_id),
KEY status (status)
) $charset_collate;";
require_once(ABSPATH . 'wp-admin/includes/upgrade.php');
dbDelta($sql);
// Set default options
$defaults = array(
'batch_size' => 10,
'memory_limit' => '256M',
'max_execution_time' => 300,
'auto_cleanup_days' => 7,
'enable_logging' => true,
'duplicate_handling' => 'skip',
);
foreach ($defaults as $key => $value) {
if (!get_option('fcpi_' . $key)) {
update_option('fcpi_' . $key, $value);
}
}
// Schedule cleanup cron job
if (!wp_next_scheduled('fcpi_cleanup_temp_files')) {
wp_schedule_event(time(), 'daily', 'fcpi_cleanup_temp_files');
}
}
/**
* Plugin deactivation callback
*/
function fcpi_deactivate_plugin() {
// Clear scheduled events
wp_clear_scheduled_hook('fcpi_cleanup_temp_files');
}
// Register activation/deactivation hooks
register_activation_hook(__FILE__, 'fcpi_activate_plugin');
register_deactivation_hook(__FILE__, 'fcpi_deactivate_plugin');
// Initialize the plugin
add_action('plugins_loaded', function() {
FastCSVProductImporter::get_instance();
});
// Cleanup cron job callback
add_action('fcpi_cleanup_temp_files', function() {
FastCSVProductImporter::get_instance()->cleanup_temp_files();
});