/** * @param array $product_ids */ protected static function exportProducts(array $product_ids) { static::$count_success = 0; static::$count_fail = 0; static::$count_skip = 0; static::$errors = array(); static::$error_counter = array(); $product_ids = array_filter($product_ids); $templates = $groups = array(); fn_set_progress('parts', count($product_ids) * 2); foreach ($product_ids as $product_id) { $product = new Product($product_id); if (empty($product->id)) { fn_set_progress('echo', '.'); static::$count_skip++; continue; } if (empty($product->template_id)) { $template = Template::getDefaultByCompanyId($product->company_id); if ($template) { $product->setTemplateId($template->id); $product->saveTemplateId(); } else { $company_name = fn_get_company_name($product->company_id); fn_set_notification('E', __('error'), __('ebay_default_template_not_found', array('[company_name]' => $company_name))); } } if (!empty($product->external_id)) { $api = Client::instance($product->getTemplate()); static::uploadProductImages($product); fn_set_progress('echo', __('ebay_export_product', array('[product]' => htmlspecialchars($product->original_title))), false); $combinations = $product->getCombinations(); $external_combinations = $product->getExternalCombinations(); if (!empty($combinations) && empty($external_combinations)) { $result = $api->getItem($product); if ($result && $result->isSuccess()) { $product->setExternalCombinations($result->getProductVariations()); } } $result = $api->reviseItem($product); if ($result) { if ($result->isSuccess()) { $product->setStatusActive(); $product->saveExternalData(); } elseif ($result->issetErrorAuctionEnded()) { $result = $api->relistItem($product); if ($result && $result->isSuccess()) { Product::deleteExternalData($product->external_id); $product->external_id = $result->getExternalId(); $product->saveExternalData(); $product->setStatusActive(); } } } if ($result) { if ($result->isSuccess()) { static::$count_success++; ProductLogger::info(ProductLogger::ACTION_UPDATE_PRODUCT, $product, __('ebay_success_exported_product_notice')); } else { static::$count_fail++; } static::checkResponse($product, $result, ProductLogger::ACTION_UPDATE_PRODUCT); } else { static::checkInternalErrors($product, $api, ProductLogger::ACTION_UPDATE_PRODUCT); } fn_set_progress('echo', '.'); } else { $groups[$product->template_id][] = $product; $templates[$product->template_id] = $product->getTemplate(); if (count($groups[$product->template_id]) >= static::MAX_COUNT_EXPORT_NEW_PRODUCTS) { static::exportGroupProducts($product->getTemplate(), $groups[$product->template_id]); unset($groups[$product->template_id]); } } } if (!empty($groups)) { foreach ($groups as $template_id => $products) { static::exportGroupProducts($templates[$template_id], $products); } } /** @var \Smarty $smarty */ $smarty = Tygh::$app['view']; $smarty->assign('export_result', array('count_success' => static::$count_success, 'count_fail' => static::$count_fail, 'count_skip' => static::$count_skip, 'errors' => static::$errors, 'error_counter' => static::$error_counter, 'count_external_error' => static::$count_external_error)); fn_set_notification('I', static::$count_fail == 0 ? __('ebay_export_success') : __('ebay_export_failed'), $smarty->fetch('addons/ebay/views/ebay/components/export_summary.tpl')); }