Files
ws_customhtml/upgrade/upgrade-1.23.0.php
T

103 lines
3.0 KiB
PHP

<?php
if (!defined('_PS_VERSION_')) {
exit;
}
function upgrade_module_1_23_0($module)
{
if (!createSlideLangTable()) {
return false;
}
if (!migrateSlideFieldsToLangTable()) {
return false;
}
return dropSlideLangColumns();
}
function createSlideLangTable(): bool
{
return Db::getInstance()->execute(
'CREATE TABLE IF NOT EXISTS `' . _DB_PREFIX_ . 'ws_customhtml_slide_lang` (
`id_ws_customhtml_slide` INT(11) NOT NULL,
`id_lang` INT(11) NOT NULL,
`title` VARCHAR(256) NOT NULL DEFAULT \'\',
`description` TEXT,
`extra_description` TEXT,
`link` VARCHAR(512) NOT NULL DEFAULT \'\',
`link_text` VARCHAR(128) NOT NULL DEFAULT \'\',
PRIMARY KEY (`id_ws_customhtml_slide`, `id_lang`)
);'
);
}
function migrateSlideFieldsToLangTable(): bool
{
$columns = Db::getInstance()->executeS(
'SHOW COLUMNS FROM `' . _DB_PREFIX_ . 'ws_customhtml_slide` LIKE \'title\''
);
if (empty($columns)) {
// Already migrated in a previous run of this upgrade.
return true;
}
$slides = Db::getInstance()->executeS(
'SELECT `id_ws_customhtml_slide`, `title`, `description`, `extra_description`, `link`, `link_text`
FROM `' . _DB_PREFIX_ . 'ws_customhtml_slide`'
);
$languages = Language::getLanguages(false);
foreach ($slides as $slide) {
foreach ($languages as $language) {
$existing = Db::getInstance()->executeS(
'SELECT 1 FROM `' . _DB_PREFIX_ . 'ws_customhtml_slide_lang`
WHERE `id_ws_customhtml_slide` = ' . (int) $slide['id_ws_customhtml_slide'] . '
AND `id_lang` = ' . (int) $language['id_lang']
);
if (!empty($existing)) {
continue;
}
$result = Db::getInstance()->insert('ws_customhtml_slide_lang', [
'id_ws_customhtml_slide' => (int) $slide['id_ws_customhtml_slide'],
'id_lang' => (int) $language['id_lang'],
'title' => pSQL($slide['title']),
'description' => pSQL($slide['description']),
'extra_description' => pSQL($slide['extra_description']),
'link' => pSQL($slide['link']),
'link_text' => pSQL($slide['link_text']),
]);
if (!$result) {
return false;
}
}
}
return true;
}
function dropSlideLangColumns(): bool
{
$columns = Db::getInstance()->executeS(
'SHOW COLUMNS FROM `' . _DB_PREFIX_ . 'ws_customhtml_slide` LIKE \'title\''
);
if (empty($columns)) {
return true;
}
return Db::getInstance()->execute(
'ALTER TABLE `' . _DB_PREFIX_ . 'ws_customhtml_slide`
DROP COLUMN `title`,
DROP COLUMN `description`,
DROP COLUMN `extra_description`,
DROP COLUMN `link`,
DROP COLUMN `link_text`'
);
}