diff --git a/classes/Country.php b/classes/Country.php index d54a689d7..0363180ed 100644 --- a/classes/Country.php +++ b/classes/Country.php @@ -344,4 +344,30 @@ class CountryCore extends ObjectModel return (bool)preg_match($zip_regexp, $zip_code); } + + public static function addModuleRestrictions(array $shops = array(), array $countries = array(), array $modules = array()) + { + if (!count($shops)) + $shops = Shop::getShops(true, null, true); + + if (!count($countries)) + $countries = Country::getCountries((int)Context::getContext()->cookie->id_lang); + + if (!count($modules)) + $modules = Module::getPaymentModules(); + + $sql = false; + foreach ($shops as $id_shop) + foreach ($countries as $country) + foreach ($modules as $module) + $sql .= '('.(int)$module['id_module'].', '.(int)$id_shop.', '.(int)$country['id_country'].'),'; + + if ($sql) + { + $sql = 'INSERT IGNORE INTO `'._DB_PREFIX_.'module_country` (`id_module`, `id_shop`, `id_country`) VALUES '.rtrim($sql, ','); + return Db::getInstance()->execute($sql); + } + else + return true; + } } diff --git a/classes/PaymentModule.php b/classes/PaymentModule.php index 008ff682c..ca4813b8f 100644 --- a/classes/PaymentModule.php +++ b/classes/PaymentModule.php @@ -111,21 +111,13 @@ abstract class PaymentModuleCore extends Module */ public function addCheckboxCountryRestrictionsForModule(array $shops = array()) { - if (!$shops) - $shops = Shop::getShops(true, null, true); - - foreach ($shops as $s) - { - if (!Db::getInstance()->execute(' - INSERT INTO `'._DB_PREFIX_.'module_country` (`id_module`, `id_shop`, `id_country`) - SELECT '.(int)$this->id.', "'.(int)$s.'", `id_country` FROM `'._DB_PREFIX_.'country` WHERE active = 1')) - return false; - } - return true; + $countries = Country::getCountries((int)Context::getContext()->cookie->id_lang, true); //get only active country + $country_ids = array(); + foreach ($countries as $country) + $country_ids[] = $country['id_country']; + return Country::addModuleRestrictions($shops, $countries, array(array('id_module' => (int)$this->id))); } - - - + /** * Validate an order in database * Function called from a payment module diff --git a/classes/module/Module.php b/classes/module/Module.php index c923ec5fa..1632b82de 100644 --- a/classes/module/Module.php +++ b/classes/module/Module.php @@ -1311,7 +1311,7 @@ abstract class ModuleCore $paypal_condition = ' AND m.`name` = \'paypal\''; $list = Shop::getContextListShopID(); - return Db::getInstance(_PS_USE_SQL_SLAVE_)->executeS('SELECT DISTINCT h.`id_hook`, m.`name`, hm.`position` + return Db::getInstance(_PS_USE_SQL_SLAVE_)->executeS('SELECT DISTINCT m.`id_module`, h.`id_hook`, m.`name`, hm.`position` FROM `'._DB_PREFIX_.'module` m '.($frontend ? 'LEFT JOIN `'._DB_PREFIX_.'module_country` mc ON (m.`id_module` = mc.`id_module` AND mc.id_shop = '.(int)$context->shop->id.')' : '').' '.($frontend ? 'INNER JOIN `'._DB_PREFIX_.'module_group` mg ON (m.`id_module` = mg.`id_module` AND mg.id_shop = '.(int)$context->shop->id.')' : '').' diff --git a/controllers/admin/AdminCountriesController.php b/controllers/admin/AdminCountriesController.php index f1f3ab585..da0454a91 100644 --- a/controllers/admin/AdminCountriesController.php +++ b/controllers/admin/AdminCountriesController.php @@ -404,6 +404,29 @@ class AdminCountriesControllerCore extends AdminController return $res; } + + public function processStatus() + { + if (Validate::isLoadedObject($object = $this->loadObject())) + Country::addModuleRestrictions(array(), array(array('id_country' => $object->id)), array()); + + parent::processStatus(); + } + + public function processBulkStatusSelection($way) + { + if (is_array($this->boxes) && !empty($this->boxes)) + { + $countries_ids = array(); + foreach ($this->boxes as $id) + $countries_ids[] = array('id_country' => $id); + + if (count($countries_ids)) + Country::addModuleRestrictions(array(), $countries_ids, array()); + } + parent::processBulkStatusSelection($way); + } + protected function displayValidFields() {