From 4870893fc234a4e6f4c6fc7cb818e18ac74619db Mon Sep 17 00:00:00 2001 From: odain Date: Mon, 15 Feb 2021 17:25:29 +0100 Subject: [PATCH] =?UTF-8?q?N=C2=B02982=20-=20Speed=20up=20SCSS=20themes=20?= =?UTF-8?q?compilation=20during=20setup=20:=20fix=20precompiled=20css=20th?= =?UTF-8?q?eme=20generated?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- application/themehandler.class.inc.php | 150 +++---------------------- setup/compiler.class.inc.php | 2 + test/application/ThemeHandlerTest.php | 14 ++- 3 files changed, 27 insertions(+), 139 deletions(-) diff --git a/application/themehandler.class.inc.php b/application/themehandler.class.inc.php index 8e05f8e8a..0f21fe76b 100644 --- a/application/themehandler.class.inc.php +++ b/application/themehandler.class.inc.php @@ -322,10 +322,10 @@ CSS; } } - $aFiles = $oFindStylesheetObject->GetImports(); + $aFiles = $oFindStylesheetObject->GetImportPaths(); if (count($aFiles) !== 0) { - foreach ($aFiles as $sFile) { - $aSignature['imports'][$sFile] = md5_file($sFile); + foreach ($aFiles as $sFileURI => $sFilePath) { + $aSignature['imports'][$sFileURI] = md5_file($sFilePath); } } @@ -736,18 +736,18 @@ CSS; } /** - * @since 3.0.0 N°2982 - * Find the given file in the list '$aImportsPaths' of directory and all included stylesheets as well - * Compute latest timestamp found among all found stylesheets - * - * @param string $sFile + * @param string $sFileURI * @param string[] $aImportsPaths * @param FindStylesheetObject $oFindStylesheetObject * @param bool $bImports * * @throws \Exception + *@since 3.0.0 N°2982 + * Find the given file in the list '$aImportsPaths' of directory and all included stylesheets as well + * Compute latest timestamp found among all found stylesheets + * */ - public static function FindStylesheetFile(string $sFile, array $aImportsPaths, $oFindStylesheetObject, $bImports = false) + public static function FindStylesheetFile(string $sFileURI, array $aImportsPaths, $oFindStylesheetObject, $bImports = false) { if (! $bImports) { $oFindStylesheetObject->ResetLastStyleSheet(); @@ -755,7 +755,7 @@ CSS; foreach($aImportsPaths as $sPath) { - $sFilePath = $sPath.'/'.$sFile; + $sFilePath = $sPath.'/'.$sFileURI; $sImportedFile = realpath($sFilePath); if ($sImportedFile === false){ // Handle shortcut syntax : @import "typo" ; @@ -763,7 +763,7 @@ CSS; $sFilePath2 = "$sFilePath.scss"; $sImportedFile = realpath($sFilePath2); if ($sImportedFile){ - self::FindStylesheetFile("$sFile.scss", [ $sPath ], $oFindStylesheetObject, $bImports); + self::FindStylesheetFile("$sFileURI.scss", [ $sPath ], $oFindStylesheetObject, $bImports); $sImportedFile = false; } } @@ -773,22 +773,22 @@ CSS; // file matched: _typo.scss $sShortCut = substr($sFilePath, strrpos($sFilePath, '/') + 1); $sFilePath = str_replace($sShortCut, "_$sShortCut.scss", $sFilePath); - $sFile = str_replace($sShortCut, "_$sShortCut.scss", $sFile); + $sFileURI = str_replace($sShortCut, "_$sShortCut.scss", $sFileURI); $sImportedFile = realpath($sFilePath); } if ((file_exists($sImportedFile)) - && (!$oFindStylesheetObject->AlreadyFetched($sFile))) + && (!$oFindStylesheetObject->AlreadyFetched($sImportedFile))) { if ($bImports){ - $oFindStylesheetObject->AddImport($sFile, $sImportedFile); + $oFindStylesheetObject->AddImport($sFileURI, $sImportedFile); }else{ - $oFindStylesheetObject->AddStylesheet($sFile, $sImportedFile); + $oFindStylesheetObject->AddStylesheet($sFileURI, $sImportedFile); } $oFindStylesheetObject->UpdateLastModified($sImportedFile); //Regexp matching on all included scss files : @import 'XXX.scss'; - $sDirUri = dirname($sFile); + $sDirUri = dirname($sFileURI); preg_match_all('/@import \s*[\"\']([^\"\']*)\s*[\"\']\s*;/', file_get_contents($sImportedFile), $aMatches); if ( (is_array($aMatches)) && (count($aMatches)!==0) ){ foreach ($aMatches[1] as $sImportedFile){ @@ -833,121 +833,3 @@ CSS; } } -/** - * @since 3.0.0 N°2982 - * Class FindStylesheetObject: dedicated class to store computations made in method FindStylesheetFile. - */ -class FindStylesheetObject{ - - //file URIs - private $aStylesheetImportURIs; - private $aStylesheetFileURIs; - - //fill paths - private $aAllStylesheetFilePaths; - private $sLastStyleSheetPath; - - private $iLastModified; - - /** - * FindStylesheetObject constructor. - */ - public function __construct() - { - $this->aStylesheetFileURIs = []; - $this->aStylesheetImportURIs = []; - $this->sLastStyleSheetPath = ""; - $this->iLastModified = 0; - } - - public function GetLastStylesheetFile(): string - { - return $this->sLastStyleSheetPath; - } - - public function GetImports(): array - { - return $this->aStylesheetImportURIs; - } - - /** - * @return array : main stylesheets URIs - */ - public function GetStylesheetFileURIs(): array - { - return $this->aStylesheetFileURIs; - } - - public function GetLastModified() : int - { - return $this->iLastModified; - } - - /** - * @return array : included files URIs - */ - public function GetStylesheetImportURIs(): array - { - return $this->aStylesheetImportURIs; - } - - /** - * @return array : main stylesheets paths + included files paths - */ - public function GetAllStylesheetPaths(): array - { - return $this->aAllStylesheetFilePaths; - } - - /** - * @return string : last found stylesheet URI - */ - public function GetLastStyleSheetPath(): string - { - return $this->sLastStyleSheetPath; - } - - public function AddStylesheet(string $sStylesheetFile, string $sStylesheetFilePath): void - { - $this->aStylesheetFileURIs[] = $sStylesheetFile; - $this->aAllStylesheetFilePaths[] = $sStylesheetFilePath; - $this->sLastStyleSheetPath = $sStylesheetFilePath; - } - - public function AlreadyFetched(string $sStylesheetFile) : bool { - return in_array($sStylesheetFile, $this->aStylesheetFileURIs) - || in_array($sStylesheetFile, $this->aStylesheetImportURIs); - } - - public function AddImport(string $sStylesheetFile, string $sStylesheetFilePath): void - { - $this->aStylesheetImportURIs[] = $sStylesheetFile; - $this->aAllStylesheetFilePaths[] = $sStylesheetFilePath; - } - - public function UpdateLastModified(string $sStylesheetFile): void - { - $this->iLastModified = max($this->iLastModified, @filemtime($sStylesheetFile)); - } - - public function ResetLastStyleSheet(): void - { - $this->sLastStyleSheetPath = ""; - } -} - -class CompileCSSService -{ - /** - * CompileCSSService constructor. - */ - public function __construct() - { - } - - public function CompileCSSFromSASS($sSassContent, $aImportPaths = [], $aVariables = []){ - return utils::CompileCSSFromSASS($sSassContent, $aImportPaths, $aVariables); - } - -} - diff --git a/setup/compiler.class.inc.php b/setup/compiler.class.inc.php index b1096bd51..51a2ce62c 100644 --- a/setup/compiler.class.inc.php +++ b/setup/compiler.class.inc.php @@ -2896,6 +2896,8 @@ EOF; { SetupLog::Info("Replacing theme '$sThemeId' precompiled file in file $sPostCompilationLatestPrecompiledFile for next setup."); copy($sThemeDir.'/main.css', $sPostCompilationLatestPrecompiledFile); + }else { + SetupLog::Info("No theme '$sThemeId' compilation was required during setup."); } } $this->Log(sprintf('Themes compilation took: %.3f ms for %d themes.', (microtime(true) - $fStart)*1000.0, count($aThemes))); diff --git a/test/application/ThemeHandlerTest.php b/test/application/ThemeHandlerTest.php index 3176e5c9d..282d2dc64 100644 --- a/test/application/ThemeHandlerTest.php +++ b/test/application/ThemeHandlerTest.php @@ -20,9 +20,6 @@ class ThemeHandlerTest extends ItopTestCase public function setUp() { - @include_once '/home/combodo/workspace/iTop/approot.inc.php'; - - parent::setUp(); require_once(APPROOT.'application/themehandler.class.inc.php'); require_once(APPROOT.'setup/modelfactory.class.inc.php'); @@ -179,7 +176,7 @@ class ThemeHandlerTest extends ItopTestCase { $sStylesheetId = $oStylesheet->getAttribute('id'); $aThemeParameters['stylesheets'][$sStylesheetId] = $oStylesheet->GetText(); - ThemeHandler::FindStylesheetFile($oImport->GetText(), $aImportsPaths, $oFindStylesheetObject); + ThemeHandler::FindStylesheetFile($oStylesheet->GetText(), $aImportsPaths, $oFindStylesheetObject); } $aIncludedImages = ThemeHandler::GetIncludedImages($aThemeParameters['variables'], $oFindStylesheetObject->GetStylesheetFileURIs(), $sThemeId); @@ -611,12 +608,19 @@ SCSS; */ public function testFindStylesheetFile(string $sFileToFind, array $aAllImports){ $aImportsPath = $this->sTmpDir.'/branding/'; + $aExpectedAllImports =[]; + if (count($aAllImports)!==0){ + foreach ($aAllImports as $sFileURI){ + $aExpectedAllImports [$sFileURI] = $aImportsPath.$sFileURI; + } + } + $oFindStylesheetObject = new FindStylesheetObject(); ThemeHandler::FindStylesheetFile($sFileToFind, [$aImportsPath], $oFindStylesheetObject); $this->assertEquals([$sFileToFind], $oFindStylesheetObject->GetStylesheetFileURIs()); - $this->assertEquals($aAllImports, str_replace($aImportsPath, "", $oFindStylesheetObject->GetImports())); + $this->assertEquals($aExpectedAllImports, $oFindStylesheetObject->GetImportPaths()); $this->assertEquals($aImportsPath.$sFileToFind, $oFindStylesheetObject->GetLastStyleSheetPath()); $aExpectedAllStylesheetPaths = [];