static function buildFeed($feed_type, $items, $account, $profile = false, $append_feed = false) { WPLA()->logger->info('buildFeed() ' . $feed_type . ' - account id: ' . $account->id); WPLA()->logger->info('items count: ' . sizeof($items)); // WPLA()->logger->info('items: '.print_r($items,1)); // limit feed size to prevent timeout $max_feed_size = get_option('wpla_max_feed_size', 1000); if (sizeof($items) > $max_feed_size) { $items = array_slice($items, 0, $max_feed_size); } // generate CSV data switch ($feed_type) { case '_POST_FLAT_FILE_PRICEANDQUANTITYONLY_UPDATE_DATA_': # price and quantity feed WPLA()->logger->info('building price and quantity feed...'); WPLA()->logger->start('buildPriceAndQuantityFeedData'); $csv_object = WPLA_FeedDataBuilder::buildPriceAndQuantityFeedData($items, $account->id); WPLA()->logger->logTime('buildPriceAndQuantityFeedData'); break; case '_POST_FLAT_FILE_LISTINGS_DATA_': # new products feed WPLA()->logger->info('building new products feed...'); WPLA()->logger->start('buildNewProductsFeedData'); $csv_object = WPLA_FeedDataBuilder::buildNewProductsFeedData($items, $account->id, $profile, $append_feed); WPLA()->logger->logTime('buildNewProductsFeedData'); break; case '_POST_FLAT_FILE_INVLOADER_DATA_': # delete products feed (Inventory Loader) WPLA()->logger->info('building delete products feed...'); WPLA()->logger->start('buildInventoryLoaderFeedData'); $csv_object = WPLA_FeedDataBuilder::buildInventoryLoaderFeedData($items, $account->id, $profile); WPLA()->logger->logTime('buildInventoryLoaderFeedData'); break; default: # default WPLA()->logger->error('unsupported feed type ' . $feed_type); $csv_object = false; break; } if (!$csv_object || empty($csv_object->data)) { WPLA()->logger->warn('no feed data - not creating feed'); return false; } // WPLA()->logger->info('CSV: '.$csv_object->data); // // extract TemplateType from listing data feed // $template_name = ''; // if ( preg_match('/TemplateType=(.*)\t/U', $csv_object->data, $matches) ) { // $template_name = $matches[1]; // WPLA()->logger->info('TemplateType: '.$template_name); // } // get template name / type from CSV object $template_name = ''; if ('_POST_FLAT_FILE_LISTINGS_DATA_' == $feed_type) { $template_name = $csv_object->template_type; WPLA()->logger->info('TemplateType: ' . $template_name); } if ('_POST_FLAT_FILE_INVLOADER_DATA_' == $feed_type) { $template_name = 'Product Removal'; } // set feed properties (required since $this is recycled here...) $new_feed = new WPLA_AmazonFeed(); $new_feed->data = $csv_object->data; // $new_feed->line_count = sizeof( $items ); $new_feed->line_count = $csv_object->line_count; $new_feed->FeedType = $feed_type; $new_feed->template_name = $template_name; $new_feed->FeedProcessingStatus = 'pending'; $new_feed->status = 'pending'; $new_feed->account_id = $account->id; $new_feed->date_created = date('Y-m-d H:i:s'); // check if a pending feed of this type already exists $existing_feed_id = self::getPendingFeedId($feed_type, $template_name, $account->id); // echo "<pre>template name: ";print_r($template_name);echo"</pre>"; // echo "<pre>existing feed: ";print_r($existing_feed_id);echo"</pre>"; if ($existing_feed_id && $append_feed) { // update existing feed (append) $existing_feed = self::getFeed($existing_feed_id); $new_feed->data = $existing_feed->data . "\n" . $csv_object->data; $new_feed->id = $existing_feed_id; $new_feed->template_name = $existing_feed->template_name; $new_feed->line_count += $existing_feed->line_count; $new_feed->update(); WPLA()->logger->info('appended content to existing feed ' . $new_feed->id); } elseif ($existing_feed_id && !$append_feed) { // update existing feed (replace) $new_feed->id = $existing_feed_id; $new_feed->update(); WPLA()->logger->info('updated existing feed ' . $new_feed->id); } else { // add new feed $new_feed->id = null; $new_feed->add(); WPLA()->logger->info('added NEW feed - id ' . $new_feed->id); } WPLA()->logger->info('feed was built - ' . $new_feed->id); WPLA()->logger->info('------'); return true; }