diff --git a/wire/modules/AdminTheme/AdminThemeUikit/AdminThemeUikit.module b/wire/modules/AdminTheme/AdminThemeUikit/AdminThemeUikit.module index 906a00b5..5554c9d6 100644 --- a/wire/modules/AdminTheme/AdminThemeUikit/AdminThemeUikit.module +++ b/wire/modules/AdminTheme/AdminThemeUikit/AdminThemeUikit.module @@ -20,7 +20,8 @@ * @property string $inputSize Size for input/select elements. One of "s" for small, "m" for medium (default), or "l" for large. * @property bool|int $ukGrid When true, use uk-width classes for Inputfields (rather than CSS percentages). * @property int $toggleBehavior (0=Standard, 1=Consistent) - * property string $configPhpHash Hash used internally to detect changes to $config->AdminThemeUikit settings. + * @property string $configPhpHash Hash used internally to detect changes to $config->AdminThemeUikit settings. + * @property int $cssVersion Current version number of core CSS/LESS files * * @method string getUikitCSS() * @@ -31,7 +32,7 @@ class AdminThemeUikit extends AdminThemeFramework implements Module, Configurabl public static function getModuleInfo() { return array( 'title' => 'Uikit', - 'version' => 32, + 'version' => 33, 'summary' => 'Uikit v3 admin theme', 'autoload' => 'template=admin', ); @@ -51,6 +52,14 @@ class AdminThemeUikit extends AdminThemeFramework implements Module, Configurabl */ const upgrade = false; + /** + * Required CSS/LESS files version + * + * Increment on core less file changes that will also require a recompile of /site/assets/admin.css + * + */ + const requireCssVersion = 1; + /** * Default logo image file (relative to this dir) * @@ -93,6 +102,7 @@ class AdminThemeUikit extends AdminThemeFramework implements Module, Configurabl $this->set('inputSize', 'm'); // m=medium (default), s=small, l=large $this->set('ukGrid', false); $this->set('configPhpHash', ''); + $this->set('cssVersion', 0); $this->setClasses(array( 'input' => 'uk-input', 'input-small' => 'uk-input uk-form-small', @@ -1092,6 +1102,7 @@ class AdminThemeUikit extends AdminThemeFramework implements Module, Configurabl $settings = $config->AdminThemeUikit; if(!is_array($settings)) $settings = array(); + $settings['requireCssVersion'] = self::requireCssVersion; if(self::upgrade) { $settings['upgrade'] = true; diff --git a/wire/modules/AdminTheme/AdminThemeUikit/AdminThemeUikitCss.php b/wire/modules/AdminTheme/AdminThemeUikit/AdminThemeUikitCss.php index 0cfeb53f..71068db5 100644 --- a/wire/modules/AdminTheme/AdminThemeUikit/AdminThemeUikitCss.php +++ b/wire/modules/AdminTheme/AdminThemeUikit/AdminThemeUikitCss.php @@ -15,6 +15,8 @@ * * @property string $configPhpHash Hash used internally to detect changes to $config->AdminThemeUikit settings. * @property string $configPhpName Name of property in $config that holds custom settings (default='AdminThemeUikit'). + * @property int $requireCssVersion + * @property int $cssVersion * * Settings that may be specified in $config->AdminThemeUikit array: * @@ -30,11 +32,11 @@ class AdminThemeUikitCss extends WireData { /** - * @var AdminTheme + * @var AdminTheme|AdminThemeUikit * */ protected $adminTheme; - + /** * Construct * @@ -68,6 +70,8 @@ class AdminThemeUikitCss extends WireData { 'configPhpName' => $this->adminTheme->className(), 'configPhpHash' => $this->adminTheme->get('configPhpHash'), 'replacements' => array(), + 'cssVersion' => (int) $this->adminTheme->get('cssVersion'), + 'requireCssVersion' => 0, ); } @@ -101,12 +105,16 @@ class AdminThemeUikitCss extends WireData { if($mtime > $lessTime) $lessTime = $mtime; } - if(!count($lessFiles)) return $this->getDefaultCssFile($getPath); + if(!count($lessFiles) && ($this->style === '' || $this->style === $this->defaultStyle)) { + return $this->getDefaultCssFile($getPath); + } $cssFile = $this->customFile($this->customCssFile, 'css'); - if(!$cssFile) return $this->getDefaultCssFile(); + if(!$cssFile) return $this->getDefaultCssFile($getPath); + $cssTime = is_file($cssFile) ? (int) filemtime($cssFile) : 0; - $recompile = $this->recompile || $lessTime > $cssTime || $this->configPhpSettingsChanged(); + $recompile = $this->recompile || $lessTime > $cssTime || $this->cssVersion < $this->requireCssVersion; + if(!$recompile && $this->configPhpSettingsChanged()) $recompile = true; } if($recompile) try { @@ -117,8 +125,14 @@ class AdminThemeUikitCss extends WireData { $less->addFiles($lessFiles); $options = array('replacements' => $this->replacements); if(!$less->saveCss($cssFile, $options)) throw new WireException("Compile error: $cssFile"); - $this->message(sprintf($this->_('Compiled: %s'), $cssFile), Notice::noGroup); + $messages = array(sprintf($this->_('Compiled: %s'), $cssFile)); $cssTime = filemtime($cssFile); + if($this->cssVersion < $this->requireCssVersion) { + $messages[] = "(core CSS v$this->cssVersion => v$this->requireCssVersion)"; + $modules->saveConfig($this->adminTheme, 'cssVersion', $this->requireCssVersion); + $this->adminTheme->set('cssVersion', $this->requireCssVersion); + } + $this->message(implode(' ', $messages), Notice::noGroup); } catch(\Exception $e) { $this->error('LESS - ' . $e->getMessage(), Notice::noGroup); } diff --git a/wire/modules/AdminTheme/AdminThemeUikit/install-foot.inc b/wire/modules/AdminTheme/AdminThemeUikit/install-foot.inc index 4a4a50f2..5d0f37bc 100644 --- a/wire/modules/AdminTheme/AdminThemeUikit/install-foot.inc +++ b/wire/modules/AdminTheme/AdminThemeUikit/install-foot.inc @@ -10,7 +10,7 @@ if(!defined("PROCESSWIRE_INSTALL")) die(); @@ -19,4 +19,4 @@ if(!defined("PROCESSWIRE_INSTALL")) die(); - \ No newline at end of file + diff --git a/wire/modules/AdminTheme/AdminThemeUikit/interfaces.php b/wire/modules/AdminTheme/AdminThemeUikit/interfaces.php index fed1ad61..dfbe2424 100644 --- a/wire/modules/AdminTheme/AdminThemeUikit/interfaces.php +++ b/wire/modules/AdminTheme/AdminThemeUikit/interfaces.php @@ -23,10 +23,11 @@ interface AdminThemeUikitLessInterface { /** * @param string $file + * @param string $url * @return self * */ - public function addFile($file); + public function addFile($file, $url = ''); /** * @param array $files @@ -37,10 +38,11 @@ interface AdminThemeUikitLessInterface { /** * @param string $file + * @param array $options * @return bool * */ - public function saveCss($file); + public function saveCss($file, array $options = array()); /** * @return string