diff --git a/classes/Module.php b/classes/Module.php
index 38fdfc595..59cad993f 100644
--- a/classes/Module.php
+++ b/classes/Module.php
@@ -186,7 +186,6 @@ abstract class ModuleCore
$this->id = Db::getInstance()->Insert_ID();
$this->enable(true);
- $this->id = Db::getInstance()->Insert_ID();
return true;
}
@@ -199,18 +198,21 @@ abstract class ModuleCore
{
if (!Validate::isUnsignedId($this->id))
return false;
- $result = Db::getInstance()->ExecuteS('
- SELECT `id_hook`
- FROM `'._DB_PREFIX_.'hook_module` hm
- WHERE `id_module` = '.(int)($this->id));
+
+ $sql = 'SELECT id_hook
+ FROM '._DB_PREFIX_.'hook_module hm
+ WHERE id_module = '.(int)$this->id;
+ $result = Db::getInstance()->ExecuteS($sql);
foreach ($result AS $row)
{
- Db::getInstance()->Execute('
- DELETE FROM `'._DB_PREFIX_.'hook_module`
- WHERE `id_module` = '.(int)($this->id).'
- AND `id_hook` = '.(int)($row['id_hook']));
+ $sql = 'DELETE FROM `'._DB_PREFIX_.'hook_module`
+ WHERE `id_module` = '.(int)$this->id.'
+ AND `id_hook` = '.(int)$row['id_hook'];
+ Db::getInstance()->Execute($sql);
$this->cleanPositions($row['id_hook']);
}
+ $this->disable(true);
+
return Db::getInstance()->Execute('
DELETE FROM `'._DB_PREFIX_.'module`
WHERE `id_module` = '.(int)($this->id));
@@ -244,7 +246,7 @@ abstract class ModuleCore
$sql = 'SELECT id_shop
FROM '._DB_PREFIX_.'module_shop
WHERE id_module = '.$this->id.'
- '.(($list) ? 'AND id_shop IN('.implode(', ', $list).')' : '');
+ '.((!$forceAll) ? 'AND id_shop IN('.implode(', ', $list).')' : '');
$items = array();
if ($results = Db::getInstance($sql)->executeS($sql))
foreach ($results as $row)
@@ -286,8 +288,10 @@ abstract class ModuleCore
*/
public function disable($forceAll = false)
{
- $list = Shop::getListOfID($this->shopID, $this->shopGroupID);
- Db::getInstance()->execute('DELETE FROM '._DB_PREFIX_.'module_shop WHERE id_module = '.$this->id.' AND id_shop IN('.implode(', ', $list).')');
+ $sql = 'DELETE FROM '._DB_PREFIX_.'module_shop
+ WHERE id_module = '.$this->id.'
+ '.((!$foreAll) ? ' AND id_shop IN('.implode(', ', Shop::getListOfID($this->shopID, $this->shopGroupID)).')' : '');
+ Db::getInstance()->execute($sql);
}
/**
@@ -382,12 +386,23 @@ abstract class ModuleCore
/**
* Unregister module from hook
*
- * @param int $id_hook Hook id
+ * @param int $id_hook Hook id (can be a hook name since 1.5.0)
* @param array $shopList List of shop
* @return boolean result
*/
public function unregisterHook($hook_id, $shopList = null)
{
+ // Get hook id if a name is given as argument
+ if (!is_numeric($hook_id))
+ {
+ $sql = 'SELECT `id_hook`
+ FROM `'._DB_PREFIX_.'hook`
+ WHERE `name` = \''.pSQL($hook_id).'\'';
+ $hook_id = Db::getInstance()->getValue($sql);
+ if (!$hook_id)
+ return false;
+ }
+
$sql = 'DELETE FROM `'._DB_PREFIX_.'hook_module`
WHERE `id_module` = '.(int)$this->id.'
AND `id_hook` = '.(int)$hook_id
diff --git a/classes/Shop.php b/classes/Shop.php
index 9a893425b..4ff2efd6a 100644
--- a/classes/Shop.php
+++ b/classes/Shop.php
@@ -271,11 +271,12 @@ class ShopCore extends ObjectModel
public static function getExcludedUris()
{
- $directories = scandir(dirname(__FILE__).'/../');
+ $dirname = dirname(__FILE__);
+ $directories = scandir($dirname.'/../');
$not_uri = array();
foreach ($directories AS $directory)
- if (is_dir(dirname(__FILE__).'/../'.$directory) AND (!preg_match ('/^\./', $directory)))
- $not_uri[] = '/'.$directory.'/';
+ if (is_dir($dirname.'/../'.$directory) AND (!preg_match ('/^\./', $directory)))
+ $not_uri[] = $directory;
return $not_uri;
}
diff --git a/modules/blocklayered/blocklayered.php b/modules/blocklayered/blocklayered.php
index d4ef4b916..0b99b21df 100644
--- a/modules/blocklayered/blocklayered.php
+++ b/modules/blocklayered/blocklayered.php
@@ -149,12 +149,12 @@ class BlockLayered extends Module
Configuration::updateValue('PS_LAYERED_BITLY_USERNAME', Tools::getValue('bitly_username'));
Configuration::updateValue('PS_LAYERED_BITLY_API_KEY', Tools::getValue('bitly_api_key'));
Configuration::updateValue('PS_LAYERED_SHARE', Tools::getValue('share_url'));
- $html .= '
-
-

- '.$this->l('Settings saved successfully').'
-
';
- }
+ $html .= '
+
+

+ '.$this->l('Settings saved successfully').'
+
';
+ }
else
{
$html .= '
@@ -283,20 +283,19 @@ class BlockLayered extends Module
public function getProductByFilters($selectedFilters = array())
{
global $cookie;
-
+
if (!empty($this->products))
return $this->products;
-
+
/* If the current category isn't defined of if it's homepage, we have nothing to display */
$id_parent = (int)Tools::getValue('id_category', Tools::getValue('id_category_layered', 1));
if ($id_parent == 1)
return;
-
+
if (!sizeof($selectedFilters['category']))
$selectedFilters['category'][] = $id_parent;
-
+
$queryFilters = '';
-
foreach ($selectedFilters AS $key => $filterValues)
{
if (!sizeof($filterValues))
@@ -304,7 +303,7 @@ class BlockLayered extends Module
preg_match('/^(.*[^_0-9])/', $key, $res);
$key = $res[1];
-
+
switch ($key)
{
case 'id_feature':
@@ -341,17 +340,17 @@ class BlockLayered extends Module
$queryFilters = rtrim($queryFilters, 'OR ').')';
}
break;
-
+
case 'quantity':
if (sizeof($selectedFilters['quantity']) == 2)
break;
$queryFilters .= ' AND p.quantity '.(!$selectedFilters['quantity'][0] ? '=' : '>').' 0';
break;
-
+
case 'manufacturer':
$queryFilters .= ' AND p.id_manufacturer IN ('.implode($selectedFilters['manufacturer'], ',').')';
break;
-
+
case 'condition':
if (sizeof($selectedFilters['condition']) == 3)
break;
@@ -360,7 +359,7 @@ class BlockLayered extends Module
$queryFilters .= '\''.$cond.'\',';
$queryFilters = rtrim($queryFilters, ',').')';
break;
-
+
case 'weight':
$queryFilters .= ' AND p.`weight` BETWEEN '.(float)($selectedFilters['weight'][0] - 0.001).' AND '.(float)($selectedFilters['weight'][1] + 0.001);
break;
@@ -378,25 +377,28 @@ class BlockLayered extends Module
SELECT COUNT(p.`id_product`) AS total
FROM `'._DB_PREFIX_.'product` p
WHERE 1 '.$queryFilters);
-
+
$this->nbr_products = isset($result) ? $result['total'] : 0;
-
+
$n = (int)Tools::getValue('n', Configuration::get('PS_PRODUCTS_PER_PAGE'));
- $sql = '
- SELECT p.id_product, p.out_of_stock, p.available_for_order, p.quantity, p.minimal_quantity, p.id_category_default, p.customizable, p.show_price, p.`weight`,
- p.ean13, pl.available_later, pl.description_short, pl.link_rewrite, pl.name, i.id_image, il.legend, m.name manufacturer_name, p.condition, p.id_manufacturer,
- DATEDIFF(p.`date_add`, DATE_SUB(NOW(), INTERVAL '.(Validate::isUnsignedInt(Configuration::get('PS_NB_DAYS_NEW_PRODUCT')) ? Configuration::get('PS_NB_DAYS_NEW_PRODUCT') : 20).' DAY)) > 0 AS new
- FROM '._DB_PREFIX_.'product p
- LEFT JOIN '._DB_PREFIX_.'product_lang pl ON (pl.id_product = p.id_product)
- LEFT JOIN '._DB_PREFIX_.'image i ON (i.id_product = p.id_product AND i.cover = 1)
- LEFT JOIN '._DB_PREFIX_.'image_lang il ON (i.id_image = il.id_image AND il.id_lang = '.(int)($cookie->id_lang).')
- LEFT JOIN '._DB_PREFIX_.'manufacturer m ON (m.id_manufacturer = p.id_manufacturer)
- WHERE p.`active` = 1 AND pl.id_lang = '.(int)$cookie->id_lang.$queryFilters
- .' ORDER BY '.Tools::getProductsOrder('by', Tools::getValue('orderby')).' '.Tools::getProductsOrder('way', Tools::getValue('orderway')).
- ' LIMIT '.(((int)(Tools::getValue('p', 1)) - 1) * $n.','.$n);
+ $sql = 'SELECT p.id_product, p.out_of_stock, p.available_for_order, p.quantity, p.minimal_quantity, p.id_category_default, p.customizable, p.show_price, p.`weight`,
+ p.ean13, pl.available_later, pl.description_short, pl.link_rewrite, pl.name, i.id_image, il.legend, m.name manufacturer_name, p.condition, p.id_manufacturer,
+ DATEDIFF(p.`date_add`, DATE_SUB(NOW(), INTERVAL '.(Validate::isUnsignedInt(Configuration::get('PS_NB_DAYS_NEW_PRODUCT')) ? Configuration::get('PS_NB_DAYS_NEW_PRODUCT') : 20).' DAY)) > 0 AS new
+ FROM '._DB_PREFIX_.'product p
+ LEFT JOIN '._DB_PREFIX_.'product_shop ps ON ps.id_product = p.id_product
+ LEFT JOIN '._DB_PREFIX_.'product_lang pl ON (pl.id_product = p.id_product AND pl.id_shop = '.Shop::getCurrentShop(true).')
+ LEFT JOIN '._DB_PREFIX_.'image i ON (i.id_product = p.id_product AND i.cover = 1)
+ LEFT JOIN '._DB_PREFIX_.'image_lang il ON (i.id_image = il.id_image AND il.id_lang = '.(int)($cookie->id_lang).')
+ LEFT JOIN '._DB_PREFIX_.'manufacturer m ON (m.id_manufacturer = p.id_manufacturer)
+ WHERE p.`active` = 1
+ AND pl.id_lang = '.(int)$cookie->id_lang.'
+ AND ps.id_shop = '.Shop::getCurrentShop(true)
+ .$queryFilters.
+ ' ORDER BY '.Tools::getProductsOrder('by', Tools::getValue('orderby')).' '.Tools::getProductsOrder('way', Tools::getValue('orderway')).
+ ' LIMIT '.(((int)(Tools::getValue('p', 1)) - 1) * $n.','.$n);
$this->products = Db::getInstance(_PS_USE_SQL_SLAVE_)->ExecuteS($sql);
-
+
return $this->products;
}
@@ -412,7 +414,7 @@ class BlockLayered extends Module
/* First we need to get all subcategories of current category */
$category = new Category((int)$id_parent);
-
+
$subCategories = Db::getInstance(_PS_USE_SQL_SLAVE_)->ExecuteS('
SELECT c.id_category, c.id_parent, cl.name
FROM '._DB_PREFIX_.'category c
@@ -426,7 +428,7 @@ class BlockLayered extends Module
$whereC = rtrim($whereC, 'OR ').')';
$productsSQL = Db::getInstance(_PS_USE_SQL_SLAVE_)->ExecuteS('
- SELECT p.`id_product`, p.`condition`, p.`id_manufacturer`, p.`weight`, s.quantity
+ SELECT p.`id_product`, p.`condition`, p.`id_manufacturer`, p.`weight`, s.quantity,
(SELECT GROUP_CONCAT(`id_category`) FROM `'._DB_PREFIX_.'category_product` cp WHERE cp.`id_product` = p.`id_product`) as ids_cat,
(SELECT GROUP_CONCAT(`id_feature_value`) FROM `'._DB_PREFIX_.'feature_product` fp WHERE fp.`id_product` = p.`id_product`) as ids_feat,
(SELECT GROUP_CONCAT(DISTINCT(pac.`id_attribute`))
@@ -708,7 +710,7 @@ class BlockLayered extends Module
$params = '?';
- foreach($_GET as $key => $val)
+ foreach ($_GET as $key => $val)
$params .= $key.'='.$val.'&';
$share_url = $link->getCategoryLink((int)$category->id, $category->link_rewrite[(int)$cookie->id_lang], (int)$cookie->id_lang).rtrim($params, '&');