Files
interblue.pl/modules/x13allegro/upgrade/install-5.0.0.php
2024-10-25 14:16:28 +02:00

387 lines
15 KiB
PHP

<?php
if (!defined('_PS_VERSION_')) {
exit;
}
require_once(dirname(__FILE__) . '/../x13allegro.php');
use x13allegro\Api\XAllegroApi;
use x13allegro\Api\XAllegroApiTools;
use x13allegro\Adapter\DbAdapter;
/**
* @param $module x13allegro
* @return bool
*/
function upgrade_module_5_0_0($module)
{
$dbCharset = DbAdapter::getUtf8Collation();
// generate new class_index
XAllegroAutoLoader::getInstance()
->generateClassIndex()
->autoload();
// START shipments - migration -------------------------------------------------------------------------------------
$oldShipmentsExists = (int)Db::getInstance()->getValue('
SELECT COUNT(*)
FROM information_schema.tables
WHERE table_schema = "' . _DB_NAME_ . '"
AND table_name = "' . _DB_PREFIX_ . 'xallegro__sell_form_fields"'
);
if ($oldShipmentsExists) {
$fidsDb = Db::getInstance()->executeS('
SELECT `sell_form_id`, `sell_form_field_desc`
FROM `' . _DB_PREFIX_ . 'xallegro__sell_form_fields`
WHERE `sell_form_id` > 35
AND `sell_form_id` < 136
AND `sandbox` = 0'
);
}
if ($oldShipmentsExists && !empty($fidsDb)) {
$shipments = Db::getInstance()->executeS('
SELECT `id_xallegro_pas`, `shipments`
FROM `' . _DB_PREFIX_ . 'xallegro_pas`'
);
$fidsDb = Db::getInstance()->executeS('
SELECT `sell_form_id`, `sell_form_field_desc`
FROM `' . _DB_PREFIX_ . 'xallegro__sell_form_fields`
WHERE `sell_form_id` > 35
AND `sell_form_id` < 136
AND `sandbox` = 0'
);
$fids = array();
foreach ($fidsDb as $fid) {
$fids[$fid['sell_form_id']] = $fid['sell_form_field_desc'];
}
foreach ($shipments as $shipment) {
$shipmentData = unserialize($shipment['shipments']);
$shipmentNew = array();
foreach ($shipmentData as $fidId => $data) {
if ($fidId == 35) {
foreach ($data as $fidOption) {
$shipmentNew[35 . '_' . $fidOption] = array(
'enabled' => $fidOption
);
}
}
if (isset($fids[$fidId])) {
$shipmentNew[$fids[$fidId]] = $data;
}
}
Db::getInstance()->execute('
UPDATE `' . _DB_PREFIX_ . 'xallegro_pas`
SET `shipments` = "' . pSQL(json_encode($shipmentNew)) . '"
WHERE `id_xallegro_pas` = ' . (int)$shipment['id_xallegro_pas']
);
}
}
// END shipments - migration ---------------------------------------------------------------------------------------
// START category fields - migration -------------------------------------------------------------------------------
$categoryFields = Db::getInstance()->executeS('
SELECT `id_xallegro_category`, `fields`
FROM `' . _DB_PREFIX_ . 'xallegro_category`'
);
foreach ($categoryFields as $categoryField) {
if (!XAllegroApiTools::isSerialized($categoryField['fields'])) {
continue;
}
Db::getInstance()->execute('
UPDATE `' . _DB_PREFIX_ . 'xallegro_category`
SET `fields` = "' . pSQL(json_encode(unserialize($categoryField['fields']))) . '"
WHERE `id_xallegro_category` = ' . (int)$categoryField['id_xallegro_category']
);
}
// END category fields - migration ---------------------------------------------------------------------------------
// START individual product properties - migration -----------------------------------------------------------------
Db::getInstance()->execute(
'
DELETE p1 FROM `' . _DB_PREFIX_ . 'xallegro_product` p1
INNER JOIN `' . _DB_PREFIX_ . 'xallegro_product` p2
WHERE p1.`id_xallegro_product` > p2.`id_xallegro_product`
AND p1.`id_product` = p2.`id_product`
AND p1.`id_product_attribute` = p2.`id_product_attribute`'
);
$products = Db::getInstance()->executeS('
SELECT `id_xallegro_product`, `description`, `images`
FROM `' . _DB_PREFIX_ . 'xallegro_product`'
);
foreach ($products as $product) {
if (!XAllegroApiTools::isSerialized($product['images'])) {
continue;
}
Db::getInstance()->execute('
UPDATE `' . _DB_PREFIX_ . 'xallegro_product`
SET `images` = "' . pSQL(json_encode(unserialize($product['images']))) . '",
`description` = "' . pSQL(json_encode(array($product['description'], null, null, null))) . '"
WHERE `id_xallegro_product` = ' . (int)$product['id_xallegro_product']
);
}
// END individual product properties - migration -------------------------------------------------------------------
// START template - migration --------------------------------------------------------------------------------------
$templates = Db::getInstance()->executeS('
SELECT `id_xallegro_template`, `additional_images`
FROM `' . _DB_PREFIX_ . 'xallegro_template`'
);
foreach ($templates as $template) {
if (!XAllegroApiTools::isSerialized($template['additional_images'])) {
continue;
}
if ($template['additional_images']) {
Db::getInstance()->execute('
UPDATE `' . _DB_PREFIX_ . 'xallegro_template`
SET `additional_images` = "' . pSQL(json_encode(unserialize($template['additional_images']))) . '"
WHERE `id_xallegro_template` = ' . (int)$template['id_xallegro_template']
);
}
}
// END template - migration ----------------------------------------------------------------------------------------
// START auction start_time - migration ----------------------------------------------------------------------------
$auctions = Db::getInstance()->executeS('
SELECT `id_xallegro_auction`, `start_time`
FROM `' . _DB_PREFIX_ . 'xallegro_auction`'
);
foreach ($auctions as $auction) {
if ($auction['start_time'] && isAuctionDateStart($auction['start_time'])) {
$date = new DateTime($auction['start_time']);
$date = $date->format('Y-m-d H:i:s');
Db::getInstance()->execute('
UPDATE `' . _DB_PREFIX_ . 'xallegro_auction`
SET `start_time` = "' . pSQL($date) . '"
WHERE `id_xallegro_auction` = ' . (int)$auction['id_xallegro_auction']
);
}
}
// END auction start_time - migration ------------------------------------------------------------------------------
// START payment statuses - migration (PayU / Przelewy24) ----------------------------------------------------------
$statuses = Db::getInstance()->executeS('SELECT * FROM `' . _DB_PREFIX_ . 'xallegro_status`');
foreach ($statuses as $status) {
if ($status['id_allegro_state'] == 'b') {
$new_name = 'Przelew tradycyjny';
} elseif ($status['position'] == 0) {
$new_name = preg_replace('/^PayU - /', '', $status['allegro_name']);
} else {
$new_name = preg_replace('/^Status PayU/', 'Status Allegro', $status['allegro_name']);
}
Db::getInstance()->execute('
UPDATE `' . _DB_PREFIX_ . 'xallegro_status`
SET `allegro_name` = "' . pSQL($new_name) . '"
WHERE `id_xallegro_status` = ' . (int)$status['id_xallegro_status']
);
}
// new statuses
$sp = XAllegroConfiguration::get('PAYU_STATUS_SELECTED');
Db::getInstance()->execute('
INSERT IGNORE INTO `' . _DB_PREFIX_ . 'xallegro_status` (`id_order_state`, `id_allegro_state`, `allegro_name`, `position`)
VALUES
(' . $sp . ', "h", "BPH", 0),
(' . $sp . ', "neb", "Nest Bank", 0),
(' . $sp . ', "rap", "Raiffeisen R-Przelew", 0),
(' . $sp . ', "plb", "Plus Bank", 0),
(' . $sp . ', "bpo", "e-transfer Pocztowy24", 0),
(' . $sp . ', "bsp", "Banki Spoldzielcze", 0)'
);
Db::getInstance()->execute('
UPDATE `' . _DB_PREFIX_ . 'xallegro_status`
SET `allegro_name` = "Raty"
WHERE `id_allegro_state` = "ai"'
);
$statuses_ids = XAllegroConfiguration::getMultiple(array(
'PAYU_STATUS_INSTALLMENT',
'PAYU_STATUS_SELECTED',
'PAYU_STATUS_AWAITING'
));
foreach ($statuses_ids as $status_id) {
$os = new OrderState($status_id);
if (Validate::isLoadedObject($os)) {
foreach (Language::getLanguages() as $language) {
$os->name[$language['id_lang']] = trim(preg_replace('/PayU$/', '', $os->name[$language['id_lang']]));
}
$os->save();
}
}
// END payment statuses - migration (PayU / Przelewy24) ------------------------------------------------------------
Db::getInstance()->execute('
ALTER TABLE `' . _DB_PREFIX_ . 'xallegro_account`
DROP `password`,
DROP `rest_apikey`,
DROP `web_apikey`,
DROP `verforms`,
CHANGE `session_handle` `session` text NULL'
);
Db::getInstance()->execute('
ALTER TABLE `' . _DB_PREFIX_ . 'xallegro_product`
ADD `tags` text NULL,
ADD `images_additional` text NULL,
ADD `title_pattern` char(128) NULL,
ADD `sync_price` tinyint(1) NOT NULL DEFAULT 1,
ADD `sync_quantity_allegro` tinyint(1) NOT NULL DEFAULT 1,
MODIFY `id_product_attribute` int(10) unsigned NULL,
CHANGE `images` `images_positions` text NULL,
CHANGE `description` `descriptions_additional` text NULL,
ADD UNIQUE KEY (`id_product`, `id_product_attribute`)'
);
Db::getInstance()->execute('
ALTER TABLE `' . _DB_PREFIX_ . 'xallegro_category`
DROP `features`,
ADD `fields_mapping` longtext NULL,
ADD `tags` text NULL,
CHANGE `fields` `fields_values` longtext NULL'
);
Db::getInstance()->execute('
ALTER TABLE `' . _DB_PREFIX_ . 'xallegro_pas`
DROP `shipment_email`,
DROP `customer_pickup`,
DROP `account_number`,
DROP `account_number_second`,
ADD `country` int(10) unsigned NOT NULL'
);
Db::getInstance()->execute('
ALTER TABLE `' . _DB_PREFIX_ . 'xallegro_auction`
DROP `account_number`,
DROP `account_number_second`,
MODIFY `start_time` datetime NULL'
);
Db::getInstance()->execute('
CREATE TABLE IF NOT EXISTS `' . _DB_PREFIX_ . 'xallegro_manufacturer` (
`id_xallegro_manufacturer` int(10) unsigned NOT NULL AUTO_INCREMENT,
`id_manufacturer` int(10) unsigned NOT NULL,
`tags` text NULL,
PRIMARY KEY (`id_xallegro_manufacturer`),
KEY (`id_manufacturer`)
) ENGINE=InnoDB DEFAULT CHARSET=' . $dbCharset
);
Db::getInstance()->execute('
CREATE TABLE IF NOT EXISTS `' . _DB_PREFIX_ . 'xallegro_carrier_package_info` (
`id_order_carrier` int(10) unsigned NOT NULL DEFAULT 0,
`id_order` int(10) unsigned NOT NULL DEFAULT 0,
`id_operator` int(10) unsigned NOT NULL DEFAULT 0,
`operator_name` char(32) NULL,
PRIMARY KEY(`id_order_carrier`),
KEY(`id_order_carrier`, `id_order`)
) ENGINE=InnoDB DEFAULT CHARSET=' . $dbCharset
);
Db::getInstance()->execute('
CREATE TABLE IF NOT EXISTS `' . _DB_PREFIX_ . 'xallegro__cats_form_fields` (
`id_category` int(10) unsigned NOT NULL,
`sell_form_id` int(10) unsigned NOT NULL,
`sell_form_title` char(255),
`sell_form_cat` int(10),
`sell_form_type` int(10),
`sell_form_res_type` int(10),
`sell_form_def_value` int(10),
`sell_form_opt` int(10),
`sell_form_pos` int(10),
`sell_form_length` int(10),
`sell_min_value` decimal(10,2),
`sell_max_value` decimal(10,2),
`sell_form_desc` text,
`sell_form_opts_values` text,
`sell_form_field_desc` text,
`sell_form_param_id` int(10) unsigned,
`sell_form_param_values` text,
`sell_form_parent_id` int(10) unsigned,
`sell_form_parent_value` int(10),
`sell_form_unit` char(16),
`sell_form_options` int(10),
PRIMARY KEY(`id_category`, `sell_form_id`)
) ENGINE=InnoDB DEFAULT CHARSET=' . $dbCharset
);
Db::getInstance()->execute('DROP TABLE IF EXISTS `' . _DB_PREFIX_ . 'xallegro__sell_form_fields`');
Db::getInstance()->execute('
UPDATE `' . _DB_PREFIX_ . 'xallegro_account`
SET `expire_session` = "2016-01-01 00:00:00"'
);
Db::getInstance()->execute('
UPDATE `' . _DB_PREFIX_ . 'xallegro_pas`
SET `country` = ' . (int)XAllegroApi::COUNTRY_PL
);
// delete unused configuration
foreach (array(
'INPOST_LETTER',
'INPOST_MACHINE',
'INPOST_MACHINE_COD',
'INPOST_CARRIER',
'INPOST_CARRIER_COD',
'SEND_ADDITIONAL_IMAGES'
) as $conf) {
XAllegroConfiguration::deleteByName($conf);
}
// new configuration
foreach (array(
'PRODUCT_ASSOC_CLOSE_DELETED' => 0,
'PRODUCT_ASSOC_CLOSE_UNACTIVE' => 0,
'ORDER_SEND_CUSTOMER_MAIL' => 0,
'PRICE_UPDATE' => 0,
'PRICE_UPDATE_CHUNK' => 100,
'PRICE_UPDATE_OFFSET' => 0,
'FRONT_DISPLAY_LINK' => 0,
'FRONT_DISPLAY_LINK_HOOK' => (version_compare(_PS_VERSION_, '1.7.0.0', '>=') ? 'displayProductAdditionalInfo' : 'displayLeftColumnProduct')
) as $key => $conf) {
XAllegroConfiguration::updateValue($key, $conf);
}
// install demo templates
$isNewTemplate = (int)Db::getInstance()->getValue('
SELECT COUNT(*)
FROM `' . _DB_PREFIX_ . 'xallegro_template`
WHERE `is_new` = 1'
);
if (!$isNewTemplate) {
$module->installDemoTemplates();
}
$module->reinstallMetas();
return true;
}
function isAuctionDateStart($datetime, $format = 'd.m.Y H:i')
{
$d = DateTime::createFromFormat($format, $datetime);
return $d && $d->format($format) == $datetime;
}