Files
b2b.redline.com.pl/modules/newsletterpro/upgrade/Upgrade-2.1.6.php
2025-06-24 14:14:35 +02:00

224 lines
8.0 KiB
PHP

<?php
/**
* Since 2013 Ovidiu Cimpean.
*
* Ovidiu Cimpean - Newsletter Pro © All rights reserved.
*
* DISCLAIMER
*
* Do not edit, modify or copy this file.
* If you wish to customize it, contact us at addons4prestashop@gmail.com.
*
* @author Ovidiu Cimpean <addons4prestashop@gmail.com>
* @copyright Since 2013 Ovidiu Cimpean
* @license Do not edit, modify or copy this file
*
* @version Release: 4
*/
if (!defined('_PS_VERSION_')) {
exit;
}
function upgrade_module_2_1_6($module)
{
$upgrade = $module->upgrade;
// hooks update (no)
$upgrade->registerHook('customerAccount');
$upgrade->registerHook('createAccount');
// configuration update (no)
$upgrade->deleteConfiguration('NO_DISPLAY_NUMBER');
$upgrade->deleteConfiguration('CUSTOMER_CONFIRM_ON_DELETE');
$upgrade->deleteConfiguration('DISPLAY_ACTIVE_COLUMN');
$upgrade->deleteConfiguration('DISPLAY_ACTIONS_COLUMN');
$upgrade->updateConfiguration('SUBSCRIBE_BY_CATEGORY', '1');
$upgrade->updateConfiguration('SEND_NEWSLETTER_ON_SUBSCRIBE', '0');
$upgrade->updateConfiguration('FUNC_MAIL_EMAIL', Configuration::get('PS_SHOP_EMAIL'));
// chimp update (no)
// chimp database don't need update because is intalled separatly
$upgrade->createTable('newsletter_pro_config', '
`id_newsletter_pro_config` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
`name` VARCHAR(50) NOT NULL,
`value` TEXT NULL,
PRIMARY KEY (`id_newsletter_pro_config`),
UNIQUE INDEX `name` (`name`)
');
if (!$upgrade->success()) {
return false;
}
if (!$upgrade->valueExists('newsletter_pro_config', 'name', 'CHIMP_SYNC')) {
$upgrade->insertValue('newsletter_pro_config', [
'name' => 'CHIMP_SYNC',
'value' => serialize([]),
]);
}
if (!$upgrade->valueExists('newsletter_pro_config', 'name', 'LAST_DATE_CHIMP_SYNC')) {
$upgrade->insertValue('newsletter_pro_config', [
'name' => 'LAST_DATE_CHIMP_SYNC',
'value' => '0000-00-00 00:00:00',
]);
}
// database update (no)
$upgrade->createTable('newsletter_pro_send', "
`id_newsletter_pro_send` INT(11) UNSIGNED NOT NULL AUTO_INCREMENT,
`id_newsletter_pro_tpl_history` INT(11) UNSIGNED NOT NULL DEFAULT '0',
`template` VARCHAR(50) NULL DEFAULT NULL,
`active` INT(1) NOT NULL DEFAULT '0',
`emails_count` INT(11) UNSIGNED NOT NULL DEFAULT '0',
`emails_success` INT(11) UNSIGNED NOT NULL DEFAULT '0',
`emails_error` INT(11) UNSIGNED NOT NULL DEFAULT '0',
`emails_completed` INT(11) UNSIGNED NOT NULL DEFAULT '0',
`error_msg` LONGTEXT NULL,
`date` DATE NULL DEFAULT NULL,
PRIMARY KEY (`id_newsletter_pro_send`),
INDEX `id_newsletter_pro_tpl_history` (`id_newsletter_pro_tpl_history`)
");
$upgrade->createTable('newsletter_pro_send_step', "
`id_newsletter_pro_send_step` INT(11) UNSIGNED NOT NULL AUTO_INCREMENT,
`id_newsletter_pro_send` INT(11) UNSIGNED NOT NULL DEFAULT '0',
`step` INT(11) UNSIGNED NOT NULL DEFAULT '0',
`step_active` INT(1) NOT NULL DEFAULT '0',
`emails_to_send` LONGTEXT NULL,
`emails_sent` LONGTEXT NULL,
`date` TIMESTAMP NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (`id_newsletter_pro_send_step`),
INDEX `id_step` (`step`),
INDEX `id_task` (`id_newsletter_pro_send`)
");
if (!$upgrade->success()) {
return false;
}
$table_newsletter_pro = 'newsletter_pro';
$result = get_newsletter_pro_data_2_1_6($upgrade, $table_newsletter_pro);
if (is_array($result)) {
$group_by_steps = [];
foreach ($result as $row) {
$group_by_steps[$row['id_step']][] = $row;
}
$id_newsletter_pro_send = 0;
foreach ($group_by_steps as $row) {
++$id_newsletter_pro_send;
reset($row);
$first_key = key($row);
end($row);
$last_key = key($row);
$emails_success = $row[$last_key]['count_sent_succ'];
$emails_error = $row[$last_key]['count_sent_err'];
$emails_count = (int) $emails_success + (int) $emails_error;
// this option is not a real option
$emails_completed = $emails_count;
if (Db::getInstance()->insert('newsletter_pro_send', [
'id_newsletter_pro_send' => (int) $id_newsletter_pro_send,
'id_newsletter_pro_tpl_history' => (int) $row[$first_key]['id_newsletter_pro_tpl_history'],
'template' => '',
'active' => 0,
'emails_count' => (int) $emails_count,
'emails_success' => (int) $emails_success,
'emails_error' => (int) $emails_error,
'emails_completed' => (int) $emails_completed,
'error_msg' => 'a:0:{}',
'date' => pSQL($row[$first_key]['date']),
])) {
foreach ($row as $step_row) {
if (!Db::getInstance()->insert('newsletter_pro_send_step', [
'id_newsletter_pro_send' => (int) $id_newsletter_pro_send,
'step' => (int) $step_row['id_step'],
'step_active' => (int) $step_row['active'],
'emails_to_send' => $step_row['emails_to_send'],
'emails_sent' => $step_row['emails_sent'],
'date' => pSQL($step_row['date']),
])) {
$upgrade->addError(sprintf($module->l('Cannot insert the data into the table "%s".'), 'newsletter_pro_send_step'));
}
}
} else {
$upgrade->addError(sprintf($module->l('Cannot insert the data into the table "%s".'), 'id_newsletter_pro_send'));
}
}
} else {
$upgrade->addError(sprintf($module->l('An error occurred on getting the data from the database table "%s".'), $table_newsletter_pro));
}
if (!$upgrade->success()) {
return false;
}
$upgrade->deleteTable('newsletter_pro');
$upgrade->createTable('newsletter_pro_statistics', "
`id_product` INT(10) UNSIGNED NOT NULL DEFAULT '0',
`clicks` INT(10) NOT NULL DEFAULT '0',
UNIQUE INDEX `id_product` (`id_product`)
");
$upgrade->createTable('newsletter_pro_customer_category', "
`id_customer` INT(10) UNSIGNED NOT NULL DEFAULT '0',
`categories` TEXT NULL,
UNIQUE INDEX `id_customer` (`id_customer`)
");
$lang_default = (int) Configuration::get('PS_LANG_DEFAULT');
$shop_default = (int) Configuration::get('PS_SHOP_DEFAULT');
$upgrade->changeColumn('newsletter_pro_email', 'id_shop', "`id_shop` INT(10) UNSIGNED NOT NULL DEFAULT '".$shop_default."'");
$upgrade->changeColumn('newsletter_pro_email', 'id_shop_group', "`id_shop_group` INT(10) UNSIGNED NOT NULL DEFAULT '".$shop_default."'");
$upgrade->changeColumn('newsletter_pro_email', 'id_lang', "`id_lang` INT(10) UNSIGNED NULL DEFAULT '".$lang_default."'");
$upgrade->changeColumn('newsletter_pro_email', 'date_add', '`date_add` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP');
$upgrade->deleteTable('newsletter_pro_image');
$upgrade->addColumn('newsletter_pro_smtp', 'from', '`from` VARCHAR(255) NULL DEFAULT NULL', 'name');
$upgrade->addColumn('newsletter_pro_task', 'pause', "`pause` INT(10) NOT NULL DEFAULT '0'", 'sleep');
$upgrade->changeColumn('newsletter_pro_task', 'error_msg', '`error_msg` LONGTEXT NULL');
$upgrade->changeColumn('newsletter_pro_task_step', 'date', '`date` TIMESTAMP NULL DEFAULT CURRENT_TIMESTAMP');
$upgrade->addColumn('newsletter_pro_tpl_history', 'clicks', "`clicks` INT(1) NOT NULL DEFAULT '0'");
return $upgrade->success();
}
function count_emails_2_1_6($row, $field)
{
$count = 0;
foreach ($row as $value) {
$count += $value[$field];
}
return $count;
}
function get_newsletter_pro_data_2_1_6($upgrade, $table)
{
try {
if ($upgrade->tableExists($table)) {
$result = Db::getInstance()->executeS('SELECT * FROM `'._DB_PREFIX_.$table.'` WHERE 1');
return $result;
}
return [];
} catch (Exception $e) {
return false;
}
return false;
}