Files
kalsport.pl/modules/x13import/x13import.php
2024-11-05 12:22:50 +01:00

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] : '');
}