product_feed( '🎬 Product feed template started', ActiveTrail_Logger::LEVEL_INFO );
}
// Get export type and format from global variables
$activetrail_export_type = isset( $GLOBALS['activetrail_export_type'] ) ? $GLOBALS['activetrail_export_type'] : 'google';
$activetrail_feed_format = isset( $GLOBALS['activetrail_feed_format'] ) ? $GLOBALS['activetrail_feed_format'] : 'xml';
if ( $activetrail_logger ) {
$activetrail_logger->product_feed(
'📋 Export type and format determined',
ActiveTrail_Logger::LEVEL_DEBUG,
array(
'export_type' => $activetrail_export_type,
'feed_format' => $activetrail_feed_format,
'global_var_set' => isset( $GLOBALS['activetrail_export_type'] ),
)
);
}
// Initialize the feed generator
if ( ! class_exists( 'ActiveTrail_Product_Feed_Generator' ) ) {
if ( $activetrail_logger ) {
$activetrail_logger->product_feed(
'📦 Loading Product Feed Generator class',
ActiveTrail_Logger::LEVEL_DEBUG,
array(
'class_file' => ACTIVETRAIL_WC_PLUGIN_DIR . 'includes/class-product-feed-generator.php',
)
);
}
require_once ACTIVETRAIL_WC_PLUGIN_DIR . 'includes/class-product-feed-generator.php';
} elseif ( $activetrail_logger ) {
$activetrail_logger->product_feed( '✅ Product Feed Generator class already loaded', ActiveTrail_Logger::LEVEL_DEBUG );
}
if ( $activetrail_logger ) {
$activetrail_logger->product_feed( '🏭 Creating feed generator instance', ActiveTrail_Logger::LEVEL_DEBUG );
}
$activetrail_feed_generator = new ActiveTrail_Product_Feed_Generator();
if ( $activetrail_logger ) {
$activetrail_logger->product_feed(
'🚀 Starting feed generation',
ActiveTrail_Logger::LEVEL_INFO,
array(
'export_type' => $activetrail_export_type,
)
);
}
// Generate and output the appropriate feed based on format and export_type
try {
if ( $activetrail_feed_format === 'xml' ) {
if ( $activetrail_logger ) {
$activetrail_logger->product_feed(
'🔄 Generating XML feed',
ActiveTrail_Logger::LEVEL_INFO,
array(
'export_type' => $activetrail_export_type,
)
);
}
// Use different XML generators for Google and Facebook
if ( $activetrail_export_type === 'google' ) {
$activetrail_feed_content = $activetrail_feed_generator->generate_google_xml();
} else {
// Facebook uses standard RSS 2.0 without Google namespace
$activetrail_feed_content = $activetrail_feed_generator->generate_facebook_xml();
}
if ( $activetrail_logger ) {
$activetrail_logger->product_feed(
'✅ XML feed generated successfully',
ActiveTrail_Logger::LEVEL_INFO,
array(
'export_type' => $activetrail_export_type,
'content_length' => strlen( $activetrail_feed_content ),
'content_preview' => substr( $activetrail_feed_content, 0, 200 ) . '...',
)
);
}
// Store XML feed content for controller to output (controller handles headers and output).
// Do not echo here - controller will output with proper headers.
$GLOBALS['activetrail_feed_output'] = $activetrail_feed_content;
} else {
// Fallback to JSON if format is explicitly set to json (should not happen in normal flow)
if ( $activetrail_logger ) {
$activetrail_logger->product_feed(
'🔄 Generating JSON feed',
ActiveTrail_Logger::LEVEL_INFO,
array(
'export_type' => $activetrail_export_type,
)
);
}
$activetrail_feed_content = $activetrail_feed_generator->generate_facebook_json();
if ( $activetrail_logger ) {
$activetrail_logger->product_feed(
'✅ JSON feed generated successfully',
ActiveTrail_Logger::LEVEL_INFO,
array(
'export_type' => $activetrail_export_type,
'content_length' => strlen( $activetrail_feed_content ),
'content_preview' => substr( $activetrail_feed_content, 0, 200 ) . '...',
)
);
}
// Store JSON feed content for controller to output (controller handles headers and output).
// Do not echo here - controller will output with proper headers.
$GLOBALS['activetrail_feed_output'] = $activetrail_feed_content;
}
if ( $activetrail_logger ) {
$activetrail_logger->product_feed(
'🎉 Feed template completed successfully',
ActiveTrail_Logger::LEVEL_INFO,
array(
'export_type' => $activetrail_export_type,
)
);
}
} catch ( Exception $e ) {
if ( $activetrail_logger ) {
$activetrail_logger->product_feed(
'💥 Exception occurred during feed generation',
ActiveTrail_Logger::LEVEL_ERROR,
array(
'error_message' => $e->getMessage(),
'error_file' => $e->getFile(),
'error_line' => $e->getLine(),
'export_type' => $activetrail_export_type,
)
);
}
// Store error output for controller to handle.
if ( $activetrail_feed_format === 'xml' ) {
$GLOBALS['activetrail_feed_output'] = 'Feed generation failed: ' . esc_html( $e->getMessage() ) . '';
} else {
$activetrail_wc_error_data = array(
'success' => false,
'error' => 'Feed generation failed: ' . esc_html( $e->getMessage() ),
'timestamp' => current_time( 'c' ),
);
$GLOBALS['activetrail_feed_output'] = wp_json_encode( $activetrail_wc_error_data );
$GLOBALS['activetrail_feed_error'] = true;
}
} catch ( Error $e ) {
if ( $activetrail_logger ) {
$activetrail_logger->product_feed(
'💥 Fatal error occurred during feed generation',
ActiveTrail_Logger::LEVEL_ERROR,
array(
'error_message' => $e->getMessage(),
'error_file' => $e->getFile(),
'error_line' => $e->getLine(),
'export_type' => $activetrail_export_type,
'feed_format' => $activetrail_feed_format,
)
);
}
// Store error output for controller to handle.
if ( $activetrail_feed_format === 'xml' ) {
$GLOBALS['activetrail_feed_output'] = 'Fatal error: ' . esc_html( $e->getMessage() ) . '';
} else {
$activetrail_wc_error_data = array(
'success' => false,
'error' => 'Fatal error: ' . esc_html( $e->getMessage() ),
'timestamp' => current_time( 'c' ),
);
$GLOBALS['activetrail_feed_output'] = wp_json_encode( $activetrail_wc_error_data );
$GLOBALS['activetrail_feed_error'] = true;
}
}