aboutsummaryrefslogtreecommitdiffstats
path: root/public/admin/controller/extension/openbay
diff options
context:
space:
mode:
authorJesús <heckyel@hyperbola.info>2019-08-18 21:14:58 -0500
committerJesús <heckyel@hyperbola.info>2019-08-18 21:14:58 -0500
commit2eed7b082f83630301e51f57ca8394de228a8605 (patch)
tree1d19962d22d30f99317d9276e4bae7744fc93fc2 /public/admin/controller/extension/openbay
downloadlibrecart-2eed7b082f83630301e51f57ca8394de228a8605.tar.lz
librecart-2eed7b082f83630301e51f57ca8394de228a8605.tar.xz
librecart-2eed7b082f83630301e51f57ca8394de228a8605.zip
first commit
Diffstat (limited to 'public/admin/controller/extension/openbay')
-rw-r--r--public/admin/controller/extension/openbay/amazon.php1129
-rw-r--r--public/admin/controller/extension/openbay/amazon_listing.php607
-rw-r--r--public/admin/controller/extension/openbay/amazon_product.php585
-rw-r--r--public/admin/controller/extension/openbay/amazonus.php1040
-rw-r--r--public/admin/controller/extension/openbay/amazonus_listing.php592
-rw-r--r--public/admin/controller/extension/openbay/amazonus_product.php559
-rw-r--r--public/admin/controller/extension/openbay/ebay.php2421
-rw-r--r--public/admin/controller/extension/openbay/ebay_profile.php364
-rw-r--r--public/admin/controller/extension/openbay/ebay_template.php216
-rw-r--r--public/admin/controller/extension/openbay/etsy.php233
-rw-r--r--public/admin/controller/extension/openbay/etsy_product.php761
-rw-r--r--public/admin/controller/extension/openbay/etsy_shipping.php9
-rw-r--r--public/admin/controller/extension/openbay/etsy_shop.php9
-rw-r--r--public/admin/controller/extension/openbay/fba.php923
14 files changed, 9448 insertions, 0 deletions
diff --git a/public/admin/controller/extension/openbay/amazon.php b/public/admin/controller/extension/openbay/amazon.php
new file mode 100644
index 0000000..dd3178b
--- /dev/null
+++ b/public/admin/controller/extension/openbay/amazon.php
@@ -0,0 +1,1129 @@
+<?php
+class ControllerExtensionOpenbayAmazon extends Controller {
+ public function install() {
+ $this->load->model('extension/openbay/amazon');
+ $this->load->model('setting/setting');
+ $this->load->model('setting/extension');
+ $this->load->model('user/user_group');
+
+ $this->model_user_user_group->addPermission($this->user->getGroupId(), 'access', 'extension/openbay/amazon_listing');
+ $this->model_user_user_group->addPermission($this->user->getGroupId(), 'modify', 'extension/openbay/amazon_listing');
+ $this->model_user_user_group->addPermission($this->user->getGroupId(), 'access', 'extension/openbay/amazon_product');
+ $this->model_user_user_group->addPermission($this->user->getGroupId(), 'modify', 'extension/openbay/amazon_product');
+
+ $this->model_extension_openbay_amazon->install();
+ }
+
+ public function uninstall() {
+ $this->load->model('extension/openbay/amazon');
+ $this->load->model('setting/setting');
+ $this->load->model('setting/extension');
+
+ $this->model_extension_openbay_amazon->uninstall();
+ $this->model_setting_extension->uninstall('openbay', $this->request->get['extension']);
+ $this->model_setting_setting->deleteSetting($this->request->get['extension']);
+ }
+
+ public function index() {
+ $this->load->model('setting/setting');
+ $this->load->model('localisation/order_status');
+ $this->load->model('extension/openbay/amazon');
+
+ $this->load->language('extension/openbay/amazon');
+
+ $data = $this->language->all();
+
+ $this->document->setTitle($this->language->get('text_dashboard'));
+ $this->document->addScript('view/javascript/openbay/js/faq.js');
+
+ $data['breadcrumbs'] = array();
+ $data['breadcrumbs'][] = array(
+ 'href' => $this->url->link('common/dashboard', 'user_token=' . $this->session->data['user_token'], true),
+ 'text' => $this->language->get('text_home'),
+ );
+ $data['breadcrumbs'][] = array(
+ 'href' => $this->url->link('marketplace/openbay', 'user_token=' . $this->session->data['user_token'], true),
+ 'text' => $this->language->get('text_openbay'),
+ );
+ $data['breadcrumbs'][] = array(
+ 'href' => $this->url->link('extension/openbay/amazon', 'user_token=' . $this->session->data['user_token'], true),
+ 'text' => $this->language->get('text_dashboard'),
+ );
+
+ $data['success'] = '';
+ if (isset($this->session->data['success'])) {
+ $data['success'] = $this->session->data['success'];
+ unset($this->session->data['success']);
+ } else {
+ $data['success'] = '';
+ }
+
+ $data['validation'] = $this->openbay->amazon->validate();
+ $data['link_settings'] = $this->url->link('extension/openbay/amazon/settings', 'user_token=' . $this->session->data['user_token'], true);
+ $data['link_subscription'] = $this->url->link('extension/openbay/amazon/subscription', 'user_token=' . $this->session->data['user_token'], true);
+ $data['link_item_link'] = $this->url->link('extension/openbay/amazon/itemLinks', 'user_token=' . $this->session->data['user_token'], true);
+ $data['link_stock_updates'] = $this->url->link('extension/openbay/amazon/stockUpdates', 'user_token=' . $this->session->data['user_token'], true);
+ $data['link_saved_listings'] = $this->url->link('extension/openbay/amazon/savedListings', 'user_token=' . $this->session->data['user_token'], true);
+ $data['link_bulk_listing'] = $this->url->link('extension/openbay/amazon/bulkListProducts', 'user_token=' . $this->session->data['user_token'], true);
+ $data['link_bulk_linking'] = $this->url->link('extension/openbay/amazon/bulklinking', 'user_token=' . $this->session->data['user_token'], true);
+ $data['link_signup'] = 'https://account.openbaypro.com/amazon/apiRegister/?endpoint=2&utm_source=opencart_install&utm_medium=dashboard&utm_campaign=amazon';
+
+ $data['header'] = $this->load->controller('common/header');
+ $data['column_left'] = $this->load->controller('common/column_left');
+ $data['footer'] = $this->load->controller('common/footer');
+
+ $this->response->setOutput($this->load->view('extension/openbay/amazon', $data));
+ }
+
+ public function stockUpdates() {
+ $this->load->language('extension/openbay/amazon_stockupdates');
+
+ $data = $this->language->all();
+
+ $this->document->setTitle($this->language->get('heading_title'));
+ $this->document->addScript('view/javascript/openbay/js/faq.js');
+
+ $data['breadcrumbs'] = array();
+
+ $data['breadcrumbs'][] = array(
+ 'href' => $this->url->link('common/dashboard', 'user_token=' . $this->session->data['user_token'], true),
+ 'text' => $this->language->get('text_home'),
+ );
+
+ $data['breadcrumbs'][] = array(
+ 'href' => $this->url->link('marketplace/openbay', 'user_token=' . $this->session->data['user_token'], true),
+ 'text' => $this->language->get('text_openbay'),
+ );
+
+ $data['breadcrumbs'][] = array(
+ 'href' => $this->url->link('extension/openbay/amazon', 'user_token=' . $this->session->data['user_token'], true),
+ 'text' => $this->language->get('text_amazon'),
+ );
+
+ $data['breadcrumbs'][] = array(
+ 'href' => $this->url->link('extension/openbay/amazon/stockUpdates', 'user_token=' . $this->session->data['user_token'], true),
+ 'text' => $this->language->get('heading_title'),
+ );
+
+ $data['link_overview'] = $this->url->link('extension/openbay/amazon', 'user_token=' . $this->session->data['user_token'], true);
+
+ $request_arg = array();
+
+ if (isset($this->request->get['filter_date_start'])) {
+ $request_arg['date_start'] = date("Y-m-d", strtotime($this->request->get['filter_date_start']));
+ } else {
+ $request_arg['date_start'] = date("Y-m-d");
+ }
+
+ if (isset($this->request->get['filter_date_end'])) {
+ $request_arg['date_end'] = date("Y-m-d", strtotime($this->request->get['filter_date_end']));
+ } else {
+ $request_arg['date_end'] = date("Y-m-d");
+ }
+
+ $data['date_start'] = $request_arg['date_start'];
+ $data['date_end'] = $request_arg['date_end'];
+
+ $xml = $this->openbay->amazon->getStockUpdatesStatus($request_arg);
+ $xml_object = simplexml_load_string($xml);
+
+ $data['table_data'] = array();
+
+ if ($xml_object !== false) {
+ $table_data = array();
+
+ foreach($xml_object->update as $update_node) {
+ $row = array(
+ 'date_requested' => (string)$update_node->date_requested,
+ 'date_updated' => (string)$update_node->date_updated,
+ 'status' => (string)$update_node->status,
+ );
+
+ $data_items = array();
+
+ foreach($update_node->data->product as $product_node) {
+ $data_items[] = array(
+ 'sku' => (string)$product_node->sku,
+ 'stock' => (int)$product_node->stock
+ );
+ }
+
+ $row['data'] = $data_items;
+ $table_data[(int)$update_node->ref] = $row;
+ }
+
+ $data['table_data'] = $table_data;
+ } else {
+ $data['error'] = $data['error_api_connection'];
+ }
+
+ $data['user_token'] = $this->session->data['user_token'];
+
+ $data['header'] = $this->load->controller('common/header');
+ $data['column_left'] = $this->load->controller('common/column_left');
+ $data['footer'] = $this->load->controller('common/footer');
+
+ $this->response->setOutput($this->load->view('extension/openbay/amazon_stock_updates', $data));
+
+ }
+
+ public function subscription() {
+ $this->load->language('extension/openbay/amazon_subscription');
+
+ $data = $this->language->all();
+
+ $this->document->setTitle($this->language->get('heading_title'));
+ $this->document->addScript('view/javascript/openbay/js/faq.js');
+
+ $data['breadcrumbs'] = array();
+ $data['breadcrumbs'][] = array(
+ 'href' => $this->url->link('common/dashboard', 'user_token=' . $this->session->data['user_token'], true),
+ 'text' => $this->language->get('text_home'),
+ );
+ $data['breadcrumbs'][] = array(
+ 'href' => $this->url->link('marketplace/openbay', 'user_token=' . $this->session->data['user_token'], true),
+ 'text' => $this->language->get('text_openbay'),
+ );
+ $data['breadcrumbs'][] = array(
+ 'href' => $this->url->link('extension/openbay/amazon', 'user_token=' . $this->session->data['user_token'], true),
+ 'text' => $this->language->get('text_amazon'),
+ );
+ $data['breadcrumbs'][] = array(
+ 'href' => $this->url->link('extension/openbay/amazon/subscription', 'user_token=' . $this->session->data['user_token'], true),
+ 'text' => $this->language->get('heading_title'),
+ );
+
+ $data['link_overview'] = $this->url->link('extension/openbay/amazon', 'user_token=' . $this->session->data['user_token'], true);
+
+ $response = simplexml_load_string($this->openbay->amazon->call('plans/getPlans'));
+
+ $data['plans'] = array();
+
+ if ($response) {
+ foreach ($response->Plan as $plan) {
+ $data['plans'][] = array(
+ 'title' => (string)$plan->Title,
+ 'description' => (string)$plan->Description,
+ 'order_frequency' => (string)$plan->OrderFrequency,
+ 'product_listings' => (string)$plan->ProductListings,
+ 'bulk_listing' => (string)$plan->BulkListing,
+ 'price' => (string)$plan->Price,
+ );
+ }
+ }
+
+ $response = simplexml_load_string($this->openbay->amazon->call('plans/getUsersPlans'));
+
+ $plan = false;
+
+ if ($response) {
+ $plan = array(
+ 'merchant_id' => (string)$response->MerchantId,
+ 'user_status' => (string)$response->UserStatus,
+ 'title' => (string)$response->Title,
+ 'description' => (string)$response->Description,
+ 'price' => (string)$response->Price,
+ 'order_frequency' => (string)$response->OrderFrequency,
+ 'product_listings' => (string)$response->ProductListings,
+ 'listings_remain' => (string)$response->ListingsRemain,
+ 'listings_reserved' => (string)$response->ListingsReserved,
+ 'bulk_listing' => (string)$response->BulkListing,
+ );
+ }
+
+ $data['user_plan'] = $plan;
+ $data['link_change_plan'] = $this->openbay->amazon->getServer() . 'account/changePlan/?token=' . $this->config->get('openbay_amazon_token');
+ $data['link_change_seller'] = $this->openbay->amazon->getServer() . 'account/changeSellerId/?token=' . $this->config->get('openbay_amazon_token');
+ $data['link_register'] = 'https://account.openbaypro.com/amazon/apiRegister/?endpoint=2&utm_source=opencart_install&utm_medium=subscription&utm_campaign=amazon';
+
+ $data['header'] = $this->load->controller('common/header');
+ $data['column_left'] = $this->load->controller('common/column_left');
+ $data['footer'] = $this->load->controller('common/footer');
+
+ $this->response->setOutput($this->load->view('extension/openbay/amazon_subscription', $data));
+ }
+
+ public function settings() {
+ $this->load->language('extension/openbay/amazon_settings');
+
+ $data = $this->language->all();
+
+ $this->document->setTitle($this->language->get('heading_title'));
+ $this->document->addScript('view/javascript/openbay/js/faq.js');
+
+ $this->load->model('setting/setting');
+ $this->load->model('localisation/order_status');
+ $this->load->model('extension/openbay/amazon');
+
+ $this->load->model('customer/customer_group');
+
+ $data['customer_groups'] = $this->model_customer_customer_group->getCustomerGroups();
+
+ $settings = $this->model_setting_setting->getSetting('openbay_amazon');
+
+ if (($this->request->server['REQUEST_METHOD'] == 'POST') && $this->validate()) {
+ if (!isset($this->request->post['openbay_amazon_orders_marketplace_ids'])) {
+ $this->request->post['openbay_amazon_orders_marketplace_ids'] = array();
+ }
+
+ $settings = array_merge($settings, $this->request->post);
+ $this->model_setting_setting->editSetting('openbay_amazon', $settings);
+
+ $this->config->set('openbay_amazon_token', $this->request->post['openbay_amazon_token']);
+ $this->config->set('openbay_amazon_encryption_key', $this->request->post['openbay_amazon_encryption_key']);
+ $this->config->set('openbay_amazon_encryption_iv', $this->request->post['openbay_amazon_encryption_iv']);
+
+ $this->openbay->amazon->setEncryptionKey($this->request->post['openbay_amazon_encryption_key']);
+ $this->openbay->amazon->setEncryptionIv($this->request->post['openbay_amazon_encryption_iv']);
+
+ if (!empty($this->request->post['openbay_amazon_token']) && !empty($this->request->post['openbay_amazon_encryption_key']) && !empty($this->request->post['openbay_amazon_encryption_iv'])) {
+ $this->model_extension_openbay_amazon->verifyConfig($settings);
+ }
+
+ $this->session->data['success'] = $this->language->get('text_settings_updated');
+ $this->response->redirect($this->url->link('extension/openbay/amazon', 'user_token=' . $this->session->data['user_token'], true));
+ return;
+ }
+
+ $data['cancel'] = $this->url->link('extension/openbay/amazon', 'user_token=' . $this->session->data['user_token'], true);
+
+ $data['breadcrumbs'] = array();
+ $data['breadcrumbs'][] = array(
+ 'href' => $this->url->link('common/dashboard', 'user_token=' . $this->session->data['user_token'], true),
+ 'text' => $this->language->get('text_home'),
+ );
+ $data['breadcrumbs'][] = array(
+ 'href' => $this->url->link('marketplace/openbay', 'user_token=' . $this->session->data['user_token'], true),
+ 'text' => $this->language->get('text_openbay'),
+ );
+ $data['breadcrumbs'][] = array(
+ 'href' => $this->url->link('extension/openbay/amazon', 'user_token=' . $this->session->data['user_token'], true),
+ 'text' => $this->language->get('text_amazon'),
+ );
+
+ $data['breadcrumbs'][] = array(
+ 'href' => $this->url->link('extension/openbay/amazon/settings', 'user_token=' . $this->session->data['user_token'], true),
+ 'text' => $this->language->get('heading_title'),
+ );
+
+ $data['marketplace_ids'] = (isset($settings['openbay_amazon_orders_marketplace_ids'])) ? (array)$settings['openbay_amazon_orders_marketplace_ids'] : array();
+ $data['default_listing_marketplace_ids'] = (isset($settings['openbay_amazon_default_listing_marketplace_ids'])) ? (array)$settings['openbay_amazon_default_listing_marketplace_ids'] : array();
+
+ $data['marketplaces'] = array(
+ array('name' => $this->language->get('text_de'), 'id' => 'A1PA6795UKMFR9', 'code' => 'de'),
+ array('name' => $this->language->get('text_fr'), 'id' => 'A13V1IB3VIYZZH', 'code' => 'fr'),
+ array('name' => $this->language->get('text_it'), 'id' => 'APJ6JRA9NG5V4', 'code' => 'it'),
+ array('name' => $this->language->get('text_es'), 'id' => 'A1RKKUPIHCS9HS', 'code' => 'es'),
+ array('name' => $this->language->get('text_uk'), 'id' => 'A1F83G8C2ARO7P', 'code' => 'uk'),
+ );
+
+ $data['conditions'] = array(
+ 'New' => $this->language->get('text_new'),
+ 'UsedLikeNew' => $this->language->get('text_used_like_new'),
+ 'UsedVeryGood' => $this->language->get('text_used_very_good'),
+ 'UsedGood' => $this->language->get('text_used_good'),
+ 'UsedAcceptable' => $this->language->get('text_used_acceptable'),
+ 'CollectibleLikeNew' => $this->language->get('text_collectible_like_new'),
+ 'CollectibleVeryGood' => $this->language->get('text_collectible_very_good'),
+ 'CollectibleGood' => $this->language->get('text_collectible_good'),
+ 'CollectibleAcceptable' => $this->language->get('text_collectible_acceptable'),
+ 'Refurbished' => $this->language->get('text_refurbished'),
+ );
+
+ $data['openbay_amazon_status'] = isset($settings['openbay_amazon_status']) ? $settings['openbay_amazon_status'] : '';
+ $data['openbay_amazon_token'] = isset($settings['openbay_amazon_token']) ? $settings['openbay_amazon_token'] : '';
+ $data['openbay_amazon_encryption_key'] = isset($settings['openbay_amazon_encryption_key']) ? $settings['openbay_amazon_encryption_key'] : '';
+ $data['openbay_amazon_encryption_iv'] = isset($settings['openbay_amazon_encryption_iv']) ? $settings['openbay_amazon_encryption_iv'] : '';
+ $data['openbay_amazon_listing_tax_added'] = isset($settings['openbay_amazon_listing_tax_added']) ? $settings['openbay_amazon_listing_tax_added'] : '0.00';
+ $data['openbay_amazon_order_tax'] = isset($settings['openbay_amazon_order_tax']) ? $settings['openbay_amazon_order_tax'] : '00';
+ $data['openbay_amazon_default_listing_marketplace'] = isset($settings['openbay_amazon_default_listing_marketplace']) ? $settings['openbay_amazon_default_listing_marketplace'] : '';
+ $data['openbay_amazon_listing_default_condition'] = isset($settings['openbay_amazon_listing_default_condition']) ? $settings['openbay_amazon_listing_default_condition'] : '';
+
+ $data['carriers'] = $this->openbay->amazon->getCarriers();
+ $data['openbay_amazon_default_carrier'] = isset($settings['openbay_amazon_default_carrier']) ? $settings['openbay_amazon_default_carrier'] : '';
+
+ $unshipped_status_id = isset($settings['openbay_amazon_order_status_unshipped']) ? $settings['openbay_amazon_order_status_unshipped'] : '';
+ $partially_shipped_status_id = isset($settings['openbay_amazon_order_status_partially_shipped']) ? $settings['openbay_amazon_order_status_partially_shipped'] : '';
+ $shipped_status_id = isset($settings['openbay_amazon_order_status_shipped']) ? $settings['openbay_amazon_order_status_shipped'] : '';
+ $canceled_status_id = isset($settings['openbay_amazon_order_status_canceled']) ? $settings['openbay_amazon_order_status_canceled'] : '';
+
+ $amazon_order_statuses = array(
+ 'unshipped' => array('name' => $this->language->get('text_unshipped'), 'order_status_id' => $unshipped_status_id),
+ 'partially_shipped' => array('name' => $this->language->get('text_partially_shipped'), 'order_status_id' => $partially_shipped_status_id),
+ 'shipped' => array('name' => $this->language->get('text_shipped'), 'order_status_id' => $shipped_status_id),
+ 'canceled' => array('name' => $this->language->get('text_canceled'), 'order_status_id' => $canceled_status_id),
+ );
+
+ $data['openbay_amazon_order_customer_group'] = isset($settings['openbay_amazon_order_customer_group']) ? $settings['openbay_amazon_order_customer_group'] : '';
+
+ $data['amazon_order_statuses'] = $amazon_order_statuses;
+ $data['order_statuses'] = $this->model_localisation_order_status->getOrderStatuses();
+
+ $data['subscription_url'] = $this->url->link('extension/openbay/amazon/subscription', 'user_token=' . $this->session->data['user_token'], true);
+ $data['itemLinks_url'] = $this->url->link('extension/openbay/amazon_product/linkItems', 'user_token=' . $this->session->data['user_token'], true);
+ $data['openbay_amazon_notify_admin'] = isset($settings['openbay_amazon_notify_admin']) ? $settings['openbay_amazon_notify_admin'] : '';
+ $data['link_signup'] = 'https://account.openbaypro.com/amazon/apiRegister/?endpoint=2&utm_source=opencart_install&utm_medium=settings&utm_campaign=amazon';
+
+ $api_checked = false;
+ $api_status = false;
+ $api_auth = false;
+
+ if (!empty($data['openbay_amazon_token']) && !empty($data['openbay_amazon_encryption_key']) && !empty($data['openbay_amazon_encryption_iv'])) {
+ $response = $this->openbay->amazon->call('ping/info', array('say hello'));
+
+ $api_checked = true;
+
+ if (!empty($response)) {
+ $ping_info = simplexml_load_string($response);
+
+ if ($ping_info === false) {
+ /**
+ * The data from the API could not be extracted from the XML
+ */
+ } else {
+ $api_status = ((string)$ping_info->Api_status == 'ok') ? true : false;
+ $api_auth = ((string)$ping_info->Auth == 'true') ? true : false;
+ }
+ }
+ }
+
+ $data['api_status'] = $api_status;
+ $data['api_auth'] = $api_auth;
+ $data['api_checked'] = $api_checked;
+
+ $data['header'] = $this->load->controller('common/header');
+ $data['column_left'] = $this->load->controller('common/column_left');
+ $data['footer'] = $this->load->controller('common/footer');
+
+ $this->response->setOutput($this->load->view('extension/openbay/amazon_settings', $data));
+ }
+
+ public function itemLinks() {
+ $this->load->language('extension/openbay/amazon_links');
+
+ $data = $this->language->all();
+
+ $this->document->setTitle($this->language->get('heading_title'));
+ $this->document->addScript('view/javascript/openbay/js/faq.js');
+
+ $data['breadcrumbs'] = array();
+
+ $data['breadcrumbs'][] = array(
+ 'href' => $this->url->link('common/dashboard', 'user_token=' . $this->session->data['user_token'], true),
+ 'text' => $this->language->get('text_home'),
+ );
+ $data['breadcrumbs'][] = array(
+ 'href' => $this->url->link('marketplace/openbay', 'user_token=' . $this->session->data['user_token'], true),
+ 'text' => $this->language->get('text_openbay'),
+ );
+ $data['breadcrumbs'][] = array(
+ 'href' => $this->url->link('extension/openbay/amazon', 'user_token=' . $this->session->data['user_token'], true),
+ 'text' => $this->language->get('text_amazon'),
+ );
+
+ $data['breadcrumbs'][] = array(
+ 'href' => $this->url->link('extension/openbay/amazon/itemLinks', 'user_token=' . $this->session->data['user_token'], true),
+ 'text' => $this->language->get('heading_title'),
+ );
+
+ $data['user_token'] = $this->session->data['user_token'];
+
+ $data['cancel'] = $this->url->link('extension/openbay/amazon', 'user_token=' . $this->session->data['user_token'], true);
+
+ $data['header'] = $this->load->controller('common/header');
+ $data['column_left'] = $this->load->controller('common/column_left');
+ $data['footer'] = $this->load->controller('common/footer');
+
+ $this->response->setOutput($this->load->view('extension/openbay/amazon_item_links', $data));
+ }
+
+ public function savedListings() {
+ $this->load->language('extension/openbay/amazon_listingsaved');
+
+ $data = $this->language->all();
+
+ $this->document->setTitle($this->language->get('heading_title'));
+ $this->document->addScript('view/javascript/openbay/js/faq.js');
+
+ $data['link_overview'] = $this->url->link('extension/openbay/amazon', 'user_token=' . $this->session->data['user_token'], true);
+
+ $data['breadcrumbs'] = array();
+ $data['breadcrumbs'][] = array(
+ 'href' => $this->url->link('common/dashboard', 'user_token=' . $this->session->data['user_token'], true),
+ 'text' => $this->language->get('text_home'),
+ );
+ $data['breadcrumbs'][] = array(
+ 'href' => $this->url->link('marketplace/openbay', 'user_token=' . $this->session->data['user_token'], true),
+ 'text' => $this->language->get('text_openbay'),
+ );
+ $data['breadcrumbs'][] = array(
+ 'href' => $this->url->link('extension/openbay/amazon', 'user_token=' . $this->session->data['user_token'], true),
+ 'text' => $this->language->get('text_amazon'),
+ );
+
+ $data['breadcrumbs'][] = array(
+ 'href' => $this->url->link('extension/openbay/amazon/savedListings', 'user_token=' . $this->session->data['user_token'], true),
+ 'text' => $this->language->get('heading_title'),
+ );
+
+ $data['user_token'] = $this->session->data['user_token'];
+ $this->load->model('extension/openbay/amazon');
+ $saved_products = $this->model_extension_openbay_amazon->getSavedProducts();
+
+ $data['saved_products'] = array();
+
+ foreach($saved_products as $saved_product) {
+ $data['saved_products'][] = array(
+ 'product_id' => $saved_product['product_id'],
+ 'product_name' => $saved_product['product_name'],
+ 'product_model' => $saved_product['product_model'],
+ 'product_sku' => $saved_product['product_sku'],
+ 'amazon_sku' => $saved_product['amazon_sku'],
+ 'var' => $saved_product['var'],
+ 'edit_link' => $this->url->link('extension/openbay/amazon_product', 'user_token=' . $this->session->data['user_token'] . '&product_id=' . $saved_product['product_id'] . '&sku=' . $saved_product['var'], true),
+ );
+ }
+
+ $data['header'] = $this->load->controller('common/header');
+ $data['column_left'] = $this->load->controller('common/column_left');
+ $data['footer'] = $this->load->controller('common/footer');
+
+ $this->response->setOutput($this->load->view('extension/openbay/amazon_saved_listings', $data));
+ }
+
+ protected function validate() {
+ if (!$this->user->hasPermission('modify', 'extension/openbay/amazon')) {
+ $this->error = $this->language->get('error_permission');
+ }
+
+ if (empty($this->error)) {
+ return true;
+ }
+
+ return false;
+ }
+
+ public function getVariants() {
+ $variants = array();
+
+ if ($this->openbay->addonLoad('openstock') && isset($this->request->get['product_id'])) {
+ $this->load->model('extension/module/openstock');
+ $this->load->model('tool/image');
+ $variants = $this->model_setting_module_openstock->getVariants($this->request->get['product_id']);
+ }
+
+ if (empty($variants)) {
+ $variants = false;
+ } else {
+ foreach ($variants as $key => $variant) {
+ if ($variant['sku'] == '') {
+ unset($variants[$key]);
+ }
+ }
+ }
+
+ $this->response->addHeader('Content-Type: application/json');
+ $this->response->setOutput(json_encode($variants));
+ }
+
+ public function addLink() {
+ if (isset($this->request->get['product_id']) && isset($this->request->get['amazon_sku'])) {
+ $this->load->model('extension/openbay/amazon');
+
+ $amazon_sku = $this->request->get['amazon_sku'];
+ $product_id = $this->request->get['product_id'];
+ $var = isset($this->request->get['var']) ? $this->request->get['var'] : '';
+
+ $this->model_extension_openbay_amazon->linkProduct($amazon_sku, $product_id, $var);
+
+ $logger = new Log('amazon_stocks.log');
+ $logger->write('addItemLink() called for product id: ' . $product_id . ', amazon sku: ' . $amazon_sku . ', var: ' . $var);
+
+ if ($var != '' && $this->openbay->addonLoad('openstock')) {
+ $logger->write('Using openStock');
+ $this->load->model('tool/image');
+ $this->load->model('extension/module/openstock');
+ $option_stocks = $this->model_setting_module_openstock->getVariants($product_id);
+
+ $quantity_data = array();
+
+ foreach($option_stocks as $option_stock) {
+ if (isset($option_stock['sku']) && $option_stock['sku'] == $var) {
+ $quantity_data[$amazon_sku] = $option_stock['stock'];
+ break;
+ }
+ }
+
+ if (!empty($quantity_data)) {
+ $logger->write('Updating quantities with data: ' . print_r($quantity_data, true));
+ $this->openbay->amazon->updateQuantities($quantity_data);
+ } else {
+ $logger->write('No quantity data will be posted . ');
+ }
+ } else {
+ $this->openbay->amazon->putStockUpdateBulk(array($product_id));
+ }
+
+ $json = json_encode('ok');
+ } else {
+ $json = json_encode('error');
+ }
+
+ $this->response->addHeader('Content-Type: application/json');
+ $this->response->setOutput($json);
+ }
+
+ public function deleteLink() {
+ if (isset($this->request->get['amazon_sku'])) {
+ $this->load->model('extension/openbay/amazon');
+
+ $amazon_sku = $this->request->get['amazon_sku'];
+
+ $this->model_extension_openbay_amazon->removeProductLink($amazon_sku);
+
+ $json = json_encode('ok');
+ } else {
+ $json = json_encode('error');
+ }
+
+ $this->response->addHeader('Content-Type: application/json');
+ $this->response->setOutput($json);
+ }
+
+ public function getLinks() {
+ $this->load->model('extension/openbay/amazon');
+ $this->load->model('catalog/product');
+
+ $json = json_encode($this->model_extension_openbay_amazon->getProductLinks());
+
+ $this->response->addHeader('Content-Type: application/json');
+ $this->response->setOutput($json);
+ }
+
+ public function getUnlinked() {
+ $this->load->model('extension/openbay/amazon');
+ $this->load->model('catalog/product');
+
+ $json = json_encode($this->model_extension_openbay_amazon->getUnlinkedProducts());
+
+ $this->response->addHeader('Content-Type: application/json');
+ $this->response->setOutput($json);
+ }
+
+ public function doBulkList() {
+ $this->load->language('amazon/listing');
+
+ if (empty($this->request->post['products'])) {
+ $json = array(
+ 'message' => $this->language->get('error_not_searched'),
+ );
+ } else {
+ $this->load->model('extension/openbay/amazon_listing');
+
+ $delete_search_results = array();
+
+ $bulk_list_products = array();
+
+ foreach ($this->request->post['products'] as $product_id => $asin) {
+ $delete_search_results[] = $product_id;
+
+ if (!empty($asin) && in_array($product_id, $this->request->post['product_ids'])) {
+ $bulk_list_products[$product_id] = $asin;
+ }
+ }
+
+ $status = false;
+
+ if ($bulk_list_products) {
+ $data = array();
+
+ $data['products'] = $bulk_list_products;
+ $data['marketplace'] = $this->request->post['marketplace'];
+
+ if (!empty($this->request->post['start_selling'])) {
+ $data['start_selling'] = $this->request->post['start_selling'];
+ }
+
+ if (!empty($this->request->post['condition']) && !empty($this->request->post['condition_note'])) {
+ $data['condition'] = $this->request->post['condition'];
+ $data['condition_note'] = $this->request->post['condition_note'];
+ }
+
+ $status = $this->model_extension_openbay_amazon_listing->doBulkListing($data);
+
+ if ($status) {
+ $message = $this->language->get('text_products_sent');
+
+ if ($delete_search_results) {
+ $this->model_extension_openbay_amazon_listing->deleteSearchResults($this->request->post['marketplace'], $delete_search_results);
+ }
+ } else {
+ $message = $this->language->get('error_sending_products');
+ }
+ } else {
+ $message = $this->language->get('error_no_products_selected');
+ }
+
+ $json = array(
+ 'status' => $status,
+ 'message' => $message,
+ );
+ }
+
+ $this->response->addHeader('Content-Type: application/json');
+ $this->response->setOutput(json_encode($json));
+ }
+
+ public function doBulkSearch() {
+ $this->load->model('catalog/product');
+ $this->load->model('extension/openbay/amazon_listing');
+ $this->load->language('extension/openbay/amazon_bulk_listing');
+
+ $json = array();
+ $search_data = array();
+
+ if (!empty($this->request->post['product_ids'])) {
+ foreach ($this->request->post['product_ids'] as $product_id) {
+ $product = $this->model_catalog_product->getProduct($product_id);
+
+ if (empty($product['sku'])) {
+ $json[$product_id] = array(
+ 'error' => $this->language->get('error_product_sku')
+ );
+ }
+
+ $key = '';
+
+ $id_types = array('isbn', 'upc', 'ean', 'jan', 'sku');
+
+ foreach ($id_types as $id_type) {
+ if (!empty($product[$id_type])) {
+ $key = $id_type;
+ break;
+ }
+ }
+
+ if (!$key) {
+ $json[$product_id] = array(
+ 'error' => $this->language->get('error_searchable_fields')
+ );
+ }
+
+ if (!isset($json[$product_id])) {
+ $search_data[$key][] = array(
+ 'product_id' => $product['product_id'],
+ 'value' => trim($product[$id_type]),
+ 'marketplace' => $this->request->post['marketplace'],
+ );
+
+ $json[$product_id] = array(
+ 'success' => $this->language->get('text_searching')
+ );
+ }
+ }
+ }
+
+ if ($search_data) {
+ $this->model_extension_openbay_amazon_listing->doBulkSearch($search_data);
+ }
+
+ $this->response->addHeader('Content-Type: application/json');
+ $this->response->setOutput(json_encode($json));
+ }
+
+ public function bulkListProducts() {
+ $this->load->language('extension/openbay/amazon_bulk_listing');
+
+ $data = $this->language->all();
+
+ $this->load->model('extension/openbay/amazon');
+ $this->load->model('catalog/product');
+ $this->load->model('tool/image');
+
+ $this->document->setTitle($this->language->get('heading_title'));
+ $this->document->addScript('view/javascript/openbay/js/faq.js');
+
+ $data['breadcrumbs'] = array();
+ $data['breadcrumbs'][] = array(
+ 'href' => $this->url->link('common/dashboard', 'user_token=' . $this->session->data['user_token'], true),
+ 'text' => $this->language->get('text_home'),
+ );
+ $data['breadcrumbs'][] = array(
+ 'href' => $this->url->link('marketplace/openbay', 'user_token=' . $this->session->data['user_token'], true),
+ 'text' => $this->language->get('text_openbay'),
+ );
+ $data['breadcrumbs'][] = array(
+ 'href' => $this->url->link('extension/openbay/amazon', 'user_token=' . $this->session->data['user_token'], true),
+ 'text' => $this->language->get('text_amazon'),
+ );
+
+ $data['breadcrumbs'][] = array(
+ 'href' => $this->url->link('extension/openbay/amazon/bulkListProducts', 'user_token=' . $this->session->data['user_token'], true),
+ 'text' => $this->language->get('heading_title'),
+ );
+
+ $ping_info = simplexml_load_string($this->openbay->amazon->call('ping/info'));
+
+ $bulk_listing_status = false;
+
+ if ($ping_info) {
+ $bulk_listing_status = ((string)$ping_info->BulkListing == 'true') ? true : false;
+ }
+
+ if (!empty($this->request->get['filter_marketplace'])) {
+ $filter_marketplace = $this->request->get['filter_marketplace'];
+ } else {
+ $filter_marketplace = $this->config->get('openbay_amazon_default_listing_marketplace');
+ }
+
+ $data['filter_marketplace'] = $filter_marketplace;
+
+ $data['bulk_listing_status'] = $bulk_listing_status;
+
+ $data['link_overview'] = $this->url->link('extension/openbay/amazon', 'user_token=' . $this->session->data['user_token'], true);
+ $data['user_token'] = $this->session->data['user_token'];
+
+ if ($bulk_listing_status) {
+ $data['link_search'] = $this->url->link('extension/openbay/amazon/doBulkSearch', 'user_token=' . $this->session->data['user_token'], true);
+
+ $data['default_condition'] = $this->config->get('openbay_amazon_listing_default_condition');
+ $data['conditions'] = array(
+ 'New' => $this->language->get('text_new'),
+ 'UsedLikeNew' => $this->language->get('text_used_like_new'),
+ 'UsedVeryGood' => $this->language->get('text_used_very_good'),
+ 'UsedGood' => $this->language->get('text_used_good'),
+ 'UsedAcceptable' => $this->language->get('text_used_acceptable'),
+ 'CollectibleLikeNew' => $this->language->get('text_collectible_like_new'),
+ 'CollectibleVeryGood' => $this->language->get('text_collectible_very_good'),
+ 'CollectibleGood' => $this->language->get('text_collectible_good'),
+ 'CollectibleAcceptable' => $this->language->get('text_collectible_acceptable'),
+ 'Refurbished' => $this->language->get('text_refurbished'),
+ );
+
+ $data['marketplaces'] = array(
+ array('name' => $this->language->get('text_de'), 'code' => 'de'),
+ array('name' => $this->language->get('text_fr'), 'code' => 'fr'),
+ array('name' => $this->language->get('text_it'), 'code' => 'it'),
+ array('name' => $this->language->get('text_es'), 'code' => 'es'),
+ array('name' => $this->language->get('text_uk'), 'code' => 'uk'),
+ );
+
+ if (!empty($this->request->get['page'])) {
+ $page = $this->request->get['page'];
+ } else {
+ $page = 1;
+ }
+
+ $filter = array();
+
+ $filter['filter_marketplace'] = $filter_marketplace;
+ $filter['start'] = ($page - 1) * $this->config->get('config_limit_admin');
+ $filter['limit'] = $this->config->get('config_limit_admin');
+
+ $results = $this->model_extension_openbay_amazon->getProductSearch($filter);
+ $product_total = $this->model_extension_openbay_amazon->getProductSearchTotal($filter);
+
+ $data['products'] = array();
+
+ foreach ($results as $result) {
+ $product = $this->model_catalog_product->getProduct($result['product_id']);
+
+ if ($product['image'] && file_exists(DIR_IMAGE . $product['image'])) {
+ $image = $this->model_tool_image->resize($product['image'], 40, 40);
+ } else {
+ $image = $this->model_tool_image->resize('no_image.png', 40, 40);
+ }
+
+ if ($result['status'] == 'searching') {
+ $search_status = $this->language->get('text_searching');
+ } else if ($result['status'] == 'finished') {
+ $search_status = $this->language->get('text_finished');
+ } else {
+ $search_status = '-';
+ }
+
+ $href = $this->url->link('catalog/product/edit', 'user_token=' . $this->session->data['user_token'] . '&product_id=' . $product['product_id'], true);
+
+ $search_results = array();
+
+ if ($result['data']) {
+ foreach ($result['data'] as $search_result) {
+ $link = $this->model_extension_openbay_amazon->getAsinLink($search_result['asin'], $result['marketplace']);
+
+ $search_results[] = array(
+ 'title' => $search_result['title'],
+ 'asin' => $search_result['asin'],
+ 'href' => $link,
+ );
+ }
+ }
+
+ $data['products'][] = array(
+ 'product_id' => $product['product_id'],
+ 'href' => $href,
+ 'name' => $product['name'],
+ 'model' => $product['model'],
+ 'image' => $image,
+ 'matches' => $result['matches'],
+ 'search_status' => $search_status,
+ 'search_results' => $search_results,
+ );
+ }
+
+ $pagination = new Pagination();
+ $pagination->total = $product_total;
+ $pagination->page = $page;
+ $pagination->limit = $this->config->get('config_limit_admin');
+ $pagination->text = $this->language->get('text_pagination');
+ $pagination->url = $this->url->link('extension/openbay/amazon/bulkListProducts', 'user_token=' . $this->session->data['user_token'] . '&page={page}&filter_marketplace=' . $filter_marketplace, true);
+
+ $data['pagination'] = $pagination->render();
+ $data['results'] = sprintf($this->language->get('text_pagination'), ($product_total) ? (($page - 1) * $this->config->get('config_limit_admin')) + 1 : 0, ((($page - 1) * $this->config->get('config_limit_admin')) > ($product_total - $this->config->get('config_limit_admin'))) ? $product_total : ((($page - 1) * $this->config->get('config_limit_admin')) + $this->config->get('config_limit_admin')), $product_total, ceil($product_total / $this->config->get('config_limit_admin')));
+ }
+
+ $data['header'] = $this->load->controller('common/header');
+ $data['column_left'] = $this->load->controller('common/column_left');
+ $data['footer'] = $this->load->controller('common/footer');
+
+ $this->response->setOutput($this->load->view('extension/openbay/amazon_bulk_listing', $data));
+ }
+
+ public function bulkLinking() {
+ $this->load->language('extension/openbay/amazon_bulk_linking');
+
+ $data = $this->language->all();
+
+ $this->load->model('extension/openbay/amazon');
+
+ $this->document->setTitle($this->language->get('heading_title'));
+ $this->document->addScript('view/javascript/openbay/js/faq.js');
+
+ $data['breadcrumbs'] = array();
+ $data['breadcrumbs'][] = array(
+ 'href' => $this->url->link('common/dashboard', 'user_token=' . $this->session->data['user_token'], true),
+ 'text' => $this->language->get('text_home'),
+ );
+ $data['breadcrumbs'][] = array(
+ 'href' => $this->url->link('marketplace/openbay', 'user_token=' . $this->session->data['user_token'], true),
+ 'text' => $this->language->get('text_openbay'),
+ );
+ $data['breadcrumbs'][] = array(
+ 'href' => $this->url->link('extension/openbay/amazon', 'user_token=' . $this->session->data['user_token'], true),
+ 'text' => $this->language->get('text_amazon'),
+ );
+
+ $data['breadcrumbs'][] = array(
+ 'href' => $this->url->link('extension/openbay/amazon/bulklinking', 'user_token=' . $this->session->data['user_token'], true),
+ 'text' => $this->language->get('heading_title'),
+ );
+
+ $ping_info = simplexml_load_string($this->openbay->amazon->call('ping/info'));
+
+ $bulk_linking_status = false;
+ if ($ping_info) {
+ $bulk_linking_status = ((string)$ping_info->BulkLinking == 'true') ? true : false;
+ }
+
+ $data['bulk_linking_status'] = $bulk_linking_status;
+
+ if (!isset($this->request->get['marketplace'])) {
+ $marketplace_code = 'uk';
+ } else {
+ $marketplace_code = $this->request->get['marketplace'];
+ }
+
+ $total_linked = $this->model_extension_openbay_amazon->getTotalUnlinkedItemsFromReport($marketplace_code);
+
+ if (isset($this->request->get['linked_item_page'])) {
+ $linked_item_page = (int)$this->request->get['linked_item_page'];
+ } else {
+ $linked_item_page = 1;
+ }
+
+ if (isset($this->request->get['linked_item_limit'])){
+ $linked_item_limit = (int)$this->request->get['linked_item_limit'];
+ } else {
+ $linked_item_limit = 25;
+ }
+
+ $data['cancel_report_link'] = '';
+
+ if (isset($this->request->get['cancel_report']) && $this->request->get['cancel_report'] == 1) {
+ $this->load->model('setting/setting');
+
+ $settings = $this->model_setting_setting->getSetting('openbay_amazon');
+ $settings['openbay_amazon_processing_listing_reports'] = '';
+
+ $this->model_setting_setting->editSetting('openbay_amazon', $settings);
+
+ $this->response->redirect($this->url->link('extension/openbay/amazon/bulklinking', 'marketplace=' . $marketplace_code . '&user_token=' . $this->session->data['user_token'], true));
+ } else {
+ $data['cancel_report_link'] = $this->url->link('extension/openbay/amazon/bulklinking', 'cancel_report=1&marketplace=uk&user_token=' . $this->session->data['user_token'], true);
+ }
+
+ $marketplaces = array(
+ 'uk' => array(
+ 'name' => $this->language->get('text_uk'),
+ 'code' => 'uk',
+ 'href_load_listings' => $this->url->link('extension/openbay/amazon/loadListingReport', 'user_token=' . $this->session->data['user_token'] . '&marketplace=uk', true),
+ 'link' => $this->url->link('extension/openbay/amazon/bulklinking', 'user_token=' . $this->session->data['user_token'] . '&marketplace=uk', true),
+ ),
+ 'de' => array(
+ 'name' => $this->language->get('text_de'),
+ 'code' => 'de',
+ 'href_load_listings' => $this->url->link('extension/openbay/amazon/loadListingReport', 'user_token=' . $this->session->data['user_token'] . '&marketplace=de', true),
+ 'link' => $this->url->link('extension/openbay/amazon/bulklinking', 'user_token=' . $this->session->data['user_token'] . '&marketplace=de', true),
+ ),
+ 'fr' => array(
+ 'name' => $this->language->get('text_fr'),
+ 'code' => 'fr',
+ 'href_load_listings' => $this->url->link('extension/openbay/amazon/loadListingReport', 'user_token=' . $this->session->data['user_token'] . '&marketplace=fr', true),
+ 'link' => $this->url->link('extension/openbay/amazon/bulklinking', 'user_token=' . $this->session->data['user_token'] . '&marketplace=fr', true),
+ ),
+ 'it' => array(
+ 'name' => $this->language->get('text_it'),
+ 'code' => 'it',
+ 'href_load_listings' => $this->url->link('extension/openbay/amazon/loadListingReport', 'user_token=' . $this->session->data['user_token'] . '&marketplace=it', true),
+ 'link' => $this->url->link('extension/openbay/amazon/bulklinking', 'user_token=' . $this->session->data['user_token'] . '&marketplace=it', true),
+ ),
+ 'es' => array(
+ 'name' => $this->language->get('text_es'),
+ 'code' => 'es',
+ 'href_load_listings' => $this->url->link('extension/openbay/amazon/loadListingReport', 'user_token=' . $this->session->data['user_token'] . '&marketplace=es', true),
+ 'link' => $this->url->link('extension/openbay/amazon/bulklinking', 'user_token=' . $this->session->data['user_token'] . '&marketplace=es', true),
+ ),
+ );
+
+ $pagination = new Pagination();
+ $pagination->total = $total_linked;
+ $pagination->page = $linked_item_page;
+ $pagination->limit = $linked_item_limit;
+ $pagination->text = $this->language->get('text_pagination');
+ $pagination->url = $this->url->link('extension/openbay/amazon/bulklinking', 'user_token=' . $this->session->data['user_token'] . '&linked_item_page={page}&marketplace=' . $marketplace_code, true);
+
+ $data['pagination'] = $pagination->render();
+ $data['results'] = sprintf($this->language->get('text_pagination'), ($total_linked) ? (($linked_item_page - 1) * $this->config->get('config_limit_admin')) + 1 : 0, ((($linked_item_page - 1) * $this->config->get('config_limit_admin')) > ($total_linked - $this->config->get('config_limit_admin'))) ? $total_linked : ((($linked_item_page - 1) * $this->config->get('config_limit_admin')) + $this->config->get('config_limit_admin')), $total_linked, ceil($total_linked / $this->config->get('config_limit_admin')));
+
+ $results = $this->model_extension_openbay_amazon->getUnlinkedItemsFromReport($marketplace_code, $linked_item_limit, $linked_item_page);
+
+ $products = array();
+
+ foreach ($results as $result) {
+ $products[] = array(
+ 'asin' => $result['asin'],
+ 'href_amazon' => $this->model_extension_openbay_amazon->getAsinLink($result['asin'], $marketplace_code),
+ 'amazon_sku' => $result['amazon_sku'],
+ 'amazon_quantity' => $result['amazon_quantity'],
+ 'amazon_price' => $result['amazon_price'],
+ 'name' => $result['name'],
+ 'sku' => $result['sku'],
+ 'quantity' => $result['quantity'],
+ 'combination' => $result['combination'],
+ 'product_id' => $result['product_id'],
+ 'var' => $result['var'],
+ 'href_product' => $this->url->link('catalog/product/edit', 'user_token=' . $this->session->data['user_token'] . '&product_id=' . $result['product_id'], true),
+ );
+ }
+
+ $data['unlinked_products'] = $products;
+ $data['marketplaces'] = $marketplaces;
+ $data['marketplace_code'] = $marketplace_code;
+
+ $data['marketplaces_processing'] = array();
+ if (is_array($this->config->get('openbay_amazon_processing_listing_reports'))) {
+ $data['marketplaces_processing'] = $this->config->get('openbay_amazon_processing_listing_reports');
+ }
+
+ $data['cancel'] = $this->url->link('extension/openbay/amazon', 'user_token=' . $this->session->data['user_token'], true);
+ $data['user_token'] = $this->session->data['user_token'];
+
+ $data['header'] = $this->load->controller('common/header');
+ $data['column_left'] = $this->load->controller('common/column_left');
+ $data['footer'] = $this->load->controller('common/footer');
+
+ $this->response->setOutput($this->load->view('extension/openbay/amazon_bulk_linking', $data));
+ }
+
+ public function loadListingReport() {
+ $this->load->model('extension/openbay/amazon');
+ $this->load->model('setting/setting');
+ $this->load->language('extension/openbay/amazon_bulk_linking');
+
+ $marketplace = $this->request->get['marketplace'];
+
+ $this->model_extension_openbay_amazon->deleteListingReports($marketplace);
+
+ $request_data = array(
+ 'marketplace' => $marketplace,
+ 'response_url' => HTTPS_CATALOG . 'index.php?route=extension/openbay/amazon/listingreport',
+ );
+
+ $response = $this->openbay->amazon->call('report/listing', $request_data);
+ $response = json_decode($response, 1);
+
+ $json = array();
+ $json['status'] = $response['status'];
+
+ if ($json['status']) {
+ $json['message'] = $this->language->get('text_report_requested');
+
+ $settings = $this->model_setting_setting->getSetting('openbay_amazon');
+ $settings['openbay_amazon_processing_listing_reports'][] = $marketplace;
+
+ $this->model_setting_setting->editSetting('openbay_amazon', $settings);
+ } else {
+ $json['message'] = $this->language->get('text_report_request_failed');
+ }
+
+ $this->response->addHeader('Content-Type: application/json');
+ $this->response->setOutput(json_encode($json));
+ }
+
+ public function doBulkLinking() {
+ $this->load->model('extension/openbay/amazon');
+
+ $links = array();
+ $skus = array();
+
+ if (!empty($this->request->post['link'])) {
+ foreach ($this->request->post['link'] as $link) {
+ if (!empty($link['product_id'])) {
+ $links[] = $link;
+ $skus[] = $link['amazon_sku'];
+ }
+ }
+ }
+
+ if (!empty($links)) {
+ foreach ($links as $link) {
+ $this->model_extension_openbay_amazon->linkProduct($link['amazon_sku'], $link['product_id'], $link['sku']);
+ }
+
+ $this->model_extension_openbay_amazon->updateAmazonSkusQuantities($skus);
+ }
+
+ $this->response->addHeader('Content-Type: application/json');
+ $this->response->setOutput(json_encode(array('ok')));
+ }
+
+ public function doFullStockSync() {
+ /**
+ * This is used if you ever need to force a complete update of your stock levels to Amazon.
+ * It will get ALL products in your store then lookup any linked ones before sending to the API.
+ *
+ * This call can put serious load on your server if you have a lot of products.
+ * It will make a lot of database queries so ensure your php memory limit is set high enough.
+ */
+ set_time_limit(0);
+
+ $product_array = $this->db->query("SELECT `product_id` FROM `" . DB_PREFIX . "product`")->rows;
+
+ $bulk_array = array();
+
+ foreach ($product_array as $product) {
+ $bulk_array[] = $product['product_id'];
+ }
+
+ $this->openbay->amazon->putStockUpdateBulk($bulk_array);
+ }
+}
diff --git a/public/admin/controller/extension/openbay/amazon_listing.php b/public/admin/controller/extension/openbay/amazon_listing.php
new file mode 100644
index 0000000..99f7884
--- /dev/null
+++ b/public/admin/controller/extension/openbay/amazon_listing.php
@@ -0,0 +1,607 @@
+<?php
+class ControllerExtensionOpenbayAmazonListing extends Controller {
+ public function create() {
+ $this->load->language('extension/openbay/amazon_listing');
+ $this->load->model('extension/openbay/amazon_listing');
+ $this->load->model('extension/openbay/amazon');
+ $this->load->model('catalog/product');
+ $this->load->model('localisation/country');
+
+ $this->document->setTitle($this->language->get('heading_title'));
+ $this->document->addScript('view/javascript/openbay/js/faq.js');
+
+ if (isset($this->session->data['error'])) {
+ $data['error_warning'] = $this->session->data['error'];
+ unset($this->session->data['error']);
+ } else {
+ $data['error_warning'] = '';
+ }
+
+ $url = '';
+
+ if (isset($this->request->get['filter_name'])) {
+ $url .= '&filter_name=' . urlencode(html_entity_decode($this->request->get['filter_name'], ENT_QUOTES, 'UTF-8'));
+ }
+
+ if (isset($this->request->get['filter_model'])) {
+ $url .= '&filter_model=' . urlencode(html_entity_decode($this->request->get['filter_model'], ENT_QUOTES, 'UTF-8'));
+ }
+
+ if (isset($this->request->get['filter_price'])) {
+ $url .= '&filter_price=' . $this->request->get['filter_price'];
+ }
+
+ if (isset($this->request->get['filter_price_to'])) {
+ $url .= '&filter_price_to=' . $this->request->get['filter_price_to'];
+ }
+
+ if (isset($this->request->get['filter_quantity'])) {
+ $url .= '&filter_quantity=' . $this->request->get['filter_quantity'];
+ }
+
+ if (isset($this->request->get['filter_quantity_to'])) {
+ $url .= '&filter_quantity_to=' . $this->request->get['filter_quantity_to'];
+ }
+
+ if (isset($this->request->get['filter_status'])) {
+ $url .= '&filter_status=' . $this->request->get['filter_status'];
+ }
+
+ if (isset($this->request->get['filter_sku'])) {
+ $url .= '&filter_sku=' . $this->request->get['filter_sku'];
+ }
+
+ if (isset($this->request->get['filter_desc'])) {
+ $url .= '&filter_desc=' . $this->request->get['filter_desc'];
+ }
+
+ if (isset($this->request->get['filter_category'])) {
+ $url .= '&filter_category=' . $this->request->get['filter_category'];
+ }
+
+ if (isset($this->request->get['filter_manufacturer'])) {
+ $url .= '&filter_manufacturer=' . $this->request->get['filter_manufacturer'];
+ }
+
+ if (isset($this->request->get['sort'])) {
+ $url .= '&sort=' . $this->request->get['sort'];
+ }
+
+ if (isset($this->request->get['order'])) {
+ $url .= '&order=' . $this->request->get['order'];
+ }
+
+ if (isset($this->request->get['page'])) {
+ $url .= '&page=' . $this->request->get['page'];
+ }
+
+ if ($this->request->post) {
+ $result = $this->model_extension_openbay_amazon_listing->simpleListing($this->request->post);
+
+ if ($result['status'] === 1) {
+ $this->session->data['success'] = $this->language->get('text_product_sent');
+ $this->response->redirect($this->url->link('marketplace/openbay/items', 'user_token=' . $this->session->data['user_token'] . $url, true));
+ } else {
+ $this->session->data['error'] = sprintf($this->language->get('text_product_not_sent'), $result['message']);
+ $this->response->redirect($this->url->link('extension/openbay/amazon_listing/create', 'user_token=' . $this->session->data['user_token'] . '&product_id=' . $this->request->post['product_id'] . $url, true));
+ }
+ }
+
+ if (isset($this->request->get['product_id'])) {
+ $product_info = $this->model_catalog_product->getProduct($this->request->get['product_id']);
+
+ if (empty($product_info)) {
+ $this->response->redirect($this->url->link('marketplace/openbay/items', 'user_token=' . $this->session->data['user_token'] . $url, true));
+ }
+
+ $listing_status = $this->model_extension_openbay_amazon->getProductStatus($this->request->get['product_id']);
+
+ if ($listing_status === 'processing' || $listing_status === 'ok') {
+ $this->response->redirect($this->url->link('extension/openbay/amazon_listing/edit', 'user_token=' . $this->session->data['user_token'] . '&product_id=' . $this->request->get['product_id'] . $url, true));
+ } else if ($listing_status === 'error_advanced' || $listing_status === 'saved' || $listing_status === 'error_few') {
+ $this->response->redirect($this->url->link('extension/openbay/amazon_product', 'user_token=' . $this->session->data['user_token'] . '&product_id=' . $this->request->get['product_id'] . $url, true));
+ }
+ } else {
+ $this->response->redirect($this->url->link('marketplace/openbay/items', 'user_token=' . $this->session->data['user_token'] . $url, true));
+ }
+
+ $data['url_return'] = $this->url->link('marketplace/openbay/items', 'user_token=' . $this->session->data['user_token'] . $url, true);
+ $data['url_search'] = $this->url->link('extension/openbay/amazon_listing/search', 'user_token=' . $this->session->data['user_token'], true);
+ $data['url_advanced'] = $this->url->link('extension/openbay/amazon_product', 'user_token=' . $this->session->data['user_token'] . '&product_id=' . $this->request->get['product_id'] . $url, true);
+
+ $data['button_search'] = $this->language->get('button_search');
+ $data['button_new'] = $this->language->get('button_new');
+ $data['button_cancel'] = $this->language->get('button_cancel');
+ $data['button_amazon_price'] = $this->language->get('button_amazon_price');
+ $data['button_list'] = $this->language->get('button_list');
+ $data['heading_title'] = $this->language->get('heading_title');
+ $data['text_not_in_catalog'] = $this->language->get('text_not_in_catalog');
+ $data['text_no_results'] = $this->language->get('text_no_results');
+ $data['button_view_on_amazon'] = $this->language->get('button_view_on_amazon');
+ $data['text_list'] = $this->language->get('text_list');
+ $data['text_placeholder_search'] = $this->language->get('text_placeholder_search');
+ $data['text_placeholder_condition'] = $this->language->get('text_placeholder_condition');
+ $data['column_image'] = $this->language->get('column_image');
+ $data['column_asin'] = $this->language->get('column_asin');
+ $data['column_name'] = $this->language->get('column_name');
+ $data['column_price'] = $this->language->get('column_price');
+ $data['column_action'] = $this->language->get('column_action');
+ $data['entry_sku'] = $this->language->get('entry_sku');
+ $data['entry_condition'] = $this->language->get('entry_condition');
+ $data['entry_condition_note'] = $this->language->get('entry_condition_note');
+ $data['entry_price'] = $this->language->get('entry_price');
+ $data['entry_sale_price'] = $this->language->get('entry_sale_price');
+ $data['entry_sale_date'] = $this->language->get('entry_sale_date');
+ $data['entry_quantity'] = $this->language->get('entry_quantity');
+ $data['entry_start_selling'] = $this->language->get('entry_start_selling');
+ $data['entry_restock_date'] = $this->language->get('entry_restock_date');
+ $data['entry_from'] = $this->language->get('entry_from');
+ $data['entry_to'] = $this->language->get('entry_to');
+ $data['help_restock_date'] = $this->language->get('help_restock_date');
+ $data['help_sku'] = $this->language->get('help_sku');
+ $data['help_sale_price'] = $this->language->get('help_sale_price');
+ $data['tab_required'] = $this->language->get('tab_required');
+ $data['tab_additional'] = $this->language->get('tab_additional');
+ $data['error_price'] = $this->language->get('error_price');
+ $data['error_sku'] = $this->language->get('error_sku');
+ $data['error_stock'] = $this->language->get('error_stock');
+
+ $data['form_action'] = $this->url->link('extension/openbay/amazon_listing/create', 'user_token=' . $this->session->data['user_token'], true);
+
+ $data['sku'] = trim($product_info['sku']);
+
+ if ($this->config->get('openbay_amazon_listing_tax_added')) {
+ $data['price'] = $product_info['price'] * (1 + $this->config->get('openbay_amazon_listing_tax_added') / 100);
+ } else {
+ $data['price'] = $product_info['price'];
+ }
+
+ $data['listing_errors'] = array();
+
+ if ($listing_status == 'error_quick') {
+ $data['listing_errors'] = $this->model_extension_openbay_amazon->getProductErrors($product_info['product_id'], 3);
+ }
+
+ $data['price'] = number_format($data['price'], 2, '.', '');
+ $data['quantity'] = $product_info['quantity'];
+ $data['product_id'] = $product_info['product_id'];
+
+ $data['conditions'] = array(
+ 'New' => $this->language->get('text_new'),
+ 'UsedLikeNew' => $this->language->get('text_used_like_new'),
+ 'UsedVeryGood' => $this->language->get('text_used_very_good'),
+ 'UsedGood' => $this->language->get('text_used_good'),
+ 'UsedAcceptable' => $this->language->get('text_used_acceptable'),
+ 'CollectibleLikeNew' => $this->language->get('text_collectible_like_new'),
+ 'CollectibleVeryGood' => $this->language->get('text_collectible_very_good'),
+ 'CollectibleGood' => $this->language->get('text_collectible_good'),
+ 'CollectibleAcceptable' => $this->language->get('text_collectible_acceptable'),
+ 'Refurbished' => $this->language->get('text_refurbished'),
+ );
+
+ $data['marketplaces'] = array(
+ 'uk' => $this->language->get('text_united_kingdom'),
+ 'de' => $this->language->get('text_germany'),
+ 'fr' => $this->language->get('text_france'),
+ 'it' => $this->language->get('text_italy'),
+ 'es' => $this->language->get('text_spain'),
+ );
+
+ $data['default_marketplace'] = $this->config->get('openbay_amazon_default_listing_marketplace');
+ $data['default_condition'] = $this->config->get('openbay_amazon_listing_default_condition');
+
+ $data['user_token'] = $this->session->data['user_token'];
+
+ $data['breadcrumbs'] = array();
+
+ $data['breadcrumbs'][] = array(
+ 'href' => $this->url->link('common/dashboard', 'user_token=' . $this->session->data['user_token'], true),
+ 'text' => $this->language->get('text_home'),
+ );
+
+ $data['breadcrumbs'][] = array(
+ 'href' => $this->url->link('marketplace/openbay', 'user_token=' . $this->session->data['user_token'], true),
+ 'text' => $this->language->get('text_openbay'),
+ );
+
+ $data['breadcrumbs'][] = array(
+ 'href' => $this->url->link('extension/openbay/amazon', 'user_token=' . $this->session->data['user_token'], true),
+ 'text' => $this->language->get('text_amazon'),
+ );
+
+ $data['breadcrumbs'][] = array(
+ 'href' => $this->url->link('extension/openbay/amazon_listing/create', 'user_token=' . $this->session->data['user_token'], true),
+ 'text' => $this->language->get('heading_title'),
+ );
+
+ $data['header'] = $this->load->controller('common/header');
+ $data['column_left'] = $this->load->controller('common/column_left');
+ $data['footer'] = $this->load->controller('common/footer');
+
+ $this->response->setOutput($this->load->view('extension/openbay/amazon_listing', $data));
+ }
+
+ public function edit() {
+ $this->load->model('extension/openbay/amazon_listing');
+ $this->load->model('extension/openbay/amazon');
+ $this->load->language('extension/openbay/amazon_listing');
+
+ $this->document->setTitle($this->language->get('text_edit_heading'));
+ $this->document->addScript('view/javascript/openbay/js/faq.js');
+
+ $url = '';
+
+ if (isset($this->request->get['filter_name'])) {
+ $url .= '&filter_name=' . urlencode(html_entity_decode($this->request->get['filter_name'], ENT_QUOTES, 'UTF-8'));
+ }
+
+ if (isset($this->request->get['filter_model'])) {
+ $url .= '&filter_model=' . urlencode(html_entity_decode($this->request->get['filter_model'], ENT_QUOTES, 'UTF-8'));
+ }
+
+ if (isset($this->request->get['filter_price'])) {
+ $url .= '&filter_price=' . $this->request->get['filter_price'];
+ }
+
+ if (isset($this->request->get['filter_price_to'])) {
+ $url .= '&filter_price_to=' . $this->request->get['filter_price_to'];
+ }
+
+ if (isset($this->request->get['filter_quantity'])) {
+ $url .= '&filter_quantity=' . $this->request->get['filter_quantity'];
+ }
+
+ if (isset($this->request->get['filter_quantity_to'])) {
+ $url .= '&filter_quantity_to=' . $this->request->get['filter_quantity_to'];
+ }
+
+ if (isset($this->request->get['filter_status'])) {
+ $url .= '&filter_status=' . $this->request->get['filter_status'];
+ }
+
+ if (isset($this->request->get['filter_sku'])) {
+ $url .= '&filter_sku=' . $this->request->get['filter_sku'];
+ }
+
+ if (isset($this->request->get['filter_desc'])) {
+ $url .= '&filter_desc=' . $this->request->get['filter_desc'];
+ }
+
+ if (isset($this->request->get['filter_category'])) {
+ $url .= '&filter_category=' . $this->request->get['filter_category'];
+ }
+
+ if (isset($this->request->get['filter_manufacturer'])) {
+ $url .= '&filter_manufacturer=' . $this->request->get['filter_manufacturer'];
+ }
+
+ if (isset($this->request->get['sort'])) {
+ $url .= '&sort=' . $this->request->get['sort'];
+ }
+
+ if (isset($this->request->get['order'])) {
+ $url .= '&order=' . $this->request->get['order'];
+ }
+
+ if (isset($this->request->get['page'])) {
+ $url .= '&page=' . $this->request->get['page'];
+ }
+
+ if (isset($this->request->get['product_id'])) {
+ $product_id = $this->request->get['product_id'];
+ } else {
+ $this->response->redirect($this->url->link('marketplace/openbay/items', 'user_token=' . $this->session->data['user_token'] . $url, true));
+ }
+
+ $data['breadcrumbs'] = array();
+ $data['breadcrumbs'][] = array(
+ 'href' => $this->url->link('common/dashboard', 'user_token=' . $this->session->data['user_token'], true),
+ 'text' => $this->language->get('text_home'),
+ );
+ $data['breadcrumbs'][] = array(
+ 'href' => $this->url->link('marketplace/openbay', 'user_token=' . $this->session->data['user_token'], true),
+ 'text' => $this->language->get('text_openbay'),
+ );
+ $data['breadcrumbs'][] = array(
+ 'href' => $this->url->link('extension/openbay/amazon', 'user_token=' . $this->session->data['user_token'], true),
+ 'text' => $this->language->get('text_amazon'),
+ );
+ $data['breadcrumbs'][] = array(
+ 'href' => $this->url->link('extension/openbay/amazon_listing/edit', 'user_token=' . $this->session->data['user_token'] . '&product_id=' . $product_id . $url, true),
+ 'text' => $this->language->get('text_edit_heading'),
+ );
+
+ $status = $this->model_extension_openbay_amazon->getProductStatus($product_id);
+
+ if ($status === false) {
+ $this->response->redirect($this->url->link('extension/openbay/amazon_listing/create', 'user_token=' . $this->session->data['user_token'] . '&product_id=' . $product_id . $url, true));
+ return;
+ }
+
+ $data['product_links'] = $this->model_extension_openbay_amazon->getProductLinks($product_id);
+ $data['url_return'] = $this->url->link('marketplace/openbay/items', 'user_token=' . $this->session->data['user_token'] . $url, true);
+
+ if ($status == 'ok' || $status == 'linked') {
+ $data['url_create_new'] = $this->url->link('extension/openbay/amazon_listing/createNew', 'user_token=' . $this->session->data['user_token'] . '&product_id=' . $product_id . $url, true);
+ $data['url_delete_links'] = $this->url->link('extension/openbay/amazon_listing/deleteLinks', 'user_token=' . $this->session->data['user_token'] . '&product_id=' . $product_id . $url, true);
+ }
+
+ if ($status == 'saved') {
+ $data['has_saved_listings'] = true;
+ } else {
+ $data['has_saved_listings'] = false;
+ }
+
+ $data['url_saved_listings'] = $this->url->link('extension/openbay/amazon/savedListings', 'user_token=' . $this->session->data['user_token'] . '&product_id=' . $product_id, true);
+
+ $data['user_token'] = $this->session->data['user_token'];
+
+ $data['text_edit_heading'] = $this->language->get('text_edit_heading');
+ $data['text_product_links'] = $this->language->get('text_product_links');
+ $data['text_has_saved_listings'] = $this->language->get('text_has_saved_listings');
+ $data['button_create_new_listing'] = $this->language->get('button_create_new_listing');
+ $data['button_remove_links'] = $this->language->get('button_remove_links');
+ $data['button_cancel'] = $this->language->get('button_cancel');
+ $data['button_saved_listings'] = $this->language->get('button_saved_listings');
+ $data['column_name'] = $this->language->get('column_name');
+ $data['column_model'] = $this->language->get('column_model');
+ $data['column_combination'] = $this->language->get('column_combination');
+ $data['column_sku'] = $this->language->get('column_sku');
+ $data['column_amazon_sku'] = $this->language->get('column_amazon_sku');
+ $data['column_sku_variant'] = $this->language->get('column_sku_variant');
+ $data['text_no_results'] = $this->language->get('text_no_results');
+
+ $data['header'] = $this->load->controller('common/header');
+ $data['column_left'] = $this->load->controller('common/column_left');
+ $data['footer'] = $this->load->controller('common/footer');
+
+ $this->response->setOutput($this->load->view('extension/openbay/amazon_listing_edit', $data));
+ }
+
+ public function createNew() {
+ $url = '';
+
+ if (isset($this->request->get['filter_name'])) {
+ $url .= '&filter_name=' . urlencode(html_entity_decode($this->request->get['filter_name'], ENT_QUOTES, 'UTF-8'));
+ }
+
+ if (isset($this->request->get['filter_model'])) {
+ $url .= '&filter_model=' . urlencode(html_entity_decode($this->request->get['filter_model'], ENT_QUOTES, 'UTF-8'));
+ }
+
+ if (isset($this->request->get['filter_price'])) {
+ $url .= '&filter_price=' . $this->request->get['filter_price'];
+ }
+
+ if (isset($this->request->get['filter_price_to'])) {
+ $url .= '&filter_price_to=' . $this->request->get['filter_price_to'];
+ }
+
+ if (isset($this->request->get['filter_quantity'])) {
+ $url .= '&filter_quantity=' . $this->request->get['filter_quantity'];
+ }
+
+ if (isset($this->request->get['filter_quantity_to'])) {
+ $url .= '&filter_quantity_to=' . $this->request->get['filter_quantity_to'];
+ }
+
+ if (isset($this->request->get['filter_status'])) {
+ $url .= '&filter_status=' . $this->request->get['filter_status'];
+ }
+
+ if (isset($this->request->get['filter_sku'])) {
+ $url .= '&filter_sku=' . $this->request->get['filter_sku'];
+ }
+
+ if (isset($this->request->get['filter_desc'])) {
+ $url .= '&filter_desc=' . $this->request->get['filter_desc'];
+ }
+
+ if (isset($this->request->get['filter_category'])) {
+ $url .= '&filter_category=' . $this->request->get['filter_category'];
+ }
+
+ if (isset($this->request->get['filter_manufacturer'])) {
+ $url .= '&filter_manufacturer=' . $this->request->get['filter_manufacturer'];
+ }
+
+ if (isset($this->request->get['sort'])) {
+ $url .= '&sort=' . $this->request->get['sort'];
+ }
+
+ if (isset($this->request->get['order'])) {
+ $url .= '&order=' . $this->request->get['order'];
+ }
+
+ if (isset($this->request->get['page'])) {
+ $url .= '&page=' . $this->request->get['page'];
+ }
+
+ if (isset($this->request->get['product_id'])) {
+ $product_id = $this->request->get['product_id'];
+ } else {
+ $this->response->redirect($this->url->link('marketplace/openbay/items', 'user_token=' . $this->session->data['user_token'] . $url, true));
+ }
+ $this->load->model('extension/openbay/amazon');
+ $this->model_extension_openbay_amazon->deleteProduct($product_id);
+ $this->response->redirect($this->url->link('extension/openbay/amazon_listing/create', 'user_token=' . $this->session->data['user_token'] . '&product_id=' . $product_id . $url, true));
+ }
+
+ public function deleteLinks() {
+ $this->load->language('extension/openbay/amazon_listing');
+
+ $url = '';
+
+ if (isset($this->request->get['filter_name'])) {
+ $url .= '&filter_name=' . urlencode(html_entity_decode($this->request->get['filter_name'], ENT_QUOTES, 'UTF-8'));
+ }
+
+ if (isset($this->request->get['filter_model'])) {
+ $url .= '&filter_model=' . urlencode(html_entity_decode($this->request->get['filter_model'], ENT_QUOTES, 'UTF-8'));
+ }
+
+ if (isset($this->request->get['filter_price'])) {
+ $url .= '&filter_price=' . $this->request->get['filter_price'];
+ }
+
+ if (isset($this->request->get['filter_price_to'])) {
+ $url .= '&filter_price_to=' . $this->request->get['filter_price_to'];
+ }
+
+ if (isset($this->request->get['filter_quantity'])) {
+ $url .= '&filter_quantity=' . $this->request->get['filter_quantity'];
+ }
+
+ if (isset($this->request->get['filter_quantity_to'])) {
+ $url .= '&filter_quantity_to=' . $this->request->get['filter_quantity_to'];
+ }
+
+ if (isset($this->request->get['filter_status'])) {
+ $url .= '&filter_status=' . $this->request->get['filter_status'];
+ }
+
+ if (isset($this->request->get['filter_sku'])) {
+ $url .= '&filter_sku=' . $this->request->get['filter_sku'];
+ }
+
+ if (isset($this->request->get['filter_desc'])) {
+ $url .= '&filter_desc=' . $this->request->get['filter_desc'];
+ }
+
+ if (isset($this->request->get['filter_category'])) {
+ $url .= '&filter_category=' . $this->request->get['filter_category'];
+ }
+
+ if (isset($this->request->get['filter_manufacturer'])) {
+ $url .= '&filter_manufacturer=' . $this->request->get['filter_manufacturer'];
+ }
+
+ if (isset($this->request->get['sort'])) {
+ $url .= '&sort=' . $this->request->get['sort'];
+ }
+
+ if (isset($this->request->get['order'])) {
+ $url .= '&order=' . $this->request->get['order'];
+ }
+
+ if (isset($this->request->get['page'])) {
+ $url .= '&page=' . $this->request->get['page'];
+ }
+
+ if (isset($this->request->get['product_id'])) {
+ $product_id = $this->request->get['product_id'];
+ } else {
+ $this->response->redirect($this->url->link('marketplace/openbay/items', 'user_token=' . $this->session->data['user_token'] . $url, true));
+ }
+ $this->load->model('extension/openbay/amazon');
+
+ $links = $this->model_extension_openbay_amazon->getProductLinks($product_id);
+ foreach ($links as $link) {
+ $this->model_extension_openbay_amazon->removeProductLink($link['amazon_sku']);
+ }
+ $this->model_extension_openbay_amazon->deleteProduct($product_id);
+ $this->session->data['success'] = $this->language->get('text_links_removed');
+
+ $this->response->redirect($this->url->link('marketplace/openbay/items', 'user_token=' . $this->session->data['user_token'] . $url, true));
+ }
+
+ public function search() {
+ $this->load->model('extension/openbay/amazon_listing');
+ $this->load->language('extension/openbay/amazon_listing');
+
+ $error = '';
+
+ if (empty($this->request->post['search_string'])) {
+ $error = $this->language->get('error_text_missing');
+ }
+
+ if (empty($this->request->post['marketplace'])) {
+ $error = $this->language->get('error_marketplace_missing');
+ }
+
+ if ($error) {
+ $json = array(
+ 'data' => '',
+ 'error' => $error,
+ );
+ } else {
+ $json = array(
+ 'data' => $this->model_extension_openbay_amazon_listing->search($this->request->post['search_string'], $this->request->post['marketplace']),
+ 'error' => '',
+ );
+ }
+
+ $this->response->addHeader('Content-Type: application/json');
+ $this->response->setOutput(json_encode($json));
+ }
+
+ public function bestPrice() {
+ $this->load->model('extension/openbay/amazon_listing');
+ $this->load->language('extension/openbay/amazon_listing');
+
+ $error = '';
+
+ if (empty($this->request->post['asin'])) {
+ $error = $this->language->get('error_missing_asin');
+ }
+
+ if (empty($this->request->post['marketplace'])) {
+ $error = $this->language->get('error_marketplace_missing');
+ }
+
+ if (empty($this->request->post['condition'])) {
+ $error = $this->language->get('error_condition_missing');
+ }
+
+ if ($error) {
+ $json = array(
+ 'data' => '',
+ 'error' => $error,
+ );
+ } else {
+ $best_price = $this->model_extension_openbay_amazon_listing->getBestPrice($this->request->post['asin'], $this->request->post['condition'], $this->request->post['marketplace']);
+
+ if ($best_price) {
+ $json = array(
+ 'data' => $best_price,
+ 'error' => '',
+ );
+ } else {
+ $json = array(
+ 'data' => '',
+ 'error' => $this->language->get('error_amazon_price'),
+ );
+ }
+ }
+
+ $this->response->addHeader('Content-Type: application/json');
+ $this->response->setOutput(json_encode($json));
+ }
+
+ public function getProductByAsin() {
+ $this->load->model('extension/openbay/amazon_listing');
+
+ $data = $this->model_extension_openbay_amazon_listing->getProductByAsin($this->request->post['asin'], $this->request->post['market']);
+
+ $json = array(
+ 'title' => (string)$data['ItemAttributes']['Title'],
+ 'img' => (!isset($data['ItemAttributes']['SmallImage']['URL']) ? '' : $data['ItemAttributes']['SmallImage']['URL'])
+ );
+
+ $this->response->addHeader('Content-Type: application/json');
+ $this->response->setOutput(json_encode($json));
+ }
+
+ public function getBrowseNodes() {
+ $this->load->model('extension/openbay/amazon_listing');
+
+ $data = array(
+ 'marketplaceId' => $this->request->post['marketplaceId'],
+ 'node' => (isset($this->request->post['node']) ? $this->request->post['node'] : ''),
+ );
+
+ $response = $this->model_extension_openbay_amazon_listing->getBrowseNodes($data);
+
+ $this->response->setOutput($response);
+ }
+}
diff --git a/public/admin/controller/extension/openbay/amazon_product.php b/public/admin/controller/extension/openbay/amazon_product.php
new file mode 100644
index 0000000..8c3ba1a
--- /dev/null
+++ b/public/admin/controller/extension/openbay/amazon_product.php
@@ -0,0 +1,585 @@
+<?php
+class ControllerExtensionOpenbayAmazonProduct extends Controller {
+ public function index() {
+ $this->load->language('catalog/product');
+ $this->load->language('extension/openbay/amazon_listing');
+
+ $data = $this->language->all();
+
+ $this->load->model('extension/openbay/amazon');
+ $this->load->model('catalog/product');
+ $this->load->model('tool/image');
+
+ $this->document->addScript('view/javascript/openbay/js/openbay.js');
+ $this->document->setTitle($this->language->get('heading_title'));
+
+ $data['breadcrumbs'] = array();
+
+ $data['breadcrumbs'][] = array(
+ 'href' => $this->url->link('common/dashboard', 'user_token=' . $this->session->data['user_token'], true),
+ 'text' => $this->language->get('text_home'),
+ );
+
+ $data['breadcrumbs'][] = array(
+ 'href' => $this->url->link('marketplace/openbay', 'user_token=' . $this->session->data['user_token'], true),
+ 'text' => $this->language->get('text_openbay'),
+ );
+
+ $data['breadcrumbs'][] = array(
+ 'href' => $this->url->link('extension/openbay/amazon', 'user_token=' . $this->session->data['user_token'], true),
+ 'text' => $this->language->get('text_amazon'),
+ );
+
+ $data['breadcrumbs'][] = array(
+ 'href' => $this->url->link('extension/openbay/amazon_listing/create', 'user_token=' . $this->session->data['user_token'], true),
+ 'text' => $this->language->get('heading_title'),
+ );
+
+ $data['breadcrumbs'][] = array(
+ 'href' => $this->url->link('extension/openbay/amazon_product', 'user_token=' . $this->session->data['user_token'], true),
+ 'text' => $this->language->get('text_title_advanced'),
+ );
+
+ $url = '';
+
+ if (isset($this->request->get['filter_name'])) {
+ $url .= '&filter_name=' . urlencode(html_entity_decode($this->request->get['filter_name'], ENT_QUOTES, 'UTF-8'));
+ }
+
+ if (isset($this->request->get['filter_model'])) {
+ $url .= '&filter_model=' . urlencode(html_entity_decode($this->request->get['filter_model'], ENT_QUOTES, 'UTF-8'));
+ }
+
+ if (isset($this->request->get['filter_price'])) {
+ $url .= '&filter_price=' . $this->request->get['filter_price'];
+ }
+
+ if (isset($this->request->get['filter_price_to'])) {
+ $url .= '&filter_price_to=' . $this->request->get['filter_price_to'];
+ }
+
+ if (isset($this->request->get['filter_quantity'])) {
+ $url .= '&filter_quantity=' . $this->request->get['filter_quantity'];
+ }
+
+ if (isset($this->request->get['filter_quantity_to'])) {
+ $url .= '&filter_quantity_to=' . $this->request->get['filter_quantity_to'];
+ }
+
+ if (isset($this->request->get['filter_status'])) {
+ $url .= '&filter_status=' . $this->request->get['filter_status'];
+ }
+
+ if (isset($this->request->get['filter_sku'])) {
+ $url .= '&filter_sku=' . $this->request->get['filter_sku'];
+ }
+
+ if (isset($this->request->get['filter_desc'])) {
+ $url .= '&filter_desc=' . $this->request->get['filter_desc'];
+ }
+
+ if (isset($this->request->get['filter_category'])) {
+ $url .= '&filter_category=' . $this->request->get['filter_category'];
+ }
+
+ if (isset($this->request->get['filter_manufacturer'])) {
+ $url .= '&filter_manufacturer=' . $this->request->get['filter_manufacturer'];
+ }
+
+ if (isset($this->request->get['sort'])) {
+ $url .= '&sort=' . $this->request->get['sort'];
+ }
+
+ if (isset($this->request->get['order'])) {
+ $url .= '&order=' . $this->request->get['order'];
+ }
+
+ if (isset($this->request->get['page'])) {
+ $url .= '&page=' . $this->request->get['page'];
+ }
+
+ if (isset($this->request->get['product_id'])) {
+ $product_id = $this->request->get['product_id'];
+ } else {
+ die('No product id');
+ }
+
+ if (isset($this->request->get['sku'])) {
+ $variation = $this->request->get['sku'];
+ } else {
+ $variation = '';
+ }
+ $data['variation'] = $variation;
+ $data['errors'] = array();
+
+ if (($this->request->server['REQUEST_METHOD'] == 'POST') && $this->validateForm()) {
+ $data_array = $this->request->post;
+
+ $this->model_extension_openbay_amazon->saveProduct($product_id, $data_array);
+
+ if ($data_array['upload_after'] === 'true') {
+ $upload_result = $this->uploadItems();
+ if ($upload_result['status'] == 'ok') {
+ $this->session->data['success'] = $this->language->get('text_uploaded');
+ $this->response->redirect($this->url->link('marketplace/openbay/items', 'user_token=' . $this->session->data['user_token'] . $url, true));
+ } else {
+ $data['errors'][] = Array('message' => $upload_result['error_message']);
+ }
+ } else {
+ $this->session->data['success'] = $this->language->get('text_saved_local');
+ $this->response->redirect($this->url->link('extension/openbay/amazon_product', 'user_token=' . $this->session->data['user_token'] . '&product_id=' . $product_id . $url, true));
+ }
+ }
+
+ if (isset($this->session->data['success'])) {
+ $data['success'] = $this->session->data['success'];
+ unset($this->session->data['success']);
+ } else {
+ $data['success'] = '';
+ }
+
+ $saved_listing_data = $this->model_extension_openbay_amazon->getProduct($product_id, $variation);
+ if (empty($saved_listing_data)) {
+ $listing_saved = false;
+ } else {
+ $listing_saved = true;
+ }
+
+ $errors = $this->model_extension_openbay_amazon->getProductErrors($product_id);
+ foreach($errors as $error) {
+ $error['message'] = 'Error for SKU: "' . $error['sku'] . '" - ' . $this->formatUrlsInText($error['message']);
+ $data['errors'][] = $error;
+ }
+ if (!empty($errors)) {
+ $data['has_listing_errors'] = true;
+ } else {
+ $data['has_listing_errors'] = false;
+ }
+
+ $product_info = $this->model_catalog_product->getProduct($product_id);
+ $data['listing_name'] = $product_info['name'] . " : " . $product_info['model'];
+ $data['listing_sku'] = $product_info['sku'];
+ $data['listing_url'] = $this->url->link('catalog/product/edit', 'user_token=' . $this->session->data['user_token'] . '&product_id=' . $product_id . $url, true);
+
+ if ($listing_saved) {
+ $data['edit_product_category'] = $saved_listing_data['category'];
+ } else {
+ $data['edit_product_category'] = '';
+ }
+
+ $data['amazon_categories'] = array();
+
+ $amazon_templates = $this->openbay->amazon->getCategoryTemplates();
+
+ foreach($amazon_templates as $template) {
+ $template = (array)$template;
+ $category_data = array(
+ 'friendly_name' => $template['friendly_name'],
+ 'name' => $template['name'],
+ 'template' => $template['xml']
+ );
+ $data['amazon_categories'][] = $category_data;
+ }
+
+ if ($listing_saved) {
+ $data['template_parser_url'] = html_entity_decode($this->url->link('extension/openbay/amazon_product/parseTemplateAjax&edit_id=' . $product_id, 'user_token=' . $this->session->data['user_token'], true));
+ } else {
+ $data['template_parser_url'] = html_entity_decode($this->url->link('extension/openbay/amazon_product/parseTemplateAjax&product_id=' . $product_id, 'user_token=' . $this->session->data['user_token'], true));
+ }
+
+ $data['url_remove_errors'] = $this->url->link('extension/openbay/amazon_product/removeErrors', 'user_token=' . $this->session->data['user_token'] . '&product_id=' . $product_id . $url, true);
+ $data['cancel_url'] = $this->url->link('marketplace/openbay/items', 'user_token=' . $this->session->data['user_token'] . $url, true);
+ $data['saved_listings_url'] = $this->url->link('extension/openbay/amazon/savedListings', 'user_token=' . $this->session->data['user_token'], true);
+ $data['main_url'] = $this->url->link('extension/openbay/amazon_product', 'user_token=' . $this->session->data['user_token'] . $url, true);
+ $data['user_token'] = $this->session->data['user_token'];
+ $data['no_image'] = $this->model_tool_image->resize('no_image.png', 100, 100);
+
+ if ($this->openbay->addonLoad('openstock')) {
+ $this->load->model('extension/module/openstock');
+ $data['options'] = $this->model_setting_module_openstock->getVariants($product_id);
+ } else {
+ $data['options'] = array();
+ }
+
+ $data['marketplaces'] = array(
+ array('name' => $this->language->get('text_germany'), 'id' => 'A1PA6795UKMFR9', 'code' => 'de'),
+ array('name' => $this->language->get('text_france'), 'id' => 'A13V1IB3VIYZZH', 'code' => 'fr'),
+ array('name' => $this->language->get('text_italy'), 'id' => 'APJ6JRA9NG5V4', 'code' => 'it'),
+ array('name' => $this->language->get('text_spain'), 'id' => 'A1RKKUPIHCS9HS', 'code' => 'es'),
+ array('name' => $this->language->get('text_united_kingdom'), 'id' => 'A1F83G8C2ARO7P', 'code' => 'uk'),
+ );
+
+ $marketplace_mapping = array(
+ 'uk' => 'A1F83G8C2ARO7P',
+ 'de' => 'A1PA6795UKMFR9',
+ 'fr' => 'A13V1IB3VIYZZH',
+ 'it' => 'APJ6JRA9NG5V4',
+ 'es' => 'A1RKKUPIHCS9HS',
+ );
+
+ if ($this->config->get('openbay_amazon_default_listing_marketplace')) {
+ $data['default_marketplaces'] = array($marketplace_mapping[$this->config->get('openbay_amazon_default_listing_marketplace')]);
+ } else {
+ $data['default_marketplaces'] = array();
+ }
+
+ $data['saved_marketplaces'] = isset($saved_listing_data['marketplaces']) ? (array)unserialize($saved_listing_data['marketplaces']) : false;
+
+ $data['header'] = $this->load->controller('common/header');
+ $data['column_left'] = $this->load->controller('common/column_left');
+ $data['footer'] = $this->load->controller('common/footer');
+
+ $this->response->setOutput($this->load->view('extension/openbay/amazon_listing_advanced', $data));
+ }
+
+ public function removeErrors() {
+ $url = '';
+
+ if (isset($this->request->get['filter_name'])) {
+ $url .= '&filter_name=' . urlencode(html_entity_decode($this->request->get['filter_name'], ENT_QUOTES, 'UTF-8'));
+ }
+
+ if (isset($this->request->get['filter_model'])) {
+ $url .= '&filter_model=' . urlencode(html_entity_decode($this->request->get['filter_model'], ENT_QUOTES, 'UTF-8'));
+ }
+
+ if (isset($this->request->get['filter_price'])) {
+ $url .= '&filter_price=' . $this->request->get['filter_price'];
+ }
+
+ if (isset($this->request->get['filter_price_to'])) {
+ $url .= '&filter_price_to=' . $this->request->get['filter_price_to'];
+ }
+
+ if (isset($this->request->get['filter_quantity'])) {
+ $url .= '&filter_quantity=' . $this->request->get['filter_quantity'];
+ }
+
+ if (isset($this->request->get['filter_quantity_to'])) {
+ $url .= '&filter_quantity_to=' . $this->request->get['filter_quantity_to'];
+ }
+
+ if (isset($this->request->get['filter_status'])) {
+ $url .= '&filter_status=' . $this->request->get['filter_status'];
+ }
+
+ if (isset($this->request->get['filter_sku'])) {
+ $url .= '&filter_sku=' . $this->request->get['filter_sku'];
+ }
+
+ if (isset($this->request->get['filter_desc'])) {
+ $url .= '&filter_desc=' . $this->request->get['filter_desc'];
+ }
+
+ if (isset($this->request->get['filter_category'])) {
+ $url .= '&filter_category=' . $this->request->get['filter_category'];
+ }
+
+ if (isset($this->request->get['filter_manufacturer'])) {
+ $url .= '&filter_manufacturer=' . $this->request->get['filter_manufacturer'];
+ }
+
+ if (isset($this->request->get['sort'])) {
+ $url .= '&sort=' . $this->request->get['sort'];
+ }
+
+ if (isset($this->request->get['order'])) {
+ $url .= '&order=' . $this->request->get['order'];
+ }
+
+ if (isset($this->request->get['page'])) {
+ $url .= '&page=' . $this->request->get['page'];
+ }
+
+ if (isset($this->request->get['product_id'])) {
+ $product_id = $this->request->get['product_id'];
+ } else {
+ $this->response->redirect($this->url->link('marketplace/openbay/items', 'user_token=' . $this->session->data['user_token'] . $url, true));
+ }
+ $this->load->model('extension/openbay/amazon');
+ $this->model_extension_openbay_amazon->removeAdvancedErrors($product_id);
+ $this->session->data['success'] = 'Errors removed';
+ $this->response->redirect($this->url->link('extension/openbay/amazon_product', 'user_token=' . $this->session->data['user_token'] . '&product_id=' . $product_id . $url, true));
+ }
+
+ public function deleteSaved() {
+ if (!isset($this->request->get['product_id']) || !isset($this->request->get['var'])) {
+ return;
+ }
+
+ $this->load->model('extension/openbay/amazon');
+ $this->model_extension_openbay_amazon->deleteSaved($this->request->get['product_id'], $this->request->get['var']);
+ }
+
+ public function uploadSaved() {
+ ob_start();
+ $json = json_encode($this->uploadItems());
+ ob_clean();
+
+ $this->response->addHeader('Content-Type: application/json');
+ $this->response->setOutput($json);
+ }
+
+ private function uploadItems() {
+ $this->load->language('extension/openbay/amazon_listing');
+ $this->load->model('extension/openbay/amazon');
+ $logger = new Log('amazon_product.log');
+
+ $logger->write('Uploading process started . ');
+
+ $saved_products = $this->model_extension_openbay_amazon->getSavedProductsData();
+
+ if (empty($saved_products)) {
+ $logger->write('No saved listings found. Uploading canceled . ');
+ $result['status'] = 'error';
+ $result['error_message'] = 'No saved listings. Nothing to upload. Aborting . ';
+ return $result;
+ }
+
+ foreach($saved_products as $saved_product) {
+ $product_data_decoded = (array)json_decode($saved_product['data']);
+
+ $catalog = defined(HTTPS_CATALOG) ? HTTPS_CATALOG : HTTP_CATALOG;
+ $response_data = array("response_url" => $catalog . 'index.php?route=extension/openbay/amazon/product');
+ $category_data = array('category' => (string)$saved_product['category']);
+ $fields_data = array('fields' => (array)$product_data_decoded['fields']);
+
+ $mp_array = !empty($saved_product['marketplaces']) ? (array)unserialize($saved_product['marketplaces']) : array();
+ $marketplaces_data = array('marketplaces' => $mp_array);
+
+ $product_data = array_merge($category_data, $fields_data, $response_data, $marketplaces_data);
+ $insertion_response = $this->openbay->amazon->insertProduct($product_data);
+
+ $logger->write("Uploading product with data:" . print_r($product_data, true) . "
+ Got response:" . print_r($insertion_response, true));
+
+ if (!isset($insertion_response['status']) || $insertion_response['status'] == 'error') {
+ $details = isset($insertion_response['info']) ? $insertion_response['info'] : 'Unknown';
+ $result['error_message'] = sprintf($this->language->get('error_upload_failed'), $saved_product['product_sku'], $details);
+ $result['status'] = 'error';
+ break;
+ }
+ $logger->write('Product upload success');
+ $this->model_extension_openbay_amazon->setProductUploaded($saved_product['product_id'], $insertion_response['insertion_id'], $saved_product['var']);
+ }
+
+ if (!isset($result['status'])) {
+ $result['status'] = 'ok';
+ $logger->write('Uploading process completed successfully . ');
+ } else {
+ $logger->write('Uploading process failed with message: ' . $result['error_message']);
+ }
+ return $result;
+ }
+
+ public function parseTemplateAjax() {
+ $this->load->model('tool/image');
+
+ $log = new Log('amazon_product.log');
+
+ $json = array();
+
+ if (isset($this->request->get['xml'])) {
+ $request = array('template' => $this->request->get['xml'], 'version' => 2);
+ $response = $this->openbay->amazon->call("productv2/GetTemplateXml", $request);
+ if ($response) {
+ $template = $this->openbay->amazon->parseCategoryTemplate($response);
+ if ($template) {
+ $variation = isset($this->request->get['sku']) ? $this->request->get['sku'] : '';
+
+ if (isset($this->request->get['product_id'])) {
+ $template['fields'] = $this->fillDefaultValues($this->request->get['product_id'], $template['fields'], $variation);
+ } elseif (isset($this->request->get['edit_id'])) {
+ $template['fields'] = $this->fillSavedValues($this->request->get['edit_id'], $template['fields'], $variation);
+ }
+
+ foreach($template['fields'] as $key => $field) {
+ if ($field['accepted']['type'] == 'image') {
+ if (empty($field['value'])) {
+ $template['fields'][$key]['thumb'] = '';
+ } else {
+ $template['fields'][$key]['thumb'] = $this->model_tool_image->resize(str_replace(HTTPS_CATALOG . 'image/', '', $field['value']), 100, 100);
+ }
+ }
+ }
+
+ $result = array(
+ "category" => $template['category'],
+ "fields" => $template['fields'],
+ "tabs" => $template['tabs']
+ );
+ } else {
+ $json_decoded = json_decode($response);
+ if ($json_decoded) {
+ $result = $json_decoded;
+ } else {
+ $result = array('status' => 'error');
+ $log->write("admin/openbay/amazon_product/parseTemplateAjax failed to parse template response: " . $response);
+ }
+ }
+ } else {
+ $log->write("admin/openbay/amazon_product/parseTemplateAjax failed calling productv2/GetTemplateXml with params: " . print_r($request, true));
+ }
+ }
+
+ $this->response->addHeader('Content-Type: application/json');
+ $this->response->setOutput(json_encode($result));
+ }
+
+ private function fillDefaultValues($product_id, $fields_array, $var = '') {
+ $this->load->model('catalog/product');
+ $this->load->model('setting/setting');
+ $this->load->model('extension/openbay/amazon');
+
+ $openbay_settings = $this->model_setting_setting->getSetting('openbay_amazon');
+
+ $product_info = $this->model_catalog_product->getProduct($product_id);
+ $product_info['description'] = trim(utf8_encode(strip_tags(html_entity_decode($product_info['description']), "<br>")));
+ $product_info['image'] = HTTPS_CATALOG . 'image/' . $product_info['image'];
+
+ $tax_added = isset($openbay_settings['openbay_amazon_listing_tax_added']) ? $openbay_settings['openbay_amazon_listing_tax_added'] : 0;
+ $default_condition = isset($openbay_settings['openbay_amazon_listing_default_condition']) ? $openbay_settings['openbay_amazon_listing_default_condition'] : '';
+ $product_info['price'] = number_format($product_info['price'] + $tax_added / 100 * $product_info['price'], 2, '.', '');
+
+ $defaults = array(
+ 'sku' => $product_info['sku'],
+ 'title' => $product_info['name'],
+ 'quantity' => $product_info['quantity'],
+ 'standardprice' => $product_info['price'],
+ 'description' => $product_info['description'],
+ 'mainimage' => $product_info['image'],
+ 'currency' => $this->config->get('config_currency'),
+ 'shippingweight' => number_format($product_info['weight'], 2, '.', ''),
+ 'conditiontype' => $default_condition,
+ );
+
+ $this->load->model('localisation/weight_class');
+ $weight_class = $this->model_localisation_weight_class->getWeightClass($product_info['weight_class_id']);
+ if (!empty($weight_class)) {
+ $defaults['shippingweightunitofmeasure'] = $weight_class['unit'];
+ }
+
+ $this->load->model('catalog/manufacturer');
+ $manufacturer = $this->model_catalog_manufacturer->getManufacturer($product_info['manufacturer_id']);
+ if (!empty($manufacturer)) {
+ $defaults['manufacturer'] = $manufacturer['name'];
+ $defaults['brand'] = $manufacturer['name'];
+ }
+
+ $product_images = $this->model_catalog_product->getProductImages($product_id);
+ $image_index = 1;
+ foreach($product_images as $product_image) {
+ $defaults['pt' . $image_index] = HTTPS_CATALOG . 'image/' . $product_image['image'];
+ $image_index ++;
+ }
+
+ if (!empty($product_info['upc'])) {
+ $defaults['type'] = 'UPC';
+ $defaults['value'] = $product_info['upc'];
+ } else if (!empty($product_info['ean'])) {
+ $defaults['type'] = 'EAN';
+ $defaults['value'] = $product_info['ean'];
+ }
+
+ $meta_keywords = explode(',', $product_info['meta_keyword']);
+ foreach ($meta_keywords as $index => $meta_keyword) {
+ $defaults['searchterms' . $index] = trim($meta_keyword);
+ }
+
+ if ($var !== '' && $this->openbay->addonLoad('openstock')) {
+ $this->load->model('tool/image');
+ $this->load->model('extension/module/openstock');
+ $option_stocks = $this->model_setting_module_openstock->getVariants($product_id);
+
+ $option = '';
+
+ foreach ($option_stocks as $option_iterator) {
+ if ($option_iterator['sku'] === $var) {
+ $option = $option_iterator;
+ break;
+ }
+ }
+
+ if ($option != '') {
+ $defaults['sku'] = $option['sku'];
+ $defaults['quantity'] = $option['stock'];
+ $defaults['standardprice'] = number_format($option['price'] + $tax_added / 100 * $option['price'], 2, '.', '');
+ $defaults['shippingweight'] = number_format($option['weight'], 2, '.', '');
+
+ if (!empty($option['image'])) {
+ $defaults['mainimage'] = HTTPS_CATALOG . 'image/' . $option['image'];
+ }
+ }
+ }
+
+ if ($defaults['shippingweight'] <= 0) {
+ unset($defaults['shippingweight']);
+ unset($defaults['shippingweightunitofmeasure']);
+ }
+
+ $filled_array = array();
+
+ foreach($fields_array as $field) {
+
+ $value_array = array('value' => '');
+
+ if (isset($defaults[strtolower($field['name'])])) {
+ $value_array = array('value' => $defaults[strtolower($field['name'])]);
+ }
+
+ $filled_item = array_merge($field, $value_array);
+
+ $filled_array[] = $filled_item;
+ }
+ return $filled_array;
+ }
+
+ private function fillSavedValues($product_id, $fields_array, $var = '') {
+
+ $this->load->model('extension/openbay/amazon');
+ $saved_listing = $this->model_extension_openbay_amazon->getProduct($product_id, $var);
+
+ $decoded_data = (array)json_decode($saved_listing['data']);
+ $saved_fields = (array)$decoded_data['fields'];
+
+ //Show current quantity instead of last uploaded
+ $saved_fields['Quantity'] = $this->model_extension_openbay_amazon->getProductQuantity($product_id, $var);
+
+ $filled_array = array();
+
+ foreach($fields_array as $field) {
+ $value_array = array('value' => '');
+
+ if (isset($saved_fields[$field['name']])) {
+ $value_array = array('value' => $saved_fields[$field['name']]);
+ }
+
+ $filled_item = array_merge($field, $value_array);
+
+ $filled_array[] = $filled_item;
+ }
+
+ return $filled_array;
+ }
+
+ public function resetPending() {
+ $this->db->query("UPDATE `" . DB_PREFIX . "amazon_product` SET `status` = 'saved' WHERE `status` = 'uploaded'");
+ }
+
+ private function validateForm() {
+ return true;
+ }
+
+ private function formatUrlsInText($text) {
+ $regex_url = "/(http|https|ftp|ftps)\:\/\/[a-zA-Z0-9\-\.]+\.[a-zA-Z]{2,3}(\/\S*)?/";
+ preg_match_all($regex_url, $text, $matches);
+ $used_patterns = array();
+ foreach($matches[0] as $pattern) {
+ if (!array_key_exists($pattern, $used_patterns)) {
+ $used_patterns[$pattern]=true;
+ $text = str_replace($pattern, "<a target='_blank' href=" . $pattern . ">" . $pattern . "</a>", $text);
+ }
+ }
+ return $text;
+ }
+}
diff --git a/public/admin/controller/extension/openbay/amazonus.php b/public/admin/controller/extension/openbay/amazonus.php
new file mode 100644
index 0000000..a6d79b3
--- /dev/null
+++ b/public/admin/controller/extension/openbay/amazonus.php
@@ -0,0 +1,1040 @@
+<?php
+class ControllerExtensionOpenbayAmazonus extends Controller {
+ public function install() {
+ $this->load->model('extension/openbay/amazonus');
+ $this->load->model('setting/setting');
+ $this->load->model('setting/extension');
+ $this->load->model('user/user_group');
+
+ $this->model_user_user_group->addPermission($this->user->getGroupId(), 'access', 'extension/openbay/amazonus_listing');
+ $this->model_user_user_group->addPermission($this->user->getGroupId(), 'modify', 'extension/openbay/amazonus_listing');
+ $this->model_user_user_group->addPermission($this->user->getGroupId(), 'access', 'extension/openbay/amazonus_product');
+ $this->model_user_user_group->addPermission($this->user->getGroupId(), 'modify', 'extension/openbay/amazonus_product');
+
+ $this->model_extension_openbay_amazonus->install();
+ }
+
+ public function uninstall() {
+ $this->load->model('extension/openbay/amazonus');
+ $this->load->model('setting/setting');
+ $this->load->model('setting/extension');
+
+ $this->model_extension_openbay_amazonus->uninstall();
+ $this->model_setting_extension->uninstall('openbay', $this->request->get['extension']);
+ $this->model_setting_setting->deleteSetting($this->request->get['extension']);
+ }
+
+ public function index() {
+ $this->load->language('extension/openbay/amazonus');
+
+ $data = $this->language->all();
+
+ $this->load->model('setting/setting');
+ $this->load->model('localisation/order_status');
+ $this->load->model('extension/openbay/amazonus');
+
+ $this->document->setTitle($this->language->get('text_dashboard'));
+ $this->document->addScript('view/javascript/openbay/js/faq.js');
+
+ $data['breadcrumbs'] = array();
+ $data['breadcrumbs'][] = array(
+ 'href' => $this->url->link('common/dashboard', 'user_token=' . $this->session->data['user_token'], true),
+ 'text' => $this->language->get('text_home'),
+ );
+ $data['breadcrumbs'][] = array(
+ 'href' => $this->url->link('marketplace/openbay', 'user_token=' . $this->session->data['user_token'], true),
+ 'text' => $this->language->get('text_openbay'),
+ );
+ $data['breadcrumbs'][] = array(
+ 'href' => $this->url->link('extension/openbay/amazonus', 'user_token=' . $this->session->data['user_token'], true),
+ 'text' => $this->language->get('text_dashboard'),
+ );
+
+ if (isset($this->session->data['success'])) {
+ $data['success'] = $this->session->data['success'];
+ unset($this->session->data['success']);
+ } else {
+ $data['success'] = '';
+ }
+
+ $data['validation'] = $this->openbay->amazonus->validate();
+ $data['link_settings'] = $this->url->link('extension/openbay/amazonus/settings', 'user_token=' . $this->session->data['user_token'], true);
+ $data['link_subscription'] = $this->url->link('extension/openbay/amazonus/subscription', 'user_token=' . $this->session->data['user_token'], true);
+ $data['link_item_link'] = $this->url->link('extension/openbay/amazonus/itemLinks', 'user_token=' . $this->session->data['user_token'], true);
+ $data['link_stock_updates'] = $this->url->link('extension/openbay/amazonus/stockUpdates', 'user_token=' . $this->session->data['user_token'], true);
+ $data['link_saved_listings'] = $this->url->link('extension/openbay/amazonus/savedListings', 'user_token=' . $this->session->data['user_token'], true);
+ $data['link_bulk_listing'] = $this->url->link('extension/openbay/amazonus/bulkListProducts', 'user_token=' . $this->session->data['user_token'], true);
+ $data['link_bulk_linking'] = $this->url->link('extension/openbay/amazonus/bulkLinking', 'user_token=' . $this->session->data['user_token'], true);
+ $data['link_signup'] = 'https://account.openbaypro.com/amazonus/apiRegister/?endpoint=2&utm_source=opencart_install&utm_medium=dashboard&utm_campaign=amazonus';
+
+ $data['header'] = $this->load->controller('common/header');
+ $data['column_left'] = $this->load->controller('common/column_left');
+ $data['footer'] = $this->load->controller('common/footer');
+
+ $this->response->setOutput($this->load->view('extension/openbay/amazonus', $data));
+ }
+
+ public function stockUpdates() {
+ $this->load->language('extension/openbay/amazonus_stockupdates');
+
+ $data = $this->language->all();
+
+ $this->document->setTitle($this->language->get('heading_title'));
+ $this->document->addScript('view/javascript/openbay/js/faq.js');
+
+ $data['breadcrumbs'] = array();
+ $data['breadcrumbs'][] = array(
+ 'href' => $this->url->link('common/dashboard', 'user_token=' . $this->session->data['user_token'], true),
+ 'text' => $this->language->get('text_home'),
+ );
+ $data['breadcrumbs'][] = array(
+ 'href' => $this->url->link('marketplace/openbay', 'user_token=' . $this->session->data['user_token'], true),
+ 'text' => $this->language->get('text_openbay'),
+ );
+ $data['breadcrumbs'][] = array(
+ 'href' => $this->url->link('extension/openbay/amazonus', 'user_token=' . $this->session->data['user_token'], true),
+ 'text' => $this->language->get('text_amazon'),
+ );
+ $data['breadcrumbs'][] = array(
+ 'href' => $this->url->link('extension/openbay/amazonus/stockUpdates', 'user_token=' . $this->session->data['user_token'], true),
+ 'text' => $this->language->get('heading_title'),
+ );
+
+ $data['link_overview'] = $this->url->link('extension/openbay/amazonus', 'user_token=' . $this->session->data['user_token'], true);
+
+ $request_args = array();
+
+ if (isset($this->request->get['filter_date_start'])) {
+ $request_args['date_start'] = date("Y-m-d", strtotime($this->request->get['filter_date_start']));
+ } else {
+ $request_args['date_start'] = date("Y-m-d");
+ }
+
+ if (isset($this->request->get['filter_date_end'])) {
+ $request_args['date_end'] = date("Y-m-d", strtotime($this->request->get['filter_date_end']));
+ } else {
+ $request_args['date_end'] = date("Y-m-d");
+ }
+
+ $data['date_start'] = $request_args['date_start'];
+ $data['date_end'] = $request_args['date_end'];
+
+ $xml = $this->openbay->amazonus->getStockUpdatesStatus($request_args);
+ $simple_xml_obj = simplexml_load_string($xml);
+ $data['table_data'] = array();
+
+ if ($simple_xml_obj !== false) {
+ $table_data = array();
+
+ foreach($simple_xml_obj->update as $update_node) {
+ $row = array(
+ 'date_requested' => (string)$update_node->date_requested,
+ 'date_updated' => (string)$update_node->date_updated,
+ 'status' => (string)$update_node->status,
+ );
+
+ $data_items = array();
+
+ foreach($update_node->data->product as $product_node) {
+ $data_items[] = array(
+ 'sku' => (string)$product_node->sku,
+ 'stock' => (int)$product_node->stock
+ );
+ }
+
+ $row['data'] = $data_items;
+ $table_data[(int)$update_node->ref] = $row;
+ }
+
+ $data['table_data'] = $table_data;
+ } else {
+ $data['error'] = $data['error_api_connection'];
+ }
+
+ $data['user_token'] = $this->session->data['user_token'];
+
+ $data['header'] = $this->load->controller('common/header');
+ $data['column_left'] = $this->load->controller('common/column_left');
+ $data['footer'] = $this->load->controller('common/footer');
+
+ $this->response->setOutput($this->load->view('extension/openbay/amazonus_stock_updates', $data));
+ }
+
+ public function subscription() {
+ $this->load->language('extension/openbay/amazonus_subscription');
+
+ $data = $this->language->all();
+
+ $this->document->setTitle($this->language->get('heading_title'));
+ $this->document->addScript('view/javascript/openbay/js/faq.js');
+
+ $data['breadcrumbs'] = array();
+ $data['breadcrumbs'][] = array(
+ 'href' => $this->url->link('common/dashboard', 'user_token=' . $this->session->data['user_token'], true),
+ 'text' => $this->language->get('text_home'),
+ );
+ $data['breadcrumbs'][] = array(
+ 'href' => $this->url->link('marketplace/openbay', 'user_token=' . $this->session->data['user_token'], true),
+ 'text' => $this->language->get('text_openbay'),
+ );
+ $data['breadcrumbs'][] = array(
+ 'href' => $this->url->link('extension/openbay/amazonus', 'user_token=' . $this->session->data['user_token'], true),
+ 'text' => $this->language->get('text_amazon'),
+ );
+ $data['breadcrumbs'][] = array(
+ 'href' => $this->url->link('extension/openbay/amazonus/subscription', 'user_token=' . $this->session->data['user_token'], true),
+ 'text' => $this->language->get('heading_title'),
+ );
+
+ $data['link_overview'] = $this->url->link('extension/openbay/amazonus', 'user_token=' . $this->session->data['user_token'], true);
+
+ $response = simplexml_load_string($this->openbay->amazonus->call('plans/getPlans'));
+
+ $data['plans'] = array();
+
+ if ($response) {
+ foreach ($response->Plan as $plan) {
+ $data['plans'][] = array(
+ 'title' => (string)$plan->Title,
+ 'description' => (string)$plan->Description,
+ 'order_frequency' => (string)$plan->OrderFrequency,
+ 'product_listings' => (string)$plan->ProductListings,
+ 'bulk_listing' => (string)$plan->BulkListing,
+ 'price' => (string)$plan->Price,
+ );
+ }
+ }
+
+ $response = simplexml_load_string($this->openbay->amazonus->call('plans/getUsersPlans'));
+
+ $plan = false;
+
+ if ($response) {
+ $plan = array(
+ 'merchant_id' => (string)$response->MerchantId,
+ 'user_status' => (string)$response->UserStatus,
+ 'title' => (string)$response->Title,
+ 'description' => (string)$response->Description,
+ 'price' => (string)$response->Price,
+ 'order_frequency' => (string)$response->OrderFrequency,
+ 'product_listings' => (string)$response->ProductListings,
+ 'listings_remain' => (string)$response->ListingsRemain,
+ 'listings_reserved' => (string)$response->ListingsReserved,
+ 'bulk_listing' => (string)$response->BulkListing,
+ );
+ }
+
+ $data['user_plan'] = $plan;
+ $data['link_change_plan'] = $this->openbay->amazonus->getServer() . 'account/changePlan/?token=' . $this->config->get('openbay_amazonus_token');
+ $data['link_change_seller'] = $this->openbay->amazonus->getServer() . 'account/changeSellerId/?token=' . $this->config->get('openbay_amazonus_token');
+ $data['link_register'] = 'https://account.openbaypro.com/amazonus/apiRegister/?endpoint=2&utm_source=opencart_install&utm_medium=subscription&utm_campaign=amazonus';
+
+ $data['header'] = $this->load->controller('common/header');
+ $data['column_left'] = $this->load->controller('common/column_left');
+ $data['footer'] = $this->load->controller('common/footer');
+
+ $this->response->setOutput($this->load->view('extension/openbay/amazonus_subscription', $data));
+ }
+
+ public function settings() {
+ $this->load->language('extension/openbay/amazonus_settings');
+
+ $data = $this->language->all();
+
+ $this->document->setTitle($this->language->get('heading_title'));
+ $this->document->addScript('view/javascript/openbay/js/faq.js');
+
+ $this->load->model('setting/setting');
+ $this->load->model('localisation/order_status');
+ $this->load->model('extension/openbay/amazonus');
+
+ $this->load->model('customer/customer_group');
+
+ $data['customer_groups'] = $this->model_customer_customer_group->getCustomerGroups();
+
+ $settings = $this->model_setting_setting->getSetting('openbay_amazonus');
+
+ if (($this->request->server['REQUEST_METHOD'] == 'POST') && $this->validate()) {
+ $settings = array_merge($settings, $this->request->post);
+ $this->model_setting_setting->editSetting('openbay_amazonus', $settings);
+
+ $this->config->set('openbay_amazonus_token', $this->request->post['openbay_amazonus_token']);
+ $this->config->set('openbay_amazonus_encryption_key', $this->request->post['openbay_amazonus_encryption_key']);
+ $this->config->set('openbay_amazonus_encryption_iv', $this->request->post['openbay_amazonus_encryption_iv']);
+
+ $this->openbay->amazonus->setEncryptionKey($this->request->post['openbay_amazonus_encryption_key']);
+ $this->openbay->amazonus->setEncryptionIv($this->request->post['openbay_amazonus_encryption_iv']);
+
+ if (!empty($this->request->post['openbay_amazonus_token']) && !empty($this->request->post['openbay_amazonus_encryption_key']) && !empty($this->request->post['openbay_amazonus_encryption_iv'])) {
+ $this->model_extension_openbay_amazonus->verifyConfig($settings);
+ }
+
+ $this->session->data['success'] = $this->language->get('text_settings_updated');
+ $this->response->redirect($this->url->link('extension/openbay/amazonus', 'user_token=' . $this->session->data['user_token'], true));
+ return;
+ }
+
+ $data['cancel'] = $this->url->link('extension/openbay/amazonus', 'user_token=' . $this->session->data['user_token'], true);
+
+ $data['breadcrumbs'] = array();
+ $data['breadcrumbs'][] = array(
+ 'href' => $this->url->link('common/dashboard', 'user_token=' . $this->session->data['user_token'], true),
+ 'text' => $this->language->get('text_home'),
+ );
+ $data['breadcrumbs'][] = array(
+ 'href' => $this->url->link('marketplace/openbay', 'user_token=' . $this->session->data['user_token'], true),
+ 'text' => $this->language->get('text_openbay'),
+ );
+ $data['breadcrumbs'][] = array(
+ 'href' => $this->url->link('extension/openbay/amazonus', 'user_token=' . $this->session->data['user_token'], true),
+ 'text' => $this->language->get('text_amazon'),
+ );
+
+ $data['breadcrumbs'][] = array(
+ 'href' => $this->url->link('extension/openbay/amazonus/settings', 'user_token=' . $this->session->data['user_token'], true),
+ 'text' => $this->language->get('heading_title'),
+ );
+
+ $data['conditions'] = array(
+ 'New' => $this->language->get('text_new'),
+ 'UsedLikeNew' => $this->language->get('text_used_like_new'),
+ 'UsedVeryGood' => $this->language->get('text_used_very_good'),
+ 'UsedGood' => $this->language->get('text_used_good'),
+ 'UsedAcceptable' => $this->language->get('text_used_acceptable'),
+ 'CollectibleLikeNew' => $this->language->get('text_collectible_like_new'),
+ 'CollectibleVeryGood' => $this->language->get('text_collectible_very_good'),
+ 'CollectibleGood' => $this->language->get('text_collectible_good'),
+ 'CollectibleAcceptable' => $this->language->get('text_collectible_acceptable'),
+ 'Refurbished' => $this->language->get('text_refurbished'),
+ );
+
+ $data['openbay_amazonus_status'] = isset($settings['openbay_amazonus_status']) ? $settings['openbay_amazonus_status'] : '';
+ $data['openbay_amazonus_token'] = isset($settings['openbay_amazonus_token']) ? $settings['openbay_amazonus_token'] : '';
+ $data['openbay_amazonus_encryption_key'] = isset($settings['openbay_amazonus_encryption_key']) ? $settings['openbay_amazonus_encryption_key'] : '';
+ $data['openbay_amazonus_encryption_iv'] = isset($settings['openbay_amazonus_encryption_iv']) ? $settings['openbay_amazonus_encryption_iv'] : '';
+ $data['openbay_amazonus_listing_tax_added'] = isset($settings['openbay_amazonus_listing_tax_added']) ? $settings['openbay_amazonus_listing_tax_added'] : '0.00';
+ $data['openbay_amazonus_order_tax'] = isset($settings['openbay_amazonus_order_tax']) ? $settings['openbay_amazonus_order_tax'] : '00';
+ $data['openbay_amazonus_default_listing_marketplace'] = isset($settings['openbay_amazonus_default_listing_marketplace']) ? $settings['openbay_amazonus_default_listing_marketplace'] : '';
+ $data['openbay_amazonus_listing_default_condition'] = isset($settings['openbay_amazonus_listing_default_condition']) ? $settings['openbay_amazonus_listing_default_condition'] : '';
+
+ $data['carriers'] = $this->openbay->amazonus->getCarriers();
+ $data['openbay_amazonus_default_carrier'] = isset($settings['openbay_amazonus_default_carrier']) ? $settings['openbay_amazonus_default_carrier'] : '';
+
+ $unshipped_status_id = isset($settings['openbay_amazonus_order_status_unshipped']) ? $settings['openbay_amazonus_order_status_unshipped'] : '';
+ $partially_shipped_status_id = isset($settings['openbay_amazonus_order_status_partially_shipped']) ? $settings['openbay_amazonus_order_status_partially_shipped'] : '';
+ $shipped_status_id = isset($settings['openbay_amazonus_order_status_shipped']) ? $settings['openbay_amazonus_order_status_shipped'] : '';
+ $canceled_status_id = isset($settings['openbay_amazonus_order_status_canceled']) ? $settings['openbay_amazonus_order_status_canceled'] : '';
+
+ $amazonus_order_statuses = array(
+ 'unshipped' => array('name' => $this->language->get('text_unshipped'), 'order_status_id' => $unshipped_status_id),
+ 'partially_shipped' => array('name' => $this->language->get('text_partially_shipped'), 'order_status_id' => $partially_shipped_status_id),
+ 'shipped' => array('name' => $this->language->get('text_shipped'), 'order_status_id' => $shipped_status_id),
+ 'canceled' => array('name' => $this->language->get('text_canceled'), 'order_status_id' => $canceled_status_id),
+ );
+
+ $data['openbay_amazonus_order_customer_group'] = isset($settings['openbay_amazonus_order_customer_group']) ? $settings['openbay_amazonus_order_customer_group'] : '';
+
+ $data['amazonus_order_statuses'] = $amazonus_order_statuses;
+ $data['order_statuses'] = $this->model_localisation_order_status->getOrderStatuses();
+
+ $data['subscription_url'] = $this->url->link('extension/openbay/amazonus/subscription', 'user_token=' . $this->session->data['user_token'], true);
+ $data['itemLinks_url'] = $this->url->link('extension/openbay/amazonus_product/linkItems', 'user_token=' . $this->session->data['user_token'], true);
+ $data['openbay_amazonus_notify_admin'] = isset($settings['openbay_amazonus_notify_admin']) ? $settings['openbay_amazonus_notify_admin'] : '';
+ $data['link_signup'] = 'https://account.openbaypro.com/amazonus/apiRegister/?endpoint=2&utm_source=opencart_install&utm_medium=settings&utm_campaign=amazonus';
+
+ $api_checked = false;
+ $api_status = false;
+ $api_auth = false;
+
+ if (!empty($data['openbay_amazonus_token']) && !empty($data['openbay_amazonus_encryption_key']) && !empty($data['openbay_amazonus_encryption_iv'])) {
+ $response = $this->openbay->amazonus->call('ping/info');
+
+ $api_checked = true;
+
+ if (!empty($response)) {
+ $ping_info = simplexml_load_string($response);
+
+ if ($ping_info === false) {
+ /**
+ * The data from the API could not be extracted from the XML
+ */
+ } else {
+ $api_status = ((string)$ping_info->Api_status == 'ok') ? true : false;
+ $api_auth = ((string)$ping_info->Auth == 'true') ? true : false;
+ }
+ }
+ }
+
+ $data['api_status'] = $api_status;
+ $data['api_auth'] = $api_auth;
+ $data['api_checked'] = $api_checked;
+
+ $data['header'] = $this->load->controller('common/header');
+ $data['column_left'] = $this->load->controller('common/column_left');
+ $data['footer'] = $this->load->controller('common/footer');
+
+ $this->response->setOutput($this->load->view('extension/openbay/amazonus_settings', $data));
+ }
+
+ public function itemLinks() {
+ $this->load->language('extension/openbay/amazonus_links');
+
+ $data = $this->language->all();
+
+ $this->document->setTitle($this->language->get('heading_title'));
+ $this->document->addScript('view/javascript/openbay/js/faq.js');
+
+ $data['breadcrumbs'] = array();
+ $data['breadcrumbs'][] = array(
+ 'href' => $this->url->link('common/dashboard', 'user_token=' . $this->session->data['user_token'], true),
+ 'text' => $this->language->get('text_home'),
+ );
+ $data['breadcrumbs'][] = array(
+ 'href' => $this->url->link('marketplace/openbay', 'user_token=' . $this->session->data['user_token'], true),
+ 'text' => $this->language->get('text_openbay'),
+ );
+ $data['breadcrumbs'][] = array(
+ 'href' => $this->url->link('extension/openbay/amazonus', 'user_token=' . $this->session->data['user_token'], true),
+ 'text' => $this->language->get('text_amazon'),
+ );
+
+ $data['breadcrumbs'][] = array(
+ 'href' => $this->url->link('extension/openbay/amazonus/itemLinks', 'user_token=' . $this->session->data['user_token'], true),
+ 'text' => $this->language->get('heading_title'),
+ );
+
+ $data['user_token'] = $this->session->data['user_token'];
+
+ $data['cancel'] = $this->url->link('extension/openbay/amazonus', 'user_token=' . $this->session->data['user_token'], true);
+
+ $data['header'] = $this->load->controller('common/header');
+ $data['column_left'] = $this->load->controller('common/column_left');
+ $data['footer'] = $this->load->controller('common/footer');
+
+ $this->response->setOutput($this->load->view('extension/openbay/amazonus_item_links', $data));
+ }
+
+ public function savedListings() {
+ $this->load->language('extension/openbay/amazonus_listingsaved');
+
+ $data = $this->language->all();
+
+ $this->document->setTitle($this->language->get('heading_title'));
+ $this->document->addScript('view/javascript/openbay/js/faq.js');
+
+ $data['link_overview'] = $this->url->link('extension/openbay/amazonus', 'user_token=' . $this->session->data['user_token'], true);
+
+ $data['breadcrumbs'] = array();
+ $data['breadcrumbs'][] = array(
+ 'href' => $this->url->link('common/dashboard', 'user_token=' . $this->session->data['user_token'], true),
+ 'text' => $this->language->get('text_home'),
+ );
+ $data['breadcrumbs'][] = array(
+ 'href' => $this->url->link('marketplace/openbay', 'user_token=' . $this->session->data['user_token'], true),
+ 'text' => $this->language->get('text_openbay'),
+ );
+ $data['breadcrumbs'][] = array(
+ 'href' => $this->url->link('extension/openbay/amazonus', 'user_token=' . $this->session->data['user_token'], true),
+ 'text' => $this->language->get('text_amazon'),
+ );
+
+ $data['breadcrumbs'][] = array(
+ 'href' => $this->url->link('extension/openbay/amazonus/savedListings', 'user_token=' . $this->session->data['user_token'], true),
+ 'text' => $this->language->get('heading_title'),
+ );
+
+ $data['user_token'] = $this->session->data['user_token'];
+ $this->load->model('extension/openbay/amazonus');
+ $saved_products = $this->model_extension_openbay_amazonus->getSavedProducts();
+
+ $data['saved_products'] = array();
+
+ foreach($saved_products as $saved_product) {
+ $data['saved_products'][] = array(
+ 'product_id' => $saved_product['product_id'],
+ 'product_name' => $saved_product['product_name'],
+ 'product_model' => $saved_product['product_model'],
+ 'product_sku' => $saved_product['product_sku'],
+ 'amazon_sku' => $saved_product['amazonus_sku'],
+ 'var' => $saved_product['var'],
+ 'edit_link' => $this->url->link('extension/openbay/amazonus_product', 'user_token=' . $this->session->data['user_token'] . '&product_id=' . $saved_product['product_id'] . '&sku=' . $saved_product['var'], true),
+ );
+ }
+
+ $data['header'] = $this->load->controller('common/header');
+ $data['column_left'] = $this->load->controller('common/column_left');
+ $data['footer'] = $this->load->controller('common/footer');
+
+ $this->response->setOutput($this->load->view('extension/openbay/amazonus_saved_listings', $data));
+ }
+
+ protected function validate() {
+ if (!$this->user->hasPermission('modify', 'extension/openbay/amazonus')) {
+ $this->error = $this->language->get('error_permission');
+ }
+
+ if (empty($this->error)) {
+ return true;
+ }
+
+ return false;
+ }
+
+ public function getVariants() {
+ $variants = array();
+
+ if ($this->openbay->addonLoad('openstock') && isset($this->request->get['product_id'])) {
+ $this->load->model('extension/module/openstock');
+ $this->load->model('tool/image');
+ $variants = $this->model_setting_module_openstock->getVariants($this->request->get['product_id']);
+ }
+
+ if (empty($variants)) {
+ $variants = false;
+ } else {
+ foreach ($variants as $key => $variant) {
+ if ($variant['sku'] == '') {
+ unset($variants[$key]);
+ }
+ }
+ }
+
+ $this->response->addHeader('Content-Type: application/json');
+ $this->response->setOutput(json_encode($variants));
+ }
+
+ public function addLink() {
+ if (isset($this->request->get['product_id']) && isset($this->request->get['amazon_sku'])) {
+ $this->load->model('extension/openbay/amazonus');
+
+ $amazon_sku = $this->request->get['amazon_sku'];
+ $product_id = $this->request->get['product_id'];
+ $var = isset($this->request->get['var']) ? $this->request->get['var'] : '';
+
+ $this->model_extension_openbay_amazonus->linkProduct($amazon_sku, $product_id, $var);
+
+ $logger = new Log('amazonus_stocks.log');
+ $logger->write('addItemLink() called for product id: ' . $product_id . ', amazon sku: ' . $amazon_sku . ', var: ' . $var);
+
+ if ($var != '' && $this->openbay->addonLoad('openstock')) {
+ $logger->write('Using openStock');
+ $this->load->model('tool/image');
+ $this->load->model('extension/module/openstock');
+ $option_stocks = $this->model_setting_module_openstock->getVariants($product_id);
+
+ $quantity_data = array();
+
+ foreach($option_stocks as $option_stock) {
+ if (isset($option_stock['sku']) && $option_stock['sku'] == $var) {
+ $quantity_data[$amazon_sku] = $option_stock['stock'];
+ break;
+ }
+ }
+
+ if (!empty($quantity_data)) {
+ $logger->write('Updating quantities with data: ' . print_r($quantity_data, true));
+ $this->openbay->amazonus->updateQuantities($quantity_data);
+ } else {
+ $logger->write('No quantity data will be posted . ');
+ }
+ } else {
+ $this->openbay->amazonus->putStockUpdateBulk(array($product_id));
+ }
+
+ $json = json_encode('ok');
+ } else {
+ $json = json_encode('error');
+ }
+
+ $this->response->addHeader('Content-Type: application/json');
+ $this->response->setOutput($json);
+ }
+
+ public function deleteLink() {
+ if (isset($this->request->get['amazon_sku'])) {
+ $this->load->model('extension/openbay/amazonus');
+
+ $amazon_sku = $this->request->get['amazon_sku'];
+
+ $this->model_extension_openbay_amazonus->removeProductLink($amazon_sku);
+
+ $json = json_encode('ok');
+ } else {
+ $json = json_encode('error');
+ }
+
+ $this->response->addHeader('Content-Type: application/json');
+ $this->response->setOutput($json);
+ }
+
+ public function getLinks() {
+ $this->load->model('extension/openbay/amazonus');
+ $this->load->model('catalog/product');
+
+ $itemLinks = $this->model_extension_openbay_amazonus->getProductLinks();
+
+ $this->response->addHeader('Content-Type: application/json');
+ $this->response->setOutput(json_encode($itemLinks));
+ }
+
+ public function getUnlinked() {
+ $this->load->model('extension/openbay/amazonus');
+ $this->load->model('catalog/product');
+
+ $unlinkedProducts = $this->model_extension_openbay_amazonus->getUnlinkedProducts();
+
+ $this->response->addHeader('Content-Type: application/json');
+ $this->response->setOutput(json_encode($unlinkedProducts));
+ }
+
+ public function doBulkList() {
+ $this->load->language('extension/openbay/amazonus_listing');
+
+ if (empty($this->request->post['products'])) {
+ $json = array(
+ 'message' => $this->language->get('error_not_searched'),
+ );
+ } else {
+ $this->load->model('extension/openbay/amazonus_listing');
+
+ $delete_search_results = array();
+
+ $bulk_list_products = array();
+
+ foreach ($this->request->post['products'] as $product_id => $asin) {
+ $delete_search_results[] = $product_id;
+
+ if (!empty($asin) && in_array($product_id, $this->request->post['product_ids'])) {
+ $bulk_list_products[$product_id] = $asin;
+ }
+ }
+
+ $status = false;
+
+ if ($bulk_list_products) {
+ $data = array();
+
+ $data['products'] = $bulk_list_products;
+
+ if (!empty($this->request->post['start_selling'])) {
+ $data['start_selling'] = $this->request->post['start_selling'];
+ }
+
+ if (!empty($this->request->post['condition']) && !empty($this->request->post['condition_note'])) {
+ $data['condition'] = $this->request->post['condition'];
+ $data['condition_note'] = $this->request->post['condition_note'];
+ }
+
+ $status = $this->model_extension_openbay_amazonus_listing->doBulkListing($data);
+
+ if ($status) {
+ $message = $this->language->get('text_products_sent');
+
+ if ($delete_search_results) {
+ $this->model_extension_openbay_amazonus_listing->deleteSearchResults($delete_search_results);
+ }
+ } else {
+ $message = $this->language->get('error_sending_products');
+ }
+ } else {
+ $message = $this->language->get('error_no_products_selected');
+ }
+
+ $json = array(
+ 'status' => $status,
+ 'message' => $message,
+ );
+ }
+
+ $this->response->addHeader('Content-Type: application/json');
+ $this->response->setOutput(json_encode($json));
+ }
+
+ public function doBulkSearch() {
+ $this->load->model('catalog/product');
+ $this->load->model('extension/openbay/amazonus_listing');
+ $this->load->language('extension/openbay/amazonus_bulk_listing');
+
+ $json = array();
+ $search_data = array();
+
+ if (!empty($this->request->post['product_ids'])) {
+ foreach ($this->request->post['product_ids'] as $product_id) {
+ $product = $this->model_catalog_product->getProduct($product_id);
+
+ if (empty($product['sku'])) {
+ $json[$product_id] = array(
+ 'error' => $this->language->get('error_product_sku')
+ );
+ }
+
+ $key = '';
+
+ $id_types = array('isbn', 'upc', 'ean', 'jan', 'sku');
+
+ foreach ($id_types as $id_type) {
+ if (!empty($product[$id_type])) {
+ $key = $id_type;
+ break;
+ }
+ }
+
+ if (!$key) {
+ $json[$product_id] = array(
+ 'error' => $this->language->get('error_searchable_fields')
+ );
+ }
+
+ if (!isset($json[$product_id])) {
+ $search_data[$key][] = array(
+ 'product_id' => $product['product_id'],
+ 'value' => trim($product[$id_type]),
+ );
+
+ $json[$product_id] = array(
+ 'success' => $this->language->get('text_searching')
+ );
+ }
+ }
+ }
+
+ if ($search_data) {
+ $this->model_extension_openbay_amazonus_listing->doBulkSearch($search_data);
+ }
+
+ $this->response->addHeader('Content-Type: application/json');
+ $this->response->setOutput(json_encode($json));
+ }
+
+ public function bulkListProducts() {
+ $this->load->language('extension/openbay/amazonus_bulk_listing');
+
+ $data = $this->language->all();
+
+ $this->load->model('extension/openbay/amazonus');
+ $this->load->model('catalog/product');
+ $this->load->model('tool/image');
+
+ $this->document->setTitle($this->language->get('heading_title'));
+ $this->document->addScript('view/javascript/openbay/js/faq.js');
+
+ $data['breadcrumbs'] = array();
+ $data['breadcrumbs'][] = array(
+ 'href' => $this->url->link('common/dashboard', 'user_token=' . $this->session->data['user_token'], true),
+ 'text' => $this->language->get('text_home'),
+ );
+ $data['breadcrumbs'][] = array(
+ 'href' => $this->url->link('marketplace/openbay', 'user_token=' . $this->session->data['user_token'], true),
+ 'text' => $this->language->get('text_openbay'),
+ );
+ $data['breadcrumbs'][] = array(
+ 'href' => $this->url->link('extension/openbay/amazonus', 'user_token=' . $this->session->data['user_token'], true),
+ 'text' => $this->language->get('text_amazon'),
+ );
+
+ $data['breadcrumbs'][] = array(
+ 'href' => $this->url->link('extension/openbay/amazonus/bulkListProducts', 'user_token=' . $this->session->data['user_token'], true),
+ 'text' => $this->language->get('heading_title'),
+ );
+
+ $ping_info = simplexml_load_string($this->openbay->amazonus->call('ping/info'));
+
+ $bulk_listing_status = false;
+
+ if ($ping_info) {
+ $bulk_listing_status = ((string)$ping_info->BulkListing == 'true') ? true : false;
+ }
+
+ $data['bulk_listing_status'] = $bulk_listing_status;
+
+ $data['link_overview'] = $this->url->link('extension/openbay/amazonus', 'user_token=' . $this->session->data['user_token'], true);
+ $data['user_token'] = $this->session->data['user_token'];
+
+ if ($bulk_listing_status) {
+ $data['link_search'] = $this->url->link('extension/openbay/amazonus/doBulkSearch', 'user_token=' . $this->session->data['user_token'], true);
+
+ $data['default_condition'] = $this->config->get('openbay_amazonus_listing_default_condition');
+ $data['conditions'] = array(
+ 'New' => $this->language->get('text_new'),
+ 'UsedLikeNew' => $this->language->get('text_used_like_new'),
+ 'UsedVeryGood' => $this->language->get('text_used_very_good'),
+ 'UsedGood' => $this->language->get('text_used_good'),
+ 'UsedAcceptable' => $this->language->get('text_used_acceptable'),
+ 'CollectibleLikeNew' => $this->language->get('text_collectible_like_new'),
+ 'CollectibleVeryGood' => $this->language->get('text_collectible_very_good'),
+ 'CollectibleGood' => $this->language->get('text_collectible_good'),
+ 'CollectibleAcceptable' => $this->language->get('text_collectible_acceptable'),
+ 'Refurbished' => $this->language->get('text_refurbished'),
+ );
+
+ if (!empty($this->request->get['page'])) {
+ $page = $this->request->get['page'];
+ } else {
+ $page = 1;
+ }
+
+ $filter = array();
+
+ $filter['start'] = ($page - 1) * $this->config->get('config_limit_admin');
+ $filter['limit'] = $this->config->get('config_limit_admin');
+
+ $results = $this->model_extension_openbay_amazonus->getProductSearch($filter);
+ $product_total = $this->model_extension_openbay_amazonus->getProductSearchTotal($filter);
+
+ $data['products'] = array();
+
+ foreach ($results as $result) {
+ $product = $this->model_catalog_product->getProduct($result['product_id']);
+
+ if ($product['image'] && file_exists(DIR_IMAGE . $product['image'])) {
+ $image = $this->model_tool_image->resize($product['image'], 40, 40);
+ } else {
+ $image = $this->model_tool_image->resize('no_image.png', 40, 40);
+ }
+
+ if ($result['status'] == 'searching') {
+ $search_status = $this->language->get('text_searching');
+ } else if ($result['status'] == 'finished') {
+ $search_status = $this->language->get('text_finished');
+ } else {
+ $search_status = '-';
+ }
+
+ $href = $this->url->link('catalog/product/edit', 'user_token=' . $this->session->data['user_token'] . '&product_id=' . $product['product_id'], true);
+
+ $search_results = array();
+
+ if ($result['data']) {
+ foreach ($result['data'] as $search_result) {
+
+ $link = 'https://www.amazon.com/dp/' . $search_result['asin'] . '/';
+
+ $search_results[] = array(
+ 'title' => $search_result['title'],
+ 'asin' => $search_result['asin'],
+ 'href' => $link,
+ );
+ }
+ }
+
+ $data['products'][] = array(
+ 'product_id' => $product['product_id'],
+ 'href' => $href,
+ 'name' => $product['name'],
+ 'model' => $product['model'],
+ 'image' => $image,
+ 'matches' => $result['matches'],
+ 'search_status' => $search_status,
+ 'search_results' => $search_results,
+ );
+ }
+
+ $pagination = new Pagination();
+ $pagination->total = $product_total;
+ $pagination->page = $page;
+ $pagination->limit = $this->config->get('config_limit_admin');
+ $pagination->text = $this->language->get('text_pagination');
+ $pagination->url = $this->url->link('extension/openbay/amazonus/bulkListProducts', 'user_token=' . $this->session->data['user_token'] . '&page={page}', true);
+
+ $data['pagination'] = $pagination->render();
+ $data['results'] = sprintf($this->language->get('text_pagination'), ($product_total) ? (($page - 1) * $this->config->get('config_limit_admin')) + 1 : 0, ((($page - 1) * $this->config->get('config_limit_admin')) > ($product_total - $this->config->get('config_limit_admin'))) ? $product_total : ((($page - 1) * $this->config->get('config_limit_admin')) + $this->config->get('config_limit_admin')), $product_total, ceil($product_total / $this->config->get('config_limit_admin')));
+ }
+
+ $data['header'] = $this->load->controller('common/header');
+ $data['column_left'] = $this->load->controller('common/column_left');
+ $data['footer'] = $this->load->controller('common/footer');
+
+ $this->response->setOutput($this->load->view('extension/openbay/amazonus_bulk_listing', $data));
+ }
+
+ public function bulkLinking() {
+ $this->load->language('extension/openbay/amazonus_bulk_linking');
+
+ $data = $this->language->all();
+
+ $this->document->setTitle($this->language->get('heading_title'));
+ $this->document->addScript('view/javascript/openbay/js/faq.js');
+
+ $this->load->model('extension/openbay/amazonus');
+
+ $data['breadcrumbs'] = array();
+ $data['breadcrumbs'][] = array(
+ 'href' => $this->url->link('common/dashboard', 'user_token=' . $this->session->data['user_token'], true),
+ 'text' => $this->language->get('text_home'),
+ );
+ $data['breadcrumbs'][] = array(
+ 'href' => $this->url->link('marketplace/openbay', 'user_token=' . $this->session->data['user_token'], true),
+ 'text' => $this->language->get('text_openbay'),
+ );
+ $data['breadcrumbs'][] = array(
+ 'href' => $this->url->link('extension/openbay/amazonus', 'user_token=' . $this->session->data['user_token'], true),
+ 'text' => $this->language->get('text_amazon'),
+ );
+
+ $data['breadcrumbs'][] = array(
+ 'href' => $this->url->link('extension/openbay/amazonus/bulkLinking', 'user_token=' . $this->session->data['user_token'], true),
+ 'text' => $this->language->get('heading_title'),
+ );
+
+ $ping_info = simplexml_load_string($this->openbay->amazonus->call('ping/info'));
+
+ $bulk_linking_status = false;
+ if ($ping_info) {
+ $bulk_linking_status = ((string)$ping_info->BulkLinking == 'true') ? true : false;
+ }
+
+ $data['bulk_linking_status'] = $bulk_linking_status;
+
+ $total_linked = $this->model_extension_openbay_amazonus->getTotalUnlinkedItemsFromReport();
+
+ if (isset($this->request->get['linked_item_page'])){
+ $linked_item_page = (int)$this->request->get['linked_item_page'];
+ } else {
+ $linked_item_page = 1;
+ }
+
+ if (isset($this->request->get['linked_item_limit'])){
+ $linked_item_limit = (int)$this->request->get['linked_item_limit'];
+ } else {
+ $linked_item_limit = 25;
+ }
+
+ $data['cancel_report_link'] = '';
+
+ if (isset($this->request->get['cancel_report']) && $this->request->get['cancel_report'] == 1) {
+ $this->load->model('setting/setting');
+
+ $settings = $this->model_setting_setting->getSetting('openbay_amazonus');
+ $settings['openbay_amazonus_processing_listing_reports'] = '';
+
+ $this->model_setting_setting->editSetting('openbay_amazonus', $settings);
+
+ $this->response->redirect($this->url->link('extension/openbay/amazonus/bulklinking', 'user_token=' . $this->session->data['user_token'], true));
+ } else {
+ $data['cancel_report_link'] = $this->url->link('extension/openbay/amazonus/bulklinking', 'cancel_report=1&user_token=' . $this->session->data['user_token'], true);
+ }
+
+ $pagination = new Pagination();
+ $pagination->total = $total_linked;
+ $pagination->page = $linked_item_page;
+ $pagination->limit = $linked_item_limit;
+ $pagination->text = $this->language->get('text_pagination');
+ $pagination->url = $this->url->link('extension/openbay/amazonus/bulkLinking', 'user_token=' . $this->session->data['user_token'] . '&linked_item_page={page}', true);
+
+ $data['pagination'] = $pagination->render();
+ $data['results'] = sprintf($this->language->get('text_pagination'), ($total_linked) ? (($linked_item_page - 1) * $this->config->get('config_limit_admin')) + 1 : 0, ((($linked_item_page - 1) * $this->config->get('config_limit_admin')) > ($total_linked - $this->config->get('config_limit_admin'))) ? $total_linked : ((($linked_item_page - 1) * $this->config->get('config_limit_admin')) + $this->config->get('config_limit_admin')), $total_linked, ceil($total_linked / $this->config->get('config_limit_admin')));
+
+ $results = $this->model_extension_openbay_amazonus->getUnlinkedItemsFromReport($linked_item_limit, $linked_item_page);
+
+ $products = array();
+
+ foreach ($results as $result) {
+ $products[] = array(
+ 'asin' => $result['asin'],
+ 'href_amazon' => 'https://www.amazon.com/dp/' . $result['asin'] . '/',
+ 'amazon_sku' => $result['amazon_sku'],
+ 'amazon_quantity' => $result['amazon_quantity'],
+ 'amazon_price' => $result['amazon_price'],
+ 'name' => $result['name'],
+ 'sku' => $result['sku'],
+ 'quantity' => $result['quantity'],
+ 'combination' => $result['combination'],
+ 'product_id' => $result['product_id'],
+ 'var' => $result['sku'],
+ 'href_product' => $this->url->link('catalog/product/edit', 'user_token=' . $this->session->data['user_token'] . '&product_id=' . $result['product_id'], true),
+ );
+ }
+
+ $data['unlinked_products'] = $products;
+
+ $data['marketplace_processing'] = $this->config->get('openbay_amazonus_processing_listing_reports');
+ $data['cancel'] = $this->url->link('extension/openbay/amazonus', 'user_token=' . $this->session->data['user_token'], true);
+ $data['link_load_listings'] = $this->url->link('extension/openbay/amazonus/loadListingReport', 'user_token=' . $this->session->data['user_token'], true);
+ $data['user_token'] = $this->session->data['user_token'];
+
+ $data['header'] = $this->load->controller('common/header');
+ $data['column_left'] = $this->load->controller('common/column_left');
+ $data['footer'] = $this->load->controller('common/footer');
+
+ $this->response->setOutput($this->load->view('extension/openbay/amazonus_bulk_linking', $data));
+ }
+
+ public function loadListingReport() {
+ $this->load->model('extension/openbay/amazonus');
+ $this->load->model('setting/setting');
+ $this->load->language('extension/openbay/amazonus_bulk_linking');
+
+ $this->model_extension_openbay_amazonus->deleteListingReports();
+
+ $request_data = array('response_url' => HTTPS_CATALOG . 'index.php?route=extension/openbay/amazonus/listingreport');
+
+ $response = $this->openbay->amazonus->call('report/listing', $request_data);
+
+ $response = json_decode($response, 1);
+
+ $json = array();
+ $json['status'] = $response['status'];
+
+ if ($json['status']) {
+ $json['message'] = $this->language->get('text_report_requested');
+
+ $settings = $this->model_setting_setting->getSetting('openbay_amazonus');
+ $settings['openbay_amazonus_processing_listing_reports'] = true;
+
+ $this->model_setting_setting->editSetting('openbay_amazonus', $settings);
+ } else {
+ $json['message'] = $this->language->get('text_report_request_failed');
+ }
+
+ $this->response->addHeader('Content-Type: application/json');
+ $this->response->setOutput(json_encode($json));
+ }
+
+ public function doBulkLinking() {
+ $this->load->model('extension/openbay/amazonus');
+
+ $links = array();
+ $skus = array();
+
+ if (!empty($this->request->post['link'])) {
+ foreach ($this->request->post['link'] as $link) {
+ if (!empty($link['product_id'])) {
+ $links[] = $link;
+ $skus[] = $link['amazon_sku'];
+ }
+ }
+ }
+
+ if (!empty($links)) {
+ foreach ($links as $link) {
+ $this->model_extension_openbay_amazonus->linkProduct($link['amazon_sku'], $link['product_id'], $link['sku']);
+ }
+
+ $this->model_extension_openbay_amazonus->updateAmazonSkusQuantities($skus);
+ }
+
+ $this->response->addHeader('Content-Type: application/json');
+ $this->response->setOutput(json_encode(array('ok')));
+ }
+
+ public function doFullStockSync() {
+ /**
+ * This is used if you ever need to force a complete update of your stock levels to Amazon.
+ * It will get ALL products in your store then lookup any linked ones before sending to the API.
+ *
+ * This call can put serious load on your server if you have a lot of products.
+ * It will make a lot of database queries so ensure your php memory limit is set high enough.
+ */
+ set_time_limit(0);
+
+ $product_array = $this->db->query("SELECT `product_id` FROM `" . DB_PREFIX . "product`")->rows;
+
+ $bulk_array = array();
+
+ foreach ($product_array as $product) {
+ $bulk_array[] = $product['product_id'];
+ }
+
+ $this->openbay->amazonus->putStockUpdateBulk($bulk_array);
+ }
+}
diff --git a/public/admin/controller/extension/openbay/amazonus_listing.php b/public/admin/controller/extension/openbay/amazonus_listing.php
new file mode 100644
index 0000000..a5ea2da
--- /dev/null
+++ b/public/admin/controller/extension/openbay/amazonus_listing.php
@@ -0,0 +1,592 @@
+<?php
+class ControllerExtensionOpenbayAmazonusListing extends Controller{
+ public function create() {
+ $this->load->language('extension/openbay/amazonus_listing');
+ $this->load->model('extension/openbay/amazonus_listing');
+ $this->load->model('extension/openbay/amazonus');
+ $this->load->model('catalog/product');
+ $this->load->model('localisation/country');
+
+ $this->document->setTitle($this->language->get('heading_title'));
+ $this->document->addScript('view/javascript/openbay/js/faq.js');
+
+ if (isset($this->session->data['error'])) {
+ $data['error_warning'] = $this->session->data['error'];
+ unset($this->session->data['error']);
+ } else {
+ $data['error_warning'] = '';
+ }
+
+ $url = '';
+
+ if (isset($this->request->get['filter_name'])) {
+ $url .= '&filter_name=' . urlencode(html_entity_decode($this->request->get['filter_name'], ENT_QUOTES, 'UTF-8'));
+ }
+
+ if (isset($this->request->get['filter_model'])) {
+ $url .= '&filter_model=' . urlencode(html_entity_decode($this->request->get['filter_model'], ENT_QUOTES, 'UTF-8'));
+ }
+
+ if (isset($this->request->get['filter_price'])) {
+ $url .= '&filter_price=' . $this->request->get['filter_price'];
+ }
+
+ if (isset($this->request->get['filter_price_to'])) {
+ $url .= '&filter_price_to=' . $this->request->get['filter_price_to'];
+ }
+
+ if (isset($this->request->get['filter_quantity'])) {
+ $url .= '&filter_quantity=' . $this->request->get['filter_quantity'];
+ }
+
+ if (isset($this->request->get['filter_quantity_to'])) {
+ $url .= '&filter_quantity_to=' . $this->request->get['filter_quantity_to'];
+ }
+
+ if (isset($this->request->get['filter_status'])) {
+ $url .= '&filter_status=' . $this->request->get['filter_status'];
+ }
+
+ if (isset($this->request->get['filter_sku'])) {
+ $url .= '&filter_sku=' . $this->request->get['filter_sku'];
+ }
+
+ if (isset($this->request->get['filter_desc'])) {
+ $url .= '&filter_desc=' . $this->request->get['filter_desc'];
+ }
+
+ if (isset($this->request->get['filter_category'])) {
+ $url .= '&filter_category=' . $this->request->get['filter_category'];
+ }
+
+ if (isset($this->request->get['filter_manufacturer'])) {
+ $url .= '&filter_manufacturer=' . $this->request->get['filter_manufacturer'];
+ }
+
+ if (isset($this->request->get['sort'])) {
+ $url .= '&sort=' . $this->request->get['sort'];
+ }
+
+ if (isset($this->request->get['order'])) {
+ $url .= '&order=' . $this->request->get['order'];
+ }
+
+ if (isset($this->request->get['page'])) {
+ $url .= '&page=' . $this->request->get['page'];
+ }
+
+ if ($this->request->post) {
+ $result = $this->model_extension_openbay_amazonus_listing->simpleListing($this->request->post);
+
+ if ($result['status'] === 1) {
+ $this->session->data['success'] = $this->language->get('text_product_sent');
+ $this->response->redirect($this->url->link('marketplace/openbay/items', 'user_token=' . $this->session->data['user_token'] . $url, true));
+ } else {
+ $this->session->data['error'] = sprintf($this->language->get('text_product_not_sent'), $result['message']);
+ $this->response->redirect($this->url->link('extension/openbay/amazonus_listing/create', 'user_token=' . $this->session->data['user_token'] . '&product_id=' . $this->request->post['product_id'] . $url, true));
+ }
+ }
+
+ if (isset($this->request->get['product_id'])) {
+ $product_info = $this->model_catalog_product->getProduct($this->request->get['product_id']);
+
+ if (empty($product_info)) {
+ $this->response->redirect($this->url->link('marketplace/openbay/items', 'user_token=' . $this->session->data['user_token'] . $url, true));
+ }
+
+ $listing_status = $this->model_extension_openbay_amazonus->getProductStatus($this->request->get['product_id']);
+
+ if ($listing_status === 'processing' || $listing_status === 'ok') {
+ $this->response->redirect($this->url->link('extension/openbay/amazonus_listing/edit', 'user_token=' . $this->session->data['user_token'] . '&product_id=' . $this->request->get['product_id'] . $url, true));
+ } else if ($listing_status === 'error_advanced' || $listing_status === 'saved' || $listing_status === 'error_few') {
+ $this->response->redirect($this->url->link('extension/openbay/amazonus_product', 'user_token=' . $this->session->data['user_token'] . '&product_id=' . $this->request->get['product_id'] . $url, true));
+ }
+ } else {
+ $this->response->redirect($this->url->link('marketplace/openbay/items', 'user_token=' . $this->session->data['user_token'] . $url, true));
+ }
+
+ $data['url_return'] = $this->url->link('marketplace/openbay/items', 'user_token=' . $this->session->data['user_token'] . $url, true);
+ $data['url_search'] = $this->url->link('extension/openbay/amazonus_listing/search', 'user_token=' . $this->session->data['user_token'], true);
+ $data['url_advanced'] = $this->url->link('extension/openbay/amazonus_product', 'user_token=' . $this->session->data['user_token'] . '&product_id=' . $this->request->get['product_id'] . $url, true);
+
+ $data['button_search'] = $this->language->get('button_search');
+ $data['button_new'] = $this->language->get('button_new');
+ $data['button_cancel'] = $this->language->get('button_cancel');
+ $data['button_amazon_price'] = $this->language->get('button_amazon_price');
+ $data['button_list'] = $this->language->get('button_list');
+ $data['heading_title'] = $this->language->get('heading_title');
+ $data['text_not_in_catalog'] = $this->language->get('text_not_in_catalog');
+ $data['text_no_results'] = $this->language->get('text_no_results');
+ $data['button_view_on_amazon'] = $this->language->get('button_view_on_amazon');
+ $data['text_list'] = $this->language->get('text_list');
+ $data['text_placeholder_search'] = $this->language->get('text_placeholder_search');
+ $data['text_placeholder_condition'] = $this->language->get('text_placeholder_condition');
+ $data['column_image'] = $this->language->get('column_image');
+ $data['column_asin'] = $this->language->get('column_asin');
+ $data['column_name'] = $this->language->get('column_name');
+ $data['column_price'] = $this->language->get('column_price');
+ $data['column_action'] = $this->language->get('column_action');
+ $data['entry_sku'] = $this->language->get('entry_sku');
+ $data['entry_condition'] = $this->language->get('entry_condition');
+ $data['entry_condition_note'] = $this->language->get('entry_condition_note');
+ $data['entry_price'] = $this->language->get('entry_price');
+ $data['entry_sale_price'] = $this->language->get('entry_sale_price');
+ $data['entry_sale_date'] = $this->language->get('entry_sale_date');
+ $data['entry_quantity'] = $this->language->get('entry_quantity');
+ $data['entry_start_selling'] = $this->language->get('entry_start_selling');
+ $data['entry_restock_date'] = $this->language->get('entry_restock_date');
+ $data['entry_from'] = $this->language->get('entry_from');
+ $data['entry_to'] = $this->language->get('entry_to');
+ $data['help_restock_date'] = $this->language->get('help_restock_date');
+ $data['help_sku'] = $this->language->get('help_sku');
+ $data['help_sale_price'] = $this->language->get('help_sale_price');
+ $data['tab_required'] = $this->language->get('tab_required');
+ $data['tab_additional'] = $this->language->get('tab_additional');
+ $data['error_price'] = $this->language->get('error_price');
+ $data['error_sku'] = $this->language->get('error_sku');
+ $data['error_stock'] = $this->language->get('error_stock');
+
+ $data['form_action'] = $this->url->link('extension/openbay/amazonus_listing/create', 'user_token=' . $this->session->data['user_token'], true);
+
+ $data['sku'] = trim($product_info['sku']);
+
+ if ($this->config->get('openbay_amazonus_listing_tax_added')) {
+ $data['price'] = $product_info['price'] * (1 + $this->config->get('openbay_amazonus_listing_tax_added') / 100);
+ } else {
+ $data['price'] = $product_info['price'];
+ }
+
+ $data['listing_errors'] = array();
+
+ if ($listing_status == 'error_quick') {
+ $data['listing_errors'] = $this->model_extension_openbay_amazonus->getProductErrors($product_info['product_id'], 3);
+ }
+
+ $data['price'] = number_format($data['price'], 2, '.', '');
+ $data['quantity'] = $product_info['quantity'];
+ $data['product_id'] = $product_info['product_id'];
+
+ $data['conditions'] = array(
+ 'New' => $this->language->get('text_new'),
+ 'UsedLikeNew' => $this->language->get('text_used_like_new'),
+ 'UsedVeryGood' => $this->language->get('text_used_very_good'),
+ 'UsedGood' => $this->language->get('text_used_good'),
+ 'UsedAcceptable' => $this->language->get('text_used_acceptable'),
+ 'CollectibleLikeNew' => $this->language->get('text_collectible_like_new'),
+ 'CollectibleVeryGood' => $this->language->get('text_collectible_very_good'),
+ 'CollectibleGood' => $this->language->get('text_collectible_good'),
+ 'CollectibleAcceptable' => $this->language->get('text_collectible_acceptable'),
+ 'Refurbished' => $this->language->get('text_refurbished'),
+ );
+
+ $data['default_condition'] = $this->config->get('openbay_amazonus_listing_default_condition');
+
+ $data['user_token'] = $this->session->data['user_token'];
+
+ $data['breadcrumbs'] = array();
+
+ $data['breadcrumbs'][] = array(
+ 'href' => $this->url->link('common/dashboard', 'user_token=' . $this->session->data['user_token'], true),
+ 'text' => $this->language->get('text_home'),
+ );
+
+ $data['breadcrumbs'][] = array(
+ 'href' => $this->url->link('marketplace/openbay', 'user_token=' . $this->session->data['user_token'], true),
+ 'text' => $this->language->get('text_openbay'),
+ );
+
+ $data['breadcrumbs'][] = array(
+ 'href' => $this->url->link('extension/openbay/amazonus', 'user_token=' . $this->session->data['user_token'], true),
+ 'text' => $this->language->get('text_amazon'),
+ );
+
+ $data['breadcrumbs'][] = array(
+ 'href' => $this->url->link('extension/openbay/amazonus_listing/create', 'user_token=' . $this->session->data['user_token'] . $url, true),
+ 'text' => $this->language->get('heading_title'),
+ );
+
+ $data['header'] = $this->load->controller('common/header');
+ $data['column_left'] = $this->load->controller('common/column_left');
+ $data['footer'] = $this->load->controller('common/footer');
+
+ $this->response->setOutput($this->load->view('extension/openbay/amazonus_listing', $data));
+ }
+
+ public function edit() {
+ $this->load->model('extension/openbay/amazonus_listing');
+ $this->load->model('extension/openbay/amazonus');
+ $this->load->language('extension/openbay/amazonus_listing');
+
+ $this->document->setTitle($this->language->get('text_edit_heading'));
+ $this->document->addScript('view/javascript/openbay/js/faq.js');
+
+ $url = '';
+
+ if (isset($this->request->get['filter_name'])) {
+ $url .= '&filter_name=' . urlencode(html_entity_decode($this->request->get['filter_name'], ENT_QUOTES, 'UTF-8'));
+ }
+
+ if (isset($this->request->get['filter_model'])) {
+ $url .= '&filter_model=' . urlencode(html_entity_decode($this->request->get['filter_model'], ENT_QUOTES, 'UTF-8'));
+ }
+
+ if (isset($this->request->get['filter_price'])) {
+ $url .= '&filter_price=' . $this->request->get['filter_price'];
+ }
+
+ if (isset($this->request->get['filter_price_to'])) {
+ $url .= '&filter_price_to=' . $this->request->get['filter_price_to'];
+ }
+
+ if (isset($this->request->get['filter_quantity'])) {
+ $url .= '&filter_quantity=' . $this->request->get['filter_quantity'];
+ }
+
+ if (isset($this->request->get['filter_quantity_to'])) {
+ $url .= '&filter_quantity_to=' . $this->request->get['filter_quantity_to'];
+ }
+
+ if (isset($this->request->get['filter_status'])) {
+ $url .= '&filter_status=' . $this->request->get['filter_status'];
+ }
+
+ if (isset($this->request->get['filter_sku'])) {
+ $url .= '&filter_sku=' . $this->request->get['filter_sku'];
+ }
+
+ if (isset($this->request->get['filter_desc'])) {
+ $url .= '&filter_desc=' . $this->request->get['filter_desc'];
+ }
+
+ if (isset($this->request->get['filter_category'])) {
+ $url .= '&filter_category=' . $this->request->get['filter_category'];
+ }
+
+ if (isset($this->request->get['filter_manufacturer'])) {
+ $url .= '&filter_manufacturer=' . $this->request->get['filter_manufacturer'];
+ }
+
+ if (isset($this->request->get['sort'])) {
+ $url .= '&sort=' . $this->request->get['sort'];
+ }
+
+ if (isset($this->request->get['order'])) {
+ $url .= '&order=' . $this->request->get['order'];
+ }
+
+ if (isset($this->request->get['page'])) {
+ $url .= '&page=' . $this->request->get['page'];
+ }
+
+ if (isset($this->request->get['product_id'])) {
+ $product_id = $this->request->get['product_id'];
+ } else {
+ $this->response->redirect($this->url->link('marketplace/openbay/items', 'user_token=' . $this->session->data['user_token'] . $url, true));
+ }
+
+ $data['breadcrumbs'] = array();
+
+ $data['breadcrumbs'][] = array(
+ 'href' => $this->url->link('common/dashboard', 'user_token=' . $this->session->data['user_token'], true),
+ 'text' => $this->language->get('text_home'),
+ );
+
+ $data['breadcrumbs'][] = array(
+ 'href' => $this->url->link('marketplace/openbay', 'user_token=' . $this->session->data['user_token'], true),
+ 'text' => $this->language->get('text_openbay'),
+ );
+
+ $data['breadcrumbs'][] = array(
+ 'href' => $this->url->link('extension/openbay/amazonus', 'user_token=' . $this->session->data['user_token'], true),
+ 'text' => $this->language->get('text_amazon'),
+ );
+
+ $data['breadcrumbs'][] = array(
+ 'href' => $this->url->link('extension/openbay/amazonus_listing/edit', 'user_token=' . $this->session->data['user_token'] . '&product_id=' . $product_id . $url, true),
+ 'text' => $this->language->get('text_edit_heading'),
+ );
+
+ $status = $this->model_extension_openbay_amazonus->getProductStatus($product_id);
+
+ if ($status === false) {
+ $this->response->redirect($this->url->link('extension/openbay/amazonus_listing/create', 'user_token=' . $this->session->data['user_token'] . '&product_id=' . $product_id . $url, true));
+ return;
+ }
+
+ $data['product_links'] = $this->model_extension_openbay_amazonus->getProductLinks($product_id);
+ $data['url_return'] = $this->url->link('marketplace/openbay/items', 'user_token=' . $this->session->data['user_token'] . $url, true);
+ if ($status == 'ok' || $status == 'linked') {
+ $data['url_create_new'] = $this->url->link('extension/openbay/amazonus_listing/createNew', 'user_token=' . $this->session->data['user_token'] . '&product_id=' . $product_id . $url, true);
+ $data['url_delete_links'] = $this->url->link('extension/openbay/amazonus_listing/deleteLinks', 'user_token=' . $this->session->data['user_token'] . '&product_id=' . $product_id . $url, true);
+ }
+
+ if ($status == 'saved') {
+ $data['has_saved_listings'] = true;
+ } else {
+ $data['has_saved_listings'] = false;
+ }
+
+ $data['url_saved_listings'] = $this->url->link('extension/openbay/amazonus/savedListings', 'user_token=' . $this->session->data['user_token'] . '&product_id=' . $product_id, true);
+
+ $data['user_token'] = $this->session->data['user_token'];
+
+ $data['text_edit_heading'] = $this->language->get('text_edit_heading');
+ $data['text_product_links'] = $this->language->get('text_product_links');
+ $data['text_has_saved_listings'] = $this->language->get('text_has_saved_listings');
+ $data['button_create_new_listing'] = $this->language->get('button_create_new_listing');
+ $data['button_remove_links'] = $this->language->get('button_remove_links');
+ $data['button_cancel'] = $this->language->get('button_cancel');
+ $data['button_saved_listings'] = $this->language->get('button_saved_listings');
+ $data['column_name'] = $this->language->get('column_name');
+ $data['column_model'] = $this->language->get('column_model');
+ $data['column_combination'] = $this->language->get('column_combination');
+ $data['column_sku'] = $this->language->get('column_sku');
+ $data['column_amazon_sku'] = $this->language->get('column_amazon_sku');
+ $data['column_sku_variant'] = $this->language->get('column_sku_variant');
+
+ $data['header'] = $this->load->controller('common/header');
+ $data['column_left'] = $this->load->controller('common/column_left');
+ $data['footer'] = $this->load->controller('common/footer');
+
+ $this->response->setOutput($this->load->view('extension/openbay/amazonus_listing_edit', $data));
+ }
+
+ public function createNew() {
+ $url = '';
+
+ if (isset($this->request->get['filter_name'])) {
+ $url .= '&filter_name=' . urlencode(html_entity_decode($this->request->get['filter_name'], ENT_QUOTES, 'UTF-8'));
+ }
+
+ if (isset($this->request->get['filter_model'])) {
+ $url .= '&filter_model=' . urlencode(html_entity_decode($this->request->get['filter_model'], ENT_QUOTES, 'UTF-8'));
+ }
+
+ if (isset($this->request->get['filter_price'])) {
+ $url .= '&filter_price=' . $this->request->get['filter_price'];
+ }
+
+ if (isset($this->request->get['filter_price_to'])) {
+ $url .= '&filter_price_to=' . $this->request->get['filter_price_to'];
+ }
+
+ if (isset($this->request->get['filter_quantity'])) {
+ $url .= '&filter_quantity=' . $this->request->get['filter_quantity'];
+ }
+
+ if (isset($this->request->get['filter_quantity_to'])) {
+ $url .= '&filter_quantity_to=' . $this->request->get['filter_quantity_to'];
+ }
+
+ if (isset($this->request->get['filter_status'])) {
+ $url .= '&filter_status=' . $this->request->get['filter_status'];
+ }
+
+ if (isset($this->request->get['filter_sku'])) {
+ $url .= '&filter_sku=' . $this->request->get['filter_sku'];
+ }
+
+ if (isset($this->request->get['filter_desc'])) {
+ $url .= '&filter_desc=' . $this->request->get['filter_desc'];
+ }
+
+ if (isset($this->request->get['filter_category'])) {
+ $url .= '&filter_category=' . $this->request->get['filter_category'];
+ }
+
+ if (isset($this->request->get['filter_manufacturer'])) {
+ $url .= '&filter_manufacturer=' . $this->request->get['filter_manufacturer'];
+ }
+
+ if (isset($this->request->get['sort'])) {
+ $url .= '&sort=' . $this->request->get['sort'];
+ }
+
+ if (isset($this->request->get['order'])) {
+ $url .= '&order=' . $this->request->get['order'];
+ }
+
+ if (isset($this->request->get['page'])) {
+ $url .= '&page=' . $this->request->get['page'];
+ }
+
+ if (isset($this->request->get['product_id'])) {
+ $product_id = $this->request->get['product_id'];
+ } else {
+ $this->response->redirect($this->url->link('marketplace/openbay/items', 'user_token=' . $this->session->data['user_token'] . $url, true));
+ }
+ $this->load->model('extension/openbay/amazonus');
+ $this->model_extension_openbay_amazonus->deleteProduct($product_id);
+ $this->response->redirect($this->url->link('extension/openbay/amazonus_listing/create', 'user_token=' . $this->session->data['user_token'] . '&product_id=' . $product_id . $url, true));
+ }
+
+ public function deleteLinks() {
+ $this->load->language('extension/openbay/amazonus_listing');
+ $url = '';
+
+ if (isset($this->request->get['filter_name'])) {
+ $url .= '&filter_name=' . urlencode(html_entity_decode($this->request->get['filter_name'], ENT_QUOTES, 'UTF-8'));
+ }
+
+ if (isset($this->request->get['filter_model'])) {
+ $url .= '&filter_model=' . urlencode(html_entity_decode($this->request->get['filter_model'], ENT_QUOTES, 'UTF-8'));
+ }
+
+ if (isset($this->request->get['filter_price'])) {
+ $url .= '&filter_price=' . $this->request->get['filter_price'];
+ }
+
+ if (isset($this->request->get['filter_price_to'])) {
+ $url .= '&filter_price_to=' . $this->request->get['filter_price_to'];
+ }
+
+ if (isset($this->request->get['filter_quantity'])) {
+ $url .= '&filter_quantity=' . $this->request->get['filter_quantity'];
+ }
+
+ if (isset($this->request->get['filter_quantity_to'])) {
+ $url .= '&filter_quantity_to=' . $this->request->get['filter_quantity_to'];
+ }
+
+ if (isset($this->request->get['filter_status'])) {
+ $url .= '&filter_status=' . $this->request->get['filter_status'];
+ }
+
+ if (isset($this->request->get['filter_sku'])) {
+ $url .= '&filter_sku=' . $this->request->get['filter_sku'];
+ }
+
+ if (isset($this->request->get['filter_desc'])) {
+ $url .= '&filter_desc=' . $this->request->get['filter_desc'];
+ }
+
+ if (isset($this->request->get['filter_category'])) {
+ $url .= '&filter_category=' . $this->request->get['filter_category'];
+ }
+
+ if (isset($this->request->get['filter_manufacturer'])) {
+ $url .= '&filter_manufacturer=' . $this->request->get['filter_manufacturer'];
+ }
+
+ if (isset($this->request->get['sort'])) {
+ $url .= '&sort=' . $this->request->get['sort'];
+ }
+
+ if (isset($this->request->get['order'])) {
+ $url .= '&order=' . $this->request->get['order'];
+ }
+
+ if (isset($this->request->get['page'])) {
+ $url .= '&page=' . $this->request->get['page'];
+ }
+
+ if (isset($this->request->get['product_id'])) {
+ $product_id = $this->request->get['product_id'];
+ } else {
+ $this->response->redirect($this->url->link('marketplace/openbay/items', 'user_token=' . $this->session->data['user_token'] . $url, true));
+ }
+
+ $this->load->model('extension/openbay/amazonus');
+
+ $links = $this->model_extension_openbay_amazonus->getProductLinks($product_id);
+ foreach ($links as $link) {
+ $this->model_extension_openbay_amazonus->removeProductLink($link['amazonus_sku']);
+ }
+
+ $this->model_extension_openbay_amazonus->deleteProduct($product_id);
+ $this->session->data['success'] = $this->language->get('text_links_removed');
+
+ $this->response->redirect($this->url->link('marketplace/openbay/items', 'user_token=' . $this->session->data['user_token'] . $url, true));
+ }
+
+ public function search() {
+ $this->load->model('extension/openbay/amazonus_listing');
+ $this->load->language('extension/openbay/amazonus_listing');
+
+ $error = '';
+
+ if (empty($this->request->post['search_string'])) {
+ $error = $this->language->get('error_text_missing');
+ }
+
+ if ($error) {
+ $response = array(
+ 'data' => '',
+ 'error' => $error,
+ );
+ } else {
+ $response = array(
+ 'data' => $this->model_extension_openbay_amazonus_listing->search($this->request->post['search_string']),
+ 'error' => '',
+ );
+ }
+
+ $this->response->addHeader('Content-Type: application/json');
+ $this->response->setOutput(json_encode($response));
+ }
+
+ public function bestPrice() {
+ $this->load->model('extension/openbay/amazonus_listing');
+ $this->load->language('extension/openbay/amazonus_listing');
+
+ $error = '';
+
+ if (empty($this->request->post['asin'])) {
+ $error = $this->language->get('error_missing_asin');
+ }
+
+ if (empty($this->request->post['condition'])) {
+ $error = $this->language->get('error_condition_missing');
+ }
+
+ if ($error) {
+ $response = array(
+ 'data' => '',
+ 'error' => $error,
+ );
+ } else {
+ $best_price = $this->model_extension_openbay_amazonus_listing->getBestPrice($this->request->post['asin'], $this->request->post['condition']);
+
+ if ($best_price) {
+ $response = array(
+ 'data' => $best_price,
+ 'error' => '',
+ );
+ } else {
+ $response = array(
+ 'data' => '',
+ 'error' => $this->language->get('error_amazonus_price'),
+ );
+ }
+ }
+
+ $this->response->addHeader('Content-Type: application/json');
+ $this->response->setOutput(json_encode($response));
+ }
+
+ public function getProductByAsin() {
+ $this->load->model('extension/openbay/amazonus_listing');
+
+ $data = $this->model_extension_openbay_amazonus_listing->getProductByAsin($this->request->post['asin']);
+
+ $response = array(
+ 'title' => (string)$data['ItemAttributes']['Title'],
+ 'img' => (!isset($data['ItemAttributes']['SmallImage']['URL']) ? '' : $data['ItemAttributes']['SmallImage']['URL'])
+ );
+
+ $this->response->addHeader('Content-Type: application/json');
+ $this->response->setOutput(json_encode($response));
+ }
+
+ public function getBrowseNodes() {
+ $this->load->model('extension/openbay/amazonus_listing');
+
+ $data = array(
+ 'node' => (isset($this->request->post['node']) ? $this->request->post['node'] : ''),
+ );
+
+ $response = $this->model_extension_openbay_amazonus_listing->getBrowseNodes($data);
+
+ $this->response->setOutput($response);
+ }
+}
diff --git a/public/admin/controller/extension/openbay/amazonus_product.php b/public/admin/controller/extension/openbay/amazonus_product.php
new file mode 100644
index 0000000..ab4f488
--- /dev/null
+++ b/public/admin/controller/extension/openbay/amazonus_product.php
@@ -0,0 +1,559 @@
+<?php
+class ControllerExtensionOpenbayAmazonusProduct extends Controller{
+ public function index() {
+ $this->load->language('catalog/product');
+ $this->load->language('extension/openbay/amazonus_listing');
+
+ $data = $this->language->all();
+
+ $this->load->model('extension/openbay/amazonus');
+ $this->load->model('catalog/product');
+ $this->load->model('tool/image');
+
+ $this->document->addScript('view/javascript/openbay/js/openbay.js');
+ $this->document->setTitle($this->language->get('heading_title'));
+
+ $data['breadcrumbs'] = array();
+
+ $data['breadcrumbs'][] = array(
+ 'href' => $this->url->link('common/dashboard', 'user_token=' . $this->session->data['user_token'], true),
+ 'text' => $this->language->get('text_home'),
+ );
+
+ $data['breadcrumbs'][] = array(
+ 'href' => $this->url->link('marketplace/openbay', 'user_token=' . $this->session->data['user_token'], true),
+ 'text' => $this->language->get('text_openbay'),
+ );
+
+ $data['breadcrumbs'][] = array(
+ 'href' => $this->url->link('extension/openbay/amazonus', 'user_token=' . $this->session->data['user_token'], true),
+ 'text' => $this->language->get('text_amazon'),
+ );
+
+ $data['breadcrumbs'][] = array(
+ 'href' => $this->url->link('extension/openbay/amazonus_listing/create', 'user_token=' . $this->session->data['user_token'], true),
+ 'text' => $this->language->get('heading_title'),
+ );
+
+ $data['breadcrumbs'][] = array(
+ 'href' => $this->url->link('extension/openbay/amazonus_product', 'user_token=' . $this->session->data['user_token'], true),
+ 'text' => $this->language->get('text_title_advanced'),
+ );
+
+ $url = '';
+
+ if (isset($this->request->get['filter_name'])) {
+ $url .= '&filter_name=' . urlencode(html_entity_decode($this->request->get['filter_name'], ENT_QUOTES, 'UTF-8'));
+ }
+
+ if (isset($this->request->get['filter_model'])) {
+ $url .= '&filter_model=' . urlencode(html_entity_decode($this->request->get['filter_model'], ENT_QUOTES, 'UTF-8'));
+ }
+
+ if (isset($this->request->get['filter_price'])) {
+ $url .= '&filter_price=' . $this->request->get['filter_price'];
+ }
+
+ if (isset($this->request->get['filter_price_to'])) {
+ $url .= '&filter_price_to=' . $this->request->get['filter_price_to'];
+ }
+
+ if (isset($this->request->get['filter_quantity'])) {
+ $url .= '&filter_quantity=' . $this->request->get['filter_quantity'];
+ }
+
+ if (isset($this->request->get['filter_quantity_to'])) {
+ $url .= '&filter_quantity_to=' . $this->request->get['filter_quantity_to'];
+ }
+
+ if (isset($this->request->get['filter_status'])) {
+ $url .= '&filter_status=' . $this->request->get['filter_status'];
+ }
+
+ if (isset($this->request->get['filter_sku'])) {
+ $url .= '&filter_sku=' . $this->request->get['filter_sku'];
+ }
+
+ if (isset($this->request->get['filter_desc'])) {
+ $url .= '&filter_desc=' . $this->request->get['filter_desc'];
+ }
+
+ if (isset($this->request->get['filter_category'])) {
+ $url .= '&filter_category=' . $this->request->get['filter_category'];
+ }
+
+ if (isset($this->request->get['filter_manufacturer'])) {
+ $url .= '&filter_manufacturer=' . $this->request->get['filter_manufacturer'];
+ }
+
+ if (isset($this->request->get['sort'])) {
+ $url .= '&sort=' . $this->request->get['sort'];
+ }
+
+ if (isset($this->request->get['order'])) {
+ $url .= '&order=' . $this->request->get['order'];
+ }
+
+ if (isset($this->request->get['page'])) {
+ $url .= '&page=' . $this->request->get['page'];
+ }
+
+ if (isset($this->request->get['product_id'])) {
+ $product_id = $this->request->get['product_id'];
+ } else {
+ die('No product id');
+ }
+
+ if (isset($this->request->get['sku'])) {
+ $variation = $this->request->get['sku'];
+ } else {
+ $variation = '';
+ }
+ $data['variation'] = $variation;
+ $data['errors'] = array();
+
+ if (($this->request->server['REQUEST_METHOD'] == 'POST') && $this->validateForm()) {
+ $data_array = $this->request->post;
+
+ $this->model_extension_openbay_amazonus->saveProduct($product_id, $data_array);
+
+ if ($data_array['upload_after'] === 'true') {
+ $upload_result = $this->uploadItems();
+ if ($upload_result['status'] == 'ok') {
+ $this->session->data['success'] = $this->language->get('text_uploaded');
+ $this->response->redirect($this->url->link('marketplace/openbay/items', 'user_token=' . $this->session->data['user_token'] . $url, true));
+ } else {
+ $data['errors'][] = Array('message' => $upload_result['error_message']);
+ }
+ } else {
+ $this->session->data['success'] = $this->language->get('text_saved_local');
+ $this->response->redirect($this->url->link('extension/openbay/amazonus_product', 'user_token=' . $this->session->data['user_token'] . '&product_id=' . $product_id . $url, true));
+ }
+ }
+
+ if (isset($this->session->data['success'])) {
+ $data['success'] = $this->session->data['success'];
+ unset($this->session->data['success']);
+ } else {
+ $data['success'] = '';
+ }
+
+ $saved_listing_data = $this->model_extension_openbay_amazonus->getProduct($product_id, $variation);
+ if (empty($saved_listing_data)) {
+ $listing_saved = false;
+ } else {
+ $listing_saved = true;
+ }
+
+ $errors = $this->model_extension_openbay_amazonus->getProductErrors($product_id);
+ foreach($errors as $error) {
+ $error['message'] = 'Error for SKU: "' . $error['sku'] . '" - ' . $this->formatUrlsInText($error['message']);
+ $data['errors'][] = $error;
+ }
+ if (!empty($errors)) {
+ $data['has_listing_errors'] = true;
+ } else {
+ $data['has_listing_errors'] = false;
+ }
+
+ $product_info = $this->model_catalog_product->getProduct($product_id);
+ $data['listing_name'] = $product_info['name'] . " : " . $product_info['model'];
+ $data['listing_sku'] = $product_info['sku'];
+ $data['listing_url'] = $this->url->link('catalog/product/edit', 'user_token=' . $this->session->data['user_token'] . '&product_id=' . $product_id . $url, true);
+
+ if ($listing_saved) {
+ $data['edit_product_category'] = $saved_listing_data['category'];
+ } else {
+ $data['edit_product_category'] = '';
+ }
+
+ $data['amazonus_categories'] = array();
+
+ $amazonus_templates = $this->openbay->amazonus->getCategoryTemplates();
+
+ foreach($amazonus_templates as $template) {
+ $template = (array)$template;
+ $category_data = array(
+ 'friendly_name' => $template['friendly_name'],
+ 'name' => $template['name'],
+ 'template' => $template['xml']
+ );
+ $data['amazonus_categories'][] = $category_data;
+ }
+
+ if ($listing_saved) {
+ $data['template_parser_url'] = html_entity_decode($this->url->link('extension/openbay/amazonus_product/parseTemplateAjax&edit_id=' . $product_id, 'user_token=' . $this->session->data['user_token'], true));
+ } else {
+ $data['template_parser_url'] = html_entity_decode($this->url->link('extension/openbay/amazonus_product/parseTemplateAjax&product_id=' . $product_id, 'user_token=' . $this->session->data['user_token'], true));
+ }
+
+ $data['url_remove_errors'] = $this->url->link('extension/openbay/amazonus_product/removeErrors', 'user_token=' . $this->session->data['user_token'] . '&product_id=' . $product_id . $url, true);
+ $data['cancel_url'] = $this->url->link('marketplace/openbay/items', 'user_token=' . $this->session->data['user_token'] . $url, true);
+ $data['saved_listings_url'] = $this->url->link('extension/openbay/amazonus/savedListings', 'user_token=' . $this->session->data['user_token'], true);
+ $data['main_url'] = $this->url->link('extension/openbay/amazonus_product', 'user_token=' . $this->session->data['user_token'] . $url, true);
+ $data['user_token'] = $this->session->data['user_token'];
+ $data['no_image'] = $this->model_tool_image->resize('no_image.png', 100, 100);
+
+ if ($this->openbay->addonLoad('openstock')) {
+ $this->load->model('extension/module/openstock');
+ $data['options'] = $this->model_setting_module_openstock->getVariants($product_id);
+ } else {
+ $data['options'] = array();
+ }
+
+ $data['header'] = $this->load->controller('common/header');
+ $data['column_left'] = $this->load->controller('common/column_left');
+ $data['footer'] = $this->load->controller('common/footer');
+
+ $this->response->setOutput($this->load->view('extension/openbay/amazonus_listing_advanced', $data));
+ }
+
+ public function removeErrors() {
+ $url = '';
+
+ if (isset($this->request->get['filter_name'])) {
+ $url .= '&filter_name=' . urlencode(html_entity_decode($this->request->get['filter_name'], ENT_QUOTES, 'UTF-8'));
+ }
+
+ if (isset($this->request->get['filter_model'])) {
+ $url .= '&filter_model=' . urlencode(html_entity_decode($this->request->get['filter_model'], ENT_QUOTES, 'UTF-8'));
+ }
+
+ if (isset($this->request->get['filter_price'])) {
+ $url .= '&filter_price=' . $this->request->get['filter_price'];
+ }
+
+ if (isset($this->request->get['filter_price_to'])) {
+ $url .= '&filter_price_to=' . $this->request->get['filter_price_to'];
+ }
+
+ if (isset($this->request->get['filter_quantity'])) {
+ $url .= '&filter_quantity=' . $this->request->get['filter_quantity'];
+ }
+
+ if (isset($this->request->get['filter_quantity_to'])) {
+ $url .= '&filter_quantity_to=' . $this->request->get['filter_quantity_to'];
+ }
+
+ if (isset($this->request->get['filter_status'])) {
+ $url .= '&filter_status=' . $this->request->get['filter_status'];
+ }
+
+ if (isset($this->request->get['filter_sku'])) {
+ $url .= '&filter_sku=' . $this->request->get['filter_sku'];
+ }
+
+ if (isset($this->request->get['filter_desc'])) {
+ $url .= '&filter_desc=' . $this->request->get['filter_desc'];
+ }
+
+ if (isset($this->request->get['filter_category'])) {
+ $url .= '&filter_category=' . $this->request->get['filter_category'];
+ }
+
+ if (isset($this->request->get['filter_manufacturer'])) {
+ $url .= '&filter_manufacturer=' . $this->request->get['filter_manufacturer'];
+ }
+
+ if (isset($this->request->get['sort'])) {
+ $url .= '&sort=' . $this->request->get['sort'];
+ }
+
+ if (isset($this->request->get['order'])) {
+ $url .= '&order=' . $this->request->get['order'];
+ }
+
+ if (isset($this->request->get['page'])) {
+ $url .= '&page=' . $this->request->get['page'];
+ }
+
+ if (isset($this->request->get['product_id'])) {
+ $product_id = $this->request->get['product_id'];
+ } else {
+ $this->response->redirect($this->url->link('marketplace/openbay/items', 'user_token=' . $this->session->data['user_token'] . $url, true));
+ }
+
+ $this->load->model('extension/openbay/amazonus');
+ $this->model_extension_openbay_amazonus->removeAdvancedErrors($product_id);
+ $this->session->data['success'] = 'Errors removed';
+ $this->response->redirect($this->url->link('extension/openbay/amazonus_product', 'user_token=' . $this->session->data['user_token'] . '&product_id=' . $product_id . $url, true));
+ }
+
+ public function deleteSaved() {
+ if (!isset($this->request->get['product_id']) || !isset($this->request->get['var'])) {
+ return;
+ }
+
+ $this->load->model('extension/openbay/amazonus');
+ $this->model_extension_openbay_amazonus->deleteSaved($this->request->get['product_id'], $this->request->get['var']);
+ }
+
+ public function uploadSaved() {
+ ob_start();
+ $json = json_encode($this->uploadItems());
+ ob_clean();
+
+ $this->response->addHeader('Content-Type: application/json');
+ $this->response->setOutput($json);
+ }
+
+ private function uploadItems() {
+ $this->load->language('extension/openbay/amazonus_listing');
+ $this->load->model('extension/openbay/amazonus');
+ $logger = new Log('amazonus_product.log');
+
+ $logger->write('Uploading process started . ');
+
+ $saved_products = $this->model_extension_openbay_amazonus->getSavedProductsData();
+
+ if (empty($saved_products)) {
+ $logger->write('No saved listings found. Uploading canceled . ');
+ $result['status'] = 'error';
+ $result['error_message'] = 'No saved listings. Nothing to upload. Aborting . ';
+ return $result;
+ }
+
+ foreach($saved_products as $saved_product) {
+ $product_data_decoded = (array)json_decode($saved_product['data']);
+
+ $catalog = defined(HTTPS_CATALOG) ? HTTPS_CATALOG : HTTP_CATALOG;
+ $response_data = array("response_url" => $catalog . 'index.php?route=extension/openbay/amazonus/product');
+ $category_data = array('category' => (string)$saved_product['category']);
+ $fields_data = array('fields' => (array)$product_data_decoded['fields']);
+
+ $mp_array = array(); //Amazon US does not have marketplace selection
+ $marketplaces_data = array('marketplaces' => $mp_array);
+
+ $product_data = array_merge($category_data, $fields_data, $response_data, $marketplaces_data);
+ $insertion_response = $this->openbay->amazonus->insertProduct($product_data);
+
+ $logger->write("Uploading product with data:" . print_r($product_data, true) . "
+ Got response:" . print_r($insertion_response, true));
+
+ if (!isset($insertion_response['status']) || $insertion_response['status'] == 'error') {
+ $details = isset($insertion_response['info']) ? $insertion_response['info'] : 'Unknown';
+ $result['error_message'] = sprintf($this->language->get('error_upload_failed'), $saved_product['product_sku'], $details);
+ $result['status'] = 'error';
+ break;
+ }
+ $logger->write('Product upload success');
+ $this->model_extension_openbay_amazonus->setProductUploaded($saved_product['product_id'], $insertion_response['insertion_id'], $saved_product['var']);
+ }
+
+ if (!isset($result['status'])) {
+ $result['status'] = 'ok';
+ $logger->write('Uploading process completed successfully . ');
+ } else {
+ $logger->write('Uploading process failed with message: ' . $result['error_message']);
+ }
+ return $result;
+ }
+
+ public function parseTemplateAjax() {
+ $this->load->model('tool/image');
+ $log = new Log('amazonus_product.log');
+
+ $result = array();
+
+ if (isset($this->request->get['xml'])) {
+ $request = array('template' => $this->request->get['xml'], 'version' => 2);
+ $response = $this->openbay->amazonus->call("productv2/GetTemplateXml", $request);
+ if ($response) {
+ $template = $this->openbay->amazonus->parseCategoryTemplate($response);
+ if ($template) {
+ $variation = isset($this->request->get['sku']) ? $this->request->get['sku'] : '';
+
+ if (isset($this->request->get['product_id'])) {
+ $template['fields'] = $this->fillDefaultValues($this->request->get['product_id'], $template['fields'], $variation);
+ } elseif (isset($this->request->get['edit_id'])) {
+ $template['fields'] = $this->fillSavedValues($this->request->get['edit_id'], $template['fields'], $variation);
+ }
+
+ foreach($template['fields'] as $key => $field) {
+ if ($field['accepted']['type'] == 'image') {
+ if (empty($field['value'])) {
+ $template['fields'][$key]['thumb'] = '';
+ } else {
+ $template['fields'][$key]['thumb'] = $this->model_tool_image->resize(str_replace(HTTPS_CATALOG . 'image/', '', $field['value']), 100, 100);
+ }
+ }
+ }
+
+ $result = array(
+ "category" => $template['category'],
+ "fields" => $template['fields'],
+ "tabs" => $template['tabs']
+ );
+ } else {
+ $json_decoded = json_decode($response);
+ if ($json_decoded) {
+ $result = $json_decoded;
+ } else {
+ $result = array('status' => 'error');
+ $log->write("admin/openbay/amazon_product/parseTemplateAjax failed to parse template response: " . $response);
+ }
+ }
+ } else {
+ $log->write("admin/openbay/amazonus_product/parseTemplateAjax failed calling productv2/GetTemplateXml with params: " . print_r($request, true));
+ }
+ }
+
+ $this->response->addHeader('Content-Type: application/json');
+ $this->response->setOutput(json_encode($result));
+ }
+
+ private function fillDefaultValues($product_id, $fields_array, $var = '') {
+ $this->load->model('catalog/product');
+ $this->load->model('setting/setting');
+ $this->load->model('extension/openbay/amazonus');
+
+ $openbay_settings = $this->model_setting_setting->getSetting('openbay_amazonus');
+
+ $product_info = $this->model_catalog_product->getProduct($product_id);
+ $product_info['description'] = trim(utf8_encode(strip_tags(html_entity_decode($product_info['description']), "<br>")));
+ $product_info['image'] = HTTPS_CATALOG . 'image/' . $product_info['image'];
+
+ $tax_added = isset($openbay_settings['openbay_amazonus_listing_tax_added']) ? $openbay_settings['openbay_amazonus_listing_tax_added'] : 0;
+ $default_condition = isset($openbay_settings['openbay_amazonus_listing_default_condition']) ? $openbay_settings['openbay_amazonus_listing_default_condition'] : '';
+ $product_info['price'] = number_format($product_info['price'] + $tax_added / 100 * $product_info['price'], 2, '.', '');
+
+ /*Key must be lowecase */
+ $defaults = array(
+ 'sku' => $product_info['sku'],
+ 'title' => $product_info['name'],
+ 'quantity' => $product_info['quantity'],
+ 'standardprice' => $product_info['price'],
+ 'description' => $product_info['description'],
+ 'mainimage' => $product_info['image'],
+ 'currency' => $this->config->get('config_currency'),
+ 'shippingweight' => number_format($product_info['weight'], 2, '.', ''),
+ 'conditiontype' => $default_condition,
+ );
+
+ $this->load->model('localisation/weight_class');
+ $weight_class = $this->model_localisation_weight_class->getWeightClass($product_info['weight_class_id']);
+ if (!empty($weight_class)) {
+ $defaults['shippingweightunitofmeasure'] = $weight_class['unit'];
+ }
+
+ $this->load->model('catalog/manufacturer');
+ $manufacturer = $this->model_catalog_manufacturer->getManufacturer($product_info['manufacturer_id']);
+ if (!empty($manufacturer)) {
+ $defaults['manufacturer'] = $manufacturer['name'];
+ $defaults['brand'] = $manufacturer['name'];
+ }
+
+ $product_images = $this->model_catalog_product->getProductImages($product_id);
+ $image_index = 1;
+ foreach($product_images as $product_image) {
+ $defaults['pt' . $image_index] = HTTPS_CATALOG . 'image/' . $product_image['image'];
+ $image_index ++;
+ }
+
+ if (!empty($product_info['upc'])) {
+ $defaults['type'] = 'UPC';
+ $defaults['value'] = $product_info['upc'];
+ } else if (!empty($product_info['ean'])) {
+ $defaults['type'] = 'EAN';
+ $defaults['value'] = $product_info['ean'];
+ }
+
+ $meta_keywords = explode(',', $product_info['meta_keyword']);
+ foreach ($meta_keywords as $index => $meta_keyword) {
+ $defaults['searchterms' . $index] = trim($meta_keyword);
+ }
+
+ if ($var !== '' && $this->openbay->addonLoad('openstock')) {
+ $this->load->model('tool/image');
+ $this->load->model('extension/module/openstock');
+ $option_stocks = $this->model_setting_module_openstock->getVariants($product_id);
+
+ $option = '';
+ foreach ($option_stocks as $option_iterator) {
+ if ($option_iterator['sku'] === $var) {
+ $option = $option_iterator;
+ break;
+ }
+ }
+
+ if ($option != null) {
+ $defaults['sku'] = $option['sku'];
+ $defaults['quantity'] = $option['stock'];
+ $defaults['standardprice'] = number_format($option['price'] + $tax_added / 100 * $option['price'], 2, '.', '');
+ $defaults['shippingweight'] = number_format($option['weight'], 2, '.', '');
+
+ if (!empty($option['image'])) {
+ $defaults['mainimage'] = HTTPS_CATALOG . 'image/' . $option['image'];
+ }
+ }
+ }
+
+ if ($defaults['shippingweight'] <= 0) {
+ unset($defaults['shippingweight']);
+ unset($defaults['shippingweightunitofmeasure']);
+ }
+
+ $filled_array = array();
+
+ foreach($fields_array as $field) {
+
+ $value_array = array('value' => '');
+
+ if (isset($defaults[strtolower($field['name'])])) {
+ $value_array = array('value' => $defaults[strtolower($field['name'])]);
+ }
+
+ $filled_item = array_merge($field, $value_array);
+
+ $filled_array[] = $filled_item;
+ }
+ return $filled_array;
+ }
+
+ private function fillSavedValues($product_id, $fields_array, $var = '') {
+ $this->load->model('extension/openbay/amazonus');
+ $saved_listing = $this->model_extension_openbay_amazonus->getProduct($product_id, $var);
+
+ $decoded_data = (array)json_decode($saved_listing['data']);
+ $saved_fields = (array)$decoded_data['fields'];
+
+ $saved_fields['Quantity'] = $this->model_extension_openbay_amazonus->getProductQuantity($product_id, $var);
+
+ $filled_array = array();
+
+ foreach($fields_array as $field) {
+ $value_array = array('value' => '');
+
+ if (isset($saved_fields[$field['name']])) {
+ $value_array = array('value' => $saved_fields[$field['name']]);
+ }
+
+ $filled_item = array_merge($field, $value_array);
+
+ $filled_array[] = $filled_item;
+ }
+
+ return $filled_array;
+ }
+
+ public function resetPending() {
+ $this->db->query("UPDATE `" . DB_PREFIX . "amazonus_product` SET `status` = 'saved' WHERE `status` = 'uploaded'");
+ }
+
+ private function validateForm() {
+ return true;
+ }
+
+ private function formatUrlsInText($text) {
+ $regex_url = "/(http|https|ftp|ftps)\:\/\/[a-zA-Z0-9\-\.]+\.[a-zA-Z]{2,3}(\/\S*)?/";
+ preg_match_all($regex_url, $text, $matches);
+ $used_patterns = array();
+ foreach($matches[0] as $pattern) {
+ if (!array_key_exists($pattern, $used_patterns)) {
+ $used_patterns[$pattern]=true;
+ $text = str_replace($pattern, "<a target='_blank' href=" . $pattern . ">" . $pattern . "</a>", $text);
+ }
+ }
+ return $text;
+ }
+}
diff --git a/public/admin/controller/extension/openbay/ebay.php b/public/admin/controller/extension/openbay/ebay.php
new file mode 100644
index 0000000..b0687bf
--- /dev/null
+++ b/public/admin/controller/extension/openbay/ebay.php
@@ -0,0 +1,2421 @@
+<?php
+class ControllerExtensionOpenbayEbay extends Controller {
+ public function install() {
+ $this->load->language('extension/openbay/ebay');
+ $this->load->model('extension/openbay/ebay');
+ $this->load->model('setting/setting');
+ $this->load->model('setting/extension');
+ $this->load->model('user/user_group');
+
+ $this->model_user_user_group->addPermission($this->user->getGroupId(), 'access', 'extension/openbay/ebay_profile');
+ $this->model_user_user_group->addPermission($this->user->getGroupId(), 'modify', 'extension/openbay/ebay_profile');
+ $this->model_user_user_group->addPermission($this->user->getGroupId(), 'access', 'extension/openbay/ebay_template');
+ $this->model_user_user_group->addPermission($this->user->getGroupId(), 'modify', 'extension/openbay/ebay_template');
+
+ $this->model_extension_openbay_ebay->install();
+ }
+
+ public function uninstall() {
+ $this->load->model('extension/openbay/ebay');
+ $this->load->model('setting/setting');
+ $this->load->model('setting/extension');
+
+ $this->model_extension_openbay_ebay->uninstall();
+ $this->model_setting_extension->uninstall('openbay', $this->request->get['extension']);
+ $this->model_setting_setting->deleteSetting($this->request->get['extension']);
+ }
+
+ public function index() {
+ $this->load->language('extension/openbay/ebay');
+
+ $data = $this->language->all();
+
+ $this->document->setTitle($this->language->get('text_dashboard'));
+ $this->document->addScript('view/javascript/openbay/js/faq.js');
+
+ $data['breadcrumbs'] = array();
+
+ $data['breadcrumbs'][] = array(
+ 'href' => $this->url->link('common/dashboard', 'user_token=' . $this->session->data['user_token'], true),
+ 'text' => $this->language->get('text_home'),
+ );
+
+ $data['breadcrumbs'][] = array(
+ 'href' => $this->url->link('marketplace/openbay', 'user_token=' . $this->session->data['user_token'], true),
+ 'text' => $this->language->get('text_openbay'),
+ );
+
+ $data['breadcrumbs'][] = array(
+ 'href' => $this->url->link('extension/openbay/ebay', 'user_token=' . $this->session->data['user_token'], true),
+ 'text' => $this->language->get('text_dashboard'),
+ );
+
+ if (isset($this->session->data['success'])) {
+ $data['success'] = $this->session->data['success'];
+ unset($this->session->data['success']);
+ } else {
+ $data['success'] = '';
+ }
+
+ $data['validation'] = $this->openbay->ebay->validate();
+ $data['links_settings'] = $this->url->link('extension/openbay/ebay/settings', 'user_token=' . $this->session->data['user_token'], true);
+ $data['links_itemlink'] = $this->url->link('extension/openbay/ebay/viewItemLinks', 'user_token=' . $this->session->data['user_token'], true);
+ $data['links_subscribe'] = $this->url->link('extension/openbay/ebay/subscription', 'user_token=' . $this->session->data['user_token'], true);
+ $data['links_usage'] = $this->url->link('extension/openbay/ebay/viewUsage', 'user_token=' . $this->session->data['user_token'], true);
+ $data['links_itemimport'] = $this->url->link('extension/openbay/ebay/viewItemImport', 'user_token=' . $this->session->data['user_token'], true);
+ $data['links_orderimport'] = $this->url->link('extension/openbay/ebay/viewOrderImport', 'user_token=' . $this->session->data['user_token'], true);
+ $data['links_usage'] = $this->url->link('extension/openbay/ebay/viewUsage', 'user_token=' . $this->session->data['user_token'], true);
+ $data['links_sync'] = $this->url->link('extension/openbay/ebay/syncronise', 'user_token=' . $this->session->data['user_token'], true);
+ $data['links_linkmaintenance'] = $this->url->link('extension/openbay/ebay/viewItemLinkMaintenance', 'user_token=' . $this->session->data['user_token'], true);
+ $data['links_summary'] = $this->url->link('extension/openbay/ebay/summary', 'user_token=' . $this->session->data['user_token'], true);
+ $data['links_profile'] = $this->url->link('extension/openbay/ebay_profile', 'user_token=' . $this->session->data['user_token'], true);
+ $data['links_template'] = $this->url->link('extension/openbay/ebay_template/listAll', 'user_token=' . $this->session->data['user_token'], true);
+ $data['link_signup'] = 'https://account.openbaypro.com/ebay/apiRegister/?endpoint=2&utm_source=opencart_install&utm_medium=dashboard&utm_campaign=ebay';
+
+ $data['header'] = $this->load->controller('common/header');
+ $data['column_left'] = $this->load->controller('common/column_left');
+ $data['footer'] = $this->load->controller('common/footer');
+
+ $this->response->setOutput($this->load->view('extension/openbay/ebay', $data));
+ }
+
+ public function settings() {
+ $this->load->language('extension/openbay/ebay_settings');
+
+ $data = $this->language->all();
+
+ $this->load->model('setting/setting');
+ $this->load->model('extension/openbay/ebay');
+ $this->load->model('localisation/currency');
+ $this->load->model('localisation/order_status');
+
+ if (($this->request->server['REQUEST_METHOD'] == 'POST') && ($this->validate())) {
+ $this->model_setting_setting->editSetting('ebay', $this->request->post);
+ $this->session->data['success'] = $this->language->get('text_success');
+ $this->response->redirect($this->url->link('extension/openbay/ebay', 'user_token=' . $this->session->data['user_token'], true));
+ }
+
+ $this->document->setTitle($this->language->get('heading_title'));
+ $this->document->addScript('view/javascript/openbay/js/faq.js');
+ $data['breadcrumbs'] = array();
+
+ $data['breadcrumbs'][] = array(
+ 'href' => $this->url->link('common/dashboard', 'user_token=' . $this->session->data['user_token'], true),
+ 'text' => $this->language->get('text_home'),
+ );
+
+ $data['breadcrumbs'][] = array(
+ 'href' => $this->url->link('marketplace/openbay', 'user_token=' . $this->session->data['user_token'], true),
+ 'text' => $this->language->get('text_openbay'),
+ );
+
+ $data['breadcrumbs'][] = array(
+ 'href' => $this->url->link('extension/openbay/ebay', 'user_token=' . $this->session->data['user_token'], true),
+ 'text' => $this->language->get('text_ebay'),
+ );
+
+ $data['breadcrumbs'][] = array(
+ 'href' => $this->url->link('extension/openbay/ebay/settings', 'user_token=' . $this->session->data['user_token'], true),
+ 'text' => $this->language->get('heading_title'),
+ );
+
+ $data['action'] = $this->url->link('extension/openbay/ebay/settings', 'user_token=' . $this->session->data['user_token'], true);
+ $data['cancel'] = $this->url->link('extension/openbay/ebay', 'user_token=' . $this->session->data['user_token'], true);
+ $data['link_signup'] = 'https://account.openbaypro.com/ebay/apiRegister/?endpoint=2&utm_source=opencart_install&utm_medium=settings&utm_campaign=ebay';
+ $data['link_token_renew'] = 'https://account.openbaypro.com/ebay/apiRenew/?utm_source=opencart_install&utm_medium=settings&utm_campaign=ebaytoken';
+ $data['link_update'] = 'https://account.openbaypro.com/ebay/apiUpdate/?utm_source=opencart_install&utm_medium=settings&utm_campaign=ebayupdate';
+
+ if (isset($this->request->post['ebay_def_currency'])) {
+ $data['ebay_def_currency'] = $this->request->post['ebay_def_currency'];
+ } else {
+ $data['ebay_def_currency'] = $this->config->get('ebay_def_currency');
+ }
+ $data['currency_list'] = $this->model_localisation_currency->getCurrencies();
+
+ $data['user_token'] = $this->session->data['user_token'];
+
+ if (isset($this->error['warning'])) {
+ $data['error_warning'] = $this->error['warning'];
+ } else {
+ $data['error_warning'] = '';
+ }
+
+ if (isset($this->request->post['ebay_status'])) {
+ $data['ebay_status'] = $this->request->post['ebay_status'];
+ } else {
+ $data['ebay_status'] = $this->config->get('ebay_status');
+ }
+
+ if (isset($this->request->post['ebay_token'])) {
+ $data['ebay_token'] = trim($this->request->post['ebay_token']);
+ } else {
+ $data['ebay_token'] = trim($this->config->get('ebay_token'));
+ }
+
+ if (isset($this->request->post['ebay_secret'])) {
+ $data['ebay_secret'] = trim($this->request->post['ebay_secret']);
+ } else {
+ $data['ebay_secret'] = trim($this->config->get('ebay_secret'));
+ }
+
+ if (isset($this->request->post['ebay_encryption_key'])) {
+ $data['ebay_encryption_key'] = trim($this->request->post['ebay_encryption_key']);
+ } else {
+ $data['ebay_encryption_key'] = trim($this->config->get('ebay_encryption_key'));
+ }
+
+ if (isset($this->request->post['ebay_encryption_iv'])) {
+ $data['ebay_encryption_iv'] = trim($this->request->post['ebay_encryption_iv']);
+ } else {
+ $data['ebay_encryption_iv'] = trim($this->config->get('ebay_encryption_iv'));
+ }
+
+ if (isset($this->request->post['ebay_enditems'])) {
+ $data['ebay_enditems'] = $this->request->post['ebay_enditems'];
+ } else {
+ $data['ebay_enditems'] = $this->config->get('ebay_enditems');
+ }
+
+ if (isset($this->request->post['ebay_relistitems'])) {
+ $data['ebay_relistitems'] = $this->request->post['ebay_relistitems'];
+ } else {
+ $data['ebay_relistitems'] = $this->config->get('ebay_relistitems');
+ }
+
+ if (isset($this->request->post['ebay_disable_nostock'])) {
+ $data['ebay_disable_nostock'] = $this->request->post['ebay_disable_nostock'];
+ } else {
+ $data['ebay_disable_nostock'] = $this->config->get('ebay_disable_nostock');
+ }
+ if (isset($this->request->post['ebay_logging'])) {
+ $data['ebay_logging'] = $this->request->post['ebay_logging'];
+ } else {
+ $data['ebay_logging'] = $this->config->get('ebay_logging');
+ }
+
+ if (isset($this->request->post['ebay_created_hours'])) {
+ $data['ebay_created_hours'] = $this->request->post['ebay_created_hours'];
+ } else {
+ $data['ebay_created_hours'] = $this->config->get('ebay_created_hours');
+ }
+
+ if (isset($this->request->post['ebay_time_offset'])) {
+ $data['ebay_time_offset'] = $this->request->post['ebay_time_offset'];
+ } else {
+ $data['ebay_time_offset'] = $this->config->get('ebay_time_offset');
+ }
+
+ if (isset($this->request->post['ebay_update_notify'])) {
+ $data['ebay_update_notify'] = $this->request->post['ebay_update_notify'];
+ } else {
+ $data['ebay_update_notify'] = $this->config->get('ebay_update_notify');
+ }
+
+ if (isset($this->request->post['ebay_confirm_notify'])) {
+ $data['ebay_confirm_notify'] = $this->request->post['ebay_confirm_notify'];
+ } else {
+ $data['ebay_confirm_notify'] = $this->config->get('ebay_confirm_notify');
+ }
+
+ if (isset($this->request->post['ebay_confirmadmin_notify'])) {
+ $data['ebay_confirmadmin_notify'] = $this->request->post['ebay_confirmadmin_notify'];
+ } else {
+ $data['ebay_confirmadmin_notify'] = $this->config->get('ebay_confirmadmin_notify');
+ }
+
+ if (isset($this->request->post['ebay_itm_link'])) {
+ $data['ebay_itm_link'] = $this->request->post['ebay_itm_link'];
+ } else {
+ $data['ebay_itm_link'] = $this->config->get('ebay_itm_link');
+ }
+
+ if (isset($this->request->post['ebay_stock_allocate'])) {
+ $data['ebay_stock_allocate'] = $this->request->post['ebay_stock_allocate'];
+ } else {
+ $data['ebay_stock_allocate'] = $this->config->get('ebay_stock_allocate');
+ }
+
+ if (isset($this->request->post['ebay_create_date'])) {
+ $data['ebay_create_date'] = $this->request->post['ebay_create_date'];
+ } else {
+ $data['ebay_create_date'] = $this->config->get('ebay_create_date');
+ }
+
+ $data['durations'] = array(
+ 'Days_1' => $data['text_listing_1day'],
+ 'Days_3' => $data['text_listing_3day'],
+ 'Days_5' => $data['text_listing_5day'],
+ 'Days_7' => $data['text_listing_7day'],
+ 'Days_10' => $data['text_listing_10day'],
+ 'Days_30' => $data['text_listing_30day'],
+ 'GTC' => $data['text_listing_gtc']
+ );
+
+ if (isset($this->request->post['ebay_duration'])) {
+ $data['ebay_duration'] = $this->request->post['ebay_duration'];
+ } else {
+ $data['ebay_duration'] = $this->config->get('ebay_duration');
+ }
+
+ if (isset($this->request->post['ebay_measurement'])) {
+ $data['ebay_measurement'] = $this->request->post['ebay_measurement'];
+ } else {
+ $data['ebay_measurement'] = $this->config->get('ebay_measurement');
+ }
+
+ if (isset($this->request->post['ebay_default_addressformat'])) {
+ $data['ebay_default_addressformat'] = $this->request->post['ebay_default_addressformat'];
+ } else {
+ $data['ebay_default_addressformat'] = $this->config->get('ebay_default_addressformat');
+ }
+
+ $data['payment_options'] = $this->model_extension_openbay_ebay->getPaymentTypes();
+
+ if (isset($this->request->post['ebay_payment_types'])) {
+ $data['ebay_payment_types'] = $this->request->post['ebay_payment_types'];
+ } else {
+ $data['ebay_payment_types'] = $this->config->get('ebay_payment_types');
+ }
+
+ if (isset($this->request->post['ebay_payment_instruction'])) {
+ $data['ebay_payment_instruction'] = $this->request->post['ebay_payment_instruction'];
+ } else {
+ $data['ebay_payment_instruction'] = $this->config->get('ebay_payment_instruction');
+ }
+
+ if (isset($this->request->post['ebay_payment_paypal_address'])) {
+ $data['ebay_payment_paypal_address'] = $this->request->post['ebay_payment_paypal_address'];
+ } else {
+ $data['ebay_payment_paypal_address'] = $this->config->get('ebay_payment_paypal_address');
+ }
+
+ if (isset($this->request->post['ebay_payment_immediate'])) {
+ $data['ebay_payment_immediate'] = $this->request->post['ebay_payment_immediate'];
+ } else {
+ $data['ebay_payment_immediate'] = $this->config->get('ebay_payment_immediate');
+ }
+
+ if (isset($this->request->post['ebay_tax_listing'])) {
+ $data['ebay_tax_listing'] = $this->request->post['ebay_tax_listing'];
+ } else {
+ $data['ebay_tax_listing'] = $this->config->get('ebay_tax_listing');
+ }
+
+ if (isset($this->request->post['ebay_tax'])) {
+ $data['ebay_tax'] = $this->request->post['ebay_tax'];
+ } else {
+ $data['ebay_tax'] = $this->config->get('ebay_tax');
+ }
+
+ if (isset($this->request->post['ebay_import_unpaid'])) {
+ $data['ebay_import_unpaid'] = $this->request->post['ebay_import_unpaid'];
+ } else {
+ $data['ebay_import_unpaid'] = $this->config->get('ebay_import_unpaid');
+ }
+
+ if (isset($this->request->post['ebay_status_partial_refund_id'])) {
+ $data['ebay_status_partial_refund_id'] = $this->request->post['ebay_status_partial_refund_id'];
+ } else {
+ $data['ebay_status_partial_refund_id'] = $this->config->get('ebay_status_partial_refund_id');
+ }
+
+ if (isset($this->request->post['ebay_status_import_id'])) {
+ $data['ebay_status_import_id'] = $this->request->post['ebay_status_import_id'];
+ } else {
+ $data['ebay_status_import_id'] = $this->config->get('ebay_status_import_id');
+ }
+
+ if (isset($this->request->post['ebay_status_paid_id'])) {
+ $data['ebay_status_paid_id'] = $this->request->post['ebay_status_paid_id'];
+ } else {
+ $data['ebay_status_paid_id'] = $this->config->get('ebay_status_paid_id');
+ }
+
+ if (isset($this->request->post['ebay_status_shipped_id'])) {
+ $data['ebay_status_shipped_id'] = $this->request->post['ebay_status_shipped_id'];
+ } else {
+ $data['ebay_status_shipped_id'] = $this->config->get('ebay_status_shipped_id');
+ }
+
+ if (isset($this->request->post['ebay_status_cancelled_id'])) {
+ $data['ebay_status_cancelled_id'] = $this->request->post['ebay_status_cancelled_id'];
+ } else {
+ $data['ebay_status_cancelled_id'] = $this->config->get('ebay_status_cancelled_id');
+ }
+
+ if (isset($this->request->post['ebay_status_refunded_id'])) {
+ $data['ebay_status_refunded_id'] = $this->request->post['ebay_status_refunded_id'];
+ } else {
+ $data['ebay_status_refunded_id'] = $this->config->get('ebay_status_refunded_id');
+ }
+
+ $data['api_server'] = $this->openbay->ebay->getServer();
+ $data['order_statuses'] = $this->model_localisation_order_status->getOrderStatuses();
+ $data['measurement_types'] = $this->openbay->ebay->getSetting('measurement_types');
+
+ $data['header'] = $this->load->controller('common/header');
+ $data['column_left'] = $this->load->controller('common/column_left');
+ $data['footer'] = $this->load->controller('common/footer');
+
+ $this->response->setOutput($this->load->view('extension/openbay/ebay_settings', $data));
+ }
+
+ public function updateSettings() {
+ set_time_limit(0);
+
+ $json = $this->openbay->ebay->updateSettings();
+
+ $this->response->addHeader('Content-Type: application/json');
+ $this->response->setOutput(json_encode($json));
+ }
+
+ public function updateCategories() {
+ set_time_limit(0);
+
+ $json = $this->openbay->ebay->updateCategories();
+
+ $this->response->addHeader('Content-Type: application/json');
+ $this->response->setOutput(json_encode($json));
+ }
+
+ public function updateStore() {
+ set_time_limit(0);
+
+ $json = $this->openbay->ebay->updateStore();
+
+ $this->response->addHeader('Content-Type: application/json');
+ $this->response->setOutput(json_encode($json));
+ }
+
+ public function getCategories() {
+ $this->load->model('extension/openbay/ebay');
+
+ $json = $this->model_extension_openbay_ebay->getCategory($this->request->get['parent']);
+
+ $this->response->addHeader('Content-Type: application/json');
+ $this->response->setOutput(json_encode($json));
+ }
+
+ public function getSuggestedCategories() {
+ $this->load->model('extension/openbay/ebay');
+
+ $this->load->language('extension/openbay/ebay');
+
+ $json = $this->model_extension_openbay_ebay->getSuggestedCategories($this->request->get['qry']);
+
+ if (empty($json['data'])) {
+ $json['msg'] = $this->language->get('error_category_nosuggestions');
+ }
+
+ $this->response->addHeader('Content-Type: application/json');
+ $this->response->setOutput(json_encode($json));
+ }
+
+ public function getShippingService() {
+ $this->load->model('extension/openbay/ebay');
+
+ $json = $this->model_extension_openbay_ebay->getShippingService($this->request->get['loc'], $this->request->get['type']);
+
+ $this->response->addHeader('Content-Type: application/json');
+ $this->response->setOutput(json_encode($json));
+ }
+
+ public function getEbayCategorySpecifics() {
+ $this->load->model('extension/openbay/ebay');
+ $this->load->model('catalog/product');
+ $this->load->model('catalog/attribute');
+
+ $response = $this->model_extension_openbay_ebay->getEbayCategorySpecifics($this->request->get['category_id']);
+
+ $recommendation_data = array();
+
+ if (isset($response['data']['Recommendations']['NameRecommendation'])) {
+ if (isset($response['data']['Recommendations']['NameRecommendation']['Name'])) {
+ $recommendations = array($response['data']['Recommendations']['NameRecommendation']);
+ } else {
+ $recommendations = $response['data']['Recommendations']['NameRecommendation'];
+ }
+
+ foreach ($recommendations as $name_recommendation_key => $name_recommendation) {
+ $recommendation_data_option = array(
+ 'name' => $name_recommendation['Name'],
+ 'validation' =>
+ array(
+ 'max_values' => $name_recommendation['ValidationRules']['MaxValues'],
+ 'selection_mode' => $name_recommendation['ValidationRules']['SelectionMode'],
+ ),
+ 'unmatched_value' => '',
+ );
+
+ if (isset($name_recommendation['ValueRecommendation'])) {
+ if (!isset($name_recommendation['ValueRecommendation']['Value'])) {
+ foreach($name_recommendation['ValueRecommendation'] as $value_recommendation_key => $value_recommendation) {
+ $recommendation_data_option['options'][] = $value_recommendation['Value'];
+ }
+ }
+ }
+
+ $recommendation_data[] = $recommendation_data_option;
+ }
+
+ if (isset($this->request->get['product_id'])) {
+ $product_attributes = $this->model_catalog_product->getProductAttributes($this->request->get['product_id']);
+
+ foreach ($product_attributes as $product_attribute) {
+ $attribute_info = $this->model_catalog_attribute->getAttribute($product_attribute['attribute_id']);
+
+ if ($attribute_info) {
+ // search the ebay attribute results for a match
+ foreach($recommendation_data as $name_recommendation_key => $name_recommendation) {
+ if (strtolower($attribute_info['name']) == strtolower($name_recommendation['name'])) {
+ $preset_match_found = false;
+
+ if (isset($name_recommendation['options'])) {
+ foreach($name_recommendation['options'] as $value_recommendation_key => $value_recommendation) {
+ if (strtolower($value_recommendation) == strtolower($product_attribute['product_attribute_description'][$this->config->get('config_language_id')]['text'])) {
+ $preset_match_found = $value_recommendation_key;
+ }
+ }
+ }
+
+ if ($preset_match_found === false) {
+ if ($name_recommendation['validation']['selection_mode'] == 'FreeText') {
+ $recommendation_data[$name_recommendation_key]['unmatched_value'] = $product_attribute['product_attribute_description'][$this->config->get('config_language_id')]['text'];
+ }
+ } else {
+ $recommendation_data[$name_recommendation_key]['matched_value_key'] = $preset_match_found;
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+
+ $json = array(
+ 'data' => $recommendation_data,
+ 'msg' => $response['msg'],
+ 'error' => $response['error'],
+ );
+
+ $this->response->addHeader('Content-Type: application/json');
+ $this->response->setOutput(json_encode($json));
+ }
+
+ public function getCategoryFeatures() {
+ $this->load->model('extension/openbay/ebay');
+
+ $json = $this->model_extension_openbay_ebay->getCategoryFeatures($this->request->get['category']);
+
+ $this->response->addHeader('Content-Type: application/json');
+ $this->response->setOutput(json_encode($json));
+ }
+
+ public function searchEbayCatalog() {
+ $this->load->language('extension/openbay/ebay');
+ $this->load->model('extension/openbay/ebay_product');
+
+ $response = $this->model_extension_openbay_ebay_product->searchEbayCatalog($this->request->post['search'], $this->request->post['category_id']);
+
+ $json = array('error' => false, 'error_message' => '');
+
+ if (isset($response['ack'])) {
+ if ($response['ack'] == 'Success') {
+ $json['results'] = (int)$response['productSearchResult']['paginationOutput']['totalEntries'];
+ $json['page'] = (int)$response['productSearchResult']['paginationOutput']['pageNumber'];
+ $json['page_total'] = (int)$response['productSearchResult']['paginationOutput']['totalPages'];
+
+ if (isset($response['productSearchResult']['products'])) {
+ $json['products'] = $response['productSearchResult']['products'];
+ } else {
+ $json = array('error' => true, 'error_message' => $this->language->get('error_no_products'));
+ }
+ } else {
+ if (isset($response['errorMessage']['error']['message'])) {
+ $json = array('error' => true, 'error_message' => $response['errorMessage']['error']['message']);
+ } else {
+ $json = array('error' => true, 'error_message' => $this->language->get('error_loading_catalog'));
+ }
+ }
+ } else {
+ $json = array('error' => true, 'error_message' => $this->language->get('error_generic_fail'));
+ }
+
+ $this->response->addHeader('Content-Type: application/json');
+ $this->response->setOutput(json_encode($json));
+ }
+
+ public function summary() {
+ $this->load->language('extension/openbay/ebay_summary');
+
+ $data = $this->language->all();
+
+ $this->document->setTitle($this->language->get('heading_title'));
+ $this->document->addScript('view/javascript/openbay/js/faq.js');
+
+ $data['breadcrumbs'] = array();
+
+ $data['breadcrumbs'][] = array(
+ 'href' => $this->url->link('common/dashboard', 'user_token=' . $this->session->data['user_token'], true),
+ 'text' => $this->language->get('text_home'),
+ );
+
+ $data['breadcrumbs'][] = array(
+ 'href' => $this->url->link('marketplace/openbay', 'user_token=' . $this->session->data['user_token'], true),
+ 'text' => $this->language->get('text_openbay'),
+ );
+
+ $data['breadcrumbs'][] = array(
+ 'href' => $this->url->link('extension/openbay/ebay', 'user_token=' . $this->session->data['user_token'], true),
+ 'text' => $this->language->get('text_ebay'),
+ );
+
+ $data['breadcrumbs'][] = array(
+ 'href' => $this->url->link('extension/openbay/ebay/summary', 'user_token=' . $this->session->data['user_token'], true),
+ 'text' => $data['heading_title'],
+ );
+
+ $data['return'] = $this->url->link('extension/openbay/ebay', 'user_token=' . $this->session->data['user_token'], true);
+ $data['validation'] = $this->openbay->ebay->validate();
+ $data['user_token'] = $this->session->data['user_token'];
+
+ $data['header'] = $this->load->controller('common/header');
+ $data['column_left'] = $this->load->controller('common/column_left');
+ $data['footer'] = $this->load->controller('common/footer');
+
+ $this->response->setOutput($this->load->view('extension/openbay/ebay_summary', $data));
+ }
+
+ public function getSellerSummary() {
+ $this->load->model('extension/openbay/ebay');
+
+ $json = $this->model_extension_openbay_ebay->getSellerSummary();
+
+ $this->response->addHeader('Content-Type: application/json');
+ $this->response->setOutput(json_encode($json));
+ }
+
+ public function verifyCredentials() {
+ $this->load->model('extension/openbay/ebay');
+
+ $json = $this->model_extension_openbay_ebay->verifyCredentials();
+
+ $this->response->addHeader('Content-Type: application/json');
+ $this->response->setOutput(json_encode($json));
+ }
+
+ public function viewItemImport() {
+ $this->load->language('extension/openbay/ebay_import');
+
+ $data = $this->language->all();
+
+ $this->load->model('extension/openbay/ebay_product');
+
+ $this->document->setTitle($this->language->get('heading_title'));
+ $this->document->addScript('view/javascript/openbay/js/faq.js');
+
+ $data['breadcrumbs'] = array();
+
+ $data['breadcrumbs'][] = array(
+ 'href' => $this->url->link('common/dashboard', 'user_token=' . $this->session->data['user_token'], true),
+ 'text' => $this->language->get('text_home'),
+ );
+
+ $data['breadcrumbs'][] = array(
+ 'href' => $this->url->link('marketplace/openbay', 'user_token=' . $this->session->data['user_token'], true),
+ 'text' => $this->language->get('text_openbay'),
+ );
+
+ $data['breadcrumbs'][] = array(
+ 'href' => $this->url->link('extension/openbay/ebay', 'user_token=' . $this->session->data['user_token'], true),
+ 'text' => $this->language->get('text_ebay'),
+ );
+
+ $data['breadcrumbs'][] = array(
+ 'href' => $this->url->link('extension/openbay/ebay/viewItemImport', 'user_token=' . $this->session->data['user_token'], true),
+ 'text' => $this->language->get('heading_title'),
+ );
+
+ $data['return'] = $this->url->link('extension/openbay/ebay', 'user_token=' . $this->session->data['user_token'], true);
+ $data['validation'] = $this->openbay->ebay->validate();
+ $data['user_token'] = $this->session->data['user_token'];
+ $data['maintenance'] = $this->config->get('config_maintenance');
+ $data['image_import'] = $this->model_extension_openbay_ebay_product->countImportImages();
+ $data['ini_setting_post_max_size'] = ini_get('post_max_size');
+ $data['ini_setting_memory_limit'] = ini_get('memory_limit');
+ $data['image_import_link'] = $this->url->link('extension/openbay/ebay/getImportImages', 'user_token=' . $this->session->data['user_token'], true);
+
+ $data['header'] = $this->load->controller('common/header');
+ $data['column_left'] = $this->load->controller('common/column_left');
+ $data['footer'] = $this->load->controller('common/footer');
+
+ $this->response->setOutput($this->load->view('extension/openbay/ebay_item_import', $data));
+ }
+
+ public function importItems() {
+ $data = array(
+ 'adv' => $this->request->get['advanced'],
+ 'c' => 1,
+ 'd' => $this->request->get['desc'],
+ 'n' => $this->request->get['note'],
+ 'cat' => $this->request->get['categories'],
+ );
+
+ $this->openbay->ebay->callNoResponse('setup/getItemsMain/', $data);
+
+ $json = array('msg' => 'ok');
+
+ $this->response->addHeader('Content-Type: application/json');
+ $this->response->setOutput(json_encode($json));
+ }
+
+ public function getImportImages() {
+ set_time_limit(0);
+ $this->openbay->ebay->getImages();
+
+ $json = array('error' => false, 'msg' => 'OK');
+
+ $this->response->addHeader('Content-Type: application/json');
+ $this->response->setOutput(json_encode($json));
+ }
+
+ public function importOrdersManual() {
+ $this->openbay->ebay->callNoResponse('order/getOrdersManual/');
+
+ $json = array('msg' => 'ok');
+
+ $this->response->addHeader('Content-Type: application/json');
+ $this->response->setOutput(json_encode($json));
+ }
+
+ public function getProductStock() {
+ $this->load->model('extension/openbay/ebay');
+
+ $json = $this->model_extension_openbay_ebay->getProductStock($this->request->get['pid']);
+
+ $this->response->addHeader('Content-Type: application/json');
+ $this->response->setOutput(json_encode($json));
+ }
+
+ public function setProductStock() {
+ $this->load->model('extension/openbay/ebay');
+ $this->load->model('catalog/product');
+
+ $product = $this->model_catalog_product->getProduct($this->request->get['product_id']);
+
+ $json = array();
+
+ if ($product['subtract'] == 1) {
+ $this->openbay->ebay->productUpdateListen($this->request->get['product_id']);
+
+ $json['error'] = false;
+ $json['msg'] = 'ok';
+ } else {
+ $this->load->language('extension/openbay/ebay_links');
+
+ $json['error'] = true;
+ $json['msg'] = $this->language->get('error_subtract_setting');
+ }
+
+ $this->response->addHeader('Content-Type: application/json');
+ $this->response->setOutput(json_encode($json));
+ }
+
+ public function getPlans() {
+ $this->load->model('extension/openbay/ebay');
+
+ $json = $this->model_extension_openbay_ebay->getPlans();
+
+ $this->response->addHeader('Content-Type: application/json');
+ $this->response->setOutput(json_encode($json));
+ }
+
+ public function getMyPlan() {
+ $this->load->model('extension/openbay/ebay');
+
+ $json = $this->model_extension_openbay_ebay->getMyPlan();
+
+ $this->response->addHeader('Content-Type: application/json');
+ $this->response->setOutput(json_encode($json));
+ }
+
+ public function subscription() {
+ $this->load->language('extension/openbay/ebay_subscription');
+
+ $data = $this->language->all();
+
+ $this->document->setTitle($this->language->get('heading_title'));
+ $this->document->addScript('view/javascript/openbay/js/faq.js');
+
+ $data['breadcrumbs'] = array();
+
+ $data['breadcrumbs'][] = array(
+ 'href' => $this->url->link('common/dashboard', 'user_token=' . $this->session->data['user_token'], true),
+ 'text' => $this->language->get('text_home'),
+ );
+
+ $data['breadcrumbs'][] = array(
+ 'href' => $this->url->link('marketplace/openbay', 'user_token=' . $this->session->data['user_token'], true),
+ 'text' => $this->language->get('text_openbay'),
+ );
+
+ $data['breadcrumbs'][] = array(
+ 'href' => $this->url->link('extension/openbay/ebay', 'user_token=' . $this->session->data['user_token'], true),
+ 'text' => $this->language->get('text_ebay'),
+ );
+
+ $data['breadcrumbs'][] = array(
+ 'href' => $this->url->link('extension/openbay/ebay/subscription', 'user_token=' . $this->session->data['user_token'], true),
+ 'text' => $this->language->get('heading_title'),
+ );
+
+ $data['return'] = $this->url->link('extension/openbay/ebay', 'user_token=' . $this->session->data['user_token'], true);
+ $data['user_token'] = $this->session->data['user_token'];
+ $data['obp_token'] = $this->config->get('ebay_token');
+
+ $data['header'] = $this->load->controller('common/header');
+ $data['column_left'] = $this->load->controller('common/column_left');
+ $data['footer'] = $this->load->controller('common/footer');
+
+ $this->response->setOutput($this->load->view('extension/openbay/ebay_subscription', $data));
+ }
+
+ public function viewUsage() {
+ $this->load->language('extension/openbay/ebay_usage');
+
+ $data = $this->language->all();
+
+ $this->document->setTitle($this->language->get('heading_title'));
+ $this->document->addScript('view/javascript/openbay/js/faq.js');
+
+ $data['breadcrumbs'] = array();
+
+ $data['breadcrumbs'][] = array(
+ 'href' => $this->url->link('common/dashboard', 'user_token=' . $this->session->data['user_token'], true),
+ 'text' => $this->language->get('text_home'),
+ );
+
+ $data['breadcrumbs'][] = array(
+ 'href' => $this->url->link('marketplace/openbay', 'user_token=' . $this->session->data['user_token'], true),
+ 'text' => $this->language->get('text_openbay'),
+ );
+
+ $data['breadcrumbs'][] = array(
+ 'href' => $this->url->link('extension/openbay/ebay', 'user_token=' . $this->session->data['user_token'], true),
+ 'text' => $this->language->get('text_ebay'),
+ );
+
+ $data['breadcrumbs'][] = array(
+ 'href' => $this->url->link('extension/openbay/ebay/view_usage', 'user_token=' . $this->session->data['user_token'], true),
+ 'text' => $this->language->get('heading_title'),
+ );
+
+ $data['return'] = $this->url->link('extension/openbay/ebay', 'user_token=' . $this->session->data['user_token'], true);
+ $data['user_token'] = $this->session->data['user_token'];
+ $data['obp_token'] = $this->config->get('ebay_token');
+
+ $data['header'] = $this->load->controller('common/header');
+ $data['column_left'] = $this->load->controller('common/column_left');
+ $data['footer'] = $this->load->controller('common/footer');
+
+ $this->response->setOutput($this->load->view('extension/openbay/ebay_usage', $data));
+ }
+
+ public function getUsage() {
+ $this->load->model('extension/openbay/ebay');
+
+ $json = $this->model_extension_openbay_ebay->getUsage();
+ $json['html'] = base64_decode($json['html']);
+ $json['lasterror'] = $this->openbay->ebay->lasterror;
+ $json['lastmsg'] = $this->openbay->ebay->lastmsg;
+
+ $this->response->addHeader('Content-Type: application/json');
+ $this->response->setOutput(json_encode($json));
+ }
+
+ public function viewOrderImport() {
+ $this->load->language('extension/openbay/ebay_orders');
+
+ $data = $this->language->all();
+
+ $this->document->setTitle($this->language->get('heading_title'));
+ $this->document->addScript('view/javascript/openbay/js/faq.js');
+
+ $data['breadcrumbs'] = array();
+
+ $data['breadcrumbs'][] = array(
+ 'href' => $this->url->link('common/dashboard', 'user_token=' . $this->session->data['user_token'], true),
+ 'text' => $this->language->get('text_home'),
+ );
+
+ $data['breadcrumbs'][] = array(
+ 'href' => $this->url->link('marketplace/openbay', 'user_token=' . $this->session->data['user_token'], true),
+ 'text' => $this->language->get('text_openbay'),
+ );
+
+ $data['breadcrumbs'][] = array(
+ 'href' => $this->url->link('extension/openbay/ebay', 'user_token=' . $this->session->data['user_token'], true),
+ 'text' => $this->language->get('text_ebay'),
+ );
+
+ $data['breadcrumbs'][] = array(
+ 'href' => $this->url->link('extension/openbay/ebay/viewOrderImport', 'user_token=' . $this->session->data['user_token'], true),
+ 'text' => $this->language->get('heading_title'),
+ );
+
+ $data['return'] = $this->url->link('extension/openbay/ebay', 'user_token=' . $this->session->data['user_token'], true);
+ $data['validation'] = $this->openbay->ebay->validate();
+ $data['user_token'] = $this->session->data['user_token'];
+
+ $data['header'] = $this->load->controller('common/header');
+ $data['column_left'] = $this->load->controller('common/column_left');
+ $data['footer'] = $this->load->controller('common/footer');
+
+ $this->response->setOutput($this->load->view('extension/openbay/ebay_order_import', $data));
+ }
+
+ public function syncronise() {
+ $this->load->language('extension/openbay/ebay_syncronise');
+
+ $data = $this->language->all();
+
+ $this->document->setTitle($this->language->get('heading_title'));
+ $this->document->addScript('view/javascript/openbay/js/faq.js');
+
+ $data['breadcrumbs'] = array();
+
+ $data['breadcrumbs'][] = array(
+ 'href' => $this->url->link('common/dashboard', 'user_token=' . $this->session->data['user_token'], true),
+ 'text' => $this->language->get('text_home'),
+ );
+
+ $data['breadcrumbs'][] = array(
+ 'href' => $this->url->link('marketplace/openbay', 'user_token=' . $this->session->data['user_token'], true),
+ 'text' => $this->language->get('text_openbay'),
+ );
+
+ $data['breadcrumbs'][] = array(
+ 'href' => $this->url->link('extension/openbay/ebay', 'user_token=' . $this->session->data['user_token'], true),
+ 'text' => $this->language->get('text_ebay'),
+ );
+
+ $data['breadcrumbs'][] = array(
+ 'href' => $this->url->link('extension/openbay/ebay/syncronise', 'user_token=' . $this->session->data['user_token'], true),
+ 'text' => $this->language->get('heading_title'),
+ );
+
+ $data['return'] = $this->url->link('extension/openbay/ebay', 'user_token=' . $this->session->data['user_token'], true);
+ $data['validation'] = $this->openbay->ebay->validate();
+ $data['user_token'] = $this->session->data['user_token'];
+
+ if (isset($this->session->data['warning'])) {
+ $data['error_warning'] = $this->session->data['warning'];
+ } else {
+ $data['error_warning'] = '';
+ }
+
+ $data['header'] = $this->load->controller('common/header');
+ $data['column_left'] = $this->load->controller('common/column_left');
+ $data['footer'] = $this->load->controller('common/footer');
+
+ $this->response->setOutput($this->load->view('extension/openbay/ebay_syncronise', $data));
+ }
+
+ public function viewItemLinks() {
+ $this->load->language('extension/openbay/ebay_links');
+
+ $data = $this->language->all();
+
+ $this->document->setTitle($this->language->get('heading_title'));
+ $this->document->addScript('view/javascript/openbay/js/faq.js');
+
+ $this->load->model('extension/openbay/ebay');
+
+ $data['breadcrumbs'] = array();
+
+ $data['breadcrumbs'][] = array(
+ 'href' => $this->url->link('common/dashboard', 'user_token=' . $this->session->data['user_token'], true),
+ 'text' => $this->language->get('text_home'),
+ );
+
+ $data['breadcrumbs'][] = array(
+ 'href' => $this->url->link('marketplace/openbay', 'user_token=' . $this->session->data['user_token'], true),
+ 'text' => $this->language->get('text_openbay'),
+ );
+
+ $data['breadcrumbs'][] = array(
+ 'href' => $this->url->link('extension/openbay/ebay', 'user_token=' . $this->session->data['user_token'], true),
+ 'text' => $this->language->get('text_ebay'),
+ );
+
+ $data['breadcrumbs'][] = array(
+ 'href' => $this->url->link('extension/openbay/ebay/viewItemLinks', 'user_token=' . $this->session->data['user_token'], true),
+ 'text' => $this->language->get('heading_title'),
+ );
+
+ $data['cancel'] = $this->url->link('extension/openbay/ebay', 'user_token=' . $this->session->data['user_token'], true);
+ $data['edit_url'] = $this->url->link('extension/openbay/ebay/edit', 'user_token=' . $this->session->data['user_token'] . '&product_id=', true);
+ $data['validation'] = $this->openbay->ebay->validate();
+ $data['user_token'] = $this->session->data['user_token'];
+
+ $total_linked = $this->model_extension_openbay_ebay->totalLinked();
+
+ if (isset($this->request->get['linked_item_page'])){
+ $linked_item_page = (int)$this->request->get['linked_item_page'];
+ } else {
+ $linked_item_page = 1;
+ }
+
+ if (isset($this->request->get['linked_item_limit'])){
+ $linked_item_limit = (int)$this->request->get['linked_item_limit'];
+ } else {
+ $linked_item_limit = 100;
+ }
+
+ $pagination = new Pagination();
+ $pagination->total = $total_linked;
+ $pagination->page = $linked_item_page;
+ $pagination->limit = 100;
+ $pagination->text = $this->language->get('text_pagination');
+ $pagination->url = $this->url->link('extension/openbay/ebay/viewItemLinks', 'user_token=' . $this->session->data['user_token'] . '&linked_item_page={page}', true);
+
+ $data['pagination'] = $pagination->render();
+
+ $data['linked_items'] = $this->model_extension_openbay_ebay->loadLinked($linked_item_limit, $linked_item_page);
+
+ $data['header'] = $this->load->controller('common/header');
+ $data['column_left'] = $this->load->controller('common/column_left');
+ $data['footer'] = $this->load->controller('common/footer');
+
+ $this->response->setOutput($this->load->view('extension/openbay/ebay_item_link', $data));
+ }
+
+ public function saveItemLink() {
+ $this->load->model('extension/openbay/ebay');
+
+ $json = $this->model_extension_openbay_ebay->saveItemLink($this->request->get);
+
+ $this->response->addHeader('Content-Type: application/json');
+ $this->response->setOutput(json_encode($json));
+ }
+
+ public function removeItemLink() {
+ $this->load->language('extension/openbay/ebay');
+
+ $this->openbay->ebay->removeItemByProductId($this->request->get['product_id']);
+
+ $json = array('error' => false, 'msg' => $this->language->get('item_link_removed'));
+
+ $this->response->addHeader('Content-Type: application/json');
+ $this->response->setOutput(json_encode($json));
+ }
+
+ public function loadUnlinked(){
+ set_time_limit(0);
+
+ $this->load->model('extension/openbay/ebay');
+
+ $filter = array();
+
+ if (isset($this->request->post['filter_variant']) && !empty($this->request->post['filter_variant'])) {
+ $filter['variants'] = (int)$this->request->post['filter_variant'];
+ }
+
+ if (isset($this->request->post['filter_title']) && !empty($this->request->post['filter_title'])) {
+ $filter['title'] = (string)$this->request->post['filter_title'];
+ }
+
+ if (isset($this->request->post['filter_qty_min']) && !empty($this->request->post['filter_qty_min'])) {
+ $filter['qty_min'] = (int)$this->request->post['filter_qty_min'];
+ }
+
+ if (isset($this->request->post['filter_qty_max']) && !empty($this->request->post['filter_qty_max'])) {
+ $filter['qty_max'] = (int)$this->request->post['filter_qty_max'];
+ }
+
+ $data = $this->model_extension_openbay_ebay->loadUnlinked(200, $this->request->get['page'], $filter);
+
+ if (!empty($data)) {
+ $data['more_pages'] = 1;
+
+ if ($data['next_page'] > $data['max_page']){
+ $data['more_pages'] = 0;
+ }
+
+ $json['data'] = $data;
+ } else {
+ $json['data'] = null;
+ }
+
+ $this->response->addHeader('Content-Type: application/json');
+ $this->response->setOutput(json_encode($json));
+ }
+
+ public function loadLinkedStatus(){
+ set_time_limit(0);
+
+ $this->load->model('extension/openbay/ebay');
+
+ $json['data'] = '';
+ if (isset($this->request->post['item_id']) && !empty($this->request->post['item_id'])){
+ $data = $this->model_extension_openbay_ebay->loadLinkedStatus($this->request->post['item_id']);
+
+ if (!empty($data)) {
+ $json['data'] = $data;
+ }
+ }
+
+ $this->response->addHeader('Content-Type: application/json');
+ $this->response->setOutput(json_encode($json));
+ }
+
+ private function validate() {
+ if (!$this->user->hasPermission('modify', 'extension/openbay/ebay')) {
+ $this->error['warning'] = $this->language->get('error_permission');
+ }
+
+ return !$this->error;
+ }
+
+ private function checkConfig() {
+ if ($this->config->get('ebay_token') == '' || $this->config->get('ebay_secret') == '') {
+ return false;
+ } else {
+ return true;
+ }
+ }
+
+ public function edit() {
+ if ($this->checkConfig() == true) {
+ if (!empty($this->request->get['product_id'])) {
+ $this->load->language('extension/openbay/ebay_edit');
+
+ $data = $this->language->all();
+
+ $this->load->model('catalog/product');
+ $this->load->model('tool/image');
+ $this->load->model('catalog/manufacturer');
+ $this->load->model('extension/openbay/ebay');
+ $this->load->model('extension/openbay/ebay_product');
+
+ $this->document->setTitle($data['heading_title']);
+ $this->document->addScript('view/javascript/openbay/js/faq.js');
+
+ $data['action'] = $this->url->link('extension/openbay/ebay/create', 'user_token=' . $this->session->data['user_token'], true);
+ $data['cancel'] = $this->url->link('marketplace/openbay/items', 'user_token=' . $this->session->data['user_token'], true);
+ $data['view_link'] = $this->config->get('ebay_itm_link') . $this->openbay->ebay->getEbayItemId($this->request->get['product_id']);
+ $data['user_token'] = $this->session->data['user_token'];
+ $data['product_id'] = $this->request->get['product_id'];
+
+ $data['breadcrumbs'] = array();
+
+ $data['breadcrumbs'][] = array(
+ 'href' => $this->url->link('common/dashboard', 'user_token=' . $this->session->data['user_token'], true),
+ 'text' => $this->language->get('text_home'),
+ );
+
+ $data['breadcrumbs'][] = array(
+ 'href' => $this->url->link('marketplace/openbay', 'user_token=' . $this->session->data['user_token'], true),
+ 'text' => $this->language->get('text_openbay'),
+ );
+
+ $data['breadcrumbs'][] = array(
+ 'href' => $this->url->link('extension/openbay/ebay', 'user_token=' . $this->session->data['user_token'], true),
+ 'text' => $this->language->get('text_ebay'),
+ );
+
+ $data['breadcrumbs'][] = array(
+ 'href' => $this->url->link('extension/openbay/ebay/edit', 'user_token=' . $this->session->data['user_token'] . '&product_id=' . $this->request->get['product_id'], true),
+ 'text' => $this->language->get('heading_title'),
+ );
+
+ $data['header'] = $this->load->controller('common/header');
+ $data['column_left'] = $this->load->controller('common/column_left');
+ $data['footer'] = $this->load->controller('common/footer');
+
+ $this->response->setOutput($this->load->view('extension/openbay/ebay_edit', $data));
+ } else {
+ $this->response->redirect($this->url->link('marketplace/openbay/items', 'user_token=' . $this->session->data['user_token'], true));
+ }
+ }
+ }
+
+ public function editLoad() {
+ $this->load->model('catalog/product');
+ $this->load->model('extension/openbay/ebay_product');
+ $this->load->model('tool/image');
+
+ $item_id = $this->openbay->ebay->getEbayItemId($this->request->get['product_id']);
+
+ if (!empty($item_id)) {
+ $listings = $this->openbay->ebay->getEbayListing($item_id);
+ $stock = $this->openbay->ebay->getProductStockLevel($this->request->get['product_id']);
+ $reserve = $this->openbay->ebay->getReserve($this->request->get['product_id'], $item_id);
+ $options = array();
+
+ $product_info = $this->model_catalog_product->getProduct($this->request->get['product_id']);
+
+ if ($this->openbay->addonLoad('openstock') && $product_info['has_option'] == 1) {
+ $this->load->model('extension/module/openstock');
+ $data['addon']['openstock'] = true;
+ $product_info['options'] = $this->model_setting_module_openstock->getVariants($this->request->get['product_id']);
+ $product_info['option_groups'] = $this->model_extension_openbay_ebay_product->getProductOptions($this->request->get['product_id']);
+
+ $t = array();
+ $t_rel = array();
+
+ foreach($product_info['option_groups'] as $group) {
+ $t_tmp = array();
+
+ foreach($group['product_option_value'] as $group_node) {
+ $t_tmp[$group_node['option_value_id']] = $group_node['name'];
+ $t_rel[$group_node['product_option_value_id']] = $group['name'];
+ }
+
+ $t[] = array('name' => $group['name'], 'child' => $t_tmp);
+ }
+
+ if (!isset($listings['variations']['Variation'][1])) {
+ $listings['variations']['Variation'] = array($listings['variations']['Variation']);
+ }
+
+ foreach($product_info['options'] as $option) {
+ $option['base64'] = base64_encode(serialize($option['option_values']));
+ $option_reserve = $this->openbay->ebay->getReserve($this->request->get['product_id'], $item_id, $option['sku']);
+ if ($option_reserve == false) {
+ $option['reserve'] = 0;
+ } else {
+ $option['reserve'] = $this->openbay->ebay->getReserve($this->request->get['product_id'], $item_id, $option['sku']);
+ }
+
+ $ebay_listing = '';
+
+ foreach($listings['variations']['Variation'] as $listing) {
+
+ $sku = (isset($listing['SKU']) ? $listing['SKU'] : '');
+
+ if ($sku != '' && $sku == $option['sku']) {
+ $listing['StartPrice'] = number_format($listing['StartPrice'], 2, '.', '');
+ $listing['Quantity'] = $listing['Quantity'] - $listing['SellingStatus']['QuantitySold'];
+
+ $ebay_listing = $listing;
+ }
+ }
+
+ $options[] = array('ebay' => $ebay_listing, 'local' => $option, 'sku' => $option['sku'], 'product_option_variant_id' => $option['product_option_variant_id']);
+ }
+
+ //unset variants that dont appear on eBay
+ $options_inactive = array();
+ foreach($options as $k => $option) {
+ if (empty($option['ebay'])) {
+ $options_inactive[] = $options[$k];
+ unset($options[$k]);
+ }
+ }
+
+ $variant = array(
+ 'variant' => 1,
+ 'data' => array(
+ 'group_information' => array(
+ 'option_groups' => base64_encode(serialize($t)),
+ 'option_group_relationship' => base64_encode(serialize($t_rel)),
+ ),
+ 'options' => $options,
+ 'options_inactive' => $options_inactive
+ )
+ );
+
+ } else {
+ $variant = array('variant' => 0, 'data' => '');
+ }
+
+ if ($reserve == false) {
+ $reserve = 0;
+ }
+
+ $data = array(
+ 'listing' => $listings,
+ 'stock' => $stock,
+ 'reserve' => $reserve,
+ 'variant' => $variant,
+ 'product' => $product_info
+ );
+
+ if (!empty($listings)) {
+ $this->response->addHeader('Content-Type: application/json');
+ $this->response->setOutput(json_encode(array('error' => false, 'data' => $data)));
+ } else {
+ $this->response->addHeader('Content-Type: application/json');
+ $this->response->setOutput(json_encode(array('error' => true)));
+ }
+ } else {
+ $this->response->addHeader('Content-Type: application/json');
+ $this->response->setOutput(json_encode(array('error' => true)));
+ }
+ }
+
+ public function editSave() {
+ if ($this->checkConfig() == true && $this->request->server['REQUEST_METHOD'] == 'POST') {
+
+ $this->load->model('extension/openbay/ebay');
+
+ $json = $this->model_extension_openbay_ebay->editSave($this->request->post);
+
+ $this->response->addHeader('Content-Type: application/json');
+ $this->response->setOutput(json_encode($json));
+ } else {
+ $this->response->redirect($this->url->link('marketplace/openbay/items', 'user_token=' . $this->session->data['user_token'], true));
+ }
+ }
+
+ public function create() {
+ if ($this->checkConfig() == true) {
+ if (!empty($this->request->get['product_id'])) {
+ $this->load->language('extension/openbay/ebay_new');
+
+ $data = $this->language->all();
+
+ $this->load->model('catalog/product');
+ $this->load->model('tool/image');
+ $this->load->model('catalog/manufacturer');
+ $this->load->model('extension/openbay/ebay');
+ $this->load->model('extension/openbay/ebay_template');
+ $this->load->model('extension/openbay/ebay_product');
+ $this->load->model('extension/openbay/ebay_profile');
+
+ $this->document->setTitle($data['heading_title']);
+ $this->document->addScript('view/javascript/openbay/js/faq.js');
+
+ $data['action'] = $this->url->link('extension/openbay/ebay/create', 'user_token=' . $this->session->data['user_token'], true);
+ $data['cancel'] = $this->url->link('marketplace/openbay/items', 'user_token=' . $this->session->data['user_token'], true);
+ $data['user_token'] = $this->session->data['user_token'];
+
+ $data['breadcrumbs'] = array();
+ $data['breadcrumbs'][] = array(
+ 'href' => $this->url->link('common/dashboard', 'user_token=' . $this->session->data['user_token'], true),
+ 'text' => $this->language->get('text_home'),
+ );
+ $data['breadcrumbs'][] = array(
+ 'href' => $this->url->link('marketplace/openbay', 'user_token=' . $this->session->data['user_token'], true),
+ 'text' => $this->language->get('text_openbay'),
+ );
+ $data['breadcrumbs'][] = array(
+ 'href' => $this->url->link('extension/openbay/ebay', 'user_token=' . $this->session->data['user_token'], true),
+ 'text' => $this->language->get('text_ebay'),
+ );
+
+ $data['breadcrumbs'][] = array(
+ 'href' => $this->url->link('extension/openbay/ebay/create', 'user_token=' . $this->session->data['user_token'] . '&product_id=' . $this->request->get['product_id'], true),
+ 'text' => $this->language->get('heading_title'),
+ );
+
+ $product_info = $this->model_catalog_product->getProduct($this->request->get['product_id']);
+
+ $setting = array();
+
+ $setting['dispatch_times'] = $this->openbay->ebay->getSetting('dispatch_time_max');
+
+ if (is_array($setting['dispatch_times'])) {
+ ksort($setting['dispatch_times']);
+ }
+
+ $setting['countries'] = $this->openbay->ebay->getSetting('countries');
+
+ if (is_array($setting['countries'])) {
+ ksort($setting['countries']);
+ }
+
+ $setting['returns'] = $this->openbay->ebay->getSetting('returns');
+ $setting['package_type'] = $this->openbay->ebay->getSetting('package_type');
+ $setting['shipping_types'] = $this->openbay->ebay->getSetting('shipping_types');
+ $setting['measurement_types'] = $this->openbay->ebay->getSetting('measurement_types');
+ $setting['measurement_types'] = $this->openbay->ebay->getSetting('measurement_types');
+ $setting['product_details'] = $this->openbay->ebay->getSetting('product_details');
+ $setting['listing_restrictions'] = $this->openbay->ebay->getSetting('listing_restrictions');
+
+ if (!isset($setting['product_details']['product_identifier_unavailable_text'])) {
+ $this->session->data['warning'] = $this->language->get('error_missing_settings');
+ $this->response->redirect($this->url->link('extension/openbay/ebay/syncronise&user_token=' . $this->session->data['user_token'], true));
+ }
+
+ if (empty($setting['dispatch_times']) || empty($setting['countries']) || empty($setting['returns'])){
+ $this->session->data['warning'] = $this->language->get('error_missing_settings');
+ $this->response->redirect($this->url->link('extension/openbay/ebay/syncronise&token=' . $this->session->data['user_token'], true));
+ }
+
+ $data['setting'] = $setting;
+
+ if ($this->openbay->addonLoad('openstock') && $product_info['has_option'] == 1) {
+ $this->load->model('extension/module/openstock');
+ $data['addon']['openstock'] = true;
+ $product_info['options'] = $this->model_setting_module_openstock->getVariants($this->request->get['product_id']);
+
+ $product_info['options_array'] = base64_encode(serialize($product_info['options'][0]['option_values']));
+
+ $product_info['option_groups'] = $this->model_extension_openbay_ebay_product->getProductOptions($this->request->get['product_id']);
+
+ $option_group_array = array();
+ $option_group_relation_array = array();
+
+ foreach($product_info['option_groups'] as $option_group) {
+ $child_option = array();
+
+ foreach($option_group['product_option_value'] as $group_node) {
+ $child_option[$group_node['option_value_id']] = $group_node['name'];
+ $option_group_relation_array[$group_node['product_option_value_id']] = $option_group['name'];
+ }
+
+ $option_group_array[] = array('name' => $option_group['name'], 'child' => $child_option);
+ }
+
+ $product_info['option_group_array'] = base64_encode(serialize($option_group_array));
+ $product_info['option_group_relation_array'] = base64_encode(serialize($option_group_relation_array));
+ }
+
+ // get the product tax rate from opencart
+ if (isset($product_info['tax_class_id'])) {
+ $product_info['defaults']['tax'] = $this->model_extension_openbay_ebay_product->getTaxRate($product_info['tax_class_id']);
+ } else {
+ $product_info['defaults']['tax'] = 0.00;
+ }
+
+ //get the popular categories the user has used
+ $product_info['popular_cats'] = $this->model_extension_openbay_ebay->getPopularCategories();
+
+ //get shipping profiles
+ $product_info['profiles_shipping'] = $this->model_extension_openbay_ebay_profile->getAll(0);
+ //get default shipping profile
+ $product_info['profiles_shipping_def'] = $this->model_extension_openbay_ebay_profile->getDefault(0);
+
+ //get returns profiles
+ $product_info['profiles_returns'] = $this->model_extension_openbay_ebay_profile->getAll(1);
+ //get default returns profile
+ $product_info['profiles_returns_def'] = $this->model_extension_openbay_ebay_profile->getDefault(1);
+ $data['data']['shipping_international_zones'] = $this->model_extension_openbay_ebay->getShippingLocations();
+
+ //get theme profiles
+ $product_info['profiles_theme'] = $this->model_extension_openbay_ebay_profile->getAll(2);
+ //get default returns profile
+ $product_info['profiles_theme_def'] = $this->model_extension_openbay_ebay_profile->getDefault(2);
+
+ //get generic profiles
+ $product_info['profiles_generic'] = $this->model_extension_openbay_ebay_profile->getAll(3);
+ //get default generic profile
+ $product_info['profiles_generic_def'] = $this->model_extension_openbay_ebay_profile->getDefault(3);
+
+ //product attributes - this is just a direct pass through used with the template tag
+ $product_info['attributes'] = base64_encode(json_encode($this->model_extension_openbay_ebay->getProductAttributes($this->request->get['product_id'])));
+
+ //post edit link
+ $product_info['edit_link'] = $this->url->link('extension/openbay/ebay/edit', 'user_token=' . $this->session->data['user_token'] . '&product_id=' . $this->request->get['product_id'], true);
+
+ //images
+ $product_images = $this->model_catalog_product->getProductImages($this->request->get['product_id']);
+ $product_info['product_images'] = array();
+
+ if (!empty($product_info['image'])) {
+ $img_info = getimagesize(DIR_IMAGE . $product_info['image']);
+
+ $product_info['product_images'][] = array(
+ 'image' => $product_info['image'],
+ 'preview' => $this->model_tool_image->resize($product_info['image'], 100, 100),
+ 'full' => HTTPS_CATALOG . 'image/' . $product_info['image'],
+ 'width' => $img_info[0],
+ 'height' => $img_info[1],
+ );
+ }
+
+ foreach ($product_images as $product_image) {
+ if ($product_image['image'] && file_exists(DIR_IMAGE . $product_image['image'])) {
+ $img_info = getimagesize(DIR_IMAGE . $product_image['image']);
+
+ $product_info['product_images'][] = array(
+ 'image' => $product_image['image'],
+ 'preview' => $this->model_tool_image->resize($product_image['image'], 100, 100),
+ 'full' => HTTPS_CATALOG . 'image/' . $product_image['image'],
+ 'width' => $img_info[0],
+ 'height' => $img_info[1],
+ );
+ }
+ }
+
+ $product_info['manufacturers'] = $this->model_catalog_manufacturer->getManufacturers();
+ $product_info['payments'] = $this->model_extension_openbay_ebay->getPaymentTypes();
+ $product_info['templates'] = $this->model_extension_openbay_ebay_template->getAll();
+ $product_info['store_cats'] = $this->model_extension_openbay_ebay->getSellerStoreCategories();
+
+ $product_info['defaults']['cod_surcharge'] = 0;
+
+ foreach($product_info['payments'] as $payment) {
+ if ($payment['ebay_name'] == 'COD') {
+ $product_info['defaults']['cod_surcharge'] = 1;
+ }
+ }
+
+ $product_info['defaults']['ebay_payment_types'] = $this->config->get('ebay_payment_types');
+ $product_info['defaults']['paypal_address'] = $this->config->get('ebay_payment_paypal_address');
+ $product_info['defaults']['payment_instruction'] = $this->config->get('ebay_payment_instruction');
+ $product_info['defaults']['ebay_payment_immediate'] = $this->config->get('ebay_payment_immediate');
+
+ $product_info['defaults']['gallery_height'] = '400';
+ $product_info['defaults']['gallery_width'] = '400';
+ $product_info['defaults']['thumb_height'] = '100';
+ $product_info['defaults']['thumb_width'] = '100';
+
+ $product_info['defaults']['ebay_measurement'] = $this->config->get('ebay_measurement');
+
+ $product_info['defaults']['listing_duration'] = $this->config->get('ebay_duration');
+ if ($product_info['defaults']['listing_duration'] == '') {
+ $product_info['defaults']['listing_duration'] = 'Days_30';
+ }
+
+ if (isset($this->error['warning'])) {
+ $data['error_warning'] = $this->error['warning'];
+ } else {
+ $data['error_warning'] = '';
+ }
+
+ if ($product_info['quantity'] < 1 && (!isset($product_info['has_option']) || $product_info['has_option'] == 0)) {
+ $data['error_warning'] = $this->language->get('error_no_stock');
+ }
+
+ $data['no_image'] = $this->model_tool_image->resize('no_image.png', 100, 100);
+
+ $weight_parts = explode('.', $product_info['weight']);
+ $product_info['weight_major'] = (int)$weight_parts[0];
+ $product_info['weight_minor'] = (int)substr($weight_parts[1], 0, 3);
+
+ $data['product'] = $product_info;
+
+ $data['header'] = $this->load->controller('common/header');
+ $data['column_left'] = $this->load->controller('common/column_left');
+ $data['footer'] = $this->load->controller('common/footer');
+
+ $this->response->setOutput($this->load->view('extension/openbay/ebay_new', $data));
+ } else {
+ $this->response->redirect($this->url->link('marketplace/openbay/items', 'user_token=' . $this->session->data['user_token'], true));
+ }
+ }
+ }
+
+ public function createBulk() {
+ if ($this->checkConfig() == true) {
+ if (!empty($this->request->post['selected'])) {
+ $this->load->language('extension/openbay/ebay_newbulk');
+
+ $data = $this->language->all();
+
+ $this->load->model('catalog/product');
+ $this->load->model('tool/image');
+ $this->load->model('catalog/manufacturer');
+ $this->load->model('extension/openbay/ebay');
+ $this->load->model('extension/openbay/ebay_profile');
+
+ $data['breadcrumbs'] = array();
+ $data['breadcrumbs'][] = array(
+ 'href' => $this->url->link('common/dashboard', 'user_token=' . $this->session->data['user_token'], true),
+ 'text' => $this->language->get('text_home'),
+ );
+ $data['breadcrumbs'][] = array(
+ 'href' => $this->url->link('marketplace/openbay', 'user_token=' . $this->session->data['user_token'], true),
+ 'text' => $this->language->get('text_openbay'),
+ );
+ $data['breadcrumbs'][] = array(
+ 'href' => $this->url->link('extension/openbay/ebay', 'user_token=' . $this->session->data['user_token'], true),
+ 'text' => $this->language->get('text_ebay'),
+ );
+
+ $data['breadcrumbs'][] = array(
+ 'href' => $this->url->link('extension/openbay/ebay/createBulk', 'user_token=' . $this->session->data['user_token'], true),
+ 'text' => $this->language->get('heading_title'),
+ );
+
+ $data['error_warning'] = array();
+
+ $data['cancel'] = $this->url->link('marketplace/openbay/items', 'user_token=' . $this->session->data['user_token'], true);
+ $data['image_directory'] = DIR_IMAGE;
+
+ $active_list = $this->model_extension_openbay_ebay->getLiveListingArray();
+
+ $products = array();
+
+ if ($this->openbay->addonLoad('openstock')) {
+ $openstock = 1;
+ } else {
+ $openstock = 0;
+ }
+
+ foreach ($this->request->post['selected'] as $product_id) {
+ if (!array_key_exists($product_id, $active_list)) {
+
+ $prod = $this->model_catalog_product->getProduct($product_id);
+
+ if ($openstock == 1 && isset($prod['has_option']) && $prod['has_option'] == 1) {
+ $data['error_warning']['os'] = $this->language->get('text_error_variants');
+ } else {
+ if ($prod['quantity'] > 0) {
+ if ($prod['image'] && file_exists(DIR_IMAGE . $prod['image'])) {
+ $prod['image'] = $this->model_tool_image->resize($prod['image'], 80, 80);
+ } else {
+ $prod['image'] = $this->model_tool_image->resize('no_image.png', 80, 80);
+ }
+
+ $products[] = $prod;
+ } else {
+ $data['error_warning']['stock'] = $this->language->get('text_error_stock');
+ }
+ }
+ } else {
+ $data['error_warning']['exists'] = $this->language->get('text_exists');
+ }
+ }
+
+ $data['count'] = count($products);
+ $data['user_token'] = $this->session->data['user_token'];
+ $data['listing_link'] = $this->config->get('ebay_itm_link');
+
+ $plan = $this->model_extension_openbay_ebay->getMyPlan();
+
+ if ($plan['plan']['listing_bulk'] == 1) {
+ if ($data['count'] == 0) {
+ $data['error_fail'][] = $this->language->get('text_error_no_product');
+ } else {
+ if (($plan['plan']['listing_limit'] == 0) || (($plan['usage']['items'] + $data['count']) <= $plan['plan']['listing_limit'])) {
+ if ($data['count'] > 5) {
+ $data['error_warning']['count'] = sprintf($this->language->get('text_error_count'), $data['count']);
+ }
+
+ //load the settings from eBay
+ $setting = array();
+
+ $setting['product_details'] = $this->openbay->ebay->getSetting('product_details');
+
+ if (!isset($setting['product_details']['product_identifier_unavailable_text'])) {
+ $this->session->data['warning'] = $this->language->get('error_missing_settings');
+ $this->response->redirect($this->url->link('extension/openbay/ebay/syncronise&token=' . $this->session->data['user_token'], true));
+ }
+
+ $setting['dispatch_times'] = $this->openbay->ebay->getSetting('dispatch_time_max');
+ if (is_array($setting['dispatch_times'])) {
+ ksort($setting['dispatch_times']);
+ }
+
+ $setting['countries'] = $this->openbay->ebay->getSetting('countries');
+ if (is_array($setting['countries'])) {
+ ksort($setting['countries']);
+ }
+
+ $setting['returns'] = $this->openbay->ebay->getSetting('returns');
+
+ if (empty($setting['dispatch_times']) || empty($setting['countries']) || empty($setting['returns'])){
+ $this->session->data['warning'] = $this->language->get('error_missing_settings');
+ $this->response->redirect($this->url->link('extension/openbay/ebay/syncronise&token=' . $this->session->data['user_token'], true));
+ }
+
+ $data['setting'] = $setting;
+
+ //get generic profiles
+ $product_info['profiles_generic'] = $this->model_extension_openbay_ebay_profile->getAll(3);
+ //get default generic profile
+ $product_info['profiles_generic_def'] = $this->model_extension_openbay_ebay_profile->getDefault(3);
+ if ($product_info['profiles_generic_def'] === false) {
+ $data['error_fail'][] = $this->language->get('text_error_generic_profile');
+ }
+
+ //get shipping profiles
+ $product_info['profiles_shipping'] = $this->model_extension_openbay_ebay_profile->getAll(0);
+ //get default shipping profile
+ $product_info['profiles_shipping_def'] = $this->model_extension_openbay_ebay_profile->getDefault(0);
+ //check it has a default profile
+ if ($product_info['profiles_shipping_def'] === false) {
+ $data['error_fail'][] = $this->language->get('text_error_ship_profile');
+ }
+
+ //get returns profiles
+ $product_info['profiles_returns'] = $this->model_extension_openbay_ebay_profile->getAll(1);
+ //get default returns profile
+ $product_info['profiles_returns_def'] = $this->model_extension_openbay_ebay_profile->getDefault(1);
+ //check it has a default profile
+ if ($product_info['profiles_returns_def'] === false) {
+ $data['error_fail'][] = $this->language->get('text_error_return_profile');
+ }
+
+ //get returns profiles
+ $product_info['profiles_theme'] = $this->model_extension_openbay_ebay_profile->getAll(2);
+ //get default returns profile
+ $product_info['profiles_theme_def'] = $this->model_extension_openbay_ebay_profile->getDefault(2);
+ //check it has a default profile
+ if ($product_info['profiles_theme_def'] === false) {
+ $data['error_fail'][] = $this->language->get('text_error_theme_profile');
+ }
+
+ // get the product tax rate
+ if (isset($product_info['tax_class_id'])) {
+ $product_info['defaults']['tax'] = $this->model_extension_openbay_ebay_product->getTaxRate($product_info['tax_class_id']);
+ } else {
+ $product_info['defaults']['tax'] = 0.00;
+ }
+
+ $data['products'] = $products;
+
+ $product_info['manufacturers'] = $this->model_catalog_manufacturer->getManufacturers();
+ $product_info['payments'] = $this->model_extension_openbay_ebay->getPaymentTypes();
+ $product_info['store_cats'] = $this->model_extension_openbay_ebay->getSellerStoreCategories();
+
+ $product_info['defaults']['ebay_template'] = $this->config->get('ebay_template');
+
+ $product_info['defaults']['listing_duration'] = $this->config->get('ebay_duration');
+ if ($product_info['defaults']['listing_duration'] == '') {
+ $product_info['defaults']['listing_duration'] = 'Days_30';
+ }
+
+ $data['default'] = $product_info;
+ } else {
+ $data['error_fail']['plan'] = sprintf($this->language->get('text_item_limit'), $this->url->link('extension/openbay/ebay/subscription', 'user_token=' . $this->session->data['user_token'], true));
+ }
+ }
+ } else {
+ $data['error_fail']['plan'] = sprintf($this->language->get('text_bulk_plan_error'), $this->url->link('extension/openbay/ebay/subscription', 'user_token=' . $this->session->data['user_token'], true));
+ }
+
+ $this->document->setTitle($data['heading_title']);
+ $this->document->addScript('view/javascript/openbay/js/faq.js');
+ $this->document->addScript('view/javascript/openbay/js/openbay.js');
+
+ $data['header'] = $this->load->controller('common/header');
+ $data['column_left'] = $this->load->controller('common/column_left');
+ $data['footer'] = $this->load->controller('common/footer');
+
+ $this->response->setOutput($this->load->view('extension/openbay/ebay_new_bulk', $data));
+ } else {
+ $this->load->language('extension/openbay/ebay_newbulk');
+ $this->session->data['warning'] = $this->language->get('text_error_no_selection');
+ $this->response->redirect($this->url->link('marketplace/openbay/items&token=' . $this->session->data['user_token']));
+ }
+ }
+ }
+
+ public function verify() {
+ $this->load->model('extension/openbay/openbay');
+ $this->load->model('extension/openbay/ebay');
+ $this->load->model('extension/openbay/ebay_template');
+ $this->load->model('catalog/product');
+ $this->load->model('catalog/filter');
+
+ if ($this->request->server['REQUEST_METHOD'] == 'POST') {
+ if ($this->checkConfig() == true) {
+ $this->model_extension_openbay_ebay->logCategoryUsed($this->request->post['finalCat']);
+
+ $item_id = $this->openbay->ebay->getEbayItemId($this->request->post['product_id']);
+
+ if ($item_id == false) {
+ $data = $this->request->post;
+
+ if ($data['template'] != 'None') {
+ $template = $this->model_extension_openbay_ebay_template->get($data['template']);
+ $data['template_html'] = (isset($template['html']) ? base64_encode($template['html']) : '');
+ } else {
+ $data['template_html'] = '';
+ }
+
+ // set shipping data
+ $data['national'] = $data['data']['national'];
+ $data['international'] = $data['data']['international'];
+ unset($data['data']);
+
+ if (!empty($data['img_tpl'])) {
+ $tmp_gallery_array = array();
+ $tmp_thumbnail_array = array();
+ $this->load->model('tool/image');
+
+ foreach ($data['img_tpl'] as $k => $v) {
+ $tmp_gallery_array[$k] = $this->model_extension_openbay_openbay->storeImage($v, $data['gallery_width'], $data['gallery_height'], 'ebay');
+ $tmp_thumbnail_array[$k] = $this->model_extension_openbay_openbay->storeImage($v, $data['thumb_width'], $data['thumb_height'], 'ebay');
+ }
+
+ $data['img_tpl'] = $tmp_gallery_array;
+ $data['img_tpl_thumb'] = $tmp_thumbnail_array;
+ }
+
+ $query = $this->db->query("SELECT DISTINCT *, pd.name AS name, p.image, m.name AS manufacturer, (SELECT wcd.unit FROM " . DB_PREFIX . "weight_class_description wcd WHERE p.weight_class_id = wcd.weight_class_id AND wcd.language_id = '" . (int)$this->config->get('config_language_id') . "') AS weight_class, (SELECT lcd.unit FROM " . DB_PREFIX . "length_class_description lcd WHERE p.length_class_id = lcd.length_class_id AND lcd.language_id = '" . (int)$this->config->get('config_language_id') . "') AS length_class, p.sort_order FROM " . DB_PREFIX . "product p LEFT JOIN " . DB_PREFIX . "product_description pd ON (p.product_id = pd.product_id) LEFT JOIN " . DB_PREFIX . "product_to_store p2s ON (p.product_id = p2s.product_id) LEFT JOIN " . DB_PREFIX . "manufacturer m ON (p.manufacturer_id = m.manufacturer_id) WHERE p.product_id = '" . (int)$data['product_id'] . "' AND pd.language_id = '" . (int)$this->config->get('config_language_id') . "'");
+
+ $data['product_info'] = $query->row;
+
+ $data['product_info']['product_filters'] = array();
+
+ $filters = $this->model_catalog_product->getProductFilters($this->request->post['product_id']);
+
+ foreach ($filters as $filter_id) {
+ $filter_info = $this->model_catalog_filter->getFilter($filter_id);
+
+ if ($filter_info) {
+ $data['product_info']['product_filters'][] = array(
+ 'filter_id' => $filter_info['filter_id'],
+ 'group' => $filter_info['group'],
+ 'name' => $filter_info['name']
+ );
+ }
+ }
+
+ if (!empty($data['product_info']['sku'])){
+ $data['sku'] = $data['product_info']['sku'];
+ }
+
+ $json = $this->model_extension_openbay_ebay->ebayVerifyAddItem($data, $this->request->get['options']);
+
+ $this->response->addHeader('Content-Type: application/json');
+ $this->response->setOutput(json_encode($json));
+ } else {
+ $this->response->addHeader('Content-Type: application/json');
+ $this->response->setOutput(json_encode(array('error' => true, 'msg' => 'This item is already listed in your eBay account', 'item' => $item_id)));
+ }
+ }
+ } else {
+ $this->response->redirect($this->url->link('marketplace/openbay/items&token=' . $this->session->data['user_token']));
+ }
+ }
+
+ public function verifyBulk() {
+ $this->load->model('extension/openbay/openbay');
+ $this->load->model('extension/openbay/ebay_profile');
+ $this->load->model('extension/openbay/ebay');
+ $this->load->model('extension/openbay/ebay_template');
+ $this->load->model('catalog/product');
+ $this->load->model('tool/image');
+ $this->load->model('catalog/filter');
+
+ if ($this->request->server['REQUEST_METHOD'] == 'POST') {
+ if ($this->checkConfig() == true) {
+ $post = $this->request->post;
+ $data = array();
+
+ //load all of the listing defaults and assign to correct variable names
+ $profile_shipping = $this->model_extension_openbay_ebay_profile->get($post['shipping_profile']);
+ $profile_return = $this->model_extension_openbay_ebay_profile->get($post['return_profile']);
+ $profile_template = $this->model_extension_openbay_ebay_profile->get($post['theme_profile']);
+ $profile_generic = $this->model_extension_openbay_ebay_profile->get($post['generic_profile']);
+
+ $payments = $this->model_extension_openbay_ebay->getPaymentTypes();
+ $payments_accepted = $this->config->get('ebay_payment_types');
+ $product_info = $this->model_catalog_product->getProduct($post['product_id']);
+
+ // set shipping data
+ $data['national'] = $profile_shipping['data']['national'];
+ $data['international'] = $profile_shipping['data']['international'];
+
+ $query = $this->db->query("SELECT DISTINCT *, pd.name AS name, p.image, m.name AS manufacturer, (SELECT wcd.unit FROM " . DB_PREFIX . "weight_class_description wcd WHERE p.weight_class_id = wcd.weight_class_id AND wcd.language_id = '" . (int)$this->config->get('config_language_id') . "') AS weight_class, (SELECT lcd.unit FROM " . DB_PREFIX . "length_class_description lcd WHERE p.length_class_id = lcd.length_class_id AND lcd.language_id = '" . (int)$this->config->get('config_language_id') . "') AS length_class, p.sort_order FROM " . DB_PREFIX . "product p LEFT JOIN " . DB_PREFIX . "product_description pd ON (p.product_id = pd.product_id) LEFT JOIN " . DB_PREFIX . "product_to_store p2s ON (p.product_id = p2s.product_id) LEFT JOIN " . DB_PREFIX . "manufacturer m ON (p.manufacturer_id = m.manufacturer_id) WHERE p.product_id = '" . (int)$post['product_id'] . "' AND pd.language_id = '" . (int)$this->config->get('config_language_id') . "'");
+
+ $data['product_info'] = $query->row;
+
+ $data['product_info']['product_filters'] = array();
+
+ $filters = $this->model_catalog_product->getProductFilters($this->request->post['product_id']);
+
+ foreach ($filters as $filter_id) {
+ $filter_info = $this->model_catalog_filter->getFilter($filter_id);
+
+ if ($filter_info) {
+ $data['product_info']['product_filters'][] = array(
+ 'filter_id' => $filter_info['filter_id'],
+ 'group' => $filter_info['group'],
+ 'name' => $filter_info['name']
+ );
+ }
+ }
+
+
+ $data['description'] = $product_info['description'];
+ $data['name'] = $post['title'];
+ $data['sub_name'] = '';
+ $data['bestoffer'] = 0;
+ $data['finalCat'] = $post['finalCat'];
+ $data['price'][0] = $post['price'];
+ $data['qty'][0] = (int)$post['qty'];
+ $data['product_id'] = (int)$post['product_id'];
+
+ $data['feat'] = $post['feat'];
+ $data['featother'] = $post['featother'];
+
+ if (!empty($product_info['sku'])){
+ $data['sku'] = $product_info['sku'];
+ }
+
+ if (isset($post['identifier_ean']) && !empty($post['identifier_ean'])){
+ $data['identifier_ean'] = $post['identifier_ean'];
+ }
+
+ if (isset($post['identifier_isbn']) && !empty($post['identifier_isbn'])){
+ $data['identifier_isbn'] = $post['identifier_isbn'];
+ }
+
+ if (isset($post['identifier_upc']) && !empty($post['identifier_upc'])){
+ $data['identifier_upc'] = $post['identifier_upc'];
+ }
+
+ $data['auction_duration'] = $post['duration'];
+ $data['condition'] = (isset($post['condition']) && $post['condition'] != 0 ? $post['condition'] : '');
+ $data['auction_type'] = 'FixedPriceItem';
+ $data['catalog_epid'] = (isset($post['catalog_epid']) && $post['catalog_epid'] != 0 ? $post['catalog_epid'] : '');
+ $data['identifier_upc'] = (isset($post['identifier_upc']) && $post['identifier_upc'] != '' ? $post['identifier_upc'] : '');
+ $data['identifier_isbn'] = (isset($post['identifier_isbn']) && $post['identifier_isbn'] != '' ? $post['identifier_isbn'] : '');
+ $data['identifier_ean'] = (isset($post['identifier_ean']) && $post['identifier_ean'] != '' ? $post['identifier_ean'] : '');
+
+ $data['ebay_payment_immediate'] = $this->config->get('ebay_payment_immediate');
+ $data['paypal_email'] = $this->config->get('ebay_payment_paypal_address');
+ $data['payment_instruction'] = $this->config->get('ebay_payment_instruction');
+
+ if (isset($profile_return['data']['returns_accepted'])) {
+ $data['returns_accepted'] = $profile_return['data']['returns_accepted'];
+ }
+ if (isset($profile_return['data']['returns_policy'])) {
+ $data['return_policy'] = $profile_return['data']['returns_policy'];
+ }
+ if (isset($profile_return['data']['returns_option'])) {
+ $data['returns_option'] = $profile_return['data']['returns_option'];
+ }
+ if (isset($profile_return['data']['returns_within'])) {
+ $data['returns_within'] = $profile_return['data']['returns_within'];
+ }
+ if (isset($profile_return['data']['returns_shipping'])) {
+ $data['returns_shipping'] = $profile_return['data']['returns_shipping'];
+ }
+ if (isset($profile_return['data']['returns_restocking_fee'])) {
+ $data['returns_restocking_fee'] = $profile_return['data']['returns_restocking_fee'];
+ }
+
+ $data['location'] = $profile_shipping['data']['location'];
+ $data['postcode'] = $profile_shipping['data']['postcode'];
+ $data['dispatch_time'] = $profile_shipping['data']['dispatch_time'];
+
+ if (isset($profile_shipping['data']['country'])) {
+ $data['country'] = $profile_shipping['data']['country'];
+ }
+
+ if (isset($profile_shipping['data']['eligible_for_pickup_dropoff'])) {
+ $data['eligible_for_pickup_dropoff'] = $profile_shipping['data']['eligible_for_pickup_dropoff'];
+ }
+
+ if (isset($profile_shipping['data']['eligible_for_pickup_instore'])) {
+ $data['eligible_for_pickup_instore'] = $profile_shipping['data']['eligible_for_pickup_instore'];
+ }
+
+ if (isset($profile_shipping['data']['global_shipping'])) {
+ $data['global_shipping'] = $profile_shipping['data']['global_shipping'];
+ }
+
+ if (isset($profile_shipping['data']['promotional_shipping_discount'])) {
+ $data['promotional_shipping_discount'] = $profile_shipping['data']['promotional_shipping_discount'];
+ }
+
+ if (isset($profile_shipping['data']['promotional_shipping_discount_international'])) {
+ $data['promotional_shipping_discount_international'] = $profile_shipping['data']['promotional_shipping_discount_international'];
+ }
+
+ $data['get_it_fast'] = (isset($profile_shipping['data']['get_it_fast']) ? $profile_shipping['data']['get_it_fast'] : 0);
+
+ if (isset($profile_template['data']['ebay_template_id'])) {
+ $template = $this->model_extension_openbay_ebay_template->get($profile_template['data']['ebay_template_id']);
+ $data['template_html'] = (isset($template['html']) ? base64_encode($template['html']) : '');
+ $data['template'] = $profile_template['data']['ebay_template_id'];
+ } else {
+ $data['template_html'] = '';
+ $data['template'] = '';
+ }
+
+ $data['gallery_plus'] = $profile_template['data']['ebay_gallery_plus'];
+ $data['gallery_super'] = $profile_template['data']['ebay_supersize'];
+
+ $data['private_listing'] = $profile_generic['data']['private_listing'];
+
+ //product attributes - this is just a direct pass through used with the template tag
+ $data['attributes'] = base64_encode(json_encode($this->model_extension_openbay_ebay->getProductAttributes($post['product_id'])));
+
+ $data['payments'] = array();
+ foreach($payments as $payment) {
+ if ($payments_accepted[$payment['ebay_name']] == 1) {
+ $data['payments'][$payment['ebay_name']] = 1;
+ }
+ }
+
+ $data['main_image'] = 0;
+ $data['img'] = array();
+
+ $product_images = $this->model_catalog_product->getProductImages($post['product_id']);
+
+ $product_info['product_images'] = array();
+
+ if (!empty($product_info['image'])) {
+ $data['img'][] = $product_info['image'];
+ }
+
+ if (isset($profile_template['data']['ebay_img_ebay']) && $profile_template['data']['ebay_img_ebay'] == 1) {
+ foreach ($product_images as $product_image) {
+ if ($product_image['image'] && file_exists(DIR_IMAGE . $product_image['image'])) {
+ $data['img'][] = $product_image['image'];
+ }
+ }
+ }
+
+ if (isset($profile_template['data']['ebay_img_template']) && $profile_template['data']['ebay_img_template'] == 1) {
+ $tmp_gallery_array = array();
+ $tmp_thumbnail_array = array();
+
+ //if the user has not set the exclude default image, add it to the array for theme images.
+ $key_offset = 0;
+ if (!isset($profile_template['data']['default_img_exclude']) || $profile_template['data']['default_img_exclude'] != 1) {
+ $tmp_gallery_array[0] = $this->model_extension_openbay_openbay->storeImage($product_info['image'], $profile_template['data']['ebay_gallery_width'], $profile_template['data']['ebay_gallery_height'], 'ebay');
+ $tmp_thumbnail_array[0] = $this->model_extension_openbay_openbay->storeImage($product_info['image'], $profile_template['data']['ebay_thumb_width'], $profile_template['data']['ebay_thumb_height'], 'ebay');
+ $key_offset = 1;
+ }
+
+ //loop through the product images and add them.
+ foreach ($product_images as $k => $v) {
+ $tmp_gallery_array[$k+$key_offset] = $this->model_extension_openbay_openbay->storeImage($v['image'], $profile_template['data']['ebay_gallery_width'], $profile_template['data']['ebay_gallery_height'], 'ebay');
+ $tmp_thumbnail_array[$k+$key_offset] = $this->model_extension_openbay_openbay->storeImage($v['image'], $profile_template['data']['ebay_thumb_width'], $profile_template['data']['ebay_thumb_height'], 'ebay');
+ }
+
+ $data['img_tpl'] = $tmp_gallery_array;
+ $data['img_tpl_thumb'] = $tmp_thumbnail_array;
+ }
+
+ $weight_parts = explode('.', $product_info['weight']);
+
+ // package size and weights
+ $data['package']['depth'] = $product_info['height'];
+ $data['package']['irregular'] = 0;
+ $data['package']['length'] = $product_info['length'];
+ $data['package']['unit'] = $this->config->get('ebay_measurement');
+ $data['package']['weight_major'] = (int)$weight_parts[0];
+ $data['package']['weight_minor'] = (int)substr($weight_parts[1], 0, 3);
+ $data['package']['width'] = $product_info['width'];
+
+ $package_types = $this->openbay->ebay->getSetting('package_type');
+
+ foreach ($package_types as $package_type) {
+ if ($package_type['default'] == 1) {
+ $data['package']['package'] = $package_type['code'];
+ }
+ }
+
+ $data = array_merge($data, $profile_shipping['data']);
+
+ $verify_response = $this->model_extension_openbay_ebay->ebayVerifyAddItem($data, 'no');
+
+ $json = array(
+ 'errors' => $verify_response['data']['Errors'],
+ 'fees' => $verify_response['data']['Fees'],
+ 'itemid' => (string)$verify_response['data']['ItemID'],
+ 'preview' => (string)$verify_response['data']['link'],
+ 'i' => $this->request->get['i'],
+ 'ack' => (string)$verify_response['data']['Ack'],
+ );
+
+ $this->response->addHeader('Content-Type: application/json');
+ $this->response->setOutput(json_encode($json));
+ }
+ } else {
+ $this->response->redirect($this->url->link('marketplace/openbay/items&token=' . $this->session->data['user_token']));
+ }
+ }
+
+ public function listItem() {
+ $this->load->model('extension/openbay/openbay');
+ $this->load->model('extension/openbay/ebay');
+ $this->load->model('extension/openbay/ebay_template');
+ $this->load->model('catalog/product');
+ $this->load->model('catalog/filter');
+
+ if ($this->checkConfig() == true && $this->request->server['REQUEST_METHOD'] == 'POST') {
+ $data = $this->request->post;
+
+ if ($data['template'] != 'None') {
+ $template = $this->model_extension_openbay_ebay_template->get($data['template']);
+ $data['template_html'] = (isset($template['html']) ? base64_encode($template['html']) : '');
+ } else {
+ $data['template_html'] = '';
+ }
+
+ // set shipping data
+ $data['national'] = $data['data']['national'];
+ $data['international'] = $data['data']['international'];
+ unset($data['data']);
+
+ if (!empty($data['img_tpl'])) {
+ $tmp_gallery_array = array();
+ $tmp_thumbnail_array = array();
+ $this->load->model('tool/image');
+
+ foreach ($data['img_tpl'] as $k => $v) {
+ $tmp_gallery_array[$k] = $this->model_extension_openbay_openbay->storeImage($v, $data['gallery_width'], $data['gallery_height'], 'ebay');
+ $tmp_thumbnail_array[$k] = $this->model_extension_openbay_openbay->storeImage($v, $data['thumb_width'], $data['thumb_height'], 'ebay');
+ }
+
+ $data['img_tpl'] = $tmp_gallery_array;
+ $data['img_tpl_thumb'] = $tmp_thumbnail_array;
+ }
+
+ $query = $this->db->query("SELECT DISTINCT *, pd.name AS name, p.image, m.name AS manufacturer, (SELECT wcd.unit FROM " . DB_PREFIX . "weight_class_description wcd WHERE p.weight_class_id = wcd.weight_class_id AND wcd.language_id = '" . (int)$this->config->get('config_language_id') . "') AS weight_class, (SELECT lcd.unit FROM " . DB_PREFIX . "length_class_description lcd WHERE p.length_class_id = lcd.length_class_id AND lcd.language_id = '" . (int)$this->config->get('config_language_id') . "') AS length_class, p.sort_order FROM " . DB_PREFIX . "product p LEFT JOIN " . DB_PREFIX . "product_description pd ON (p.product_id = pd.product_id) LEFT JOIN " . DB_PREFIX . "product_to_store p2s ON (p.product_id = p2s.product_id) LEFT JOIN " . DB_PREFIX . "manufacturer m ON (p.manufacturer_id = m.manufacturer_id) WHERE p.product_id = '" . (int)$data['product_id'] . "' AND pd.language_id = '" . (int)$this->config->get('config_language_id') . "'");
+
+ $data['product_info'] = $query->row;
+
+ $data['product_info']['product_filters'] = array();
+
+ $filters = $this->model_catalog_product->getProductFilters($this->request->post['product_id']);
+
+ foreach ($filters as $filter_id) {
+ $filter_info = $this->model_catalog_filter->getFilter($filter_id);
+
+ if ($filter_info) {
+ $data['product_info']['product_filters'][] = array(
+ 'filter_id' => $filter_info['filter_id'],
+ 'group' => $filter_info['group'],
+ 'name' => $filter_info['name']
+ );
+ }
+ }
+
+ if (!empty($data['product_info']['sku'])){
+ $data['sku'] = $data['product_info']['sku'];
+ }
+
+ $json = $this->model_extension_openbay_ebay->ebayAddItem($data, $this->request->get['options']);
+
+ $this->response->addHeader('Content-Type: application/json');
+ $this->response->setOutput(json_encode($json));
+ } else {
+ $this->response->redirect($this->url->link('marketplace/openbay/items&token=' . $this->session->data['user_token']));
+ }
+ }
+
+ public function listItemBulk() {
+ $this->load->model('extension/openbay/openbay');
+ $this->load->model('extension/openbay/ebay_profile');
+ $this->load->model('extension/openbay/ebay');
+ $this->load->model('extension/openbay/ebay_template');
+ $this->load->model('catalog/product');
+ $this->load->model('tool/image');
+ $this->load->model('catalog/filter');
+
+ if ($this->request->server['REQUEST_METHOD'] == 'POST') {
+ if ($this->checkConfig() == true) {
+ $post = $this->request->post;
+ $data = array();
+
+ //load all of the listing defaults and assign to correct variable names
+ $profile_shipping = $this->model_extension_openbay_ebay_profile->get($post['shipping_profile']);
+ $profile_return = $this->model_extension_openbay_ebay_profile->get($post['return_profile']);
+ $profile_template = $this->model_extension_openbay_ebay_profile->get($post['theme_profile']);
+ $profile_generic = $this->model_extension_openbay_ebay_profile->get($post['generic_profile']);
+ $payments = $this->model_extension_openbay_ebay->getPaymentTypes();
+ $payments_accepted = $this->config->get('ebay_payment_types');
+ $product_info = $this->model_catalog_product->getProduct($post['product_id']);
+
+ // set shipping data
+ $data['national'] = $profile_shipping['data']['national'];
+ $data['international'] = $profile_shipping['data']['international'];
+
+ $query = $this->db->query("SELECT DISTINCT *, pd.name AS name, p.image, m.name AS manufacturer, (SELECT wcd.unit FROM " . DB_PREFIX . "weight_class_description wcd WHERE p.weight_class_id = wcd.weight_class_id AND wcd.language_id = '" . (int)$this->config->get('config_language_id') . "') AS weight_class, (SELECT lcd.unit FROM " . DB_PREFIX . "length_class_description lcd WHERE p.length_class_id = lcd.length_class_id AND lcd.language_id = '" . (int)$this->config->get('config_language_id') . "') AS length_class, p.sort_order FROM " . DB_PREFIX . "product p LEFT JOIN " . DB_PREFIX . "product_description pd ON (p.product_id = pd.product_id) LEFT JOIN " . DB_PREFIX . "product_to_store p2s ON (p.product_id = p2s.product_id) LEFT JOIN " . DB_PREFIX . "manufacturer m ON (p.manufacturer_id = m.manufacturer_id) WHERE p.product_id = '" . (int)$post['product_id'] . "' AND pd.language_id = '" . (int)$this->config->get('config_language_id') . "'");
+
+ $data['product_info'] = $query->row;
+
+ $data['product_info']['product_filters'] = array();
+
+ $filters = $this->model_catalog_product->getProductFilters($this->request->post['product_id']);
+
+ foreach ($filters as $filter_id) {
+ $filter_info = $this->model_catalog_filter->getFilter($filter_id);
+
+ if ($filter_info) {
+ $data['product_info']['product_filters'][] = array(
+ 'filter_id' => $filter_info['filter_id'],
+ 'group' => $filter_info['group'],
+ 'name' => $filter_info['name']
+ );
+ }
+ }
+
+ $data['description'] = $product_info['description'];
+ $data['name'] = $post['title'];
+ $data['sub_name'] = '';
+ $data['bestoffer'] = 0;
+ $data['finalCat'] = $post['finalCat'];
+ $data['price'][0] = $post['price'];
+ $data['qty'][0] = $post['qty'];
+ $data['product_id'] = $post['product_id'];
+
+ $data['feat'] = $post['feat'];
+ $data['featother'] = $post['featother'];
+
+ if (!empty($product_info['sku'])){
+ $data['sku'] = $product_info['sku'];
+ }
+
+ if (isset($post['identifier_ean']) && !empty($post['identifier_ean'])){
+ $data['identifier_ean'] = $post['identifier_ean'];
+ }
+
+ if (isset($post['identifier_isbn']) && !empty($post['identifier_isbn'])){
+ $data['identifier_isbn'] = $post['identifier_isbn'];
+ }
+
+ if (isset($post['identifier_upc']) && !empty($post['identifier_upc'])){
+ $data['identifier_upc'] = $post['identifier_upc'];
+ }
+
+ $data['auction_duration'] = $post['duration'];
+ $data['condition'] = (isset($post['condition']) && $post['condition'] != 0 ? $post['condition'] : '');
+ $data['auction_type'] = 'FixedPriceItem';
+ $data['catalog_epid'] = (isset($post['catalog_epid']) && $post['catalog_epid'] != 0 ? $post['catalog_epid'] : '');
+ $data['identifier_upc'] = (isset($post['identifier_upc']) && $post['identifier_upc'] != '' ? $post['identifier_upc'] : '');
+ $data['identifier_isbn'] = (isset($post['identifier_isbn']) && $post['identifier_isbn'] != '' ? $post['identifier_isbn'] : '');
+ $data['identifier_ean'] = (isset($post['identifier_ean']) && $post['identifier_ean'] != '' ? $post['identifier_ean'] : '');
+
+ $data['ebay_payment_immediate'] = $this->config->get('ebay_payment_immediate');
+ $data['paypal_email'] = $this->config->get('ebay_payment_paypal_address');
+ $data['payment_instruction'] = $this->config->get('ebay_payment_instruction');
+
+ if (isset($profile_return['data']['returns_accepted'])) {
+ $data['returns_accepted'] = $profile_return['data']['returns_accepted'];
+ }
+ if (isset($profile_return['data']['returns_policy'])) {
+ $data['return_policy'] = $profile_return['data']['returns_policy'];
+ }
+ if (isset($profile_return['data']['returns_option'])) {
+ $data['returns_option'] = $profile_return['data']['returns_option'];
+ }
+ if (isset($profile_return['data']['returns_within'])) {
+ $data['returns_within'] = $profile_return['data']['returns_within'];
+ }
+ if (isset($profile_return['data']['returns_shipping'])) {
+ $data['returns_shipping'] = $profile_return['data']['returns_shipping'];
+ }
+ if (isset($profile_return['data']['returns_restocking_fee'])) {
+ $data['returns_restocking_fee'] = $profile_return['data']['returns_restocking_fee'];
+ }
+
+ $data['location'] = $profile_shipping['data']['location'];
+ $data['postcode'] = $profile_shipping['data']['postcode'];
+ $data['dispatch_time'] = $profile_shipping['data']['dispatch_time'];
+
+ if (isset($profile_shipping['data']['country'])) {
+ $data['country'] = $profile_shipping['data']['country'];
+ }
+
+ if (isset($profile_shipping['data']['eligible_for_pickup_dropoff'])) {
+ $data['eligible_for_pickup_dropoff'] = $profile_shipping['data']['eligible_for_pickup_dropoff'];
+ }
+
+ if (isset($profile_shipping['data']['eligible_for_pickup_instore'])) {
+ $data['eligible_for_pickup_instore'] = $profile_shipping['data']['eligible_for_pickup_instore'];
+ }
+
+ if (isset($profile_shipping['data']['global_shipping'])) {
+ $data['global_shipping'] = $profile_shipping['data']['global_shipping'];
+ }
+
+ if (isset($profile_shipping['data']['promotional_shipping_discount'])) {
+ $data['promotional_shipping_discount'] = $profile_shipping['data']['promotional_shipping_discount'];
+ }
+
+ if (isset($profile_shipping['data']['promotional_shipping_discount_international'])) {
+ $data['promotional_shipping_discount_international'] = $profile_shipping['data']['promotional_shipping_discount_international'];
+ }
+
+ $data['get_it_fast'] = (isset($profile_shipping['data']['get_it_fast']) ? $profile_shipping['data']['get_it_fast'] : 0);
+
+ if (isset($profile_template['data']['ebay_template_id'])) {
+ $template = $this->model_extension_openbay_ebay_template->get($profile_template['data']['ebay_template_id']);
+ $data['template_html'] = (isset($template['html']) ? base64_encode($template['html']) : '');
+ $data['template'] = $profile_template['data']['ebay_template_id'];
+ } else {
+ $data['template_html'] = '';
+ $data['template'] = '';
+ }
+
+ $data['gallery_plus'] = $profile_template['data']['ebay_gallery_plus'];
+ $data['gallery_super'] = $profile_template['data']['ebay_supersize'];
+
+ $data['private_listing'] = $profile_generic['data']['private_listing'];
+
+ //product attributes - this is just a direct pass through used with the template tag
+ $data['attributes'] = base64_encode(json_encode($this->model_extension_openbay_ebay->getProductAttributes($post['product_id'])));
+
+ $data['payments'] = array();
+ foreach($payments as $payment) {
+ if ($payments_accepted[$payment['ebay_name']] == 1) {
+ $data['payments'][$payment['ebay_name']] = 1;
+ }
+ }
+
+ $data['main_image'] = 0;
+ $data['img'] = array();
+
+ $product_images = $this->model_catalog_product->getProductImages($post['product_id']);
+
+ $product_info['product_images'] = array();
+
+ if (!empty($product_info['image'])) {
+ $data['img'][] = $product_info['image'];
+ }
+
+ if (isset($profile_template['data']['ebay_img_ebay']) && $profile_template['data']['ebay_img_ebay'] == 1) {
+ foreach ($product_images as $product_image) {
+ if ($product_image['image'] && file_exists(DIR_IMAGE . $product_image['image'])) {
+ $data['img'][] = $product_image['image'];
+ }
+ }
+ }
+
+ if (isset($profile_template['data']['ebay_img_template']) && $profile_template['data']['ebay_img_template'] == 1) {
+ $tmp_gallery_array = array();
+ $tmp_thumbnail_array = array();
+
+ //if the user has not set the exclude default image, add it to the array for theme images.
+ $key_offset = 0;
+ if (!isset($profile_template['data']['default_img_exclude']) || $profile_template['data']['default_img_exclude'] != 1) {
+ $tmp_gallery_array[0] = $this->model_extension_openbay_openbay->storeImage($product_info['image'], $profile_template['data']['ebay_gallery_width'], $profile_template['data']['ebay_gallery_height'], 'ebay');
+ $tmp_thumbnail_array[0] = $this->model_extension_openbay_openbay->storeImage($product_info['image'], $profile_template['data']['ebay_thumb_width'], $profile_template['data']['ebay_thumb_height'], 'ebay');
+ $key_offset = 1;
+ }
+
+ //loop through the product images and add them.
+ foreach ($product_images as $k => $v) {
+ $tmp_gallery_array[$k+$key_offset] = $this->model_extension_openbay_openbay->storeImage($v['image'], $profile_template['data']['ebay_gallery_width'], $profile_template['data']['ebay_gallery_height'], 'ebay');
+ $tmp_thumbnail_array[$k+$key_offset] = $this->model_extension_openbay_openbay->storeImage($v['image'], $profile_template['data']['ebay_thumb_width'], $profile_template['data']['ebay_thumb_height'], 'ebay');
+ }
+
+ $data['img_tpl'] = $tmp_gallery_array;
+ $data['img_tpl_thumb'] = $tmp_thumbnail_array;
+ }
+
+ $weight_parts = explode('.', $product_info['weight']);
+
+ // package size and weights
+ $data['package']['depth'] = $product_info['height'];
+ $data['package']['irregular'] = 0;
+ $data['package']['length'] = $product_info['length'];
+ $data['package']['unit'] = $this->config->get('ebay_measurement');
+ $data['package']['weight_major'] = (int)$weight_parts[0];
+ $data['package']['weight_minor'] = (int)substr($weight_parts[1], 0, 3);
+ $data['package']['width'] = $product_info['width'];
+
+ $package_types = $this->openbay->ebay->getSetting('package_type');
+
+ foreach ($package_types as $package_type) {
+ if ($package_type['default'] == 1) {
+ $data['package']['package'] = $package_type['code'];
+ }
+ }
+
+ $data = array_merge($data, $profile_shipping['data']);
+
+ $verify_response = $this->model_extension_openbay_ebay->ebayAddItem($data, 'no');
+
+ $json = array(
+ 'errors' => $verify_response['data']['Errors'],
+ 'fees' => $verify_response['data']['Fees'],
+ 'itemid' => (string)$verify_response['data']['ItemID'],
+ 'preview' => (string)$verify_response['data']['link'],
+ 'i' => $this->request->get['i'],
+ 'ack' => (string)$verify_response['data']['Ack'],
+ );
+
+ $this->response->addHeader('Content-Type: application/json');
+ $this->response->setOutput(json_encode($json));
+ }
+ } else {
+ $this->response->redirect($this->url->link('marketplace/openbay/items&token=' . $this->session->data['user_token']));
+ }
+ }
+
+ public function repairLinks() {
+ $this->load->model('extension/openbay/ebay_product');
+
+ $this->model_extension_openbay_ebay_product->repairLinks();
+
+ $json = array('msg' => 'Links repaired');
+
+ $this->response->addHeader('Content-Type: application/json');
+ $this->response->setOutput(json_encode($json));
+ }
+
+ public function deleteAllLocks() {
+ $this->openbay->ebay->log('deleteAllLocks() - Deleting all locks');
+ $this->db->query("DELETE FROM `" . DB_PREFIX . "ebay_order_lock`");
+
+ $json = array('msg' => 'Locks deleted');
+
+ $this->response->addHeader('Content-Type: application/json');
+ $this->response->setOutput(json_encode($json));
+ }
+
+ public function endItem() {
+ $json = $this->openbay->ebay->endItem($this->request->get['item_id']);
+
+ $this->response->addHeader('Content-Type: application/json');
+ $this->response->setOutput(json_encode($json));
+ }
+
+ public function getPartsCompatibilityOptions() {
+ $this->load->model('extension/openbay/ebay_product');
+
+ $json = $this->model_extension_openbay_ebay_product->getPartsCompatibilityOptions($this->request->get['category_id']);
+
+ $this->response->addHeader('Content-Type: application/json');
+ $this->response->setOutput(json_encode($json));
+ }
+
+ public function getPartsCompatibilityValues() {
+ $this->load->model('extension/openbay/ebay_product');
+
+ $property_filter = array();
+
+ if (isset($this->request->post['filters']) && !empty($this->request->post['filters'])) {
+ $post_filters = $this->request->post['filters'];
+
+ foreach ($post_filters as $filter) {
+ $property_filter[] = array(
+ 'property_filter_name' => $filter['property_filter_name'],
+ 'property_filter_value' => $filter['property_filter_value'],
+ );
+ }
+ }
+
+ $filters = array(
+ 'category_id' => $this->request->get['category_id'],
+ 'property_name' => $this->request->get['option_name'],
+ 'property_filter' => $property_filter,
+ );
+
+ $json = $this->model_extension_openbay_ebay_product->getPartsCompatibilityValues($filters);
+
+ $this->response->addHeader('Content-Type: application/json');
+ $this->response->setOutput(json_encode($json));
+ }
+
+ public function getItemRecommendations() {
+ $this->load->language('extension/openbay/ebay_edit');
+ $this->load->model('extension/openbay/ebay_product');
+
+ if (!isset($this->request->get['item_id']) || empty($this->request->get['item_id'])) {
+ $json = array(
+ 'error' => true,
+ 'msg' => $this->language->get('error_no_item_id'),
+ );
+ } else {
+ $filters = array();
+
+ $filters['item_id'] = $this->request->get['item_id'];
+
+ if (isset($this->request->get['recommendation_type'])) {
+ $filters['recommendation_type'] = $this->request->get['recommendation_type'];
+ }
+
+ $json = $this->model_extension_openbay_ebay_product->getItemRecommendations($filters);
+ }
+
+ $this->response->addHeader('Content-Type: application/json');
+ $this->response->setOutput(json_encode($json));
+ }
+}
diff --git a/public/admin/controller/extension/openbay/ebay_profile.php b/public/admin/controller/extension/openbay/ebay_profile.php
new file mode 100644
index 0000000..082ddb2
--- /dev/null
+++ b/public/admin/controller/extension/openbay/ebay_profile.php
@@ -0,0 +1,364 @@
+<?php
+class ControllerExtensionOpenbayEbayProfile extends Controller {
+ private $error = array();
+
+ public function index() {
+ $this->load->language('extension/openbay/ebay_profile');
+
+ $data = $this->language->all();
+
+ $this->load->model('extension/openbay/ebay_profile');
+
+ $this->document->setTitle($data['heading_title']);
+ $this->document->addScript('view/javascript/openbay/js/faq.js');
+
+ if (isset($this->session->data['error'])) {
+ $data['error_warning'] = $this->session->data['error'];
+ unset($this->session->data['error']);
+ } else {
+ $data['error_warning'] = '';
+ }
+
+ if (isset($this->session->data['success'])) {
+ $data['success'] = $this->session->data['success'];
+ unset($this->session->data['success']);
+ } else {
+ $data['success'] = '';
+ }
+
+ $data['add'] = $this->url->link('extension/openbay/ebay_profile/add', 'user_token=' . $this->session->data['user_token'], true);
+ $data['types'] = $this->model_extension_openbay_ebay_profile->getTypes();
+ $data['profiles'] = $this->model_extension_openbay_ebay_profile->getAll();
+ $data['user_token'] = $this->session->data['user_token'];
+
+ $data['breadcrumbs'] = array();
+
+ $data['breadcrumbs'][] = array(
+ 'href' => $this->url->link('common/dashboard', 'user_token=' . $this->session->data['user_token'], true),
+ 'text' => $this->language->get('text_home'),
+ );
+
+ $data['breadcrumbs'][] = array(
+ 'href' => $this->url->link('marketplace/openbay', 'user_token=' . $this->session->data['user_token'], true),
+ 'text' => $this->language->get('text_openbay'),
+ );
+
+ $data['breadcrumbs'][] = array(
+ 'href' => $this->url->link('extension/openbay/ebay', 'user_token=' . $this->session->data['user_token'], true),
+ 'text' => $this->language->get('text_ebay'),
+ );
+
+ $data['breadcrumbs'][] = array(
+ 'href' => $this->url->link('extension/openbay/ebay_profile', 'user_token=' . $this->session->data['user_token'], true),
+ 'text' => $this->language->get('heading_title'),
+ );
+
+ $data['header'] = $this->load->controller('common/header');
+ $data['column_left'] = $this->load->controller('common/column_left');
+ $data['footer'] = $this->load->controller('common/footer');
+
+ $this->response->setOutput($this->load->view('extension/openbay/ebay_profile_list', $data));
+
+ }
+
+ public function add() {
+ $this->load->language('extension/openbay/ebay_profile');
+
+ $data = $this->language->all();
+
+ $this->document->setTitle($data['heading_title']);
+
+ $this->load->model('extension/openbay/ebay_profile');
+
+ if (!isset($this->request->post['step1'])) {
+ if ($this->request->post && $this->profileValidate()) {
+ $this->session->data['success'] = $data['text_added'];
+
+ $this->model_extension_openbay_ebay_profile->add($this->request->post);
+
+ $this->response->redirect($this->url->link('extension/openbay/ebay_profile', 'user_token=' . $this->session->data['user_token'], true));
+ }
+ }
+
+ $this->form($data);
+ }
+
+ public function delete() {
+ $this->load->model('extension/openbay/ebay_profile');
+
+ if (!$this->user->hasPermission('modify', 'extension/openbay/ebay_profile')) {
+ $this->error['warning'] = $this->language->get('error_permission');
+ } else {
+ if (isset($this->request->get['ebay_profile_id'])) {
+ $this->model_extension_openbay_ebay_profile->delete($this->request->get['ebay_profile_id']);
+ }
+ }
+
+ $this->response->redirect($this->url->link('extension/openbay/ebay_profile', 'user_token=' . $this->session->data['user_token'], true));
+ }
+
+ public function edit() {
+ $this->load->language('extension/openbay/ebay_profile');
+
+ $data = $this->language->all();
+
+ $this->document->setTitle($data['heading_title']);
+
+ $this->load->model('extension/openbay/ebay_profile');
+
+ if ($this->request->post && $this->profileValidate()) {
+ $this->session->data['success'] = $data['text_updated'];
+
+ $this->model_extension_openbay_ebay_profile->edit($this->request->post['ebay_profile_id'], $this->request->post);
+
+ $this->response->redirect($this->url->link('extension/openbay/ebay_profile', 'user_token=' . $this->session->data['user_token'], true));
+ }
+
+ $this->form($data);
+ }
+
+ public function form($data) {
+ $this->load->model('extension/openbay/ebay');
+ $this->load->model('extension/openbay/ebay_template');
+
+ $data['user_token'] = $this->session->data['user_token'];
+ $data['shipping_international_zones'] = $this->model_extension_openbay_ebay->getShippingLocations();
+ $data['templates'] = $this->model_extension_openbay_ebay_template->getAll();
+ $data['types'] = $this->model_extension_openbay_ebay_profile->getTypes();
+
+ $setting = array();
+ $setting['returns'] = $this->openbay->ebay->getSetting('returns');
+ $setting['dispatch_times'] = $this->openbay->ebay->getSetting('dispatch_time_max');
+ $setting['countries'] = $this->openbay->ebay->getSetting('countries');
+ $setting['shipping_types'] = $this->openbay->ebay->getSetting('shipping_types');
+ $setting['listing_restrictions'] = $this->openbay->ebay->getSetting('listing_restrictions');
+
+ if (empty($setting['dispatch_times']) || empty($setting['countries']) || empty($setting['returns'])){
+ $this->session->data['warning'] = $this->language->get('error_missing_settings');
+ $this->response->redirect($this->url->link('extension/openbay/ebay/syncronise', 'user_token=' . $this->session->data['user_token'], true));
+ }
+
+ if (is_array($setting['dispatch_times'])) {
+ ksort($setting['dispatch_times']);
+ }
+ if (is_array($setting['countries'])) {
+ ksort($setting['countries']);
+ }
+
+ $data['setting'] = $setting;
+
+ if (isset($this->error['warning'])) {
+ $data['error_warning'] = $this->error['warning'];
+ } else {
+ $data['error_warning'] = '';
+ }
+
+ $profile_info = array();
+ if (isset($this->request->get['ebay_profile_id']) && ($this->request->server['REQUEST_METHOD'] != 'POST')) {
+ $profile_info = $this->model_extension_openbay_ebay_profile->get($this->request->get['ebay_profile_id']);
+ $data['text_manage'] = $this->language->get('text_edit');
+ $data['action'] = $this->url->link('extension/openbay/ebay_profile/edit', 'user_token=' . $this->session->data['user_token'], true);
+ } else {
+ $data['action'] = $this->url->link('extension/openbay/ebay_profile/add', 'user_token=' . $this->session->data['user_token'], true);
+ $data['text_manage'] = $this->language->get('text_add');
+ }
+
+ $data['cancel'] = $this->url->link('extension/openbay/ebay_profile', 'user_token=' . $this->session->data['user_token'], true);
+
+ if (isset($this->request->post['type'])) {
+ $type = $this->request->post['type'];
+ } else {
+ $type = $profile_info['type'];
+ }
+
+ if (!array_key_exists($type, $data['types'])) {
+ $this->session->data['error'] = $data['error_no_template'];
+
+ $this->response->redirect($this->url->link('extension/openbay/ebay_profile', 'user_token=' . $this->session->data['user_token'], true));
+ }
+
+ $this->document->addScript('view/javascript/openbay/js/faq.js');
+
+ $data['breadcrumbs'] = array();
+
+ $data['breadcrumbs'][] = array(
+ 'href' => $this->url->link('common/dashboard', 'user_token=' . $this->session->data['user_token'], true),
+ 'text' => $this->language->get('text_home'),
+ );
+
+ $data['breadcrumbs'][] = array(
+ 'href' => $this->url->link('marketplace/openbay', 'user_token=' . $this->session->data['user_token'], true),
+ 'text' => $this->language->get('text_openbay'),
+ );
+
+ $data['breadcrumbs'][] = array(
+ 'href' => $this->url->link('extension/openbay/ebay', 'user_token=' . $this->session->data['user_token'], true),
+ 'text' => $this->language->get('text_ebay'),
+ );
+
+ $data['breadcrumbs'][] = array(
+ 'href' => $this->url->link('extension/openbay/ebay_profile', 'user_token=' . $this->session->data['user_token'], true),
+ 'text' => $this->language->get('heading_title')
+ );
+
+ if (isset($this->request->post['default'])) {
+ $data['default'] = $this->request->post['default'];
+ } elseif (!empty($profile_info)) {
+ $data['default'] = $profile_info['default'];
+ } else {
+ $data['default'] = 0;
+ }
+
+ if (isset($this->request->post['name'])) {
+ $data['name'] = $this->request->post['name'];
+ } elseif (!empty($profile_info)) {
+ $data['name'] = $profile_info['name'];
+ } else {
+ $data['name'] = '';
+ }
+
+ if (isset($this->request->post['description'])) {
+ $data['description'] = $this->request->post['description'];
+ } elseif (!empty($profile_info)) {
+ $data['description'] = $profile_info['description'];
+ } else {
+ $data['description'] = '';
+ }
+
+ if (isset($this->request->post['type'])) {
+ $data['type'] = $this->request->post['type'];
+ } else {
+ $data['type'] = $profile_info['type'];
+ }
+
+ if (isset($this->request->get['ebay_profile_id'])) {
+ $data['ebay_profile_id'] = $this->request->get['ebay_profile_id'];
+ } else {
+ $data['ebay_profile_id'] = '';
+ }
+
+ if (isset($this->request->post['data'])) {
+ $data['data'] = $this->request->post['data'];
+ } elseif (!empty($profile_info)) {
+ $data['data'] = $profile_info['data'];
+ } else {
+ $data['data'] = array();
+ }
+
+ if ($type == 0) {
+ $data['zones'] = $this->model_extension_openbay_ebay->getShippingLocations();
+
+ $data['data']['national']['calculated']['types'] = $this->model_extension_openbay_ebay->getShippingService(0, 'calculated');
+ $data['data']['national']['flat']['types'] = $this->model_extension_openbay_ebay->getShippingService(0, 'flat');
+ $data['data']['international']['calculated']['types'] = $this->model_extension_openbay_ebay->getShippingService(1, 'calculated');
+ $data['data']['international']['flat']['types'] = $this->model_extension_openbay_ebay->getShippingService(1, 'flat');
+
+ $data['data']['national']['calculated']['count'] = isset($data['data']['national']['calculated']['service_id']) ? max(array_keys($data['data']['national']['calculated']['service_id']))+1 : 0;
+ $data['data']['national']['flat']['count'] = isset($data['data']['national']['flat']['service_id']) ? max(array_keys($data['data']['national']['flat']['service_id']))+1 : 0;
+ $data['data']['international']['calculated']['count'] = isset($data['data']['international']['calculated']['service_id']) ? max(array_keys($data['data']['international']['calculated']['service_id']))+1 : 0;
+ $data['data']['international']['flat']['count'] = isset($data['data']['international']['flat']['service_id']) ? max(array_keys($data['data']['international']['flat']['service_id']))+1 : 0;
+
+ $payment_types = $this->model_extension_openbay_ebay->getPaymentTypes();
+ $data['cod_surcharge'] = 0;
+
+ foreach($payment_types as $payment) {
+ if ($payment['ebay_name'] == 'COD') {
+ $data['cod_surcharge'] = 1;
+ }
+ }
+
+ if (!isset($data['data']['national']['shipping_type'])) {
+ $data['data']['national']['shipping_type'] = 'flat';
+ }
+
+ if (!isset($data['data']['international']['shipping_type'])) {
+ $data['data']['international']['shipping_type'] = 'flat';
+ }
+
+ $data['html_national_flat'] = $this->load->view('extension/openbay/ebay_profile_shipping_national_flat', $data);
+ $data['html_international_flat'] = $this->load->view('extension/openbay/ebay_profile_shipping_international_flat', $data);
+ $data['html_national_calculated'] = $this->load->view('extension/openbay/ebay_profile_shipping_national_calculated', $data);
+ $data['html_international_calculated'] = $this->load->view('extension/openbay/ebay_profile_shipping_international_calculated', $data);
+ }
+
+ $data['header'] = $this->load->controller('common/header');
+ $data['column_left'] = $this->load->controller('common/column_left');
+ $data['footer'] = $this->load->controller('common/footer');
+
+ $this->response->setOutput($this->load->view($data['types'][$type]['template'], $data));
+ }
+
+ public function get() {
+ $this->load->model('extension/openbay/ebay_profile');
+ $this->load->model('extension/openbay/ebay');
+ $this->load->language('extension/openbay/ebay_profile');
+
+ $profile_info = $this->model_extension_openbay_ebay_profile->get($this->request->get['ebay_profile_id']);
+ $data = array();
+
+ if ($profile_info['type'] == 0) {
+ $data['data'] = $profile_info['data'];
+ $data['data']['national']['calculated']['types'] = $this->model_extension_openbay_ebay->getShippingService(0, 'calculated');
+ $data['data']['international']['calculated']['types'] = $this->model_extension_openbay_ebay->getShippingService(1, 'calculated');
+ $data['data']['national']['flat']['types'] = $this->model_extension_openbay_ebay->getShippingService(0, 'flat');
+ $data['data']['international']['flat']['types'] = $this->model_extension_openbay_ebay->getShippingService(1, 'flat');
+
+ $data['data']['national']['calculated']['count'] = isset($data['data']['national']['calculated']['service_id']) ? max(array_keys($data['data']['national']['calculated']['service_id']))+1 : 0;
+ $data['data']['national']['flat']['count'] = isset($data['data']['national']['flat']['service_id']) ? max(array_keys($data['data']['national']['flat']['service_id']))+1 : 0;
+ $data['data']['international']['calculated']['count'] = isset($data['data']['international']['calculated']['service_id']) ? max(array_keys($data['data']['international']['calculated']['service_id']))+1 : 0;
+ $data['data']['international']['flat']['count'] = isset($data['data']['international']['flat']['service_id']) ? max(array_keys($data['data']['international']['flat']['service_id']))+1 : 0;
+
+ $data['zones'] = $this->model_extension_openbay_ebay->getShippingLocations();
+
+ $data['text_shipping_service'] = $this->language->get('text_shipping_service');
+ $data['text_shipping_first'] = $this->language->get('text_shipping_first');
+ $data['button_delete'] = $this->language->get('button_delete');
+ $data['text_shipping_zones'] = $this->language->get('text_shipping_zones');
+ $data['text_shipping_worldwide'] = $this->language->get('text_shipping_worldwide');
+ $data['text_shipping_add'] = $this->language->get('text_shipping_add');
+ $data['text_cod_surcharge'] = $this->language->get('text_cod_surcharge');
+
+ $payment_types = $this->model_extension_openbay_ebay->getPaymentTypes();
+ $data['cod_surcharge'] = 0;
+
+ if (!empty($payment_types)) {
+ foreach($payment_types as $payment) {
+ if ($payment['ebay_name'] == 'COD') {
+ $data['cod_surcharge'] = 1;
+ }
+ }
+ }
+ $return['national']['type'] = $data['data']['national']['shipping_type'];
+ $return['international']['type'] = $data['data']['international']['shipping_type'];
+
+ $return['national_flat_count'] = (int)$data['data']['national']['flat']['count'];
+ $return['national_flat'] = $this->load->view('extension/openbay/ebay_profile_shipping_national_flat', $data);
+
+ $return['international_flat_count'] = (int)$data['data']['international']['flat']['count'];
+ $return['international_flat'] = $this->load->view('extension/openbay/ebay_profile_shipping_international_flat', $data);
+
+ $return['national_calculated_count'] = (int)$data['data']['national']['calculated']['count'];
+ $return['national_calculated'] = $this->load->view('extension/openbay/ebay_profile_shipping_national_calculated', $data);
+
+ $return['international_calculated_count'] = (int)$data['data']['international']['flat']['count'];
+ $return['international_calculated'] = $this->load->view('extension/openbay/ebay_profile_shipping_international_calculated', $data);
+
+ $profile_info['html'] = $return;
+ }
+
+ $this->response->addHeader('Content-Type: application/json');
+ $this->response->setOutput(json_encode($profile_info));
+ }
+
+ private function profileValidate() {
+ if (!$this->user->hasPermission('modify', 'extension/openbay/ebay_profile')) {
+ $this->error['warning'] = $this->language->get('error_permission');
+ }
+
+ if ($this->request->post['name'] == '') {
+ $this->error['name'] = $this->language->get('error_name');
+ }
+
+ return !$this->error;
+ }
+}
diff --git a/public/admin/controller/extension/openbay/ebay_template.php b/public/admin/controller/extension/openbay/ebay_template.php
new file mode 100644
index 0000000..131ac14
--- /dev/null
+++ b/public/admin/controller/extension/openbay/ebay_template.php
@@ -0,0 +1,216 @@
+<?php
+class ControllerExtensionOpenbayEbayTemplate extends Controller {
+ private $error = array();
+
+ public function listAll() {
+ $this->load->language('extension/openbay/ebay_template');
+
+ $data = $this->language->all();
+
+ $this->load->model('extension/openbay/ebay_template');
+
+ $this->document->setTitle($data['heading_title']);
+ $this->document->addScript('view/javascript/openbay/js/faq.js');
+
+ if (isset($this->session->data['error'])) {
+ $data['error_warning'] = $this->session->data['error'];
+ unset($this->session->data['error']);
+ } else {
+ $data['error_warning'] = '';
+ }
+
+ if (isset($this->session->data['success'])) {
+ $data['success'] = $this->session->data['success'];
+ unset($this->session->data['success']);
+ } else {
+ $data['success'] = '';
+ }
+
+ $data['add'] = $this->url->link('extension/openbay/ebay_template/add', 'user_token=' . $this->session->data['user_token'], true);
+ $data['cancel'] = $this->url->link('extension/openbay/ebay', 'user_token=' . $this->session->data['user_token'], true);
+
+ $data['templates'] = $this->model_extension_openbay_ebay_template->getAll();
+ $data['user_token'] = $this->session->data['user_token'];
+
+ $data['breadcrumbs'] = array();
+
+ $data['breadcrumbs'][] = array(
+ 'href' => $this->url->link('common/dashboard', 'user_token=' . $this->session->data['user_token'], true),
+ 'text' => $this->language->get('text_home'),
+ );
+
+ $data['breadcrumbs'][] = array(
+ 'href' => $this->url->link('marketplace/openbay', 'user_token=' . $this->session->data['user_token'], true),
+ 'text' => $this->language->get('text_openbay'),
+ );
+
+ $data['breadcrumbs'][] = array(
+ 'href' => $this->url->link('extension/openbay/ebay', 'user_token=' . $this->session->data['user_token'], true),
+ 'text' => $this->language->get('text_ebay'),
+ );
+
+ $data['breadcrumbs'][] = array(
+ 'href' => $this->url->link('extension/openbay/ebay_template/listAll', 'user_token=' . $this->session->data['user_token'], true),
+ 'text' => $this->language->get('heading_title'),
+ );
+
+ $data['header'] = $this->load->controller('common/header');
+ $data['column_left'] = $this->load->controller('common/column_left');
+ $data['footer'] = $this->load->controller('common/footer');
+
+ $this->response->setOutput($this->load->view('extension/openbay/ebay_template_list', $data));
+ }
+
+ public function add() {
+ $this->load->language('extension/openbay/ebay_template');
+
+ $data = $this->language->all();
+
+ $this->load->model('extension/openbay/ebay_template');
+
+ $data['page_title'] = $data['heading_title'];
+ $data['btn_save'] = $this->url->link('extension/openbay/ebay_template/add', 'user_token=' . $this->session->data['user_token'], true);
+ $data['cancel'] = $this->url->link('extension/openbay/ebay_template/listAll', 'user_token=' . $this->session->data['user_token'], true);
+
+ if ($this->request->post && $this->templateValidate()) {
+ $this->session->data['success'] = $data['text_added'];
+
+ $this->model_extension_openbay_ebay_template->add($this->request->post);
+
+ $this->response->redirect($this->url->link('extension/openbay/ebay_template/listAll', 'user_token=' . $this->session->data['user_token'], true));
+ }
+
+ $this->templateForm($data);
+ }
+
+ public function delete() {
+ $this->load->language('extension/openbay/ebay_template');
+ $this->load->model('extension/openbay/ebay_template');
+
+ if (!$this->user->hasPermission('modify', 'extension/openbay/ebay_template')) {
+ $this->error['warning'] = $this->language->get('error_permission');
+ } else {
+ if (isset($this->request->get['template_id'])) {
+ $this->model_extension_openbay_ebay_template->delete($this->request->get['template_id']);
+
+ $this->session->data['success'] = $this->language->get('text_deleted');
+ }
+ }
+ $this->response->redirect($this->url->link('extension/openbay/ebay_template/listAll', 'user_token=' . $this->session->data['user_token'], true));
+ }
+
+ public function edit() {
+ $this->load->language('extension/openbay/ebay_template');
+
+ $data = $this->language->all();
+
+ $this->load->model('extension/openbay/ebay_template');
+
+ $this->document->setTitle($data['heading_title']);
+
+ $data['btn_save'] = $this->url->link('extension/openbay/ebay_template/edit', 'user_token=' . $this->session->data['user_token'], true);
+ $data['cancel'] = $this->url->link('extension/openbay/ebay_template/listAll', 'user_token=' . $this->session->data['user_token'], true);
+
+ if ($this->request->post && $this->templateValidate()) {
+
+ $this->session->data['success'] = $data['text_updated'];
+
+ $this->model_extension_openbay_ebay_template->edit($this->request->post['template_id'], $this->request->post);
+
+ $this->response->redirect($this->url->link('extension/openbay/ebay_template/listAll', 'user_token=' . $this->session->data['user_token'], true));
+ }
+
+ $this->templateForm($data);
+ }
+
+ public function templateForm($data) {
+ $this->load->model('extension/openbay/ebay');
+
+ $data['user_token'] = $this->session->data['user_token'];
+
+ if (isset($this->error['warning'])) {
+ $data['error_warning'] = $this->error['warning'];
+ } else {
+ $data['error_warning'] = '';
+ }
+
+ if (isset($this->request->get['template_id']) && ($this->request->server['REQUEST_METHOD'] != 'POST')) {
+ $template_info = $this->model_extension_openbay_ebay_template->get($this->request->get['template_id']);
+ $data['text_manage'] = $this->language->get('text_edit');
+ } else {
+ $data['text_manage'] = $this->language->get('text_add');
+ }
+
+ $this->document->setTitle($data['heading_title']);
+
+ $this->document->addStyle('view/javascript/codemirror/lib/codemirror.css');
+ $this->document->addStyle('view/javascript/codemirror/theme/monokai.css');
+ $this->document->addScript('view/javascript/codemirror/lib/codemirror.js');
+ $this->document->addScript('view/javascript/codemirror/lib/formatting.js');
+ $this->document->addScript('view/javascript/codemirror/lib/xml.js');
+
+ $this->document->addScript('view/javascript/openbay/js/faq.js');
+
+ $data['breadcrumbs'] = array();
+
+ $data['breadcrumbs'][] = array(
+ 'href' => $this->url->link('common/dashboard', 'user_token=' . $this->session->data['user_token'], true),
+ 'text' => $this->language->get('text_home'),
+ );
+
+ $data['breadcrumbs'][] = array(
+ 'href' => $this->url->link('marketplace/openbay', 'user_token=' . $this->session->data['user_token'], true),
+ 'text' => 'OpenBay Pro',
+ );
+
+ $data['breadcrumbs'][] = array(
+ 'href' => $this->url->link('extension/openbay/ebay', 'user_token=' . $this->session->data['user_token'], true),
+ 'text' => 'eBay',
+ );
+
+ $data['breadcrumbs'][] = array(
+ 'href' => $this->url->link('extension/openbay/ebay_template/listAll', 'user_token=' . $this->session->data['user_token'], true),
+ 'text' => 'Profiles',
+ );
+
+ if (isset($this->request->post['name'])) {
+ $data['name'] = $this->request->post['name'];
+ } elseif (!empty($template_info)) {
+ $data['name'] = $template_info['name'];
+ } else {
+ $data['name'] = '';
+ }
+
+ if (isset($this->request->post['html'])) {
+ $data['html'] = $this->request->post['html'];
+ } elseif (!empty($template_info)) {
+ $data['html'] = $template_info['html'];
+ } else {
+ $data['html'] = '';
+ }
+
+ if (isset($this->request->get['template_id'])) {
+ $data['template_id'] = $this->request->get['template_id'];
+ } else {
+ $data['template_id'] = '';
+ }
+
+ $data['header'] = $this->load->controller('common/header');
+ $data['column_left'] = $this->load->controller('common/column_left');
+ $data['footer'] = $this->load->controller('common/footer');
+
+ $this->response->setOutput($this->load->view('extension/openbay/ebay_template_form', $data));
+ }
+
+ private function templateValidate() {
+ if (!$this->user->hasPermission('modify', 'extension/openbay/ebay_template')) {
+ $this->error['warning'] = $this->language->get('error_permission');
+ }
+
+ if ($this->request->post['name'] == '') {
+ $this->error['warning'] = $this->language->get('error_name');
+ }
+
+ return !$this->error;
+ }
+}
diff --git a/public/admin/controller/extension/openbay/etsy.php b/public/admin/controller/extension/openbay/etsy.php
new file mode 100644
index 0000000..125dae6
--- /dev/null
+++ b/public/admin/controller/extension/openbay/etsy.php
@@ -0,0 +1,233 @@
+<?php
+class ControllerExtensionOpenbayEtsy extends Controller {
+ public function install() {
+ $this->load->language('extension/openbay/etsy');
+ $this->load->model('extension/openbay/etsy');
+ $this->load->model('setting/setting');
+ $this->load->model('setting/extension');
+ $this->load->model('user/user_group');
+
+ $this->model_user_user_group->addPermission($this->user->getGroupId(), 'access', 'extension/openbay/etsy_product');
+ $this->model_user_user_group->addPermission($this->user->getGroupId(), 'modify', 'extension/openbay/etsy_product');
+ $this->model_user_user_group->addPermission($this->user->getGroupId(), 'access', 'extension/openbay/etsy_shipping');
+ $this->model_user_user_group->addPermission($this->user->getGroupId(), 'modify', 'extension/openbay/etsy_shipping');
+ $this->model_user_user_group->addPermission($this->user->getGroupId(), 'access', 'extension/openbay/etsy_shop');
+ $this->model_user_user_group->addPermission($this->user->getGroupId(), 'modify', 'extension/openbay/etsy_shop');
+
+ $this->model_extension_openbay_etsy->install();
+ }
+
+ public function uninstall() {
+ $this->load->model('extension/openbay/etsy');
+ $this->load->model('setting/setting');
+ $this->load->model('setting/extension');
+
+ $this->model_extension_openbay_etsy->uninstall();
+ $this->model_setting_extension->uninstall('openbay', $this->request->get['extension']);
+ $this->model_setting_setting->deleteSetting($this->request->get['extension']);
+ }
+
+ public function index() {
+ $this->load->language('extension/openbay/etsy');
+
+ $data = $this->language->all();
+
+ $this->document->setTitle($this->language->get('text_dashboard'));
+ $this->document->addScript('view/javascript/openbay/js/faq.js');
+
+ $data['breadcrumbs'] = array();
+
+ $data['breadcrumbs'][] = array(
+ 'href' => $this->url->link('common/dashboard', 'user_token=' . $this->session->data['user_token'], true),
+ 'text' => $this->language->get('text_home'),
+ );
+
+ $data['breadcrumbs'][] = array(
+ 'href' => $this->url->link('marketplace/openbay', 'user_token=' . $this->session->data['user_token'], true),
+ 'text' => $this->language->get('text_openbay'),
+ );
+
+ $data['breadcrumbs'][] = array(
+ 'href' => $this->url->link('extension/openbay/etsy', 'user_token=' . $this->session->data['user_token'], true),
+ 'text' => $this->language->get('text_dashboard'),
+ );
+
+ if (isset($this->session->data['success'])) {
+ $data['success'] = $this->session->data['success'];
+ unset($this->session->data['success']);
+ } else {
+ $data['success'] = '';
+ }
+
+ if (isset($this->session->data['error'])) {
+ $data['error_warning'] = $this->session->data['error'];
+ unset($this->session->data['error']);
+ } else {
+ $data['error_warning'] = '';
+ }
+
+ $data['validation'] = $this->openbay->etsy->validate();
+ $data['links_settings'] = $this->url->link('extension/openbay/etsy/settings', 'user_token=' . $this->session->data['user_token'], true);
+ $data['links_products'] = $this->url->link('extension/openbay/etsy_product/links', 'user_token=' . $this->session->data['user_token'], true);
+ $data['links_listings'] = $this->url->link('extension/openbay/etsy_product/listings', 'user_token=' . $this->session->data['user_token'], true);
+ $data['link_signup'] = 'https://account.openbaypro.com/etsy/apiRegister/?endpoint=2&utm_source=opencart_install&utm_medium=dashboard&utm_campaign=etsy';
+
+ $data['header'] = $this->load->controller('common/header');
+ $data['column_left'] = $this->load->controller('common/column_left');
+ $data['footer'] = $this->load->controller('common/footer');
+
+ $this->response->setOutput($this->load->view('extension/openbay/etsy', $data));
+ }
+
+ public function settings() {
+ $this->load->model('setting/setting');
+ $this->load->model('extension/openbay/etsy');
+ $this->load->model('localisation/order_status');
+
+ $this->load->language('extension/openbay/etsy_settings');
+
+ $data = $this->language->all();
+
+ if (($this->request->server['REQUEST_METHOD'] == 'POST') && ($this->validate())) {
+ $this->model_setting_setting->editSetting('etsy', $this->request->post);
+
+ $this->openbay->etsy->resetConfig($this->request->post['etsy_token'], $this->request->post['etsy_encryption_key']);
+
+ $account_info = $this->model_extension_openbay_etsy->verifyAccount();
+
+ if (isset($account_info['header_code']) && $account_info['header_code'] == 200) {
+ $this->openbay->etsy->settingsUpdate();
+
+ $this->session->data['success'] = $this->language->get('text_success');
+ } else {
+ $this->session->data['error'] = $this->language->get('error_account_info');
+ }
+
+ $this->response->redirect($this->url->link('extension/openbay/etsy', 'user_token=' . $this->session->data['user_token'], true));
+ }
+
+ $this->document->setTitle($this->language->get('heading_title'));
+ $this->document->addScript('view/javascript/openbay/js/faq.js');
+ $data['breadcrumbs'] = array();
+
+ $data['breadcrumbs'][] = array(
+ 'href' => $this->url->link('common/dashboard', 'user_token=' . $this->session->data['user_token'], true),
+ 'text' => $this->language->get('text_home'),
+ );
+
+ $data['breadcrumbs'][] = array(
+ 'href' => $this->url->link('marketplace/openbay', 'user_token=' . $this->session->data['user_token'], true),
+ 'text' => $this->language->get('text_openbay'),
+ );
+
+ $data['breadcrumbs'][] = array(
+ 'href' => $this->url->link('extension/openbay/etsy', 'user_token=' . $this->session->data['user_token'], true),
+ 'text' => $this->language->get('text_etsy'),
+ );
+
+ $data['breadcrumbs'][] = array(
+ 'href' => $this->url->link('extension/openbay/etsy/settings', 'user_token=' . $this->session->data['user_token'], true),
+ 'text' => $this->language->get('heading_title'),
+ );
+
+ $data['action'] = $this->url->link('extension/openbay/etsy/settings', 'user_token=' . $this->session->data['user_token'], true);
+ $data['cancel'] = $this->url->link('extension/openbay/etsy', 'user_token=' . $this->session->data['user_token'], true);
+
+ $data['user_token'] = $this->session->data['user_token'];
+
+ if (isset($this->error['warning'])) {
+ $data['error_warning'] = $this->error['warning'];
+ } else {
+ $data['error_warning'] = '';
+ }
+
+ if (isset($this->request->post['etsy_status'])) {
+ $data['etsy_status'] = $this->request->post['etsy_status'];
+ } else {
+ $data['etsy_status'] = $this->config->get('etsy_status');
+ }
+
+ if (isset($this->request->post['etsy_token'])) {
+ $data['etsy_token'] = $this->request->post['etsy_token'];
+ } else {
+ $data['etsy_token'] = $this->config->get('etsy_token');
+ }
+
+ if (isset($this->request->post['etsy_encryption_key'])) {
+ $data['etsy_encryption_key'] = $this->request->post['etsy_encryption_key'];
+ } else {
+ $data['etsy_encryption_key'] = $this->config->get('etsy_encryption_key');
+ }
+
+ if (isset($this->request->post['etsy_encryption_iv'])) {
+ $data['etsy_encryption_iv'] = $this->request->post['etsy_encryption_iv'];
+ } else {
+ $data['etsy_encryption_iv'] = $this->config->get('etsy_encryption_iv');
+ }
+
+ if (isset($this->request->post['etsy_address_format'])) {
+ $data['etsy_address_format'] = $this->request->post['etsy_address_format'];
+ } else {
+ $data['etsy_address_format'] = $this->config->get('etsy_address_format');
+ }
+
+ if (isset($this->request->post['etsy_order_status_new'])) {
+ $data['etsy_order_status_new'] = $this->request->post['etsy_order_status_new'];
+ } else {
+ $data['etsy_order_status_new'] = $this->config->get('etsy_order_status_new');
+ }
+
+ if (isset($this->request->post['etsy_order_status_paid'])) {
+ $data['etsy_order_status_paid'] = $this->request->post['etsy_order_status_paid'];
+ } else {
+ $data['etsy_order_status_paid'] = $this->config->get('etsy_order_status_paid');
+ }
+
+ if (isset($this->request->post['etsy_order_status_shipped'])) {
+ $data['etsy_order_status_shipped'] = $this->request->post['etsy_order_status_shipped'];
+ } else {
+ $data['etsy_order_status_shipped'] = $this->config->get('etsy_order_status_shipped');
+ }
+
+ if (isset($this->request->post['etsy_logging'])) {
+ $data['etsy_logging'] = $this->request->post['etsy_logging'];
+ } else {
+ $data['etsy_logging'] = $this->config->get('etsy_logging');
+ }
+
+ $data['api_server'] = $this->openbay->etsy->getServer();
+ $data['order_statuses'] = $this->model_localisation_order_status->getOrderStatuses();
+ $data['account_info'] = $this->model_extension_openbay_etsy->verifyAccount();
+ $data['link_signup'] = 'https://account.openbaypro.com/etsy/apiRegister/?endpoint=2&utm_source=opencart_install&utm_medium=settings&utm_campaign=etsy';
+
+ $data['header'] = $this->load->controller('common/header');
+ $data['column_left'] = $this->load->controller('common/column_left');
+ $data['footer'] = $this->load->controller('common/footer');
+
+ $this->response->setOutput($this->load->view('extension/openbay/etsy_settings', $data));
+ }
+
+ public function settingsUpdate() {
+ $this->openbay->etsy->settingsUpdate();
+
+ $response = array('header_code' => 200);
+
+ $this->response->addHeader('Content-Type: application/json');
+ $this->response->setOutput(json_encode($response));
+ }
+
+ public function getOrders() {
+ $response = $this->openbay->etsy->call('v1/etsy/order/get/all/', 'GET');
+
+ $this->response->addHeader('Content-Type: application/json');
+ $this->response->setOutput(json_encode($response));
+ }
+
+ protected function validate() {
+ if (!$this->user->hasPermission('modify', 'extension/openbay/etsy')) {
+ $this->error['warning'] = $this->language->get('error_permission');
+ }
+
+ return !$this->error;
+ }
+}
diff --git a/public/admin/controller/extension/openbay/etsy_product.php b/public/admin/controller/extension/openbay/etsy_product.php
new file mode 100644
index 0000000..c1076da
--- /dev/null
+++ b/public/admin/controller/extension/openbay/etsy_product.php
@@ -0,0 +1,761 @@
+<?php
+class ControllerExtensionOpenbayEtsyProduct extends Controller {
+ private $error;
+
+ public function create() {
+ $this->load->language('extension/openbay/etsy_create');
+
+ $data = $this->language->all();
+
+ $this->document->setTitle($this->language->get('heading_title'));
+ $this->document->addScript('view/javascript/openbay/js/faq.js');
+
+ $this->load->model('catalog/product');
+ $this->load->model('tool/image');
+
+ $data['action'] = $this->url->link('extension/openbay/etsy_product/create', 'user_token=' . $this->session->data['user_token'], true);
+ $data['cancel'] = $this->url->link('marketplace/openbay/items', 'user_token=' . $this->session->data['user_token'], true);
+ $data['user_token'] = $this->session->data['user_token'];
+
+ $data['breadcrumbs'] = array();
+ $data['breadcrumbs'][] = array(
+ 'href' => $this->url->link('common/dashboard', 'user_token=' . $this->session->data['user_token'], true),
+ 'text' => $this->language->get('text_home'),
+ );
+ $data['breadcrumbs'][] = array(
+ 'href' => $this->url->link('marketplace/openbay', 'user_token=' . $this->session->data['user_token'], true),
+ 'text' => $this->language->get('text_openbay'),
+ );
+ $data['breadcrumbs'][] = array(
+ 'href' => $this->url->link('extension/openbay/etsy', 'user_token=' . $this->session->data['user_token'], true),
+ 'text' => $this->language->get('text_etsy'),
+ );
+ $data['breadcrumbs'][] = array(
+ 'href' => $this->url->link('extension/openbay/etsy_product/create', 'user_token=' . $this->session->data['user_token'], true),
+ 'text' => $this->language->get('heading_title'),
+ );
+
+ $product_info = $this->model_catalog_product->getProduct($this->request->get['product_id']);
+
+ $this->load->model('tool/image');
+
+ if (!empty($product_info) && is_file(DIR_IMAGE . $product_info['image'])) {
+ $product_info['image_url'] = $this->model_tool_image->resize($product_info['image'], 800, 800);
+ $product_info['thumb'] = $this->model_tool_image->resize($product_info['image'], 100, 100);
+ } else {
+ $product_info['image_url'] = '';
+ $product_info['thumb'] = $this->model_tool_image->resize('no_image.png', 100, 100);
+ }
+
+ // Images
+ if (isset($this->request->get['product_id'])) {
+ $product_images = $this->model_catalog_product->getProductImages($this->request->get['product_id']);
+ } else {
+ $product_images = array();
+ }
+
+ $data['product_images'] = array();
+
+ foreach ($product_images as $product_image) {
+ if (is_file(DIR_IMAGE . $product_image['image'])) {
+ $image = $product_image['image'];
+ } else {
+ $image = '';
+ }
+
+ $product_info['product_images'][] = array(
+ 'image_url' => $this->model_tool_image->resize($image, 800, 800),
+ 'thumb' => $this->model_tool_image->resize($image, 100, 100),
+ 'sort_order' => $product_image['sort_order']
+ );
+ }
+
+ $data['product'] = $product_info;
+ $data['product']['description_raw'] = trim(strip_tags(html_entity_decode($data['product']['description'], ENT_QUOTES, 'UTF-8')));
+
+ $setting = array();
+
+ $setting['who_made'] = $this->openbay->etsy->getSetting('who_made');
+ if (is_array($setting['who_made'])) {
+ ksort($setting['who_made']);
+ }
+
+ $setting['when_made'] = $this->openbay->etsy->getSetting('when_made');
+ if (is_array($setting['when_made'])) {
+ ksort($setting['when_made']);
+ }
+
+ $setting['recipient'] = $this->openbay->etsy->getSetting('recipient');
+ if (is_array($setting['recipient'])) {
+ ksort($setting['recipient']);
+ }
+
+ $setting['occasion'] = $this->openbay->etsy->getSetting('occasion');
+ if (is_array($setting['occasion'])) {
+ ksort($setting['occasion']);
+ }
+
+ $setting['state'] = array('active', 'draft');
+
+ $data['setting'] = $setting;
+
+ if ($product_info['quantity'] > 999) {
+ $this->error['warning'] = sprintf($this->language->get('error_stock_max'), $product_info['quantity']);
+ }
+
+ if (isset($this->error['warning'])) {
+ $data['error_warning'] = $this->error['warning'];
+ } else {
+ $data['error_warning'] = '';
+ }
+
+ if ($this->openbay->addonLoad('openstock') && $product_info['has_option'] == 1) {
+ $data['error_variant'] = $this->language->get('error_variant');
+ } else {
+ $data['error_variant'] = '';
+ }
+
+ $data['header'] = $this->load->controller('common/header');
+ $data['column_left'] = $this->load->controller('common/column_left');
+ $data['footer'] = $this->load->controller('common/footer');
+
+ $this->response->setOutput($this->load->view('extension/openbay/etsy_create', $data));
+ }
+
+ public function createSubmit() {
+ $this->load->language('extension/openbay/etsy_create');
+ $this->load->model('extension/openbay/etsy_product');
+
+ $data = $this->request->post;
+
+ // validation
+ if (!isset($data['title']) || empty($data['title']) || strlen($data['title']) > 255) {
+ if (strlen($data['title']) > 255) {
+ $this->error['title'] = $this->language->get('error_title_length');
+ } else {
+ $this->error['title'] = $this->language->get('error_title_missing');
+ }
+ }
+
+ if (!isset($data['description']) || empty($data['description'])) {
+ $this->error['title'] = $this->language->get('error_desc_missing');
+ }
+
+ if (!isset($data['price']) || empty($data['price'])) {
+ $this->error['price'] = $this->language->get('error_price_missing');
+ }
+
+ if (!isset($data['taxonomy_id']) || empty($data['taxonomy_id']) || $data['taxonomy_id'] == 0) {
+ $this->error['taxonomy_id'] = $this->language->get('error_category');
+ }
+
+ if (isset($data['tags']) && count($data['tags']) > 13) {
+ $this->error['tags'] = $this->language->get('error_tags');
+ }
+
+ if (isset($data['materials']) && count($data['materials']) > 13) {
+ $this->error['materials'] = $this->language->get('error_materials');
+ }
+
+ if (isset($data['style_1']) && !empty($data['style_1'])) {
+ if (preg_match('/[^\p{L}\p{Nd}\p{Zs}]/u', $data['style_1']) == 1) {
+ $this->error['style_1'] = $this->language->get('error_style_1_tag');
+ }
+ }
+
+ if (isset($data['style_2']) && !empty($data['style_2'])) {
+ if (preg_match('/[^\p{L}\p{Nd}\p{Zs}]/u', $data['style_2']) == 1) {
+ $this->error['style_2'] = $this->language->get('error_style_2_tag');
+ }
+ }
+
+ if ($data['quantity'] > 999) {
+ $this->error['quantity'] = sprintf($this->language->get('error_stock_max'), $data['quantity']);
+ }
+
+ if (isset($data['product_image']) && count($data['product_image']) > 4) {
+ $this->error['images'] = sprintf($this->language->get('error_image_max'), count($data['product_image'])+1);
+ }
+
+ if (!$this->error) {
+ // process the request
+ $response = $this->openbay->etsy->call('v1/etsy/product/listing/create/', 'POST', $data);
+
+ $this->response->addHeader('Content-Type: application/json');
+
+ if (isset($response['data']['results'][0]['listing_id'])) {
+ $this->model_extension_openbay_etsy_product->addLink($data['product_id'], $response['data']['results'][0]['listing_id'], 1);
+ }
+
+ if (isset($response['data']['error'])) {
+ $this->response->setOutput(json_encode($response['data']));
+ } else {
+ $this->response->setOutput(json_encode($response['data']['results'][0]));
+ }
+ } else {
+ $this->response->setOutput(json_encode(array('error' => $this->error)));
+ }
+ }
+
+ public function edit() {
+ $this->load->language('extension/openbay/etsy_edit');
+
+ $data = $this->language->all();
+
+ $this->load->model('extension/openbay/etsy_product');
+ $this->load->model('tool/image');
+
+ $this->document->setTitle($this->language->get('heading_title'));
+ $this->document->addScript('view/javascript/openbay/js/faq.js');
+
+ $data['action'] = $this->url->link('extension/openbay/etsy_product/editSubmit', 'user_token=' . $this->session->data['user_token'], true);
+ $data['cancel'] = $this->url->link('marketplace/openbay/items', 'user_token=' . $this->session->data['user_token'], true);
+ $data['user_token'] = $this->session->data['user_token'];
+
+ $data['breadcrumbs'] = array();
+ $data['breadcrumbs'][] = array(
+ 'href' => $this->url->link('common/dashboard', 'user_token=' . $this->session->data['user_token'], true),
+ 'text' => $this->language->get('text_home'),
+ );
+ $data['breadcrumbs'][] = array(
+ 'href' => $this->url->link('marketplace/openbay', 'user_token=' . $this->session->data['user_token'], true),
+ 'text' => $this->language->get('text_openbay'),
+ );
+ $data['breadcrumbs'][] = array(
+ 'href' => $this->url->link('extension/openbay/etsy', 'user_token=' . $this->session->data['user_token'], true),
+ 'text' => $this->language->get('text_etsy'),
+ );
+ $data['breadcrumbs'][] = array(
+ 'href' => $this->url->link('extension/openbay/etsy_product/edit', 'user_token=' . $this->session->data['user_token'] . '&product_id=' . $this->request->get['product_id'], true),
+ 'text' => $this->language->get('heading_title'),
+ );
+
+ $links = $this->openbay->etsy->getLinks($this->request->get['product_id'], 1, 1);
+
+ $data['listing'] = $this->openbay->etsy->getEtsyItem($links[0]['etsy_item_id']);
+
+ $data['etsy_item_id'] = $links[0]['etsy_item_id'];
+ $data['product_id'] = $this->request->get['product_id'];
+
+ $setting['state'] = array('active', 'inactive', 'draft');
+
+ $data['setting'] = $setting;
+
+ if ($data['listing']['state'] == 'edit') {
+ $data['listing']['state'] = 'inactive';
+ }
+
+ if (isset($this->error['warning'])) {
+ $data['error_warning'] = $this->error['warning'];
+ } else {
+ $data['error_warning'] = '';
+ }
+
+ $data['header'] = $this->load->controller('common/header');
+ $data['column_left'] = $this->load->controller('common/column_left');
+ $data['footer'] = $this->load->controller('common/footer');
+
+ $this->response->setOutput($this->load->view('extension/openbay/etsy_edit', $data));
+ }
+
+ public function editSubmit() {
+ $this->load->language('extension/openbay/etsy_edit');
+ $this->load->model('extension/openbay/etsy_product');
+
+ $data = $this->request->post;
+
+ // validation
+ if (!isset($data['title']) || empty($data['title']) || strlen($data['title']) > 255) {
+ if (strlen($data['title']) > 255) {
+ $this->error['title'] = $this->language->get('error_title_length');
+ } else {
+ $this->error['title'] = $this->language->get('error_title_missing');
+ }
+ }
+
+ if (!isset($data['description']) || empty($data['description'])) {
+ $this->error['title'] = $this->language->get('error_desc_missing');
+ }
+
+ if (!isset($data['price']) || empty($data['price'])) {
+ $this->error['price'] = $this->language->get('error_price_missing');
+ }
+
+ if (!isset($data['state']) || empty($data['state'])) {
+ $this->error['state'] = $this->language->get('error_state_missing');
+ }
+
+ if (!$this->error) {
+ // process the request
+ $response = $this->openbay->etsy->call('v1/etsy/product/listing/' . $data['etsy_item_id'] . '/update/', 'POST', $data);
+
+ $this->response->addHeader('Content-Type: application/json');
+
+ if (isset($response['data']['error'])) {
+ $this->response->setOutput(json_encode($response['data']));
+ } else {
+ $this->response->setOutput(json_encode($response['data']['results'][0]));
+ }
+ } else {
+ $this->response->setOutput(json_encode(array('error' => $this->error)));
+ }
+ }
+
+ public function addImage() {
+ $this->load->language('extension/openbay/etsy_create');
+
+ $data = $this->request->post;
+
+ if (!isset($data['image']) || empty($data['image'])) {
+ $this->error['image'] = $this->language->get('error_no_img_url');
+ }
+
+ if (!isset($data['listing_id']) || empty($data['listing_id'])) {
+ $this->error['listing_id'] = $this->language->get('error_no_listing_id');
+ }
+
+ if (!$this->error) {
+ $response = $this->openbay->etsy->call('v1/etsy/product/listing/' . (int)$data['listing_id'] . '/image/', 'POST', $data);
+
+ $this->response->addHeader('Content-Type: application/json');
+
+ if (isset($response['data']['error'])) {
+ $this->response->setOutput(json_encode($response['data']));
+ } else {
+ $this->response->setOutput(json_encode($response['data']['results'][0]));
+ }
+ }
+ }
+
+ public function getCategories() {
+ $categories = $this->cache->get('etsy_categories');
+
+ if (!$categories) {
+ $response = $this->openbay->etsy->call('v1/etsy/product/taxonomy/', 'GET');
+
+ if (isset($response['header_code']) && $response['header_code'] == 200) {
+ $categories = $this->formatCategories($response['data']['data']['results']);
+
+ /**
+ * Need to create cache instance here due to bug where all caches expire after 3600 seconds.
+ **/
+ $etsy_cache = new Cache('file', 3000000);
+
+ $etsy_cache->set('etsy_categories', $categories);
+ }
+ }
+
+ $response = array();
+ $parent_categories = array();
+ $last_id = 0;
+
+ if (isset($this->request->get['id_path']) && $this->request->get['id_path'] != '' && $this->request->get['id_path'] != 0) {
+ $id_path_parts = explode(',', $this->request->get['id_path']);
+
+
+ foreach ($id_path_parts as $id_path) {
+ $parent_categories[] = $categories[$id_path]['name'];
+
+ $categories = $categories[$id_path]['children'];
+
+ $last_id = $id_path;
+ }
+ }
+
+ if (empty($categories)) {
+ $final_category = true;
+ } else {
+ foreach ($categories as $id => $category) {
+ $response[$id] = array(
+ 'name' => $category['name'],
+ 'id_path' => $category['id_path'],
+ 'children_count' => (is_array($category['children']) ? count($category['children']) : 0),
+ );
+ }
+
+ $final_category = false;
+ }
+
+
+ $this->response->addHeader('Content-Type: application/json');
+ $this->response->setOutput(json_encode(array('data' => $response, 'parent_text' => implode(' > ', $parent_categories), 'final_category' => $final_category, 'last_id' => $last_id)));
+ }
+
+ private function formatCategories($category_data) {
+ $response = array();
+
+ foreach ($category_data as $category) {
+ $response[$category['id']] = array(
+ 'name' => $category['name'],
+ 'id_path' => implode(',', $category['full_path_taxonomy_ids']),
+ 'children' => (isset($category['children']) && !empty($category['children']) ? $this->formatCategories($category['children']) : ''),
+ );
+ }
+
+ return $response;
+ }
+
+ public function addLink() {
+ $this->load->language('extension/openbay/etsy_links');
+ $this->load->model('extension/openbay/etsy_product');
+ $this->load->model('catalog/product');
+
+ $data = $this->request->post;
+
+ if (!isset($data['product_id'])) {
+ echo json_encode(array('error' => $this->language->get('error_product_id')));
+ die();
+ }
+
+ if (!isset($data['etsy_id'])) {
+ echo json_encode(array('error' => $this->language->get('error_etsy_id')));
+ die();
+ }
+
+ $links = $this->openbay->etsy->getLinks($data['product_id'], 1);
+
+ if ($links != false) {
+ echo json_encode(array('error' => $this->language->get('error_link_exists')));
+ die();
+ }
+
+ $product = $this->model_catalog_product->getProduct($data['product_id']);
+
+ if (!$product) {
+ echo json_encode(array('error' => $this->language->get('error_product')));
+ die();
+ }
+
+ if ($product['quantity'] <= 0) {
+ echo json_encode(array('error' => $this->language->get('error_stock')));
+ die();
+ }
+
+ // check the etsy item exists
+ $get_response = $this->openbay->etsy->getEtsyItem($data['etsy_id']);
+
+ if (isset($get_response['data']['error'])) {
+ echo json_encode(array('error' => $this->language->get('error_etsy') . $get_response['data']['error']));
+ die();
+ } else {
+ if ((int)$get_response['quantity'] != (int)$product['quantity']) {
+ // if the stock is different than the item being linked update the etsy stock level
+ $update_response = $this->openbay->etsy->updateListingStock($data['etsy_id'], $product['quantity'], $get_response['state']);
+
+ if (isset($update_response['data']['error'])) {
+ echo json_encode(array('error' => $this->language->get('error_etsy') . $update_response['data']['error']));
+ die();
+ }
+ }
+ }
+
+ $this->model_extension_openbay_etsy_product->addLink($data['product_id'], $data['etsy_id'], 1);
+
+ $this->response->addHeader('Content-Type: application/json');
+ $this->response->setOutput(json_encode(array('error' => false)));
+ }
+
+ public function deleteLink() {
+ $this->load->language('extension/openbay/etsy_links');
+
+ $data = $this->request->post;
+
+ if (!isset($data['etsy_link_id'])) {
+ echo json_encode(array('error' => $this->language->get('error_link_id')));
+ die();
+ }
+
+ $this->openbay->etsy->deleteLink($data['etsy_link_id']);
+
+ $this->response->addHeader('Content-Type: application/json');
+ $this->response->setOutput(json_encode(array('error' => false)));
+ }
+
+ public function links() {
+ $this->load->language('extension/openbay/etsy_links');
+
+ $data = $this->language->all();
+
+ $this->load->model('extension/openbay/etsy_product');
+
+ $data['cancel'] = $this->url->link('marketplace/openbay/items', 'user_token=' . $this->session->data['user_token'], true);
+
+ $this->document->setTitle($this->language->get('heading_title'));
+ $this->document->addScript('view/javascript/openbay/js/faq.js');
+
+ $data['breadcrumbs'] = array();
+
+ $data['breadcrumbs'][] = array(
+ 'href' => $this->url->link('common/dashboard', 'user_token=' . $this->session->data['user_token'], true),
+ 'text' => $this->language->get('text_home'),
+ );
+
+ $data['breadcrumbs'][] = array(
+ 'href' => $this->url->link('marketplace/openbay', 'user_token=' . $this->session->data['user_token'], true),
+ 'text' => $this->language->get('text_openbay'),
+ );
+
+ $data['breadcrumbs'][] = array(
+ 'href' => $this->url->link('extension/openbay/etsy', 'user_token=' . $this->session->data['user_token'], true),
+ 'text' => $this->language->get('text_etsy'),
+ );
+
+ $data['breadcrumbs'][] = array(
+ 'href' => $this->url->link('extension/openbay/etsy_product/itemLinks', 'user_token=' . $this->session->data['user_token'], true),
+ 'text' => $this->language->get('heading_title'),
+ );
+
+ $data['return'] = $this->url->link('extension/openbay/etsy', 'user_token=' . $this->session->data['user_token'], true);
+ //$data['edit_url'] = $this->url->link('extension/openbay/ebay/edit', 'user_token=' . $this->session->data['user_token'] . '&product_id=', true);
+ //$data['validation'] = $this->openbay->ebay->validate();
+ $data['user_token'] = $this->session->data['user_token'];
+
+ $total_linked = $this->model_extension_openbay_etsy_product->totalLinked();
+
+ if (isset($this->request->get['page'])){
+ $page = (int)$this->request->get['page'];
+ } else {
+ $page = 1;
+ }
+
+ $limit = $this->config->get('config_limit_admin');
+
+ $pagination = new Pagination();
+ $pagination->total = $total_linked;
+ $pagination->page = $page;
+ $pagination->limit = $limit;
+ $pagination->text = $this->language->get('text_pagination');
+ $pagination->url = $this->url->link('extension/openbay/etsy/itemLinks', 'user_token=' . $this->session->data['user_token'] . '&page={page}', true);
+
+ $data['pagination'] = $pagination->render();
+ $data['results'] = sprintf($this->language->get('text_pagination'), ($total_linked) ? (($page - 1) * $limit) + 1 : 0, ((($page - 1) * $limit) > ($total_linked - $limit)) ? $total_linked : ((($page - 1) * $limit) + $limit), $total_linked, ceil($total_linked / $limit));
+
+ $data['items'] = $this->model_extension_openbay_etsy_product->loadLinked($limit, $page);
+
+ $data['header'] = $this->load->controller('common/header');
+ $data['column_left'] = $this->load->controller('common/column_left');
+ $data['footer'] = $this->load->controller('common/footer');
+
+ $this->response->setOutput($this->load->view('extension/openbay/etsy_links', $data));
+ }
+
+ public function listings() {
+ $this->load->language('extension/openbay/etsy_listings');
+
+ $data = $this->language->all();
+
+ $this->document->setTitle($this->language->get('heading_title'));
+ $this->document->addScript('view/javascript/openbay/js/faq.js');
+
+ $this->load->model('extension/openbay/etsy_product');
+
+ $data['user_token'] = $this->session->data['user_token'];
+
+ $data['breadcrumbs'] = array();
+
+ $data['breadcrumbs'][] = array(
+ 'text' => $this->language->get('text_home'),
+ 'href' => $this->url->link('common/dashboard', 'user_token=' . $this->session->data['user_token'], true)
+ );
+
+ $data['breadcrumbs'][] = array(
+ 'href' => $this->url->link('marketplace/openbay', 'user_token=' . $this->session->data['user_token'], true),
+ 'text' => $this->language->get('text_openbay'),
+ );
+
+ $data['breadcrumbs'][] = array(
+ 'href' => $this->url->link('extension/openbay/etsy', 'user_token=' . $this->session->data['user_token'], true),
+ 'text' => $this->language->get('text_etsy'),
+ );
+
+ $data['breadcrumbs'][] = array(
+ 'href' => $this->url->link('extension/openbay/etsy_product/itemLinks', 'user_token=' . $this->session->data['user_token'], true),
+ 'text' => $this->language->get('heading_title'),
+ );
+
+ $filter = array();
+
+ if (!isset($this->request->get['status'])) {
+ $filter['status'] = 'active';
+ } else {
+ $filter['status'] = $this->request->get['status'];
+ }
+
+ if (!isset($this->request->get['page'])) {
+ $filter['page'] = 1;
+ } else {
+ $filter['page'] = $this->request->get['page'];
+ }
+
+ if (isset($this->request->get['keywords'])) {
+ $filter['keywords'] = $this->request->get['keywords'];
+ }
+
+ $filter['limit'] = (int)$this->config->get('config_limit_admin');
+
+ $data['filter'] = $filter;
+
+ $response = $this->openbay->etsy->call('v1/etsy/product/listing/all/?' . http_build_query($filter), 'GET');
+
+ unset($filter['page']);
+
+ if (isset($response['data']['error'])) {
+ $data['listings'] = array();
+ $data['pagination'] = '';
+ $data['results'] = '';
+ $this->error['warning'] = $this->language->get('error_etsy') . $response['data']['error'];
+ } else {
+ $listings = array();
+
+ foreach($response['data']['results'] as $listing) {
+ $product_link = $this->openbay->etsy->getLinkedProduct($listing['listing_id']);
+
+ $actions = array();
+
+ if ($filter['status'] == 'inactive') {
+ $actions[] = 'activate_item';
+ }
+
+ if ($filter['status'] == 'active') {
+ $actions[] = 'end_item';
+ $actions[] = 'deactivate_item';
+ }
+
+ if ($filter['status'] == 'active' && empty($product_link)) {
+ $actions[] = 'add_link';
+ }
+
+ if (!empty($product_link)) {
+ $actions[] = 'delete_link';
+ }
+
+ if ($product_link != false) {
+ $listings[] = array('link' => $product_link, 'listing' => $listing, 'actions' => $actions);
+ } else {
+ $listings[] = array('link' => '', 'listing' => $listing, 'actions' => $actions);
+ }
+ }
+
+ $data['listings'] = $listings;
+
+ $pagination = new Pagination();
+ $pagination->total = $response['data']['count'];
+ $pagination->page = $response['data']['pagination']['effective_page'];
+ $pagination->limit = $response['data']['pagination']['effective_limit'];
+ $pagination->url = $this->url->link('extension/openbay/etsy_product/listings', 'user_token=' . $this->session->data['user_token'] . '&page={page}&' . http_build_query($filter), true);
+
+ $data['pagination'] = $pagination->render();
+ $data['results'] = sprintf($this->language->get('text_pagination'), ($response['data']['count']) ? (($response['data']['pagination']['effective_page'] - 1) * $response['data']['pagination']['effective_limit']) + 1 : 0, ((($response['data']['pagination']['effective_page'] - 1) * $response['data']['pagination']['effective_limit']) > ($response['data']['count'] - $response['data']['pagination']['effective_limit'])) ? $response['data']['count'] : ((($response['data']['pagination']['effective_page'] - 1) * $response['data']['pagination']['effective_limit']) + $response['data']['pagination']['effective_limit']), $response['data']['count'], ceil($response['data']['count'] / $response['data']['pagination']['effective_limit']));
+ }
+
+ $data['success'] = '';
+
+ if (isset($this->request->get['item_ended'])) {
+ $data['success'] = $this->language->get('text_item_ended');
+ }
+
+ if (isset($this->request->get['item_activated'])) {
+ $data['success'] = $this->language->get('text_item_activated');
+ }
+
+ if (isset($this->request->get['item_deactivated'])) {
+ $data['success'] = $this->language->get('text_item_deactivated');
+ }
+
+ if (isset($this->request->get['link_added'])) {
+ $data['success'] = $this->language->get('text_link_added');
+ }
+
+ if (isset($this->request->get['link_deleted'])) {
+ $data['success'] = $this->language->get('text_link_deleted');
+ }
+
+ if (isset($this->error['warning'])) {
+ $data['error_warning'] = $this->error['warning'];
+ } else {
+ $data['error_warning'] = '';
+ }
+
+ $data['header'] = $this->load->controller('common/header');
+ $data['column_left'] = $this->load->controller('common/column_left');
+ $data['footer'] = $this->load->controller('common/footer');
+
+ $this->response->setOutput($this->load->view('extension/openbay/etsy_listings', $data));
+ }
+
+ public function endListing() {
+ $this->load->language('extension/openbay/etsy_links');
+
+ $data = $this->request->post;
+
+ if (!isset($data['etsy_item_id'])) {
+ echo json_encode(array('error' => $this->language->get('error_etsy_id')));
+ die();
+ }
+
+ $response = $this->openbay->etsy->call('v1/etsy/product/listing/' . (int)$data['etsy_item_id'] . '/delete/', 'POST', array());
+
+ if (isset($response['data']['error'])) {
+ echo json_encode(array('error' => $this->language->get('error_etsy') . $response['data']['error']));
+ die();
+ } else {
+ $linked_item = $this->openbay->etsy->getLinkedProduct($data['etsy_item_id']);
+
+ if ($linked_item != false) {
+ $this->openbay->etsy->deleteLink($linked_item['etsy_listing_id']);
+ }
+
+ $this->response->addHeader('Content-Type: application/json');
+ $this->response->setOutput(json_encode(array('error' => false)));
+ }
+ }
+
+ public function deactivateListing() {
+ $this->load->language('extension/openbay/etsy_links');
+
+ $data = $this->request->post;
+
+ if (!isset($data['etsy_item_id'])) {
+ echo json_encode(array('error' => $this->language->get('error_etsy_id')));
+ die();
+ }
+
+ $response = $this->openbay->etsy->call('v1/etsy/product/listing/' . (int)$data['etsy_item_id'] . '/inactive/', 'POST', array());
+
+ if (isset($response['data']['error'])) {
+ echo json_encode(array('error' => $this->language->get('error_etsy') . $response['data']['error']));
+ die();
+ } else {
+ $linked_item = $this->openbay->etsy->getLinkedProduct($data['etsy_item_id']);
+
+ if ($linked_item != false) {
+ $this->openbay->etsy->deleteLink($linked_item['etsy_listing_id']);
+ }
+
+ $this->response->addHeader('Content-Type: application/json');
+ $this->response->setOutput(json_encode(array('error' => false)));
+ }
+ }
+
+ public function activateListing() {
+ $this->load->language('extension/openbay/etsy_links');
+
+ $data = $this->request->post;
+
+ $this->response->addHeader('Content-Type: application/json');
+
+ if (!isset($data['etsy_item_id'])) {
+ echo json_encode(array('error' => $this->language->get('error_etsy_id')));
+ die();
+ }
+
+ $response = $this->openbay->etsy->call('v1/etsy/product/listing/' . (int)$data['etsy_item_id'] . '/active/', 'POST', array());
+
+ if (isset($response['data']['error'])) {
+ echo json_encode(array('error' => $this->language->get('error_etsy') . $response['data']['error']));
+ die();
+ } else {
+ $this->response->setOutput(json_encode(array('error' => false)));
+ }
+ }
+}
diff --git a/public/admin/controller/extension/openbay/etsy_shipping.php b/public/admin/controller/extension/openbay/etsy_shipping.php
new file mode 100644
index 0000000..ecf0fe9
--- /dev/null
+++ b/public/admin/controller/extension/openbay/etsy_shipping.php
@@ -0,0 +1,9 @@
+<?php
+class ControllerExtensionOpenbayEtsyShipping extends Controller {
+ public function getAll() {
+ $response = $this->openbay->etsy->call('v1/etsy/product/shipping/getAllTemplates/', 'GET');
+
+ $this->response->addHeader('Content-Type: application/json');
+ return $this->response->setOutput(json_encode($response));
+ }
+} \ No newline at end of file
diff --git a/public/admin/controller/extension/openbay/etsy_shop.php b/public/admin/controller/extension/openbay/etsy_shop.php
new file mode 100644
index 0000000..598edd9
--- /dev/null
+++ b/public/admin/controller/extension/openbay/etsy_shop.php
@@ -0,0 +1,9 @@
+<?php
+class ControllerExtensionOpenbayEtsyShop extends Controller {
+ public function getSections() {
+ $response = $this->openbay->etsy->call('v1/etsy/shop/getSections/', 'GET');
+
+ $this->response->addHeader('Content-Type: application/json');
+ return $this->response->setOutput(json_encode($response));
+ }
+} \ No newline at end of file
diff --git a/public/admin/controller/extension/openbay/fba.php b/public/admin/controller/extension/openbay/fba.php
new file mode 100644
index 0000000..660e49b
--- /dev/null
+++ b/public/admin/controller/extension/openbay/fba.php
@@ -0,0 +1,923 @@
+<?php
+class ControllerExtensionOpenbayFba extends Controller {
+ public function install() {
+ $this->load->model('extension/openbay/fba');
+ $this->load->model('setting/setting');
+ $this->load->model('setting/extension');
+ $this->load->model('user/user_group');
+
+ $this->model_user_user_group->addPermission($this->user->getGroupId(), 'access', 'extension/openbay/fba');
+ $this->model_user_user_group->addPermission($this->user->getGroupId(), 'modify', 'extension/openbay/fba');
+
+ $this->model_extension_openbay_fba->install();
+ }
+
+ public function uninstall() {
+ $this->load->model('extension/openbay/fba');
+ $this->load->model('setting/setting');
+ $this->load->model('setting/extension');
+
+ $this->model_extension_openbay_fba->uninstall();
+ $this->model_setting_extension->uninstall('openbay', $this->request->get['extension']);
+ $this->model_setting_setting->deleteSetting($this->request->get['extension']);
+ }
+
+ public function index() {
+ $this->load->language('extension/openbay/fba');
+
+ $data = $this->language->all();
+
+ $this->load->model('setting/setting');
+ $this->load->model('localisation/order_status');
+ $this->load->model('extension/openbay/fba');
+
+ $this->document->setTitle($this->language->get('text_dashboard'));
+ $this->document->addScript('view/javascript/openbay/js/faq.js');
+
+ $data['breadcrumbs'] = array();
+ $data['breadcrumbs'][] = array(
+ 'href' => $this->url->link('common/dashboard', 'user_token=' . $this->session->data['user_token'], true),
+ 'text' => $this->language->get('text_home'),
+ );
+ $data['breadcrumbs'][] = array(
+ 'href' => $this->url->link('marketplace/openbay', 'user_token=' . $this->session->data['user_token'], true),
+ 'text' => $this->language->get('text_openbay'),
+ );
+ $data['breadcrumbs'][] = array(
+ 'href' => $this->url->link('extension/openbay/fba', 'user_token=' . $this->session->data['user_token'], true),
+ 'text' => $this->language->get('text_dashboard'),
+ );
+
+ $data['success'] = '';
+ if (isset($this->session->data['success'])) {
+ $data['success'] = $this->session->data['success'];
+ unset($this->session->data['success']);
+ } else {
+ $data['success'] = '';
+ }
+
+ $data['validation'] = $this->openbay->fba->validate();
+ $data['link_settings'] = $this->url->link('extension/openbay/fba/settings', 'user_token=' . $this->session->data['user_token'], true);
+ $data['link_account'] = 'https://account.openbaypro.com/fba/index/';
+ $data['link_fulfillments'] = $this->url->link('extension/openbay/fba/fulfillmentlist', 'user_token=' . $this->session->data['user_token'], true);
+ $data['link_orders'] = $this->url->link('extension/openbay/fba/orderlist', 'user_token=' . $this->session->data['user_token'], true);
+ $data['link_signup'] = 'https://account.openbaypro.com/fba/apiRegister/?endpoint=2&utm_source=opencart_install&utm_medium=dashboard&utm_campaign=fba';
+
+ $data['header'] = $this->load->controller('common/header');
+ $data['column_left'] = $this->load->controller('common/column_left');
+ $data['footer'] = $this->load->controller('common/footer');
+
+ $this->response->setOutput($this->load->view('extension/openbay/fba', $data));
+ }
+
+ public function settings() {
+ $this->load->language('extension/openbay/fba_settings');
+
+ $data = $this->language->all();
+
+ $this->document->setTitle($this->language->get('heading_title'));
+ $this->document->addScript('view/javascript/openbay/js/faq.js');
+
+ $this->load->model('setting/setting');
+ $this->load->model('extension/openbay/fba');
+ $this->load->model('localisation/order_status');
+
+ if (($this->request->server['REQUEST_METHOD'] == 'POST') && ($this->validate())) {
+ $this->model_setting_setting->editSetting('openbay_fba', $this->request->post);
+ $this->session->data['success'] = $this->language->get('text_success');
+ $this->response->redirect($this->url->link('extension/openbay/fba', 'user_token=' . $this->session->data['user_token'], true));
+ }
+
+ $data['breadcrumbs'] = array();
+
+ $data['breadcrumbs'][] = array(
+ 'href' => $this->url->link('common/dashboard', 'user_token=' . $this->session->data['user_token'], true),
+ 'text' => $this->language->get('text_home'),
+ );
+
+ $data['breadcrumbs'][] = array(
+ 'href' => $this->url->link('marketplace/openbay', 'user_token=' . $this->session->data['user_token'], true),
+ 'text' => $this->language->get('text_openbay'),
+ );
+
+ $data['breadcrumbs'][] = array(
+ 'href' => $this->url->link('extension/openbay/fba', 'user_token=' . $this->session->data['user_token'], true),
+ 'text' => $this->language->get('text_fba'),
+ );
+
+ $data['breadcrumbs'][] = array(
+ 'href' => $this->url->link('extension/openbay/fba/settings', 'user_token=' . $this->session->data['user_token'], true),
+ 'text' => $this->language->get('heading_title'),
+ );
+
+ $data['action'] = $this->url->link('extension/openbay/fba/settings', 'user_token=' . $this->session->data['user_token'], true);
+ $data['cancel'] = $this->url->link('extension/openbay/fba', 'user_token=' . $this->session->data['user_token'], true);
+ $data['link_signup'] = 'https://account.openbaypro.com/fba/apiRegister/?endpoint=2&utm_source=opencart_install&utm_medium=settings&utm_campaign=fba';
+
+ $data['user_token'] = $this->session->data['user_token'];
+
+ if (isset($this->error['warning'])) {
+ $data['error_warning'] = $this->error['warning'];
+ } else {
+ $data['error_warning'] = '';
+ }
+
+ if (isset($this->request->post['openbay_fba_status'])) {
+ $data['openbay_fba_status'] = $this->request->post['openbay_fba_status'];
+ } else {
+ $data['openbay_fba_status'] = $this->config->get('openbay_fba_status');
+ }
+
+ if (isset($this->request->post['openbay_fba_api_key'])) {
+ $data['openbay_fba_api_key'] = trim($this->request->post['openbay_fba_api_key']);
+ } else {
+ $data['openbay_fba_api_key'] = trim($this->config->get('openbay_fba_api_key'));
+ }
+
+ if (isset($this->request->post['openbay_fba_encryption_key'])) {
+ $data['openbay_fba_encryption_key'] = trim($this->request->post['openbay_fba_encryption_key']);
+ } else {
+ $data['openbay_fba_encryption_key'] = trim($this->config->get('openbay_fba_encryption_key'));
+ }
+
+ if (isset($this->request->post['openbay_fba_encryption_iv'])) {
+ $data['openbay_fba_encryption_iv'] = trim($this->request->post['openbay_fba_encryption_iv']);
+ } else {
+ $data['openbay_fba_encryption_iv'] = trim($this->config->get('openbay_fba_encryption_iv'));
+ }
+
+ if (isset($this->request->post['openbay_fba_api_account_id'])) {
+ $data['openbay_fba_api_account_id'] = trim($this->request->post['openbay_fba_api_account_id']);
+ } else {
+ $data['openbay_fba_api_account_id'] = trim($this->config->get('openbay_fba_api_account_id'));
+ }
+
+ if (isset($this->request->post['openbay_fba_send_orders'])) {
+ $data['openbay_fba_send_orders'] = $this->request->post['openbay_fba_send_orders'];
+ } else {
+ $data['openbay_fba_send_orders'] = $this->config->get('openbay_fba_send_orders');
+ }
+
+ if (isset($this->request->post['openbay_fba_debug_log'])) {
+ $data['openbay_fba_debug_log'] = $this->request->post['openbay_fba_debug_log'];
+ } else {
+ $data['openbay_fba_debug_log'] = $this->config->get('openbay_fba_debug_log');
+ }
+
+ $order_total = $this->model_extension_openbay_fba->countFbaOrders();
+
+ if ($order_total > 0) {
+ $data['prefix_can_edit'] = false;
+ } else {
+ $data['prefix_can_edit'] = true;
+ }
+
+ if (isset($this->request->post['openbay_fba_order_prefix'])) {
+ $data['openbay_fba_order_prefix'] = $this->request->post['openbay_fba_order_prefix'];
+ } else {
+ $data['openbay_fba_order_prefix'] = $this->config->get('openbay_fba_order_prefix');
+ }
+
+ if (isset($this->request->post['openbay_fba_order_trigger_status'])) {
+ $data['openbay_fba_order_trigger_status'] = $this->request->post['openbay_fba_order_trigger_status'];
+ } else {
+ $data['openbay_fba_order_trigger_status'] = $this->config->get('openbay_fba_order_trigger_status');
+ }
+
+ if (isset($this->request->post['openbay_fba_only_fill_complete'])) {
+ $data['openbay_fba_only_fill_complete'] = $this->request->post['openbay_fba_only_fill_complete'];
+ } else {
+ $data['openbay_fba_only_fill_complete'] = $this->config->get('openbay_fba_only_fill_complete');
+ }
+
+ $data['fulfillment_policy'] = array(
+ 'FillOrKill' => $this->language->get('text_fillorkill'),
+ 'FillAll' => $this->language->get('text_fillall'),
+ 'FillAllAvailable' => $this->language->get('text_fillallavailable'),
+ );
+
+ if (isset($this->request->post['openbay_fba_fulfill_policy'])) {
+ $data['openbay_fba_fulfill_policy'] = $this->request->post['openbay_fba_fulfill_policy'];
+ } else {
+ $data['openbay_fba_fulfill_policy'] = $this->config->get('openbay_fba_fulfill_policy');
+ }
+
+ $data['shipping_speed'] = array(
+ 'Standard' => $this->language->get('text_standard'),
+ 'Expedited' => $this->language->get('text_expedited'),
+ 'Priority' => $this->language->get('text_priority'),
+ );
+
+ if (isset($this->request->post['openbay_fba_shipping_speed'])) {
+ $data['openbay_fba_shipping_speed'] = $this->request->post['openbay_fba_shipping_speed'];
+ } else {
+ $data['openbay_fba_shipping_speed'] = $this->config->get('openbay_fba_shipping_speed');
+ }
+
+ $data['api_server'] = $this->openbay->fba->getServerUrl();
+ $data['order_statuses'] = $this->model_localisation_order_status->getOrderStatuses();
+
+ $data['header'] = $this->load->controller('common/header');
+ $data['column_left'] = $this->load->controller('common/column_left');
+ $data['footer'] = $this->load->controller('common/footer');
+
+ $this->response->setOutput($this->load->view('extension/openbay/fba_settings', $data));
+ }
+
+ public function verifyCredentials() {
+ $this->load->language('extension/openbay/fba_settings');
+
+ $errors = array();
+
+ if (!isset($this->request->post['openbay_fba_api_key']) || empty($this->request->post['openbay_fba_api_key'])) {
+ $errors[] = array('message' => $this->language->get('error_api_key'));
+ }
+
+ if (!isset($this->request->post['openbay_fba_api_account_id']) || empty($this->request->post['openbay_fba_api_account_id'])) {
+ $errors[] = array('message' => $this->language->get('error_api_account_id'));
+ }
+
+ if (!isset($this->request->post['openbay_fba_encryption_key']) || empty($this->request->post['openbay_fba_encryption_key'])) {
+ $errors[] = array('message' => $this->language->get('error_encryption_key'));
+ }
+
+ if (!isset($this->request->post['openbay_fba_encryption_iv']) || empty($this->request->post['openbay_fba_encryption_iv'])) {
+ $errors[] = array('message' => $this->language->get('error_encryption_iv'));
+ }
+
+ if (!$errors) {
+ $this->openbay->fba->setApiKey($this->request->post['openbay_fba_api_key']);
+ $this->openbay->fba->setAccountId($this->request->post['openbay_fba_api_account_id']);
+ $this->openbay->fba->setEncryptionKey($this->request->post['openbay_fba_encryption_key']);
+ $this->openbay->fba->setEncryptionIv($this->request->post['openbay_fba_encryption_iv']);
+
+ $response = $this->openbay->fba->call("v1/fba/status/", array(), 'GET');
+ } else {
+ $response = array(
+ "result" => null,
+ "error" => true,
+ "error_messages" => $errors,
+ );
+ }
+
+ $this->response->addHeader('Content-Type: application/json');
+ $this->response->setOutput(json_encode($response));
+ }
+
+ protected function validate() {
+ if (!$this->user->hasPermission('modify', 'extension/openbay/fba')) {
+ $this->error['warning'] = $this->language->get('error_permission');
+ }
+
+ if (!$this->request->post['openbay_fba_api_key']) {
+ $this->error['api_key'] = $this->language->get('error_api_key');
+ }
+
+ if (!$this->request->post['openbay_fba_api_account_id']) {
+ $this->error['api_account_id'] = $this->language->get('error_api_account_id');
+ }
+
+ return !$this->error;
+ }
+
+ public function fulfillment() {
+ $this->load->language('extension/openbay/fba_fulfillment');
+
+ $data = $this->language->all();
+
+ $this->document->setTitle($this->language->get('heading_title'));
+ $this->document->addScript('view/javascript/openbay/js/faq.js');
+
+ if (!isset($this->request->get['fulfillment_id'])) {
+ $this->response->redirect($this->url->link('extension/openbay/fba/fulfillmentlist', 'user_token=' . $this->session->data['user_token'] . (!empty($this->request->get['filter_date']) ? '&filter_date=' . $this->request->get['filter_date'] : ''), true));
+ }
+
+ $data['breadcrumbs'] = array();
+
+ $data['breadcrumbs'][] = array(
+ 'href' => $this->url->link('common/dashboard', 'user_token=' . $this->session->data['user_token'], true),
+ 'text' => $this->language->get('text_home'),
+ );
+
+ $data['breadcrumbs'][] = array(
+ 'href' => $this->url->link('marketplace/openbay', 'user_token=' . $this->session->data['user_token'], true),
+ 'text' => $this->language->get('text_openbay'),
+ );
+
+ $data['breadcrumbs'][] = array(
+ 'href' => $this->url->link('extension/openbay/fba', 'user_token=' . $this->session->data['user_token'], true),
+ 'text' => $data['text_fba'],
+ );
+
+ $data['breadcrumbs'][] = array(
+ 'href' => $this->url->link('extension/openbay/fba/fulfillmentlist', 'user_token=' . $this->session->data['user_token'] . (!empty($this->request->get['filter_date']) ? '&filter_date=' . $this->request->get['filter_date'] : ''), true),
+ 'text' => $data['heading_title'],
+ );
+
+ $response = $this->openbay->fba->call("v1/fba/fulfillments/" . $this->request->get['fulfillment_id'] . "/", array());
+ $data['response'] = $response['body'];
+
+ if ($response['error'] == true || $response['response_http'] != 200) {
+ $this->session->data['error'] = $this->language->get('error_loading_fulfillment');
+
+ $this->response->redirect($this->url->link('extension/openbay/fba/fulfillmentlist', 'user_token=' . $this->session->data['user_token'], true));
+ }
+
+ $data['user_token'] = $this->session->data['user_token'];
+
+ if (isset($this->session->data['error'])) {
+ $data['error_warning'] = $this->session->data['error'];
+ unset($this->session->data['error']);
+ } else {
+ $data['error_warning'] = '';
+ }
+
+ if (isset($this->session->data['success'])) {
+ $data['success'] = $this->session->data['success'];
+
+ unset($this->session->data['success']);
+ } else {
+ $data['success'] = '';
+ }
+
+ $data['header'] = $this->load->controller('common/header');
+ $data['column_left'] = $this->load->controller('common/column_left');
+ $data['footer'] = $this->load->controller('common/footer');
+
+ $this->response->setOutput($this->load->view('extension/openbay/fba_fulfillment_form', $data));
+ }
+
+ public function fulfillmentList() {
+ $this->load->language('extension/openbay/fba_fulfillment_list');
+
+ $data = $this->language->all();
+
+ $this->document->setTitle($this->language->get('heading_title'));
+ $this->document->addScript('view/javascript/openbay/js/faq.js');
+
+ $data['breadcrumbs'] = array();
+
+ $data['breadcrumbs'][] = array(
+ 'href' => $this->url->link('common/dashboard', 'user_token=' . $this->session->data['user_token'], true),
+ 'text' => $this->language->get('text_home'),
+ );
+
+ $data['breadcrumbs'][] = array(
+ 'href' => $this->url->link('marketplace/openbay', 'user_token=' . $this->session->data['user_token'], true),
+ 'text' => $this->language->get('text_openbay'),
+ );
+
+ $data['breadcrumbs'][] = array(
+ 'href' => $this->url->link('extension/openbay/fba', 'user_token=' . $this->session->data['user_token'], true),
+ 'text' => $data['text_fba'],
+ );
+
+ $data['breadcrumbs'][] = array(
+ 'href' => $this->url->link('extension/openbay/fba', 'user_token=' . $this->session->data['user_token'], true),
+ 'text' => $data['heading_title'],
+ );
+
+ if (isset($this->request->get['filter_date'])) {
+ $data['filter_date'] = $this->request->get['filter_date'];
+ $request_url = "?query_start_date_time=".urlencode($this->request->get['filter_date'] . "T00:00:00Z");
+ } else {
+ $data['filter_date'] = '';
+ $request_url = "";
+ }
+
+ $data['fulfillments'] = array();
+
+ $response = $this->openbay->fba->call("v1/fba/fulfillments/".$request_url, array(), 'GET');
+
+ if (isset($response['body']) && is_array($response['body'])) {
+ foreach ($response['body'] as $fulfillment_order) {
+ $data['fulfillments'][] = array(
+ 'seller_fulfillment_order_id' => $fulfillment_order['seller_fulfillment_order_id'],
+ 'displayable_order_id' => $fulfillment_order['displayable_order_id'],
+ 'displayable_order_date_time' => $fulfillment_order['displayable_order_date_time'],
+ 'shipping_speed_category' => $fulfillment_order['shipping_speed_category'],
+ 'fulfillment_order_status' => $fulfillment_order['fulfillment_order_status'],
+ 'edit' => $this->url->link('extension/openbay/fba/fulfillment', 'user_token=' . $this->session->data['user_token'] . '&fulfillment_id=' . $fulfillment_order['seller_fulfillment_order_id'] . (!empty($data['filter_date']) ? '&filter_date=' . $data['filter_date'] : ''), true),
+ );
+ }
+ }
+
+ $data['cancel'] = $this->url->link('extension/openbay/fba/index', 'user_token=' . $this->session->data['user_token'], true);
+ $data['user_token'] = $this->session->data['user_token'];
+
+ if (isset($this->session->data['error'])) {
+ $data['error_warning'] = $this->session->data['error'];
+ unset($this->session->data['error']);
+ } else {
+ $data['error_warning'] = '';
+ }
+
+ if (isset($this->session->data['success'])) {
+ $data['success'] = $this->session->data['success'];
+
+ unset($this->session->data['success']);
+ } else {
+ $data['success'] = '';
+ }
+
+ $data['header'] = $this->load->controller('common/header');
+ $data['column_left'] = $this->load->controller('common/column_left');
+ $data['footer'] = $this->load->controller('common/footer');
+
+ $this->response->setOutput($this->load->view('extension/openbay/fba_fulfillment_list', $data));
+ }
+
+ public function shipFulfillment() {
+ $this->load->language('extension/openbay/fba_fulfillment');
+
+ $errors = array();
+
+ if (empty($this->request->get['order_id']) || empty($this->request->get['fba_order_fulfillment_id'])) {
+ $this->session->data['error'] = $this->language->get('error_missing_id');
+
+ $this->response->redirect($this->url->link('extension/openbay/fba/orderlist', 'user_token=' . $this->session->data['user_token'], true));
+ } else {
+ $order_id = (int)$this->request->get['order_id'];
+ $fba_order_fulfillment_id = (int)$this->request->get['fba_order_fulfillment_id'];
+
+ $this->openbay->fba->log('shipFulfillment request for order ID: ' . $order_id . ', Fulfillment ID: ' . $fba_order_fulfillment_id);
+
+ $fba_fulfillment_id = $this->openbay->fba->createFBAFulfillmentID($order_id, 1);
+
+ $response = $this->openbay->fba->call("v1/fba/fulfillments/" . $this->config->get('openbay_fba_order_prefix') . $order_id . '-' . $fba_order_fulfillment_id . "/ship/", array(), 'GET');
+
+
+
+ if (!isset($response['response_http']) || $response['response_http'] != 200) {
+ /**
+ * @todo notify the admin about any errors
+ */
+ $errors[] = $this->language->get('error_amazon_request');
+
+ //$this->openbay->fba->updateFBAOrderStatus($order_id, 1);
+ } else {
+ $this->openbay->fba->populateFBAFulfillment(json_encode(array()), json_encode($response), $response['response_http'], $fba_fulfillment_id);
+
+ $this->openbay->fba->updateFBAOrderStatus($order_id, 3);
+
+ $this->session->data['success'] = $this->language->get('text_fulfillment_shipped');
+ }
+ }
+
+ if ($errors) {
+ $this->session->data['error'] = $errors;
+ }
+
+ $this->response->redirect($this->url->link('extension/openbay/fba/order', 'user_token=' . $this->session->data['user_token'] . '&order_id=' . $order_id, true));
+ }
+
+ public function cancelFulfillment() {
+ $this->load->language('extension/openbay/fba_fulfillment');
+
+ $errors = array();
+
+ if (empty($this->request->get['order_id']) || empty($this->request->get['fba_order_fulfillment_id'])) {
+ $this->session->data['error'] = $this->language->get('error_missing_id');
+
+ $this->response->redirect($this->url->link('extension/openbay/fba/orderlist', 'user_token=' . $this->session->data['user_token'], true));
+ } else {
+ $order_id = (int)$this->request->get['order_id'];
+ $fba_order_fulfillment_id = (int)$this->request->get['fba_order_fulfillment_id'];
+
+ $this->openbay->fba->log('cancelFulfillment request for order ID: ' . $order_id . ', Fulfillment ID: ' . $fba_order_fulfillment_id);
+
+ $fba_fulfillment_id = $this->openbay->fba->createFBAFulfillmentID($order_id, 2);
+
+ $response = $this->openbay->fba->call("v1/fba/fulfillments/" . $this->config->get('openbay_fba_order_prefix') . $order_id . '-' . $fba_order_fulfillment_id . "/cancel/", array(), 'POST');
+
+ if (!isset($response['response_http']) || $response['response_http'] != 200) {
+ /**
+ * @todo notify the admin about any errors
+ */
+ $errors[] = $this->language->get('error_amazon_request');
+ } else {
+ $this->openbay->fba->populateFBAFulfillment(json_encode(array()), json_encode($response), $response['response_http'], $fba_fulfillment_id);
+
+ $this->openbay->fba->updateFBAOrderStatus($order_id, 4);
+
+ $this->session->data['success'] = $this->language->get('text_fulfillment_cancelled');
+ }
+ }
+
+ if ($errors) {
+ $this->session->data['error'] = $errors;
+ }
+
+ $this->response->redirect($this->url->link('extension/openbay/fba/order', 'user_token=' . $this->session->data['user_token'] . '&order_id=' . $order_id, true));
+ }
+
+ public function resendFulfillment() {
+ $this->load->language('extension/openbay/fba_fulfillment');
+
+ $errors = array();
+
+ if (empty($this->request->get['order_id'])) {
+ $this->session->data['error'] = $this->language->get('error_missing_id');
+
+ $this->response->redirect($this->url->link('extension/openbay/fba/orderlist', 'user_token=' . $this->session->data['user_token'], true));
+ } else {
+ $order_id = (int)$this->request->get['order_id'];
+
+ $this->openbay->fba->log('resendFulfillment request for order ID: ' . $order_id);
+
+ $this->load->model('sale/order');
+ $this->load->model('catalog/product');
+
+ $order = $this->model_sale_order->getOrder($order_id);
+
+ if ($order['shipping_method']) {
+ if ($this->config->get('openbay_fba_order_trigger_status') == $order['order_status_id']) {
+ $fba_fulfillment_id = $this->openbay->fba->createFBAFulfillmentID($order_id, 1);
+
+ $order_products = $this->model_sale_order->getOrderProducts($order_id);
+
+ $fulfillment_items = array();
+
+ foreach ($order_products as $order_product) {
+ $product = $this->model_catalog_product->getProduct($order_product['product_id']);
+
+ if ($product['location'] == 'FBA') {
+ $fulfillment_items[] = array(
+ 'seller_sku' => $product['sku'],
+ 'quantity' => $order_product['quantity'],
+ 'seller_fulfillment_order_item_id' => $this->config->get('openbay_fba_order_prefix') . $fba_fulfillment_id . '-' . $order_product['order_product_id'],
+ 'per_unit_declared_value' => array(
+ 'currency_code' => $order['currency_code'],
+ 'value' => number_format($order_product['price'], 2)
+ ),
+ );
+ }
+ }
+
+ $total_fulfillment_items = count($fulfillment_items);
+
+ if (!empty($fulfillment_items)) {
+ $request = array();
+
+ $datetime = new DateTime($order['date_added']);
+ $request['displayable_order_datetime'] = $datetime->format(DateTime::ISO8601);
+
+ $request['seller_fulfillment_order_id'] = $this->config->get('openbay_fba_order_prefix') . $order_id . '-' . $fba_fulfillment_id;
+ $request['displayable_order_id'] = $order_id;
+ $request['displayable_order_comment'] = 'none';
+ $request['shipping_speed_category'] = $this->config->get('openbay_fba_shipping_speed');
+ $request['fulfillment_action'] = ($this->config->get('openbay_fba_send_orders') == 1 ? 'Ship' : 'Hold');
+ $request['fulfillment_policy'] = $this->config->get('openbay_fba_fulfill_policy');
+
+ $request['destination_address'] = array(
+ 'name' => $order['shipping_firstname'] . ' ' . $order['shipping_lastname'],
+ 'line_1' => (!empty($order['shipping_company']) ? $order['shipping_company'] : $order['shipping_address_1']),
+ 'line_2' => (!empty($order['shipping_company']) ? $order['shipping_address_1'] : $order['shipping_address_2']),
+ 'line_3' => (!empty($order['shipping_company']) ? $order['shipping_address_2'] : ''),
+ 'state_or_province_code' => $order['shipping_zone'],
+ 'city' => $order['shipping_city'],
+ 'country_code' => $order['shipping_iso_code_2'],
+ 'postal_code' => $order['shipping_postcode'],
+ );
+
+ $request['items'] = $fulfillment_items;
+
+ $response = $this->openbay->fba->call("v1/fba/fulfillments/", $request, 'POST');
+
+ if ($response['response_http'] != 201) {
+ /**
+ * @todo notify the admin about any errors
+ */
+ $errors[] = $this->language->get('error_amazon_request');
+
+ $this->openbay->fba->updateFBAOrderStatus($order_id, 1);
+ } else {
+ if ($this->config->get('openbay_fba_send_orders') == 1) {
+ $this->openbay->fba->updateFBAOrderStatus($order_id, 3);
+ } else {
+ $this->openbay->fba->updateFBAOrderStatus($order_id, 2);
+ }
+
+ $this->openbay->fba->updateFBAOrderRef($order_id, $this->config->get('openbay_fba_order_prefix') . $order_id . '-' . $fba_fulfillment_id);
+
+ $this->session->data['success'] = $this->language->get('text_fulfillment_sent');
+ }
+
+ $this->openbay->fba->populateFBAFulfillment(json_encode($request), json_encode($response), $response['response_http'], $fba_fulfillment_id);
+ $this->openbay->fba->updateFBAOrderFulfillmentID($order_id, $fba_fulfillment_id);
+ } else {
+ $errors[] = $this->language->get('error_no_items');
+ }
+ }
+ } else {
+ $errors[] = $this->language->get('error_no_shipping');
+ }
+ }
+
+ if ($errors) {
+ $this->session->data['error'] = $errors;
+ }
+
+ $this->response->redirect($this->url->link('extension/openbay/fba/order', 'user_token=' . $this->session->data['user_token'] . '&order_id=' . $order_id, true));
+ }
+
+ public function orderList() {
+ $this->load->language('extension/openbay/fba_order');
+
+ $data = $this->language->all();
+
+ $this->document->setTitle($this->language->get('heading_title'));
+ $this->document->addScript('view/javascript/openbay/js/faq.js');
+
+ $data['breadcrumbs'] = array();
+
+ $data['breadcrumbs'][] = array(
+ 'href' => $this->url->link('common/dashboard', 'user_token=' . $this->session->data['user_token'], true),
+ 'text' => $this->language->get('text_home'),
+ );
+
+ $data['breadcrumbs'][] = array(
+ 'href' => $this->url->link('marketplace/openbay', 'user_token=' . $this->session->data['user_token'], true),
+ 'text' => $this->language->get('text_openbay'),
+ );
+
+ $data['breadcrumbs'][] = array(
+ 'href' => $this->url->link('extension/openbay/fba', 'user_token=' . $this->session->data['user_token'], true),
+ 'text' => $data['text_fba'],
+ );
+
+ $data['breadcrumbs'][] = array(
+ 'href' => $this->url->link('extension/openbay/fba', 'user_token=' . $this->session->data['user_token'], true),
+ 'text' => $data['heading_title'],
+ );
+
+ $filters = array();
+
+ $url = '';
+
+ if (isset($this->request->get['filter_start'])) {
+ $filters['filter_start'] = $this->request->get['filter_start'];
+ $data['filter_start'] = $this->request->get['filter_start'];
+ $url .= "&filter_start=".urlencode($this->request->get['filter_start']);
+ } else {
+ $filters['filter_start'] = null;
+ $data['filter_start'] = null;
+ }
+
+ if (isset($this->request->get['filter_end'])) {
+ $filters['filter_end'] = $this->request->get['filter_end'];
+ $data['filter_end'] = $this->request->get['filter_end'];
+ $url .= "&filter_end=".urlencode($this->request->get['filter_end']);
+ } else {
+ $filters['filter_end'] = null;
+ $data['filter_end'] = null;
+ }
+
+ if (isset($this->request->get['filter_status'])) {
+ $filters['filter_status'] = $this->request->get['filter_status'];
+ $data['filter_status'] = $this->request->get['filter_status'];
+ $url .= "&filter_status=".urlencode($this->request->get['filter_status']);
+ } else {
+ $filters['filter_status'] = null;
+ $data['filter_status'] = null;
+ }
+
+ $data['orders'] = array();
+
+ $orders = $this->openbay->fba->getFBAOrders($filters);
+
+ if (!empty($orders)) {
+ foreach ($orders as $order) {
+ $data['orders'][] = array(
+ 'order_id' => $order['order_id'],
+ 'order_link' => $this->url->link('sale/order/info', 'user_token=' . $this->session->data['user_token'] . '&order_id=' . $order['order_id'] . $url, true),
+ 'status' => $order['status'],
+ 'created' => $order['created'],
+ 'fba_item_count' => $this->openbay->fba->hasOrderFBAItems($order['order_id']),
+ 'view' => $this->url->link('extension/openbay/fba/order', 'user_token=' . $this->session->data['user_token'] . '&order_id=' . $order['order_id'] . $url, true)
+ );
+ }
+ }
+
+ $data['cancel'] = $this->url->link('extension/openbay/fba/index', 'user_token=' . $this->session->data['user_token'], true);
+ $data['user_token'] = $this->session->data['user_token'];
+
+ $data['status_options'] = array(
+ 0 => $this->language->get('text_option_new'),
+ 1 => $this->language->get('text_option_error'),
+ 2 => $this->language->get('text_option_held'),
+ 3 => $this->language->get('text_option_shipped'),
+ );
+
+ if (isset($this->session->data['error'])) {
+ $data['error_warning'] = $this->session->data['error'];
+ unset($this->session->data['error']);
+ } else {
+ $data['error_warning'] = '';
+ }
+
+ if (isset($this->session->data['success'])) {
+ $data['success'] = $this->session->data['success'];
+
+ unset($this->session->data['success']);
+ } else {
+ $data['success'] = '';
+ }
+
+ $data['header'] = $this->load->controller('common/header');
+ $data['column_left'] = $this->load->controller('common/column_left');
+ $data['footer'] = $this->load->controller('common/footer');
+
+ $this->response->setOutput($this->load->view('extension/openbay/fba_order_list', $data));
+ }
+
+ public function order() {
+ $this->load->language('extension/openbay/fba_order');
+
+ $data = $this->language->all();
+
+ $this->document->setTitle($this->language->get('heading_title'));
+ $this->document->addScript('view/javascript/openbay/js/faq.js');
+
+ $this->load->model('sale/order');
+ $this->load->model('catalog/product');
+
+ if (!isset($this->request->get['order_id'])) {
+ $this->response->redirect($this->url->link('extension/openbay/fba/orderList', 'user_token=' . $this->session->data['user_token'], true));
+ }
+
+ $order_id = (int)$this->request->get['order_id'];
+ $order_fba = $this->openbay->fba->getFBAOrder($order_id);
+ $order_info = $this->model_sale_order->getOrder($order_id);
+
+ if ($order_fba['status'] == 2 || $order_fba['status'] == 3 || $order_fba['status'] == 4) {
+ $data['fulfillment_id'] = $order_fba['fba_order_fulfillment_ref'];
+ $data['fulfillment_link'] = $this->url->link('extension/openbay/fba/fulfillment', 'user_token=' . $this->session->data['user_token'] . '&fulfillment_id=' . $data['fulfillment_id'], true);
+ } else {
+ $data['fulfillment_id'] = '';
+ $data['fulfillment_link'] = '';
+ }
+
+ $data['fba_order_status'] = $order_fba['status'];
+ $data['order_id'] = $order_id;
+ $data['order_link'] = $this->url->link('sale/order/info', 'user_token=' . $this->session->data['user_token'] . '&order_id=' . $order_id, true);
+ $data['resend_link'] = $this->url->link('extension/openbay/fba/resendfulfillment', 'user_token=' . $this->session->data['user_token'] . '&order_id=' . $order_id, true);
+ $data['ship_link'] = $this->url->link('extension/openbay/fba/shipfulfillment', 'user_token=' . $this->session->data['user_token'] . '&order_id=' . $order_id . '&fba_order_fulfillment_id=' . $order_fba['fba_order_fulfillment_id'], true);
+ $data['cancel_link'] = $this->url->link('extension/openbay/fba/cancelfulfillment', 'user_token=' . $this->session->data['user_token'] . '&order_id=' . $order_id . '&fba_order_fulfillment_id=' . $order_fba['fba_order_fulfillment_id'], true);
+
+ $data['cancel'] = $this->url->link('extension/openbay/fba/orderlist', 'user_token=' . $this->session->data['user_token'], true);
+
+ $data['breadcrumbs'] = array();
+
+ $data['breadcrumbs'][] = array(
+ 'href' => $this->url->link('common/dashboard', 'user_token=' . $this->session->data['user_token'], true),
+ 'text' => $this->language->get('text_home'),
+ );
+
+ $data['breadcrumbs'][] = array(
+ 'href' => $this->url->link('marketplace/openbay', 'user_token=' . $this->session->data['user_token'], true),
+ 'text' => $this->language->get('text_openbay'),
+ );
+
+ $data['breadcrumbs'][] = array(
+ 'href' => $this->url->link('extension/openbay/fba', 'user_token=' . $this->session->data['user_token'], true),
+ 'text' => $data['text_fba'],
+ );
+
+ $data['breadcrumbs'][] = array(
+ 'href' => $this->url->link('extension/openbay/fba/orderlist', 'user_token=' . $this->session->data['user_token'], true),
+ 'text' => $data['heading_title'],
+ );
+
+ $data['fulfillments'] = array();
+
+ if (is_array($order_fba['fulfillments'])) {
+ foreach ($order_fba['fulfillments'] as $fulfillment) {
+ $response_body = json_decode($fulfillment['response_body'], true);
+
+ $fulfillment_errors = array();
+
+ if (isset($response_body['error']) && $response_body['error'] == true) {
+ if (is_array($response_body['error_messages']) && !empty($response_body['error_messages'])) {
+ $fulfillment_errors = $response_body['error_messages'];
+ }
+ }
+
+ $data['fulfillments'][] = array(
+ 'fba_order_fulfillment_id' => $fulfillment['fba_order_fulfillment_id'],
+ 'created' => $fulfillment['created'],
+ 'request_body' => json_decode($fulfillment['request_body']),
+ 'request_body_output' => print_r(json_decode($fulfillment['request_body']), true),
+ 'response_body' => json_decode($fulfillment['response_body']),
+ 'response_body_output' => print_r(json_decode($fulfillment['response_body']), true),
+ 'response_header_code' => $fulfillment['response_header_code'],
+ 'errors' => $fulfillment_errors,
+ 'type' => $fulfillment['type'],
+ );
+ }
+ }
+
+ // Shipping Address
+ if ($order_info['shipping_address_format']) {
+ $format = $order_info['shipping_address_format'];
+ } else {
+ $format = '{firstname} {lastname}' . "\n" . '{company}' . "\n" . '{address_1}' . "\n" . '{address_2}' . "\n" . '{city} {postcode}' . "\n" . '{zone}' . "\n" . '{country}';
+ }
+
+ $find = array(
+ '{firstname}',
+ '{lastname}',
+ '{company}',
+ '{address_1}',
+ '{address_2}',
+ '{city}',
+ '{postcode}',
+ '{zone}',
+ '{zone_code}',
+ '{country}'
+ );
+
+ $replace = array(
+ 'firstname' => $order_info['shipping_firstname'],
+ 'lastname' => $order_info['shipping_lastname'],
+ 'company' => $order_info['shipping_company'],
+ 'address_1' => $order_info['shipping_address_1'],
+ 'address_2' => $order_info['shipping_address_2'],
+ 'city' => $order_info['shipping_city'],
+ 'postcode' => $order_info['shipping_postcode'],
+ 'zone' => $order_info['shipping_zone'],
+ 'zone_code' => $order_info['shipping_zone_code'],
+ 'country' => $order_info['shipping_country']
+ );
+
+ $data['shipping_address'] = str_replace(array("\r\n", "\r", "\n"), '<br />', preg_replace(array("/\s\s+/", "/\r\r+/", "/\n\n+/"), '<br />', trim(str_replace($find, $replace, $format))));
+
+ $data['status_options'] = array(
+ 0 => $this->language->get('text_option_new'),
+ 1 => $this->language->get('text_option_error'),
+ 2 => $this->language->get('text_option_held'),
+ 3 => $this->language->get('text_option_shipped'),
+ 4 => $this->language->get('text_option_cancelled'),
+ );
+
+ $data['type_options'] = array(
+ 0 => $this->language->get('text_type_new'),
+ 1 => $this->language->get('text_type_ship'),
+ 2 => $this->language->get('text_type_cancel'),
+ );
+
+ $data['products'] = array();
+
+ $products = $this->model_sale_order->getOrderProducts($this->request->get['order_id']);
+
+ foreach ($products as $product) {
+ $option_data = array();
+
+ $product_info = $this->model_catalog_product->getProduct($product['product_id']);
+
+ $options = $this->model_sale_order->getOrderOptions($this->request->get['order_id'], $product['order_product_id']);
+
+ foreach ($options as $option) {
+ if ($option['type'] != 'file') {
+ $option_data[] = array(
+ 'name' => $option['name'],
+ 'value' => $option['value'],
+ 'type' => $option['type']
+ );
+ }
+ }
+
+ $data['products'][] = array(
+ 'order_product_id' => $product['order_product_id'],
+ 'product_id' => $product['product_id'],
+ 'name' => $product['name'],
+ 'sku' => $product_info['sku'],
+ 'option' => $option_data,
+ 'quantity' => $product['quantity'],
+ 'fba' => ($product_info['location'] == 'FBA' ? 1 : 0),
+ 'href' => $this->url->link('catalog/product/edit', 'user_token=' . $this->session->data['user_token'] . '&product_id=' . $product['product_id'], true),
+ );
+ }
+
+ if (isset($this->session->data['error'])) {
+ $data['error_warning'] = $this->session->data['error'];
+ unset($this->session->data['error']);
+ } else {
+ $data['error_warning'] = '';
+ }
+
+ if (isset($this->session->data['success'])) {
+ $data['success'] = $this->session->data['success'];
+ unset($this->session->data['success']);
+ } else {
+ $data['success'] = '';
+ }
+
+
+ $data['header'] = $this->load->controller('common/header');
+ $data['column_left'] = $this->load->controller('common/column_left');
+ $data['footer'] = $this->load->controller('common/footer');
+
+ $this->response->setOutput($this->load->view('extension/openbay/fba_order_info', $data));
+ }
+}