Ejemplo n.º 1
0
 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;
 }