AntonLV 7 tahun lalu
induk
melakukan
e1683c4986

+ 24 - 15
inc/classes/BxDolCacheUtilities.php

@@ -11,9 +11,19 @@
 
 class BxDolCacheUtilities extends BxDol
 {
+    protected $_aCacheTypes = array();
+
     public function __construct ()
     {
         parent::__construct();
+        
+        $this->_aCacheTypes = array(
+            'db' => array('option' => 'sys_db_cache_enable'),
+            'template' => array('option' => 'sys_template_cache_enable'),
+            'css' => array('option' => 'sys_template_cache_css_enable'),
+            'js' => array('option' => 'sys_template_cache_js_enable'),
+            'custom' => array(),
+        );
     }
 
 	/**
@@ -27,6 +37,14 @@ class BxDolCacheUtilities extends BxDol
         return $GLOBALS['bxDolClasses'][__CLASS__];
     }
 
+    function isEnabled($sCache)
+    {
+        if(!isset($this->_aCacheTypes[$sCache]))
+            return false;
+
+        return !isset($this->_aCacheTypes[$sCache]['option']) || getParam($this->_aCacheTypes[$sCache]['option']) == 'on';
+    }
+
     function clear($sCache)
     {
         return $this->_action($sCache, 'clear');
@@ -40,38 +58,29 @@ class BxDolCacheUtilities extends BxDol
 
     protected function _action($sCache, $sMode = 'clear')
     {
+        $mixedResult = false;
+        if(!$this->isEnabled($sCache))
+            return $mixedResult;
+
         $sFuncCacheObject = $sMode == 'clear' ? '_clearObject' : '_getSizeObject';
         $sFuncCacheFile = $sMode == 'clear' ? '_clearFile' : '_getSizeFile';
 
-        $mixedResult = false;
         switch ($sCache) {
             case 'db':
-            	if(getParam('sys_db_cache_enable') != 'on')
-					break;
-
-				$oCacheDb = BxDolDb::getInstance()->getDbCacheObject();
+                $oCacheDb = BxDolDb::getInstance()->getDbCacheObject();
                 $mixedResult = $this->$sFuncCacheObject($oCacheDb, 'db_');
                 break;
 
             case 'template':
-				if(getParam('sys_template_cache_enable') != 'on') 
-					break;
-
-				$oCacheTemplates = BxDolTemplate::getInstance()->getTemplatesCacheObject();
+                $oCacheTemplates = BxDolTemplate::getInstance()->getTemplatesCacheObject();
                 $mixedResult = $this->$sFuncCacheObject($oCacheTemplates, BxDolStudioTemplate::getInstance()->getCacheFilePrefix($sCache));
                 break;
 
             case 'css':
-            	if(getParam('sys_template_cache_css_enable') != 'on')
-            		break;
-
                 $mixedResult = $this->$sFuncCacheFile(BxDolStudioTemplate::getInstance()->getCacheFilePrefix($sCache), BX_DIRECTORY_PATH_CACHE_PUBLIC);
                 break;
 
             case 'js':
-            	if(getParam('sys_template_cache_js_enable') != 'on')
-            		break;
-
                 $mixedResult = $this->$sFuncCacheFile(BxDolStudioTemplate::getInstance()->getCacheFilePrefix($sCache), BX_DIRECTORY_PATH_CACHE_PUBLIC);
                 break;
         }

+ 1 - 0
modules/boonex/english/data/langs/system/en.xml

@@ -592,6 +592,7 @@
 	<string name="_adm_dbd_txt_c_clear_css"><![CDATA[Clear CSS cache]]></string>
 	<string name="_adm_dbd_txt_c_js"><![CDATA[JavaScript]]></string>
 	<string name="_adm_dbd_txt_c_clear_js"><![CDATA[Clear JavaScript cache]]></string>
+        <string name="_adm_dbd_txt_c_clear_custom"><![CDATA[Clear Custom cache]]></string>
 	<string name="_adm_dbd_err_c_clean_failed"><![CDATA[Failed to clean cache]]></string>
 	<string name="_adm_dbd_msg_c_clean_success"><![CDATA[Cache was successfully cleaned]]></string>
 	<string name="_adm_dbd_msg_c_all_disabled"><![CDATA[All caches are disabled]]></string>

+ 1 - 0
modules/boonex/russian/data/langs/system/ru.xml

@@ -590,6 +590,7 @@
 	<string name="_adm_dbd_txt_c_clear_css"><![CDATA[Очистить кэш CSS]]></string>
 	<string name="_adm_dbd_txt_c_js"><![CDATA[JavaScript]]></string>
 	<string name="_adm_dbd_txt_c_clear_js"><![CDATA[Очистить кэш JavaScript]]></string>
+        <string name="_adm_dbd_txt_c_clear_custom"><![CDATA[Очистить специальный кэш]]></string>
 	<string name="_adm_dbd_err_c_clean_failed"><![CDATA[Не удалось очистить кэш]]></string>
 	<string name="_adm_dbd_msg_c_clean_success"><![CDATA[Кэш был удачно очищен]]></string>
 	<string name="_adm_dbd_msg_c_all_disabled"><![CDATA[Весь кэш был отключён]]></string>

+ 71 - 64
studio/classes/BxDolStudioDashboard.php

@@ -25,18 +25,19 @@ class BxDolStudioDashboard extends BxTemplStudioPage
         );
 
         $this->aItemsCache = array (
-		    array('name' => 'all'),
-		    array('name' => 'db'),
-		    array('name' => 'template'),
-		    array('name' => 'css'),
-		    array('name' => 'js')
-		);
-
-		$this->aItemsHTools = array (
-	    	'PHP' => 'requirementsPHP',
-			'MySQL' => 'requirementsMySQL',
-			'Web Server' => 'requirementsWebServer',
-		);
+            array('name' => 'all'),
+            array('name' => 'db'),
+            array('name' => 'template'),
+            array('name' => 'css'),
+            array('name' => 'js'),
+            array('name' => 'custom')
+        );
+
+        $this->aItemsHTools = array (
+            'PHP' => 'requirementsPHP',
+            'MySQL' => 'requirementsMySQL',
+            'Web Server' => 'requirementsWebServer',
+        );
 
         //--- Check actions ---//
         if(($sAction = bx_get('dbd_action')) !== false) {
@@ -71,51 +72,57 @@ class BxDolStudioDashboard extends BxTemplStudioPage
 			        	$aResult = array('code' => 0, 'message' => _t('_adm_dbd_msg_upgrade_started', BX_DOL_URL_STUDIO));
 					break;
 
-				case 'clear_cache':
-					$sValue = bx_get('dbd_value');
-					if($sValue === false)
-						break;
-
-					$sValue = bx_process_input($sValue);
-
-					$oCacheUtilities = BxDolCacheUtilities::getInstance();
-
-					switch ($sValue) {
-				        case 'all':
-				        	$aResult = false;
-				            foreach($this->aItemsCache as $aItem) {
-				            	if($aItem['name'] == 'all')
-				            		continue;
-
-				                $aResultClear = $oCacheUtilities->clear($aItem['name']);
-				                if($aResultClear === false)
-				                	continue;
-
-								$aResult = $aResultClear;
-				                if(isset($aResult['code']) && $aResult['code'] != 0)
-									break;
-				            }
-				            break;
-
-				        case 'db':
-				        case 'template':
-				        case 'css':
-				        case 'js':
-				            $aResult = $oCacheUtilities->clear($sValue);
-				            break;
-
-				        default:
-				            $aResult = array('code' => 1, 'message' => _t('_Error Occured'));
-				    }
-
-				    if($aResult === false)
-				    	$aResult['data'] = MsgBox(_t('_adm_dbd_msg_c_all_disabled'));
-				    else if(isset($aResult['code']) && $aResult['code'] == 0)
-				        $aResult['data'] = $this->getCacheChartData(false);
-
-					break;
-
-				case 'permissions':                    
+                case 'clear_cache':
+                        $sValue = bx_get('dbd_value');
+                        if($sValue === false)
+                                break;
+
+                        $sValue = bx_process_input($sValue);
+
+                        $oCacheUtilities = BxDolCacheUtilities::getInstance();
+
+                        switch ($sValue) {
+                            case 'all':
+                                $aResult = false;
+                                foreach($this->aItemsCache as $aItem) {
+                                    if($aItem['name'] == 'all')
+                                        continue;
+
+                                    $aResultClear = $oCacheUtilities->clear($aItem['name']);
+                                    if($aResultClear === false)
+                                        continue;
+
+                                    $aResult = $aResultClear;
+                                    if(isset($aResult['code']) && $aResult['code'] != 0)
+                                        break;
+                                }
+                                break;
+
+                            case 'db':
+                            case 'template':
+                            case 'css':
+                            case 'js':
+                                $aResult = $oCacheUtilities->clear($sValue);
+                                break;
+
+                            case 'custom':
+                                $aResult = array('code' => 0);
+                                break;
+
+                            default:
+                                $aResult = array('code' => 1, 'message' => _t('_Error Occured'));
+                        }
+
+                        if($aResult === false)
+                            $aResult['data'] = MsgBox(_t('_adm_dbd_msg_c_all_disabled'));
+                        else if(isset($aResult['code']) && $aResult['code'] == 0) {
+                            bx_alert('system', 'clear_cache', 0, 0, array('type' => $sValue));
+
+                            $aResult['data'] = $this->getCacheChartData(false);
+                        }
+                        break;
+
+                case 'permissions':                    
                     $oAdmTools = new BxDolStudioTools();
 
                     header( 'Content-type: text/html; charset=utf-8' );
@@ -172,18 +179,18 @@ class BxDolStudioDashboard extends BxTemplStudioPage
 
     protected function getCacheChartData($bAsString = true)
     {
-		$oCacheUtilities = BxDolCacheUtilities::getInstance();
+        $oCacheUtilities = BxDolCacheUtilities::getInstance();
 
     	$aChartData = array();
     	foreach($this->aItemsCache as $aItem) {
-    		if($aItem['name'] == 'all')
-	            continue;
+            if($aItem['name'] == 'all')
+                continue;
 
-	        $iSize = $oCacheUtilities->size($aItem['name']);
-	        if($iSize === false)
-	        	continue;
+            $iSize = $oCacheUtilities->size($aItem['name']);
+            if($iSize === false)
+                continue;
 
-	        $aChartData[] = array(bx_js_string(_t('_adm_dbd_txt_c_' . $aItem['name']), BX_ESCAPE_STR_APOS), array('v' => $iSize, 'f' => bx_js_string(_t_format_size($iSize))));
+            $aChartData[] = array(bx_js_string(_t('_adm_dbd_txt_c_' . $aItem['name']), BX_ESCAPE_STR_APOS), array('v' => $iSize, 'f' => bx_js_string(_t_format_size($iSize))));
     	}
 
     	if(empty($aChartData))

+ 39 - 32
studio/template/scripts/BxBaseStudioDashboard.php

@@ -245,38 +245,45 @@ class BxBaseStudioDashboard extends BxDolStudioDashboard
 
 	public function serviceGetBlockCache()
 	{
-		$sJsObject = $this->getPageJsObject();
-
-		$sChartData = $this->getCacheChartData();
-		$bChartData = $sChartData !== false;
-
-		$aMenu = array();
-		if($bChartData)
-		    foreach($this->aItemsCache as $aItem)
-				$aMenu[] = array(
-					'name' => $aItem['name'], 
-					'title' => _t('_adm_dbd_txt_c_clear_' . $aItem['name']), 
-					'link' => 'javascript:void(0)', 
-					'onclick' => $sJsObject . ".clearCache('" . $aItem['name'] . "')"
-				);
-
-		$sContent = BxDolStudioTemplate::getInstance()->parseHtmlByName('dbd_cache.html', array(
-			'bx_if:show_chart' => array(
-				'condition' => $bChartData,
-				'content' => array(
-					'js_object' => $sJsObject,
-		        	'chart_data' => $sChartData,
-				)
-			),
-			'bx_if:show_empty' => array(
-				'condition' => !$bChartData,
-				'content' => array(
-					'message' => MsgBox(_t('_adm_dbd_msg_c_all_disabled'))
-				)
-			),
-		));
-
-		return array('content' => $sContent, 'menu' => $aMenu);
+            $sJsObject = $this->getPageJsObject();
+            $oCacheUtilities = BxDolCacheUtilities::getInstance();
+
+            $sChartData = $this->getCacheChartData();
+            $bChartData = $sChartData !== false;
+
+            $aMenu = array();
+            foreach($this->aItemsCache as $aItem){
+                if($aItem['name'] != 'all' && !$oCacheUtilities->isEnabled($aItem['name']))
+                    continue;
+
+                $aMenu[] = array(
+                    'name' => $aItem['name'], 
+                    'title' => _t('_adm_dbd_txt_c_clear_' . $aItem['name']), 
+                    'link' => 'javascript:void(0)', 
+                    'onclick' => $sJsObject . ".clearCache('" . $aItem['name'] . "')"
+                );
+            }
+
+            if(count($aMenu) == 2)
+                array_shift($aMenu);
+
+            $sContent = BxDolStudioTemplate::getInstance()->parseHtmlByName('dbd_cache.html', array(
+                'bx_if:show_chart' => array(
+                    'condition' => $bChartData,
+                    'content' => array(
+                        'js_object' => $sJsObject,
+                        'chart_data' => $sChartData,
+                    )
+                ),
+                'bx_if:show_empty' => array(
+                    'condition' => !$bChartData,
+                    'content' => array(
+                        'message' => MsgBox(_t('_adm_dbd_msg_c_all_disabled'))
+                    )
+                ),
+            ));
+
+            return array('content' => $sContent, 'menu' => $aMenu);
 	}
 
     private function getVersionUpgradeAvailable()