375 lines
19 KiB
PHP
375 lines
19 KiB
PHP
<?php
|
|
|
|
if (!defined('_PS_VERSION_')) {
|
|
exit;
|
|
}
|
|
|
|
require_once (dirname(__FILE__) . '/x13import.ion.php');
|
|
|
|
define('X_IMPORT_IMG_MAX_SIZE', 9);
|
|
define('X_IMPORT_IMG_MAX_PIXELS', 9000);
|
|
define('X_IMPORT_IMG_TMP_PREFIX', 'PS_X_');
|
|
define('X_IMPORT_ITEMS_LIMIT', 500);
|
|
define('X_IMPORT_ITEMS_DOWNLOAD_LIMIT', 25);
|
|
define('X_IMPORT_TIMEOUT', 600);
|
|
define('X_IMPORT_MEMORY_LIMIT', '512M');
|
|
define('X_IMPORT_DB_MAX_ALLOWED_PACKET', 16777216);
|
|
define('X_IMPORT_DB_WAIT_TIMEOUT', 30);
|
|
define('X_IMPORT_DEBUG', false);
|
|
|
|
class x13import extends x13import\XImportModuleCore
|
|
{
|
|
/** @var XImportConfiguration */
|
|
public $config;
|
|
|
|
/** @var bool */
|
|
public $bootstrap;
|
|
|
|
public function __construct()
|
|
{
|
|
$this->name = 'x13import';
|
|
$this->tab = 'market_place';
|
|
$this->version = '4.7.3';
|
|
$this->author = 'x13.pl';
|
|
$this->need_instance = 1;
|
|
$this->ps_versions_compliancy = array('min' => '1.5', 'max' => '1.7.99.9999');
|
|
$this->ps_version = substr(_PS_VERSION_, 0, 3);
|
|
|
|
if (version_compare(_PS_VERSION_, '1.6', '<')) {
|
|
$this->bootstrap = false;
|
|
} else {
|
|
$this->bootstrap = true;
|
|
}
|
|
|
|
parent::__construct();
|
|
|
|
$this->config = new XImportConfiguration($this);
|
|
|
|
$this->displayName = $this->l('Integracja XML / CSV');
|
|
$this->description = $this->l('Import hurtowni XML / CSV / API - zaawansowana integracja hurtowni z Twoim sklepem PrestaShop. Wygodny import produktów, wraz z automatyczną aktualizacją danych.');
|
|
}
|
|
|
|
public function hookActionObjectCategoryDeleteBefore($data)
|
|
{
|
|
Db::getInstance()->update('ximport_category', array(
|
|
'id_category' => 0
|
|
), 'id_category = ' . (int)$data['object']->id);
|
|
|
|
Db::getInstance()->delete('ximport_category_additional', 'id_category = ' . (int)$data['object']->id);
|
|
|
|
foreach ($data['object']->getSubCategories(Context::getContext()->language->id) as $category) {
|
|
Db::getInstance()->update('ximport_category', array(
|
|
'id_category' => 0
|
|
), 'id_category = ' . (int)$category['id_category']);
|
|
|
|
Db::getInstance()->delete('ximport_category_additional', 'id_category = ' . (int)$category['id_category']);
|
|
}
|
|
}
|
|
|
|
public function hookActionObjectImageDeleteBefore($data)
|
|
{
|
|
Db::getInstance()->delete('ximport_image', 'id_image = ' . (int)$data['object']->id);
|
|
Db::getInstance()->delete('ximport_image_attribute', 'id_image = ' . (int)$data['object']->id);
|
|
}
|
|
|
|
public function hookActionObjectProductDeleteBefore($data)
|
|
{
|
|
Db::getInstance()->delete('ximport_product', 'id_product = ' . (int)$data['object']->id);
|
|
Db::getInstance()->delete('ximport_attachment', 'id_product = ' . (int)$data['object']->id);
|
|
Db::getInstance()->delete('ximport_image', 'id_product = ' . (int)$data['object']->id);
|
|
Db::getInstance()->delete('ximport_image_attribute', 'id_product = ' . (int)$data['object']->id);
|
|
}
|
|
|
|
public function install()
|
|
{
|
|
if (!parent::install()
|
|
|| !$this->registerHook('actionObjectCategoryDeleteBefore')
|
|
|| !$this->registerHook('actionObjectImageDeleteBefore')
|
|
|| !$this->registerHook('actionObjectProductDeleteBefore')
|
|
|| !$this->registerHook('backOfficeHeader')
|
|
) {
|
|
return false;
|
|
}
|
|
|
|
// Module::install() czysci Autoload, wiec uruchamiamy funkcje jeszcze raz przed dalsza czescia instalacji
|
|
require (dirname(__FILE__) . '/x13import.ion.php');
|
|
|
|
$this->reinstallTabs();
|
|
|
|
$dbCharset = \x13import\Adapter\DbAdapter::getUtf8Collation();
|
|
|
|
Db::getInstance()->execute('
|
|
CREATE TABLE IF NOT EXISTS `' . _DB_PREFIX_ . 'ximport_configuration` (
|
|
`id_ximport_configuration` int(10) unsigned NOT NULL AUTO_INCREMENT,
|
|
`name` varchar(32) NOT NULL,
|
|
`value` text NOT NULL,
|
|
|
|
PRIMARY KEY (`id_ximport_configuration`),
|
|
UNIQUE INDEX (`name`)
|
|
) ENGINE=InnoDB DEFAULT CHARSET=' . $dbCharset . ';
|
|
|
|
CREATE TABLE IF NOT EXISTS `' . _DB_PREFIX_ . 'ximport_configuration_wholesaler` (
|
|
`wholesaler` varchar(64) NOT NULL,
|
|
`value` text NOT NULL,
|
|
|
|
PRIMARY KEY (`wholesaler`)
|
|
) ENGINE=InnoDB DEFAULT CHARSET=' . $dbCharset . ';
|
|
|
|
CREATE TABLE IF NOT EXISTS `' . _DB_PREFIX_ . 'ximport_price` (
|
|
`id_ximport_price` int(10) unsigned NOT NULL AUTO_INCREMENT,
|
|
`wholesaler` varchar(64) NOT NULL,
|
|
`range_from` decimal(10,2) NULL DEFAULT "0.00",
|
|
`range_to` decimal(10,2) NULL DEFAULT "0.00",
|
|
`type` tinyint(1) NOT NULL,
|
|
`markup` decimal(10,2) NULL DEFAULT "0.00",
|
|
`override_category` tinyint(1) NOT NULL,
|
|
|
|
PRIMARY KEY (`id_ximport_price`),
|
|
INDEX (`wholesaler`)
|
|
) ENGINE=InnoDB DEFAULT CHARSET=' . $dbCharset . ';
|
|
|
|
CREATE TABLE IF NOT EXISTS `' . _DB_PREFIX_ . 'ximport_category` (
|
|
`id_ximport_category` int(10) unsigned NOT NULL AUTO_INCREMENT,
|
|
`id_category` int(10) unsigned NOT NULL,
|
|
`path` varchar(255) NOT NULL,
|
|
`title_pattern` varchar(255) NOT NULL DEFAULT "",
|
|
`import` tinyint(1) NOT NULL,
|
|
`markup` decimal(10,2) NOT NULL DEFAULT "0.00",
|
|
`markup_type` enum("percent", "amount") NOT NULL DEFAULT "percent",
|
|
`wholesaler_code` varchar(10) NOT NULL,
|
|
`wholesaler_name` varchar(50) NOT NULL,
|
|
|
|
PRIMARY KEY (`id_ximport_category`),
|
|
INDEX (`id_category`),
|
|
INDEX (`import`),
|
|
INDEX (`wholesaler_code`)
|
|
) ENGINE=InnoDB DEFAULT CHARSET=' . $dbCharset . ';
|
|
|
|
CREATE TABLE IF NOT EXISTS `' . _DB_PREFIX_ . 'ximport_category_additional` (
|
|
`id_ximport_category` int(10) unsigned NOT NULL,
|
|
`id_category` int(10) unsigned NOT NULL,
|
|
|
|
UNIQUE INDEX (`id_ximport_category`, `id_category`)
|
|
) ENGINE=InnoDB DEFAULT CHARSET=' . $dbCharset . ';
|
|
|
|
CREATE TABLE IF NOT EXISTS `' . _DB_PREFIX_ . 'ximport_image` (
|
|
`id_ximport_image` int(10) unsigned NOT NULL AUTO_INCREMENT,
|
|
`code` varchar(128) NOT NULL,
|
|
`id_product` int(10) unsigned NOT NULL,
|
|
`id_image` int(10) unsigned NOT NULL,
|
|
`fingerprint` varchar(32) NOT NULL COMMENT "md5 - wartosci (adres, base64)",
|
|
|
|
PRIMARY KEY (`id_ximport_image`),
|
|
INDEX (`code`),
|
|
INDEX (`id_product`),
|
|
INDEX (`id_image`),
|
|
INDEX (`fingerprint`)
|
|
) ENGINE=InnoDB DEFAULT CHARSET=' . $dbCharset . ';
|
|
|
|
CREATE TABLE IF NOT EXISTS `' . _DB_PREFIX_ . 'ximport_image_attribute` (
|
|
`id_ximport_image_attribute` int(10) unsigned NOT NULL AUTO_INCREMENT,
|
|
`id_product` int(10) unsigned NOT NULL,
|
|
`id_product_attribute` int(10) unsigned NOT NULL,
|
|
`id_image` int(10) unsigned NOT NULL,
|
|
|
|
PRIMARY KEY (`id_ximport_image_attribute`),
|
|
INDEX (`id_product`, `id_product_attribute`),
|
|
INDEX (`id_image`)
|
|
) ENGINE=InnoDB DEFAULT CHARSET=' . $dbCharset . ';
|
|
|
|
CREATE TABLE IF NOT EXISTS `' . _DB_PREFIX_ . 'ximport_attachment` (
|
|
`id_ximport_attachment` int(10) unsigned NOT NULL AUTO_INCREMENT,
|
|
`code` varchar(128) NOT NULL,
|
|
`id_product` int(10) unsigned NOT NULL,
|
|
`id_attachment` int(10) unsigned NOT NULL,
|
|
`fingerprint` varchar(32) NOT NULL,
|
|
|
|
PRIMARY KEY (`id_ximport_attachment`),
|
|
INDEX (`code`),
|
|
INDEX (`id_product`),
|
|
INDEX (`id_attachment`),
|
|
INDEX (`fingerprint`)
|
|
) ENGINE=InnoDB DEFAULT CHARSET=' . $dbCharset . ';
|
|
|
|
CREATE TABLE IF NOT EXISTS `' . _DB_PREFIX_ . 'ximport_item` (
|
|
`id_ximport_item` int(10) unsigned NOT NULL AUTO_INCREMENT,
|
|
`code` varchar(128) NOT NULL,
|
|
`wholesaler_code` varchar(10) NOT NULL,
|
|
`reference` varchar(32) NOT NULL DEFAULT "",
|
|
`isbn` varchar(32) NOT NULL DEFAULT "",
|
|
`ean13` varchar(32) NOT NULL DEFAULT "",
|
|
`mpn` varchar(40) NOT NULL DEFAULT "",
|
|
`id_category` int(10) unsigned NOT NULL,
|
|
`additional_categories` varchar(255) NOT NULL DEFAULT "",
|
|
`name` varchar(128) NOT NULL,
|
|
`link_rewrite` varchar(128) NOT NULL,
|
|
`carriers` varchar(255) NOT NULL DEFAULT "",
|
|
`description` longtext NOT NULL DEFAULT "",
|
|
`description_short` text NOT NULL DEFAULT "",
|
|
`tax` int(10) unsigned NOT NULL DEFAULT 0,
|
|
`price` decimal(20,6) NOT NULL DEFAULT "0.00",
|
|
`unit_price` decimal(20,6) NOT NULL DEFAULT "0.00",
|
|
`wholesale_price` decimal(20,6) NOT NULL DEFAULT "0.00",
|
|
`additional_shipping_cost` decimal(20,6) NOT NULL DEFAULT "0.00",
|
|
`weight` decimal(20,6) NOT NULL DEFAULT "0.00",
|
|
`width` decimal(20,6) NOT NULL DEFAULT "0.00",
|
|
`height` decimal(20,6) NOT NULL DEFAULT "0.00",
|
|
`depth` decimal(20,6) NOT NULL DEFAULT "0.00",
|
|
`condition` enum("new", "used", "refurbished") NOT NULL DEFAULT "new",
|
|
`unity` varchar(255) NOT NULL DEFAULT "",
|
|
`manufacturer` varchar(64) NOT NULL DEFAULT "",
|
|
`supplier` varchar(64) NOT NULL DEFAULT "",
|
|
`quantity` int(10) unsigned NOT NULL DEFAULT 0,
|
|
`minimal_quantity` int(10) unsigned NOT NULL DEFAULT 1,
|
|
`online_only` tinyint(1) NOT NULL DEFAULT 0,
|
|
`show_price` tinyint(1) NOT NULL DEFAULT 1,
|
|
`available_for_order` tinyint(1) NOT NULL DEFAULT 1,
|
|
`attributes` text NOT NULL DEFAULT "",
|
|
`features` text NOT NULL DEFAULT "",
|
|
`active` tinyint(1) NOT NULL DEFAULT 1,
|
|
`visibility` enum("both", "catalog", "search", "none", "nothing") NOT NULL DEFAULT "both",
|
|
`visibility_num` tinyint(1) NOT NULL DEFAULT 1,
|
|
`on_sale` tinyint(1) NOT NULL DEFAULT 0,
|
|
`is_virtual` tinyint(1) NOT NULL DEFAULT 0,
|
|
`out_of_stock` tinyint(1) NOT NULL DEFAULT 0,
|
|
`available_date` date NULL,
|
|
`meta_title` varchar(255) NOT NULL DEFAULT "",
|
|
`meta_description` varchar(255) NOT NULL DEFAULT "",
|
|
`meta_keywords` varchar(255) NOT NULL DEFAULT "",
|
|
`available_now` varchar(255) NOT NULL DEFAULT "",
|
|
`available_later` varchar(255) NOT NULL DEFAULT "",
|
|
`delivery_in_stock` varchar(255) NOT NULL DEFAULT "",
|
|
`delivery_out_stock` varchar(255) NOT NULL DEFAULT "",
|
|
`tags` varchar(255) NOT NULL DEFAULT "",
|
|
`fingerprint` varchar(32) NOT NULL,
|
|
`images_data` text NOT NULL DEFAULT "",
|
|
`auction_id` bigint(20) NOT NULL DEFAULT 0,
|
|
|
|
PRIMARY KEY (`id_ximport_item`),
|
|
UNIQUE INDEX (`fingerprint`),
|
|
INDEX (`code`),
|
|
INDEX (`wholesaler_code`),
|
|
INDEX (`manufacturer`),
|
|
INDEX (`supplier`)
|
|
) ENGINE=InnoDB DEFAULT CHARSET=' . $dbCharset . ';
|
|
|
|
CREATE TABLE IF NOT EXISTS `' . _DB_PREFIX_ . 'ximport_item_image` (
|
|
`id_ximport_item_image` int(10) unsigned NOT NULL AUTO_INCREMENT,
|
|
`code` varchar(128) NOT NULL,
|
|
`type` varchar(10) NOT NULL,
|
|
`value` mediumtext NOT NULL,
|
|
`value_md5` varchar(32) NOT NULL,
|
|
`fingerprint` varchar(32) NOT NULL,
|
|
|
|
PRIMARY KEY (`id_ximport_item_image`),
|
|
UNIQUE INDEX (`value_md5`, `fingerprint`),
|
|
INDEX (`code`),
|
|
INDEX (`value_md5`),
|
|
INDEX (`fingerprint`)
|
|
) ENGINE=InnoDB DEFAULT CHARSET=' . $dbCharset . ';
|
|
|
|
CREATE TABLE IF NOT EXISTS `' . _DB_PREFIX_ . 'ximport_item_attachment` (
|
|
`id_ximport_item_attachment` int(10) unsigned NOT NULL AUTO_INCREMENT,
|
|
`code` varchar(128) NOT NULL,
|
|
`type` varchar(10) NOT NULL,
|
|
`value` mediumtext NOT NULL,
|
|
`value_md5` varchar(32) NOT NULL,
|
|
`fingerprint` varchar(32) NULL,
|
|
|
|
PRIMARY KEY (`id_ximport_item_attachment`),
|
|
UNIQUE INDEX (`code`, `value_md5`),
|
|
INDEX (`code`),
|
|
INDEX (`value_md5`)
|
|
) ENGINE=InnoDB DEFAULT CHARSET=' . $dbCharset . ';
|
|
|
|
CREATE TABLE IF NOT EXISTS `' . _DB_PREFIX_ . 'ximport_product` (
|
|
`id_ximport_product` int(10) unsigned NOT NULL AUTO_INCREMENT,
|
|
`code` varchar(128) NOT NULL,
|
|
`id_product` int(10) unsigned NOT NULL,
|
|
`id_product_attribute` int(10) unsigned NOT NULL,
|
|
`fingerprint` varchar(32) NOT NULL,
|
|
`exclude` tinyint(1) NOT NULL DEFAULT 0,
|
|
`exclude_price` tinyint(1) NOT NULL DEFAULT 0,
|
|
|
|
PRIMARY KEY (`id_ximport_product`),
|
|
UNIQUE INDEX (`id_product`, `id_product_attribute`),
|
|
INDEX (`code`),
|
|
INDEX (`fingerprint`),
|
|
INDEX (`exclude`),
|
|
INDEX (`exclude_price`)
|
|
) ENGINE=InnoDB DEFAULT CHARSET=' . $dbCharset . ';
|
|
|
|
CREATE TABLE IF NOT EXISTS `' . _DB_PREFIX_ . 'ximport_tmp` (
|
|
`id_product` int(10) unsigned NOT NULL,
|
|
`quantity` int(10) unsigned NOT NULL DEFAULT 0,
|
|
`min_out_of_stock` tinyint(1) unsigned NOT NULL DEFAULT 0,
|
|
`max_out_of_stock` tinyint(1) unsigned NOT NULL DEFAULT 0,
|
|
`product_unit_price` decimal(20,6) NOT NULL DEFAULT "0.00",
|
|
`basic_price` decimal(20,6) NOT NULL DEFAULT "0.00",
|
|
`basic_unit_price` decimal(20,6) NOT NULL DEFAULT "0.00",
|
|
`basic_wholesale_price` decimal(20,6) NOT NULL DEFAULT "0.00",
|
|
`basic_weight` decimal(20,6) NOT NULL DEFAULT "0.00",
|
|
|
|
PRIMARY KEY `id_product` (`id_product`)
|
|
) ENGINE=InnoDB DEFAULT CHARSET=' . $dbCharset . ';'
|
|
);
|
|
|
|
foreach (XImportConfiguration::getDefaultConfiguration() as $key => $value) {
|
|
XImportConfiguration::updateValue($key, $value);
|
|
}
|
|
|
|
return true;
|
|
}
|
|
|
|
public function uninstall()
|
|
{
|
|
if (!parent::uninstall()) {
|
|
return false;
|
|
}
|
|
|
|
Db::getInstance()->execute('
|
|
DROP TABLE IF EXISTS `' . _DB_PREFIX_ . 'ximport_attachment`;
|
|
DROP TABLE IF EXISTS `' . _DB_PREFIX_ . 'ximport_category`;
|
|
DROP TABLE IF EXISTS `' . _DB_PREFIX_ . 'ximport_category_additional`;
|
|
DROP TABLE IF EXISTS `' . _DB_PREFIX_ . 'ximport_configuration`;
|
|
DROP TABLE IF EXISTS `' . _DB_PREFIX_ . 'ximport_configuration_wholesaler`;
|
|
DROP TABLE IF EXISTS `' . _DB_PREFIX_ . 'ximport_price`;
|
|
DROP TABLE IF EXISTS `' . _DB_PREFIX_ . 'ximport_image`;
|
|
DROP TABLE IF EXISTS `' . _DB_PREFIX_ . 'ximport_image_attribute`;
|
|
DROP TABLE IF EXISTS `' . _DB_PREFIX_ . 'ximport_item`;
|
|
DROP TABLE IF EXISTS `' . _DB_PREFIX_ . 'ximport_item_attachment`;
|
|
DROP TABLE IF EXISTS `' . _DB_PREFIX_ . 'ximport_item_image`;
|
|
DROP TABLE IF EXISTS `' . _DB_PREFIX_ . 'ximport_product`;
|
|
DROP TABLE IF EXISTS `' . _DB_PREFIX_ . 'ximport_tmp`;'
|
|
);
|
|
|
|
foreach (Tab::getCollectionFromModule($this->name) as $tab) {
|
|
$tab->delete();
|
|
}
|
|
|
|
return true;
|
|
}
|
|
|
|
public function reinstallTabs()
|
|
{
|
|
return $this->config->reinstallTabs();
|
|
}
|
|
|
|
/**
|
|
* @param string $message
|
|
* @param string $className
|
|
* @param bool $prefix
|
|
* @return string
|
|
*/
|
|
public function renderAdminMessage($message, $className = 'warning', $prefix = true)
|
|
{
|
|
return str_replace($this->displayName, '<span class="badge badge-' . $className . '"><b>' . $this->displayName . '</b></span>', ($prefix ? $this->displayName . ' ' : '') . $message);
|
|
}
|
|
}
|
|
|
|
function convertMemory($memory)
|
|
{
|
|
$unit = array('B', 'KB', 'MB', 'GB');
|
|
return @round($memory / pow(1024, ($i = floor(log($memory, 1024)))), 2) . (isset($unit[(int)$i]) ? ' ' . $unit[(int)$i] : '');
|
|
}
|