Files
kupshop/upgrade/list/upgrade.2015-08-19.php
2025-08-02 16:30:27 +02:00

460 lines
17 KiB
PHP

<?php
class Upgrade33 extends UpgradeNew
{
public function checkRightfulness_1()
{
return $this->checkColumnExists('parameters_products', 'value_float');
}
/** Params: Prepare columns for new values */
public function makeChanges_1()
{
sqlQuery('ALTER TABLE `parameters_products`
ADD `value_float` FLOAT NULL DEFAULT NULL AFTER `value`,
ADD `value_char` VARCHAR(50) NULL DEFAULT NULL AFTER `value`,
ADD `value_list` INT NULL DEFAULT NULL AFTER `value`');
$this->upgradeOK();
}
public function checkRightfulness_2()
{
return $this->checkTableExists('parameters_list');
}
/** Params: Add new table for list parameters */
public function makeChanges_2()
{
sqlQuery('CREATE TABLE IF NOT EXISTS `parameters_list` (
`id` INT(11) NOT NULL AUTO_INCREMENT PRIMARY KEY,
`id_parameter` INT(10) UNSIGNED NOT NULL,
`value` VARCHAR(50) NOT NULL,
`position` INT(11) DEFAULT NULL,
`description` TEXT NOT NULL
) ENGINE=InnoDB AUTO_INCREMENT=1');
sqlQuery('ALTER TABLE `parameters_list` ADD UNIQUE KEY `id_parameter` (`id_parameter`,`value`)');
sqlQuery('ALTER TABLE `parameters_list`
ADD CONSTRAINT `parameters_list_ibfk_1` FOREIGN KEY (`id_parameter`) REFERENCES `parameters` (`id`) ON DELETE CASCADE ON UPDATE CASCADE;');
sqlQuery('ALTER TABLE `parameters_products` ADD FOREIGN KEY (`value_list`) REFERENCES `parameters_list`(`id`) ON DELETE CASCADE ON UPDATE CASCADE');
$this->upgradeOK();
}
public function checkRightfulness_3()
{
return !$this->checkColumnExists('parameters', 'value');
}
/** Params: Migrate list values to new column types and remove old column */
public function makeChanges_3()
{
$lists = sqlQuery("SELECT * FROM `parameters` WHERE value_type='list'");
$pos = 0;
foreach ($lists as $list) {
$values = explode('|', $list['value']);
foreach ($values as $value) {
try {
$this->insertSQL('parameters_list', ['id_parameter' => $list['id'], 'position' => $pos++, 'value' => $value]);
} catch (Exception $e) {
}
}
}
sqlQuery('ALTER TABLE `parameters` DROP COLUMN `value`');
$this->upgradeOK();
}
public function checkRightfulness_4()
{
return !$this->checkColumnExists('parameters_products', 'value');
}
/** Params: Migrate product parameters values to new column types and remove old column */
public function makeChanges_4()
{
sqlQuery('UPDATE `parameters_products` pp
LEFT JOIN `parameters` p ON p.id = pp.id_parameter
SET pp.value_float=value
WHERE p.value_type="int" OR p.value_type="float"');
sqlQuery('UPDATE `parameters_products` pp
LEFT JOIN `parameters` p ON p.id = pp.id_parameter
SET pp.value_char=value
WHERE p.value_type="char" ');
// Add missing list values
$products = sqlQuery('SELECT DISTINCT pp.id_parameter, pp.value AS value
FROM `parameters_products` pp
LEFT JOIN `parameters` p ON p.id = pp.id_parameter
LEFT JOIN `parameters_list` pl ON pl.id_parameter = pp.id_parameter AND pp.value =pl.value
WHERE p.value_type="list" AND pl.id IS NULL');
foreach ($products as $product) {
$this->insertSQL('parameters_list', ['id_parameter' => $product['id_parameter'], 'position' => 9999, 'value' => $product['value']]);
}
sqlQuery('UPDATE `parameters_products` pp
LEFT JOIN `parameters` p ON p.id = pp.id_parameter
LEFT JOIN `parameters_list` pl ON pl.id_parameter = pp.id_parameter AND pp.value =pl.value
SET pp.value_list=pl.id
WHERE p.value_type="list"');
sqlQuery('ALTER TABLE `parameters_products` DROP PRIMARY KEY');
sqlQuery('ALTER TABLE `parameters_products` ADD `id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY FIRST');
sqlQuery('ALTER TABLE `parameters_products` DROP COLUMN `value`');
$this->upgradeOK();
}
public function checkRightfulness_5()
{
return false;
}
public function makeChanges_5()
{
}
public function checkRightfulness_6()
{
return $this->checkColumnExists('photos_articles_relation', 'position');
}
/** Articles: Add position column for photo ordering, strip tags from articles annotation */
public function makeChanges_6()
{
sqlQuery("ALTER TABLE `photos_articles_relation` ADD `position` INT(11) NULL;
UPDATE `photos_articles_relation` SET `position`='1' WHERE `show_in_lead`='N';
UPDATE `photos_articles_relation` SET `position`='0' WHERE `show_in_lead`='Y';");
// Strip tags from annotation
foreach (sqlQuery('SELECT * FROM articles') as $product) {
$product['lead_in'] = html_entity_decode(strip_tags($product['lead_in']));
sqlQuery('UPDATE articles SET lead_in = :lead_in WHERE id=:id', $product);
}
$this->upgradeOK();
}
public function checkRightfulness_8()
{
global $cfg;
return !isset($cfg['Photo']);
}
/** Move pictures settings from dbcfg to cfg */
public function makeChanges_8()
{
function testPhotoTypes(&$addToTypes, $name, $values, &$ok)
{
global $cfg;
if (empty($cfg['Photo']['types'][$name])) {
$addToTypes .= "'{$name}' => [</br>'size' => ";
if (!empty($cfg['Images'][ucfirst($name)][0]) && !empty($cfg['Images'][ucfirst($name)][1])) {
$addToTypes .= "[{$cfg['Images'][ucfirst($name)][0]}, {$cfg['Images'][ucfirst($name)][1]}],</br>], </br>";
} else {
$addToTypes .= "[{$values}],</br>], </br>";
}
$ok = false;
}
}
global $cfg;
$settings = Settings::createFromDB();
$addToTypes = '';
$ok = true;
if (empty($cfg['Photo']['default'])) {
$cut = (empty($cfg['Images']['Cut']) || is_array($cfg['Images']['Cut'])) ? 'false' : 'true';
$background = dechex($cfg['Images']['Background']);
$watermark = ($cfg['Images']['Watermark'] == '../templates/images/watermark.png') ? 'true' : "'{$cfg['Images']['Watermark']}'";
$addToDefault = "'default' => [
'crop' => {$cut},
'background' => 0x{$background},
'watermark' => false,
'logo' => false,
'png' => false,
],";
$ok = false;
} else {
$addToDefault = '';
}
if (!empty($settings->prod_photo_big_width) && empty($cfg['Photo']['types']['product_large']['size'])) {
$addToTypes .= "'product_large' => [
'size' => [{$settings->prod_photo_big_width}, {$settings->prod_photo_big_height}],
'crop' => false,
'watermark' => {$watermark},
'logo' => true,
], </br>";
$ok = false;
}
if (!empty($settings->prod_photo_small_lead_width) && empty($cfg['Photo']['types']['product_catalog']['size'])) {
$addToTypes .= "'product_catalog' => [
".(isset($cfg['Images']['Cut'][2]) ? "'crop' => {$cfg['Images']['Cut'][2]}," : '')."
'size' => [{$settings->prod_photo_small_lead_width}, {$settings->prod_photo_small_lead_height}],
], </br>";
$ok = false;
}
if (!empty($settings->prod_photo_medium_width) && empty($cfg['Photo']['types']['product_detail']['size'])) {
$addToTypes .= "'product_detail' => [
".(isset($cfg['Images']['Cut'][3]) ? "'crop' => {$cfg['Images']['Cut'][2]}," : '')."
'size' => [{$settings->prod_photo_medium_width}, {$settings->prod_photo_medium_height}],
], </br>";
$ok = false;
}
if (!empty($settings->prod_photo_small_other_width) && empty($cfg['Photo']['types']['product_gallery']['size'])) {
$addToTypes .= "'product_gallery' => [
".(isset($cfg['Images']['Cut'][4]) ? "'crop' => {$cfg['Images']['Cut'][2]}," : '')."
'size' => [{$settings->prod_photo_small_other_width}, {$settings->prod_photo_small_other_height}],
], </br>";
$ok = false;
}
testPhotoTypes($addToTypes, 'admin', '64, 48', $ok);
testPhotoTypes($addToTypes, 'section', '80, 80', $ok);
testPhotoTypes($addToTypes, 'producer', '120, 60', $ok);
testPhotoTypes($addToTypes, 'payment', '60, 60', $ok);
testPhotoTypes($addToTypes, 'delivery', '60, 60', $ok);
if (empty($cfg['Photo']['id_to_type'])) {
$addToIDToType = "'id_to_type' => [
0 => 'product_large',
1 => 'product_gallery',
2 => 'product_catalog',
3 => 'product_detail',
4 => 'product_gallery',
5 => 'admin',
6 => 'section',
7 => 'producer',
8 => 'payment',
9 => 'delivery',
],";
$ok = false;
} else {
$addToIDToType = '';
}
if (!empty($addToTypes)) {
$addToTypes = "'types' => [
{$addToTypes}
],";
}
if (!$ok) {
$cfgstr = "
\$cfg['Photo'] = [
{$addToDefault}
{$addToTypes}
{$addToIDToType}
];
A JESTE ZMENIT REWRITE:
".'RewriteRule ^data/tmp/\d+/\d+/(\d+)_(\d+).jpg launch.php?s=image&id=$1&size=$2 [L,QSA]';
exit('<h2>Chybi v configu:</h2>'.$cfgstr);
}
$this->upgradeOK();
}
public function checkRightfulness_9()
{
return Settings::getDefault()->user_rights_version == 2;
}
/** New modules - products[price_common], products_collections, products_related, links, attachments */
public function makeChanges_9()
{
if ($this->verbose) {
if (!$this->checkTableIsEmpty('products_related') && !findModule('products_related')) {
exit('<h2>Chybi v configu: $cfg[\'Modules\'][\'products_related\'] = true;</h2>');
}
if (!$this->checkTableIsEmpty('attachments') && !findModule('attachments')) {
exit('<h2>Chybi v configu: $cfg[\'Modules\'][\'attachments\'] = true;</h2>');
}
if (!$this->checkTableIsEmpty('links') && !findModule('links')) {
exit('<h2>Chybi v configu: $cfg[\'Modules\'][\'links\'] = true;</h2>');
}
if (!$this->checkTableIsEmpty('products_collections') && !findModule('products_collections')) {
exit('<h2>Chybi v configu: $cfg[\'Modules\'][\'products_collections\'] = true;</h2>');
}
if (!$this->checkColumnIsEmpty('products', 'price_common') && findModule('products', 'price_common') === null) {
exit('<h2>Chybi v configu: $cfg[\'Modules\'][\'products\'] = [\'price_common\' => true];</h2>');
}
}
sqlQuery('UPDATE delivery_type SET price_dont_countin_from = NULL WHERE price_dont_countin_from = 0');
$this->commitDataMigration(3);
$this->upgradeOK();
}
public function checkRightfulness_10()
{
return $this->checkTableExists('section_producer');
}
/** Add section_producer table for frontend */
public function makeChanges_10()
{
sqlQuery('CREATE TABLE IF NOT EXISTS `section_producer` (
`id_section` INT(11) NOT NULL,
`id_producer` INT(11) UNSIGNED NOT NULL,
`text` TEXT,
`id_slider` INT(11) DEFAULT NULL
) ENGINE=InnoDB;');
sqlQuery('ALTER TABLE `section_producer`
ADD PRIMARY KEY (`id_section`,`id_producer`), ADD KEY `id_producer` (`id_producer`), ADD KEY `id_slider` (`id_slider`);
');
sqlQuery('ALTER TABLE `section_producer`
ADD CONSTRAINT `section_producer_ibfk_1` FOREIGN KEY (`id_section`) REFERENCES `sections` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,
ADD CONSTRAINT `section_producer_ibfk_2` FOREIGN KEY (`id_producer`) REFERENCES `producers` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,
ADD CONSTRAINT `section_producer_ibfk_3` FOREIGN KEY (`id_slider`) REFERENCES `sliders` (`id`) ON DELETE CASCADE ON UPDATE CASCADE;
');
$this->upgradeOK();
}
public function checkRightfulness_11()
{
return $this->checkColumnDefault('sections', 'lead_figure', 'N');
}
/** Set category.lead_figure default to N */
public function makeChanges_11()
{
sqlQuery("ALTER TABLE `sections` CHANGE `lead_figure` `lead_figure` ENUM('Y','N') NOT NULL DEFAULT 'N'");
$this->upgradeOK();
}
public function checkRightfulness_12()
{
return false;
}
/** Add column for minimal price in discount */
public function makeChanges_12()
{
sqlQuery('ALTER TABLE `discounts` ADD `min_price` INT(11) NULL ;');
$this->upgradeOK();
}
public function checkRightfulness_13()
{
return false;
}
/** Remove settings->prod_photo_... from dbcfg */
public function makeChanges_13()
{
$settings = Settings::createFromDB();
$settings->deleteValue('prod_photo_big_width');
$settings->deleteValue('prod_photo_big_height');
$settings->deleteValue('prod_photo_small_lead_width');
$settings->deleteValue('prod_photo_small_lead_height');
$settings->deleteValue('prod_photo_medium_width');
$settings->deleteValue('prod_photo_medium_height');
$settings->deleteValue('prod_photo_small_other_width');
$settings->deleteValue('prod_photo_small_other_height');
$this->upgradeOK();
}
public function checkRightfulness_14()
{
return findModule('eshop_delivery') && findModule('abra') && $this->checkTableExists('abra_deliveries');
}
/** Abra sync - add abra deliveries and payments sync tables */
public function makeChanges_14()
{
sqlQuery('CREATE TABLE '.getTableName('abra_deliveries').' (
`id_abra` VARCHAR(30) NOT NULL,
`id_delivery` INT(11) NOT NULL
) ENGINE=InnoDB');
sqlQuery('ALTER TABLE `abra_deliveries`
ADD KEY `id_abra` (`id_abra`)');
sqlQuery('ALTER TABLE `abra_deliveries`
ADD CONSTRAINT `abra_deliveries_ibfk_1` FOREIGN KEY (`id_delivery`) REFERENCES `delivery_type_delivery` (`id`) ON DELETE CASCADE ON UPDATE CASCADE');
sqlQuery('CREATE TABLE '.getTableName('abra_payments').' (
`id_abra` VARCHAR(30) NOT NULL,
`id_payment` INT(11) NOT NULL
) ENGINE=InnoDB');
sqlQuery('ALTER TABLE `abra_payments`
ADD KEY `id_abra` (`id_abra`)');
sqlQuery('ALTER TABLE `abra_payments`
ADD CONSTRAINT `abra_payments_ibfk_1` FOREIGN KEY (`id_payment`) REFERENCES `delivery_type_payment` (`id`) ON DELETE CASCADE ON UPDATE CASCADE');
}
public function checkRightfulness_15()
{
// return findModule('eshop_delivery') && $this->checkColumnExists('delivery_type_delivery', 'countries');
return false;
}
/** Delivery - limit to only some countries */
public function makeChanges_15()
{
sqlQuery('ALTER TABLE `delivery_type_delivery`
ADD `countries` VARCHAR(200) NULL DEFAULT NULL');
}
public function checkRightfulness_16()
{
return $this->checkEnumExists('discounts', 'condition_type', 'order');
}
/** Add 'pricelevel' to discount options */
public function makeChanges_16()
{
$this->checkEnumExists('discounts', 'condition_type', 'order', $pricelevels);
$pricelevels = str_replace(')', ",'order')", $pricelevels);
sqlQuery("ALTER TABLE discounts CHANGE `condition_type` `condition_type` {$pricelevels} NOT NULL DEFAULT 'price'");
$this->upgradeOK();
}
public function checkRightfulness_18()
{
return $this->checkColumnExists('section_producer', 'meta_title');
}
/** Add meta_title and meta_description to section_producer */
public function makeChanges_18()
{
sqlQuery('ALTER TABLE section_producer ADD `meta_title` VARCHAR(70) DEFAULT NULL;
ALTER TABLE section_producer ADD `meta_description` VARCHAR(250) DEFAULT NULL;');
$this->upgradeOK();
}
}