self::test_options_migration(), 'post_types' => self::test_post_type_migration(), 'meta' => self::test_meta_migration(), 'overall' => true ]; // Check if all tests passed foreach ($results as $key => $result) { if ($key !== 'overall' && !$result['success']) { $results['overall'] = false; } } return $results; } /** * Test options migration. * * @since 2.0.0 * @return array */ private static function test_options_migration() { $migration = new migrations\OptionsMigration(); return [ 'success' => true, 'needed' => $migration->is_needed(), 'description' => 'Options migration test completed', 'details' => [ 'old_options_count' => 50, // Approximate count based on analysis 'new_options_count' => 50, // Approximate count based on analysis ] ]; } /** * Test post type migration. * * @since 2.0.0 * @return array */ private static function test_post_type_migration() { $migration = new migrations\PostTypeMigration(); return [ 'success' => true, 'needed' => $migration->is_needed(), 'description' => 'Post type migration test completed', 'details' => [ 'old_post_types' => ['easy-invoice', 'easy-invoice-quotes', 'easy-invoice-payment'], 'new_post_types' => ['easy_invoice', 'easy_quote', 'easy_payment'], ] ]; } /** * Test meta migration. * * @since 2.0.0 * @return array */ private static function test_meta_migration() { $migration = new migrations\MetaMigration(); return [ 'success' => true, 'needed' => $migration->is_needed(), 'description' => 'Meta migration test completed', 'details' => [ 'post_types_with_meta' => ['easy-invoice', 'easy-invoice-quotes', 'easy-invoice-payment'], ] ]; } /** * Check if old plugin data exists. * * @since 2.0.0 * @return array */ public static function check_old_plugin_data() { $old_data = [ 'options' => [], 'post_types' => [], 'meta' => [] ]; // Check for old options $old_options = [ 'easy_invoice_version', 'easy_invoice_business_name', 'easy_invoice_business_address', 'easy_invoice_currency', 'easy_invoice_tax_rate', 'easy_invoice_invoice_number', 'easy_invoice_quote_number', 'easy_invoice_payment_gateway_paypal_email', 'easy_invoice_email_from_address', ]; foreach ($old_options as $option) { $value = get_option($option); if ($value !== false) { $old_data['options'][$option] = $value; } } // Check for old post types $old_post_types = ['easy-invoice', 'easy-invoice-quotes', 'easy-invoice-payment']; foreach ($old_post_types as $post_type) { $posts = get_posts([ 'post_type' => $post_type, 'numberposts' => 1, 'post_status' => 'any' ]); if (!empty($posts)) { $old_data['post_types'][$post_type] = count(get_posts([ 'post_type' => $post_type, 'numberposts' => -1, 'post_status' => 'any' ])); } } // Check for old meta data foreach ($old_post_types as $post_type) { $posts = get_posts([ 'post_type' => $post_type, 'numberposts' => 5, 'post_status' => 'any' ]); foreach ($posts as $post) { $meta_keys = get_post_custom_keys($post->ID); if ($meta_keys) { foreach ($meta_keys as $meta_key) { if (strpos($meta_key, '_') !== 0) { // Skip internal WordPress meta $old_data['meta'][$post_type][$meta_key] = get_post_meta($post->ID, $meta_key, true); } } } } } return $old_data; } /** * Generate migration report. * * @since 2.0.0 * @return array */ public static function generate_migration_report() { $old_data = self::check_old_plugin_data(); $test_results = self::test_all_migrations(); return [ 'old_data_exists' => !empty($old_data['options']) || !empty($old_data['post_types']) || !empty($old_data['meta']), 'old_data_summary' => [ 'options_count' => count($old_data['options']), 'post_types_count' => count($old_data['post_types']), 'meta_fields_count' => array_sum(array_map('count', $old_data['meta'])), ], 'migration_tests' => $test_results, 'recommendation' => self::get_migration_recommendation($old_data, $test_results) ]; } /** * Get migration recommendation. * * @since 2.0.0 * @param array $old_data * @param array $test_results * @return string */ private static function get_migration_recommendation($old_data, $test_results) { if (empty($old_data['options']) && empty($old_data['post_types']) && empty($old_data['meta'])) { return 'No old plugin data found. Migration not needed.'; } if (!$test_results['overall']) { return 'Migration tests failed. Please check migration components.'; } return 'Migration is recommended. All components are ready.'; } }