Преглед на файлове

#3607 Badges aren't deleted when module is uninstalled

RomanL преди 4 години
родител
ревизия
6b33811b85
променени са 3 файла, в които са добавени 25 реда и са изтрити 2 реда
  1. 7 0
      inc/classes/BxDolBadges.php
  2. 15 2
      inc/classes/BxDolBadgesQuery.php
  3. 3 0
      studio/classes/BxDolStudioInstaller.php

+ 7 - 0
inc/classes/BxDolBadges.php

@@ -46,6 +46,13 @@ class BxDolBadges extends BxDolFactory implements iBxDolSingleton
     {
         return $this->_oDb->add($iBadgeId, $iObjectId, $sModule);
     }
+    
+    public static function onModuleUninstall ($sModuleName, &$iFiles = null)
+    {
+        $oBadges = BxDolBadges::getInstance();
+        $oBadges->_oDb->delete(['type' => 'by_module', 'module' => $sModuleName]);
+        return true;
+    }
 }
 
 /** @} */

+ 15 - 2
inc/classes/BxDolBadgesQuery.php

@@ -170,6 +170,14 @@ class BxDolBadgesQuery extends BxDolDb
                     'object_id' => $aParams['object_id'],
                 );
                 break;
+                
+            case 'by_module':
+                $sQuery = " WHERE `module` = :module";
+                $aBindings = array(
+                    'module' => $aParams['module'],
+                );
+                break;
+                
             case 'by_module&object&badge':   
                 $sQuery = " WHERE `module` = :module AND object_id = :object_id AND badge_id = :badge_id";
                 $aBindings = array(
@@ -180,8 +188,13 @@ class BxDolBadgesQuery extends BxDolDb
                 break;
         }
         
-        $sQuery = "DELETE FROM `sys_badges2objects`" . $sQuery;
-        $this->query($sQuery, $aBindings);
+        $sQuery1 = "DELETE FROM `sys_badges2objects`" . $sQuery;
+        $this->query($sQuery1, $aBindings);
+        
+        if ($aParams['type'] == 'by_module'){
+            $sQuery1 = "DELETE FROM `sys_badges`" . $sQuery;
+            $this->query($sQuery1, $aBindings);
+        }
     }
 }
 

+ 3 - 0
studio/classes/BxDolStudioInstaller.php

@@ -945,6 +945,9 @@ class BxDolStudioInstaller extends BxDolInstallerUtils
         // delete forms common data
         BxDolForm::onModuleUninstall($this->_aConfig['name'], $iFiles);
         
+        // delete badges data
+        BxDolBadges::onModuleUninstall($this->_aConfig['name'], $iFiles);
+        
         // queue for deletion storage files
         if(!empty($this->_aConfig['storages']) && is_array($this->_aConfig['storages']))        
             foreach($this->_aConfig['storages'] as $s)