229 lines
6.7 KiB
PHP
229 lines
6.7 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
|
|
*/
|
|
|
|
class NewsletterProConfigurationShop
|
|
{
|
|
public static $name = 'NEWSLETTER_PRO_SHOP';
|
|
|
|
public static $configuration = [];
|
|
|
|
public static $errors = [];
|
|
|
|
public static $init_id_shop;
|
|
|
|
public static $init_id_shop_group;
|
|
|
|
public static function install($all_shops = true)
|
|
{
|
|
$module = NewsletterPro::getInstance();
|
|
// at least one value should be available
|
|
self::$configuration = self::getDefaultConfiguration();
|
|
|
|
if ($all_shops) {
|
|
foreach (NewsletterProTools::getActiveShops() as $shop) {
|
|
if (!self::updateDb((int) $shop['id_shop'], (int) $shop['id_shop_group'])) {
|
|
self::$errors[] = sprintf($module->l('The configuration "%s" cannot be installed into "%s" table.'), self::$name, _DB_PREFIX_.'configuration');
|
|
|
|
return false;
|
|
}
|
|
}
|
|
|
|
foreach (NewsletterPro::getShopGroups() as $shop_group) {
|
|
if (!self::updateDb(null, (int) $shop_group->id)) {
|
|
self::$errors[] = sprintf($module->l('The configuration "%s" cannot be installed into "%s" table.'), self::$name, _DB_PREFIX_.'configuration');
|
|
|
|
return false;
|
|
}
|
|
}
|
|
} else {
|
|
if (!self::updateDb()) {
|
|
self::$errors[] = sprintf($module->l('The configuration "%s" cannot be installed into "%s" table.'), self::$name, _DB_PREFIX_.'configuration');
|
|
|
|
return false;
|
|
}
|
|
}
|
|
|
|
return true;
|
|
}
|
|
|
|
public static function getDefaultConfiguration()
|
|
{
|
|
return [
|
|
'SUBSCRIPTION_TEMPLATE' => 'default',
|
|
];
|
|
}
|
|
|
|
public static function uninstall()
|
|
{
|
|
return Configuration::deleteByName(self::$name);
|
|
}
|
|
|
|
public static function getErrors()
|
|
{
|
|
return self::$errors;
|
|
}
|
|
|
|
public static function init($id_shop = null, $id_shop_group = null)
|
|
{
|
|
if (!isset($id_shop)) {
|
|
$id_shop = NewsletterPro::getContextShopID(true);
|
|
}
|
|
self::$init_id_shop = $id_shop;
|
|
|
|
if (!isset($id_shop_group)) {
|
|
$id_shop_group = NewsletterPro::getContextShopGroupID(true);
|
|
}
|
|
self::$init_id_shop_group = $id_shop_group;
|
|
|
|
$cfg = json_decode(Configuration::get(self::$name, null, self::$init_id_shop_group, self::$init_id_shop), true);
|
|
|
|
if (!empty($cfg)) {
|
|
self::$configuration = $cfg;
|
|
} else {
|
|
self::$configuration = self::getDefaultConfiguration();
|
|
}
|
|
}
|
|
|
|
public static function get($name = null)
|
|
{
|
|
if (isset($name)) {
|
|
if (isset(self::$configuration[$name])) {
|
|
return self::$configuration[$name];
|
|
}
|
|
|
|
return false;
|
|
}
|
|
|
|
return self::$configuration;
|
|
}
|
|
|
|
public static function getAll()
|
|
{
|
|
return self::get();
|
|
}
|
|
|
|
public static function updateValue($name, $value)
|
|
{
|
|
if (isset(self::$configuration[$name])) {
|
|
return self::set($name, $value);
|
|
} else {
|
|
return false;
|
|
}
|
|
}
|
|
|
|
public static function set($name, $value)
|
|
{
|
|
self::$configuration[$name] = $value;
|
|
|
|
return self::updateDb();
|
|
}
|
|
|
|
public static function deleteByName($name)
|
|
{
|
|
if (isset(self::$configuration[$name])) {
|
|
unset(self::$configuration[$name]);
|
|
}
|
|
|
|
return self::updateDb();
|
|
}
|
|
|
|
public static function updateDb($id_shop = null, $id_shop_group = null)
|
|
{
|
|
if (!isset($id_shop)) {
|
|
$id_shop = NewsletterPro::getContextShopID(true);
|
|
}
|
|
self::$init_id_shop = $id_shop;
|
|
|
|
if (!isset($id_shop_group)) {
|
|
$id_shop_group = NewsletterPro::getContextShopGroupID(true);
|
|
}
|
|
self::$init_id_shop_group = $id_shop_group;
|
|
|
|
return Configuration::updateValue(self::$name, json_encode(self::$configuration), false, (int) $id_shop_group, (int) $id_shop);
|
|
}
|
|
|
|
public static function getDbConfigurations()
|
|
{
|
|
$recoreds = Db::getInstance()->executeS('
|
|
SELECT * FROM `'._DB_PREFIX_.'configuration`
|
|
WHERE `name` = "'.pSQL(self::$name).'"
|
|
');
|
|
foreach ($recoreds as &$recored) {
|
|
if (!array_key_exists('id_shop_group', $recored) && array_key_exists('id_group_shop', $recored)) {
|
|
$recored['id_shop_group'] = $recored['id_group_shop'];
|
|
}
|
|
}
|
|
|
|
return $recoreds;
|
|
}
|
|
|
|
public static function replaceShopsCondiguration($to_replace = [])
|
|
{
|
|
$configs = self::getDbConfigurations();
|
|
$success = [];
|
|
|
|
$column_name = NewsletterProTools::getInShopGroupColumnName();
|
|
|
|
foreach ($configs as &$config) {
|
|
foreach ($to_replace as &$to_confg) {
|
|
if ($config['id_shop'] == $to_confg['id_shop'] && $config['id_shop_group'] == $to_confg['id_shop_group']) {
|
|
$current_config = json_decode($config['value'], true);
|
|
|
|
$current_config = array_merge($current_config, $to_confg['value']);
|
|
$config['value'] = json_encode($current_config);
|
|
|
|
$success[] = Db::getInstance()->update('configuration', [
|
|
'value' => $config['value'],
|
|
], '`name` = "'.pSQL(self::$name).'" AND `id_shop` '.(is_null($config['id_shop']) ? 'IS NULL' : '='.(int) $config['id_shop']).' AND `'.$column_name.'` '.(is_null($config['id_shop_group']) ? 'IS NULL' : '='.$config['id_shop_group']).' ', 0, true);
|
|
}
|
|
}
|
|
}
|
|
|
|
return !in_array(false, $success);
|
|
}
|
|
|
|
public static function getAllShopsConfiguration($filter = [])
|
|
{
|
|
$result = [];
|
|
|
|
foreach (self::getDbConfigurations() as $config) {
|
|
$value = json_decode($config['value'], true);
|
|
|
|
$config_keys = array_keys($value);
|
|
|
|
$intersection = array_intersect($filter, $config_keys);
|
|
|
|
$value_filter = [];
|
|
|
|
foreach ($intersection as $cfg_name) {
|
|
if (isset($value[$cfg_name])) {
|
|
$value_filter[$cfg_name] = $value[$cfg_name];
|
|
}
|
|
}
|
|
|
|
$result[] = [
|
|
'id_shop' => $config['id_shop'],
|
|
'id_shop_group' => $config['id_shop_group'],
|
|
'value' => empty($filter) ? $value : $value_filter,
|
|
];
|
|
}
|
|
|
|
return $result;
|
|
}
|
|
}
|