Kaynağa Gözat

Ticket #4480 - Add service worker.

AntonLV 3 yıl önce
ebeveyn
işleme
d0423e13f5

+ 2 - 27
inc/classes/BxDolPreloader.php

@@ -33,8 +33,8 @@ class BxDolPreloader extends BxDolFactory implements iBxDolSingleton
         $this->_aEntries = $this->_oDb->getEntries();
 
         $this->_aTypes = [
-            BX_PRELOADER_TYPE_CSS => ['get' => 'getCssUrl'],
-            BX_PRELOADER_TYPE_JS => ['get' => 'getJsUrl'],
+            BX_PRELOADER_TYPE_CSS => ['get' => 'getCssUrlWithRevision'],
+            BX_PRELOADER_TYPE_JS => ['get' => 'getJsUrlWithRevision'],
             BX_PRELOADER_TYPE_JS_OPTION => [],
             BX_PRELOADER_TYPE_JS_TRANSLATION => [],
             BX_PRELOADER_TYPE_JS_IMAGE => []
@@ -81,31 +81,6 @@ class BxDolPreloader extends BxDolFactory implements iBxDolSingleton
             $oTemplateSystem->{$this->_aTypes[$sType]['add']}($sContent);
         }
     }
-
-    public function getSystemAssets($oTemplateSystem)
-    {
-        $aResults = [];
-
-        $aEntries = $this->_oDb->getEntriesSystem();
-        foreach($aEntries as $aEntry) {
-            $sType = $aEntry['type'];
-
-            if(BxDolService::isSerializedService($aEntry['content']))
-                $aEntry['content'] = BxDolService::callSerialized($aEntry['content']);
-
-            $sContent = bx_replace_markers($aEntry['content'], $this->_aMarkers);
-            if(empty($sContent))
-                continue;
-
-            $sEntry = $oTemplateSystem->{$this->_aTypes[$sType]['get']}($sContent);
-            if(empty($sEntry))
-                $sEntry = $sContent;
-
-            $aResults[] = str_replace([BX_DOL_URL_ROOT, BX_DIRECTORY_PATH_ROOT], '/', $sEntry);
-        }
-
-        return $aResults;
-    }
 }
 
 /** @} */

+ 0 - 10
inc/classes/BxDolPreloaderQuery.php

@@ -26,16 +26,6 @@ class BxDolPreloaderQuery extends BxDolDb
 
         return $GLOBALS[$sKey];
     }
-
-    public function &getEntriesSystem()
-    {
-        $sKey = 'bx_dol_cache_memory_preloader_entries_system';
-
-        if(!isset($GLOBALS[$sKey]))
-            $GLOBALS[$sKey] = $this->fromCache('sys_preloader_entries_system', 'getAll', "SELECT * FROM `sys_preloader` WHERE `type` IN ('css_system', 'js_system') AND `active`='1' ORDER BY `type`, `order`");
-
-        return $GLOBALS[$sKey];
-    }
 }
 
 /** @} */

+ 59 - 27
inc/classes/BxDolTemplate.php

@@ -1519,8 +1519,20 @@ class BxDolTemplate extends BxDolFactory implements iBxDolSingleton
      */
     function getCssUrl($sName, $sCheckIn = BX_DOL_TEMPLATE_CHECK_IN_BOTH)
     {
+        if(($aFile = $this->_locateFile('css', $sName)) !== false)
+            return $aFile[0];
+
         return $this->_getAbsoluteLocation('url', $this->_sFolderCss, $sName, $sCheckIn);
     }
+    function getCssUrlWithRevision($sName, $sCheckIn = BX_DOL_TEMPLATE_CHECK_IN_BOTH)
+    {
+        $sUrl = $this->getCssUrl($sName, $sCheckIn);
+        if(!empty($sUrl))
+            $sUrl = $this->_addRevision($sUrl);
+
+        return $sUrl;
+    }
+
     /**
      * Get full Path of CSS file.
      *
@@ -1530,6 +1542,9 @@ class BxDolTemplate extends BxDolFactory implements iBxDolSingleton
      */
     function getCssPath($sName, $sCheckIn = BX_DOL_TEMPLATE_CHECK_IN_BOTH)
     {
+        if(($aFile = $this->_locateFile('css', $sName)) !== false)
+            return $aFile[1];
+
         return $this->_getAbsoluteLocation('path', $this->_sFolderCss, $sName, $sCheckIn);
     }
     /**
@@ -1540,8 +1555,19 @@ class BxDolTemplate extends BxDolFactory implements iBxDolSingleton
      */
     function getJsUrl($sName)
     {
+        if(($aFile = $this->_locateFile('js', $sName)) !== false)
+            return $aFile[0];
+
         return $this->_getAbsoluteLocationJs('url', $sName);
     }
+    function getJsUrlWithRevision($sName)
+    {
+        $sUrl = $this->getJsUrl($sName);
+        if(!empty($sUrl))
+            $sUrl = $this->_addRevision($sUrl);
+
+        return $sUrl;
+    }
     /**
      * Get full Path of JS file.
      *
@@ -1550,6 +1576,9 @@ class BxDolTemplate extends BxDolFactory implements iBxDolSingleton
      */
     function getJsPath($sName)
     {
+        if(($aFile = $this->_locateFile('js', $sName)) !== false)
+            return $aFile[1];
+
         return $this->_getAbsoluteLocationJs('path', $sName);
     }
     /**
@@ -1987,10 +2016,11 @@ class BxDolTemplate extends BxDolFactory implements iBxDolSingleton
      */
     function parseIcon($sName, $aAttrs = array())
     {
-		$aIcons = BxTemplFunctions::getInstance()->getIcon($sName, $aAttrs);
-        if ($aIcons[0] != '')
+        $aIcons = BxTemplFunctions::getInstance()->getIcon($sName, $aAttrs);
+        if($aIcons[0] != '')
             $aIcons[0] = '';
-		return implode($aIcons);
+
+        return implode($aIcons);
     }
 
     function getCacheFilePrefix($sType)
@@ -2127,8 +2157,6 @@ class BxDolTemplate extends BxDolFactory implements iBxDolSingleton
         $sMaskCondition = "if(%s) {%s}";
         $sMaskConditionWithElse = "if(%s) {%s} else {setTimeout(function() {%s}, 10);}";
 
-        $iRev = $this->_getRevision();
-
         $aFilesLocated = [];
         foreach($aFiles as $sFile) {
             $mixedFile = $this->_locateFile('js', $sFile);
@@ -2137,7 +2165,7 @@ class BxDolTemplate extends BxDolFactory implements iBxDolSingleton
 
             list($sUrl) = $mixedFile;
 
-            $aFilesLocated[] = bx_append_url_params($sUrl, ['rev' => $iRev]);
+            $aFilesLocated[] = $this->_addRevision($sUrl);
         }
         $sFilesLocated = json_encode($aFilesLocated);
 
@@ -2333,8 +2361,6 @@ class BxDolTemplate extends BxDolFactory implements iBxDolSingleton
 
         $sMaskLoad = "bx_get_style(%s);";
 
-        $iRev = $this->_getRevision();
-
         $aFilesLocated = [];
         foreach($aFiles as $sFile) {
             $mixedFile = $this->_locateFile('css', $sFile);
@@ -2343,7 +2369,7 @@ class BxDolTemplate extends BxDolFactory implements iBxDolSingleton
 
             list($sUrl) = $mixedFile;
 
-            $aFilesLocated[] = bx_append_url_params($sUrl, ['rev' => $iRev]);
+            $aFilesLocated[] = $this->_addRevision($sUrl);
         }
         $sFilesLocated = json_encode($aFilesLocated);
 
@@ -2628,7 +2654,7 @@ class BxDolTemplate extends BxDolFactory implements iBxDolSingleton
      * @param  string $sType the type of file('js' or 'css')
      * @return string the result CSS code.
      */
-    function includeFiles($sType, $bSystem = false)
+    function includeFiles($sType, $bSystem = false, $bWrap = true)
     {
         $sUpcaseType = ucfirst($sType);
 
@@ -2638,7 +2664,7 @@ class BxDolTemplate extends BxDolFactory implements iBxDolSingleton
             return "";
 
         if(!$this->{'_b' . $sUpcaseType . 'Cache'})
-            return $this->_includeFiles($sType, $aFiles);
+            return $this->_includeFiles($sType, $aFiles, $bWrap);
 
         //--- If cache already exists, return it ---//
         $sMethodWrap = '_wrapInTag' . $sUpcaseType;
@@ -2659,7 +2685,7 @@ class BxDolTemplate extends BxDolFactory implements iBxDolSingleton
             if($this->{'_b' . $sUpcaseType . 'Archive'})
                 $sCacheAbsoluteUrl = $this->_getLoaderUrl($sType, $sName);
 
-           return $this->$sMethodWrap($sCacheAbsoluteUrl);
+           return $bWrap ? $this->$sMethodWrap($sCacheAbsoluteUrl) : $sCacheAbsoluteUrl;
         }
 
         //--- Collect all attached CSS/JS in one file ---//
@@ -2687,12 +2713,12 @@ class BxDolTemplate extends BxDolFactory implements iBxDolSingleton
         }
 
         if($mixedWriteResult === false)
-            return $this->_includeFiles($sType, $aFiles);
+            return $this->_includeFiles($sType, $aFiles, $bWrap);
 
         if($this->{'_b' . $sUpcaseType . 'Archive'})
             $sCacheAbsoluteUrl = $this->_getLoaderUrl($sType, $sName);
 
-        return $this->$sMethodWrap($sCacheAbsoluteUrl);
+        return $bWrap ? $this->$sMethodWrap($sCacheAbsoluteUrl) : $sCacheAbsoluteUrl;
     }
     /**
      * Include CSS/JS files without caching.
@@ -2701,29 +2727,29 @@ class BxDolTemplate extends BxDolFactory implements iBxDolSingleton
      * @param  array  $aFiles CSS/JS files to be added to the page.
      * @return string result of operation.
      */
-    function _includeFiles($sType, &$aFiles)
+    function _includeFiles($sType, &$aFiles, $bWrap = true)
     {
-        $iRev = $this->_getRevision();
         $sUpcaseType = ucfirst($sType);
 
         $sMethodWrap = '_wrapInTag' . $sUpcaseType;
         $sMethodLess = '_less' . $sUpcaseType;
 
-        $sResult = "";
+        $mixedResult = $bWrap ? "" : [];
         foreach($aFiles as $aFile) {
             if($this->{'_b' . $sUpcaseType . 'Less'})
                 $aFile = $this->$sMethodLess($aFile);
 
             $sFileUrl = $aFile['url'];
             if(!$this->{'_b' . $sUpcaseType . 'Cache'})
-                $sFileUrl = bx_append_url_params($sFileUrl, array(
-                    'rev' => $iRev
-                ));
+                $sFileUrl = $this->_addRevision($sFileUrl);
 
-            $sResult .= $this->$sMethodWrap($sFileUrl);
+            if($bWrap)
+                $mixedResult .= $this->$sMethodWrap($sFileUrl);
+            else
+                $mixedResult[] = $sFileUrl;
         }
 
-        return $sResult;
+        return $mixedResult;
     }
     /**
      * Insert/Delete CSS file from output stack.
@@ -2741,8 +2767,6 @@ class BxDolTemplate extends BxDolFactory implements iBxDolSingleton
         if(is_string($mixedFiles))
             $mixedFiles = array($mixedFiles);
 
-        $iRev = $this->_getRevision();
-
         $sUpcaseType = ucfirst($sType);
         $sMethodLocate = '_getAbsoluteLocation' . $sUpcaseType;
         $sMethodWrap = '_wrapInTag' . $sUpcaseType;
@@ -2767,9 +2791,7 @@ class BxDolTemplate extends BxDolFactory implements iBxDolSingleton
                     ]);
 
                     if($bDynamic)
-                        $sResult .= $this->$sMethodWrap(bx_append_url_params($sUrl, array(
-                            'rev' => $iRev
-                        )));
+                        $sResult .= $this->$sMethodWrap($this->_addRevision($sUrl));
                     else {
                         $bFound = false;
                         $aSearchIn = $bSystem ? $this->aPage[$sArrayKey] : array_merge($this->aPage[$sType . '_system'], $this->aPage[$sArrayKey]);
@@ -3400,6 +3422,16 @@ class BxDolTemplate extends BxDolFactory implements iBxDolSingleton
         return (int)getParam('sys_revision');
     }
 
+    /**
+     * Add current revision number to URL.
+     * 
+     * @return string with URL 
+     */
+    function _addRevision($sUrl)
+    {
+        return bx_append_url_params($sUrl, ['rev' => $this->_getRevision()]);
+    }
+
     /**
      *
      * Functions to display pages with errors, messages and so on.

+ 12 - 1
sw.js.php

@@ -10,8 +10,19 @@
 define('BX_SERVICE_WORKER', true);
 
 require_once('./inc/header.inc.php');
+$oTemplate = BxDolTemplate::getInstance();
 
-$aAssets = BxDolPreloader::getInstance()->getSystemAssets(BxDolTemplate::getInstance());
+$aAssets = [];
+foreach(['css' , 'js'] as $sType) {
+    $aFiles = $oTemplate->includeFiles($sType, true, false);
+    if(!is_array($aFiles))
+        $aFiles = [$aFiles];
+
+    $aAssets = array_merge($aAssets, $aFiles);
+}
+
+foreach($aAssets as $iKey => $sAsset)
+    $aAssets[$iKey] = str_replace(BX_DOL_URL_ROOT, '/', $sAsset);
 
 header("Content-Type: text/javascript");
 ?>