check_tables(); // Load dependencies $this->load_dependencies(); // Initialize components $this->init_components(); } /** * Load plugin textdomain */ public function load_textdomain() { load_plugin_textdomain('aicoso-wishlist-for-woocommerce', false, dirname(plugin_basename(AICOSO_WISHLIST_PLUGIN_FILE)) . '/languages'); } /** * Declare compatibility with WooCommerce features */ public function declare_compatibility() { if (class_exists('\Automattic\WooCommerce\Utilities\FeaturesUtil')) { \Automattic\WooCommerce\Utilities\FeaturesUtil::declare_compatibility('custom_order_tables', AICOSO_WISHLIST_PLUGIN_FILE, true); \Automattic\WooCommerce\Utilities\FeaturesUtil::declare_compatibility('cart_checkout_blocks', AICOSO_WISHLIST_PLUGIN_FILE, true); } } /** * Check if database tables exist and create if not */ private function check_tables() { global $wpdb; $wishlists_table = $wpdb->prefix . AICOSO_WISHLIST_TABLE_WISHLISTS; $items_table = $wpdb->prefix . AICOSO_WISHLIST_TABLE_ITEMS; $analytics_table = $wpdb->prefix . 'aicoso_wishlist_analytics'; // Check if tables exist $wishlists_exists = $wpdb->get_var("SHOW TABLES LIKE '{$wishlists_table}'"); $items_exists = $wpdb->get_var("SHOW TABLES LIKE '{$items_table}'"); $analytics_exists = $wpdb->get_var("SHOW TABLES LIKE '{$analytics_table}'"); // If any table is missing, create all tables if (!$wishlists_exists || !$items_exists || !$analytics_exists) { require_once AICOSO_WISHLIST_PLUGIN_DIR . 'includes/class-aicoso-wishlist-install.php'; Aicoso_Wishlist_Install::create_tables(); Aicoso_Wishlist_Install::set_default_options(); } // Always check for missing columns (for existing installations) if ($wishlists_exists) { require_once AICOSO_WISHLIST_PLUGIN_DIR . 'includes/class-aicoso-wishlist-install.php'; Aicoso_Wishlist_Install::add_missing_columns($wpdb->prefix . AICOSO_WISHLIST_TABLE_WISHLISTS); } // Ensure default options are set if (get_option('aicoso_wishlist_enable_for_guests') === false) { require_once AICOSO_WISHLIST_PLUGIN_DIR . 'includes/class-aicoso-wishlist-install.php'; Aicoso_Wishlist_Install::set_default_options(); } } /** * Force create tables using direct SQL */ private function force_create_tables() { global $wpdb; $charset_collate = $wpdb->get_charset_collate(); // Create wishlists table with direct query if not exists $wishlists_table = $wpdb->prefix . AICOSO_WISHLIST_TABLE_WISHLISTS; $sql = "CREATE TABLE IF NOT EXISTS {$wishlists_table} ( id BIGINT(20) UNSIGNED NOT NULL AUTO_INCREMENT, user_id BIGINT(20) UNSIGNED DEFAULT NULL, session_id VARCHAR(255) DEFAULT NULL, wishlist_token VARCHAR(64) NOT NULL, wishlist_name VARCHAR(255) NOT NULL DEFAULT 'My Wishlist', wishlist_slug VARCHAR(255) NOT NULL, wishlist_type ENUM('default', 'category', 'custom') DEFAULT 'default', category_id BIGINT(20) UNSIGNED DEFAULT NULL, privacy ENUM('public', 'shared', 'private') DEFAULT 'public', is_default TINYINT(1) DEFAULT 0, share_key VARCHAR(64) DEFAULT NULL, date_created DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, date_modified DATETIME DEFAULT NULL, expiration DATETIME DEFAULT NULL, PRIMARY KEY (id), UNIQUE KEY wishlist_token (wishlist_token), KEY user_id (user_id), KEY session_id (session_id), KEY category_id (category_id), KEY wishlist_type (wishlist_type), KEY privacy (privacy), KEY share_key (share_key), KEY date_created (date_created) ) $charset_collate"; $wpdb->query($sql); } /** * Load required dependencies */ private function load_dependencies() { // Core classes require_once AICOSO_WISHLIST_PLUGIN_DIR . 'includes/class-aicoso-wishlist-install.php'; require_once AICOSO_WISHLIST_PLUGIN_DIR . 'includes/class-aicoso-wishlist-db.php'; require_once AICOSO_WISHLIST_PLUGIN_DIR . 'includes/class-aicoso-wishlist-session.php'; require_once AICOSO_WISHLIST_PLUGIN_DIR . 'includes/class-aicoso-wishlist-ajax.php'; require_once AICOSO_WISHLIST_PLUGIN_DIR . 'includes/class-aicoso-wishlist-shortcodes.php'; require_once AICOSO_WISHLIST_PLUGIN_DIR . 'includes/class-aicoso-wishlist-frontend.php'; require_once AICOSO_WISHLIST_PLUGIN_DIR . 'includes/class-aicoso-wishlist.php'; // Admin classes if (is_admin()) { require_once AICOSO_WISHLIST_PLUGIN_DIR . 'admin/class-aicoso-wishlist-admin.php'; } } /** * Initialize plugin components */ private function init_components() { // Initialize main class Aicoso_Wishlist::get_instance(); // Add settings link add_filter('plugin_action_links_' . AICOSO_WISHLIST_PLUGIN_BASENAME, array($this, 'add_settings_link')); } /** * Plugin activation */ public function activate() { // Check for WooCommerce if (!class_exists('WooCommerce')) { deactivate_plugins(plugin_basename(AICOSO_WISHLIST_PLUGIN_FILE)); // Don't use translation here as textdomain isn't loaded yet during activation wp_die('Aicoso Wishlist requires WooCommerce to be installed and active.'); } require_once AICOSO_WISHLIST_PLUGIN_DIR . 'includes/class-aicoso-wishlist-install.php'; Aicoso_Wishlist_Install::activate(); } /** * Plugin deactivation */ public function deactivate() { require_once AICOSO_WISHLIST_PLUGIN_DIR . 'includes/class-aicoso-wishlist-install.php'; Aicoso_Wishlist_Install::deactivate(); } /** * WooCommerce missing notice */ public function woocommerce_missing_notice() { ?>