Преглед изворни кода

#2054 Page Triggers: Blocks structure is reset during module update

Alex Trofimov пре 7 година
родитељ
комит
b9a3503711
2 измењених фајлова са 16 додато и 6 уклоњено
  1. 8 3
      inc/classes/BxDolMenuQuery.php
  2. 8 3
      inc/classes/BxDolPageQuery.php

+ 8 - 3
inc/classes/BxDolMenuQuery.php

@@ -48,15 +48,20 @@ class BxDolMenuQuery extends BxDolDb
         if (empty($aMenuItem['set_name']))
             return false;
 
+        // check if menu item already exists, 
+        // so the menu item position will not reset when it's unnecessary
+        $sQuery = $oDb->prepare("SELECT `id` FROM `sys_menu_items` WHERE `set_name` = ? AND `name` = ?", $aMenuItem['set_name'], $aMenuItem['name']);
+        if ($oDb->getOne($sQuery))
+            return true;
+      
+        // get order
         if (empty($aMenuItem['order'])) {
             $sQuery = $oDb->prepare("SELECT `order` FROM `sys_menu_items` WHERE `set_name` = ? AND `active` = 1 AND `order` != ? ORDER BY `order` DESC LIMIT 1", $aMenuItem['set_name'], BX_MENU_LAST_ITEM_ORDER);
             $iProfileMenuOrder = (int)$oDb->getOne($sQuery);
             $aMenuItem['order'] = $iProfileMenuOrder + 1;
         }
 
-        $sQuery = $oDb->prepare("DELETE FROM `sys_menu_items` WHERE `set_name` = ? AND `name` = ?", $aMenuItem['set_name'], $aMenuItem['name']);
-        $oDb->query($sQuery);
-
+        // add new item
         unset($aMenuItem['id']);
         return $oDb->query("INSERT INTO `sys_menu_items` SET " . $oDb->arrayToSQL($aMenuItem));
     }

+ 8 - 3
inc/classes/BxDolPageQuery.php

@@ -53,15 +53,20 @@ class BxDolPageQuery extends BxDolDb
         if (empty($aPageBlock['object']))
             return false;
 
+        // check if block already exists, 
+        // so the block position will not reset when it's unnecessary
+        $sQuery = $oDb->prepare("SELECT `id` FROM `sys_pages_blocks` WHERE `object` = ? AND `type` = ? AND `title` = ?", $aPageBlock['object'], $aPageBlock['type'], $aPageBlock['title']);
+        if ($oDb->getOne($sQuery))
+            return true;
+        
+        // get order
         if (empty($aPageBlock['order'])) {
         	$iCellId = !empty($aPageBlock['cell_id']) ? (int)$aPageBlock['cell_id'] : 1;
             $sQuery = $oDb->prepare("SELECT `order` FROM `sys_pages_blocks` WHERE `object` = ? AND `cell_id` = ? AND `active` = 1 ORDER BY `order` DESC LIMIT 1", $aPageBlock['object'], $iCellId);
             $aPageBlock['order'] = (int)$oDb->getOne($sQuery) + 1;
         }
 
-        $sQuery = $oDb->prepare("DELETE FROM `sys_pages_blocks` WHERE `object` = ? AND `type` = ? AND `title` = ?", $aPageBlock['object'], $aPageBlock['type'], $aPageBlock['title']);
-        $oDb->query($sQuery);
-
+        // add new block
         unset($aPageBlock['id']);
         return $oDb->query("INSERT INTO `sys_pages_blocks` SET " . $oDb->arrayToSQL($aPageBlock));
     }