Jelajahi Sumber

Ticket #5680 - API: 'Set badge' clean up all previously applied badges.

AntonLV 1 bulan lalu
induk
melakukan
e0fa29605d

+ 6 - 6
inc/classes/BxDolBadges.php

@@ -37,16 +37,16 @@ class BxDolBadges extends BxDolFactory implements iBxDolSingleton
         return $this->_oDb->getData($aParams, $aItems);
     }
     
-    public function delete($iID)
-    {
-        return $this->_oDb->delete($iID);
-    }
-    
     public function add($iBadgeId, $iObjectId, $sModule)
     {
         return $this->_oDb->add($iBadgeId, $iObjectId, $sModule);
     }
-    
+
+    public function delete($aParams)
+    {
+        return $this->_oDb->delete($aParams);
+    }
+
     public static function onModuleUninstall ($sModuleName, &$iFiles = null)
     {
         $oBadges = BxDolBadges::getInstance();

+ 8 - 8
inc/classes/BxDolBadgesQuery.php

@@ -188,14 +188,14 @@ class BxDolBadgesQuery extends BxDolDb
                 );
                 break;
         }
-        
-        $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);
-        }
+
+        if(!$sQuery)
+            return;
+
+        $this->query("DELETE FROM `sys_badges2objects`" . $sQuery, $aBindings);
+
+        if($aParams['type'] == 'by_module')
+            $this->query("DELETE FROM `sys_badges`" . $sQuery, $aBindings);
     }
 }
 

+ 9 - 13
template/scripts/BxBaseServices.php

@@ -1669,23 +1669,19 @@ class BxBaseServices extends BxDol implements iBxDolProfileService
         $aCheck = checkActionModule($iPerformerId, 'set badge', 'system', false);
         if(!isAdmin() && $aCheck[CHECK_ACTION_RESULT] !== CHECK_ACTION_RESULT_ALLOWED)
             return false;
-        
+
         $oBadges = BxDolBadges::getInstance();
 
-        $aBadges = $oBadges->getData(array('type' => 'by_module&object', 'object_id' => $iContentId, 'module' => $sModule));
+        $oBadges->delete([
+            'type' => 'by_module&object', 
+            'object_id' => $iContentId, 
+            'module' => $sModule
+        ]);
 
-        foreach ($aBadges as $aBadge) {
-            if (isset($aBadge['badge_id'])){
-                $oBadges->delete($aBadge['badge_id']);
-            }
-        }
-        
-        foreach ($aSelectedBadges as $iSelectedBadge) {
+        foreach ($aSelectedBadges as $iSelectedBadge)
            $oBadges->add($iSelectedBadge, $iContentId, $sModule);
-        }
-        
-        checkActionModule($iPerformerId, 'set badge', 'system', true); // perform action
-        
+
+        checkActionModule($iPerformerId, 'set badge', 'system', true);
         return true;
     }