get_var( $wpdb->prepare( 'SHOW TABLES LIKE %s', $wpdb->prefix . 'dp_aicoso_rules' ) ) === $wpdb->prefix . 'dp_aicoso_rules'; if ( ! $table_exists ) { // Tables don't exist yet, skip. return; } // Check if test rules already exist. // phpcs:ignore WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.DirectDatabaseQuery.NoCaching -- Test utility operation $existing = $wpdb->get_var( 'SELECT COUNT(*) FROM `' . $wpdb->prefix . 'dp_aicoso_rules`' ); if ( $existing > 0 ) { // Rules already exist, don't create duplicates. return; } // Create a simple 10% discount for all logged-in users. // phpcs:ignore WordPress.DB.DirectDatabaseQuery.DirectQuery -- Test data creation operation $wpdb->insert( $wpdb->prefix . 'dp_aicoso_rules', array( 'rule_name' => 'Member Discount - 10% Off', 'rule_type' => 'role', 'rule_status' => 'active', 'priority' => 10, 'conditions' => wp_json_encode( array() ), 'adjustments' => wp_json_encode( array( 'discount_type' => 'percentage', 'discount_value' => 10, 'apply_to_guests' => false, ) ), 'start_date' => null, 'end_date' => null, ), array( '%s', '%s', '%s', '%d', '%s', '%s', '%s', '%s' ) ); $rule_id = $wpdb->insert_id; // Add role relationships for common roles. if ( $rule_id ) { // Check if relationships table exists. // phpcs:ignore WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.DirectDatabaseQuery.NoCaching -- Test utility operation $rel_table_exists = $wpdb->get_var( $wpdb->prepare( 'SHOW TABLES LIKE %s', $wpdb->prefix . 'dp_aicoso_rule_relationships' ) ) === $wpdb->prefix . 'dp_aicoso_rule_relationships'; if ( $rel_table_exists ) { // Apply to customer role. // phpcs:ignore WordPress.DB.DirectDatabaseQuery.DirectQuery -- Test data creation operation $wpdb->insert( $wpdb->prefix . 'dp_aicoso_rule_relationships', array( 'rule_id' => $rule_id, 'object_id' => 0, 'object_type' => 'role:customer', ), array( '%d', '%d', '%s' ) ); // Apply to subscriber role. // phpcs:ignore WordPress.DB.DirectDatabaseQuery.DirectQuery -- Test data creation operation $wpdb->insert( $wpdb->prefix . 'dp_aicoso_rule_relationships', array( 'rule_id' => $rule_id, 'object_id' => 0, 'object_type' => 'role:subscriber', ), array( '%d', '%d', '%s' ) ); // Apply to administrator role. // phpcs:ignore WordPress.DB.DirectDatabaseQuery.DirectQuery -- Test data creation operation $wpdb->insert( $wpdb->prefix . 'dp_aicoso_rule_relationships', array( 'rule_id' => $rule_id, 'object_id' => 0, 'object_type' => 'role:administrator', ), array( '%d', '%d', '%s' ) ); } } // Create a 20% discount for wholesale customers. // phpcs:ignore WordPress.DB.DirectDatabaseQuery.DirectQuery -- Test data creation operation $wpdb->insert( $wpdb->prefix . 'dp_aicoso_rules', array( 'rule_name' => 'Wholesale Discount - 20% Off', 'rule_type' => 'role', 'rule_status' => 'active', 'priority' => 20, 'conditions' => wp_json_encode( array() ), 'adjustments' => wp_json_encode( array( 'discount_type' => 'percentage', 'discount_value' => 20, 'apply_to_guests' => false, ) ), 'start_date' => null, 'end_date' => null, ), array( '%s', '%s', '%s', '%d', '%s', '%s', '%s', '%s' ) ); $wholesale_rule_id = $wpdb->insert_id; // Add wholesale role relationship. if ( $wholesale_rule_id && $rel_table_exists ) { // phpcs:ignore WordPress.DB.DirectDatabaseQuery.DirectQuery -- Test data creation operation $wpdb->insert( $wpdb->prefix . 'dp_aicoso_rule_relationships', array( 'rule_id' => $wholesale_rule_id, 'object_id' => 0, 'object_type' => 'role:wholesale_customer', ), array( '%d', '%d', '%s' ) ); } // Clear caches. delete_transient( 'dp_aicoso_active_rules' ); delete_transient( 'dp_aicoso_active_rules_data' ); wp_cache_flush(); } /** * Remove test rules. */ public static function remove_test_rules() { global $wpdb; // Delete test rules. // phpcs:ignore WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.DirectDatabaseQuery.NoCaching -- Test data cleanup operation $wpdb->query( $wpdb->prepare( 'DELETE FROM `' . $wpdb->prefix . 'dp_aicoso_rules` WHERE rule_name LIKE %s', '%Test Rule%' ) ); // Clear caches. delete_transient( 'dp_aicoso_active_rules' ); delete_transient( 'dp_aicoso_active_rules_data' ); wp_cache_flush(); } }