1
0
Эх сурвалжийг харах

#2615 Wiki: delete filkes when block is deleted

Alex Trofimov 4 жил өмнө
parent
commit
d95c6bef1d

+ 1 - 1
inc/classes/BxDolStorage.php

@@ -1248,7 +1248,7 @@ abstract class BxDolStorage extends BxDolFactory implements iBxDolFactoryObject
         return in_array ($sExt, $this->_aObject[$sExtMode]);
     }
 
-    protected function queueFiles($aFiles)
+    public function queueFiles($aFiles)
     {
         if (!$aFiles)
             return 0;

+ 22 - 1
inc/classes/BxDolWiki.php

@@ -96,6 +96,27 @@ class BxDolWiki extends BxDolFactory implements iBxDolFactoryObject
         return ($GLOBALS['bxDolClasses']['BxDolWiki!'.$sObject] = $o);
     }
 
+    static public function onModuleUninstall($sModule)
+    {
+        $aBlockIds = BxDolWikiQuery::getWikiBlocks ($sModule);
+        if ($aBlockIds && is_array($aBlockIds))
+            self::onBlockDelete($aBlockIds);
+    }
+
+    static public function onBlockDelete($mixedBlockIds)
+    {
+        BxDolWikiQuery::deleteAllRevisions($mixedBlockIds);
+
+        $aBlockIds = is_array($mixedBlockIds) ? $mixedBlockIds : [$mixedBlockIds];
+        $oStorage = BxDolStorage::getObjectInstance('sys_wiki_files');
+        if ($oStorage) {
+            foreach ($aBlockIds as $iBlockId) {
+                $aFiles = $oStorage->getGhosts(0, $iBlockId, false, true);
+                $oStorage->queueFiles($aFiles);
+            }
+        }
+    }
+
     /**
      * Get object name
      */
@@ -571,7 +592,7 @@ class BxDolWiki extends BxDolFactory implements iBxDolFactoryObject
         if (!$oQueryPageBuilder->deleteBlocks(array('type' => 'by_id', 'value' => $iBlockId)))
             return array('code' => 3, 'actions' => array('ShowMsg'), 'block_id' => $iBlockId, 'msg' => _t('_sys_wiki_error_occured', 3));
 
-        $this->_oQuery->deleteAllRevisions($iBlockId);
+        self::onBlockDelete($iBlockId);
 
         return array('code' => 0, 'actions' => array('DeleteBlock', 'ShowMsg'), 'block_id' => $iBlockId, 'msg' => _t('_sys_wiki_block_deleted'));
     }

+ 6 - 0
inc/classes/BxDolWikiQuery.php

@@ -21,6 +21,12 @@ class BxDolWikiQuery extends BxDolDb
         $this->_aObject = $aObject;
     }
 
+    static public function getWikiBlocks ($sModule)
+    {
+        $oDb = BxDolDb::getInstance();
+        return $oDb->getColumn("SELECT `id` FROM `sys_pages_blocks` WHERE `module` = :module", ['module' => $sModule]);
+    }
+
     static public function getWikiObjectByUri ($sUri)
     {
         return self::getWikiObjectByField ('uri', $sUri);

+ 6 - 0
modules/boonex/wiki/install/installer.php

@@ -15,6 +15,12 @@ class BxWikiInstaller extends BxDolStudioInstaller
     {
         parent::__construct($aConfig);
     }
+
+    public function uninstall($aParams, $bAutoDisable = false)
+    {
+        BxDolWiki::onModuleUninstall($this->_aConfig['name']);
+        return parent::uninstall($aParams, $bAutoDisable);
+    }
 }
 
 /** @} */

+ 2 - 0
modules/boonex/wiki/install/sql/uninstall.sql

@@ -13,6 +13,8 @@ DELETE FROM `wb`, `wc`
 USING `sys_pages_blocks` AS `wb`, `sys_pages_wiki_blocks` AS `wc`
 WHERE `wb`.`id` = `wc`.`block_id` AND `wb`.`module` = 'bx_wiki';
 
+DELETE FROM `sys_pages_blocks` WHERE `module` = 'bx_wiki';
+
 -- Studio page and widget
 
 DELETE FROM `tp`, `tw`, `twb`, `tpw` 

+ 1 - 1
studio/classes/BxDolStudioBuilderPageQuery.php

@@ -486,7 +486,7 @@ class BxDolStudioBuilderPageQuery extends BxDolStudioPageQuery
         $sSql = "DELETE FROM `tpb` USING `sys_pages_blocks` AS `tpb` WHERE 1 " . $sWhereClause;
         $b = ((int)$this->query($sSql, $aBindings) > 0);
         if ($b && $aBlockIds)
-            BxDolWikiQuery::deleteAllRevisions($aBlockIds);
+            BxDolWiki::onBlockDelete($aBlockIds);
         return $b;
     }