From 972daa4513420d3293d46a808ca2d5be0313e78b Mon Sep 17 00:00:00 2001 From: ArthurHoaro Date: Sat, 29 Aug 2020 09:38:30 +0200 Subject: Default colors plugin: generate CSS file during initialization Current behaviour only generate the custom CSS file when the plugin settings are saved, which can be annoying if the file is deleted but the settings are set. Most common use case is Docker deployment, because the plugin directory is not mounted as a volume. --- plugins/default_colors/default_colors.php | 56 +++++++++++++++++-------------- 1 file changed, 31 insertions(+), 25 deletions(-) (limited to 'plugins/default_colors') diff --git a/plugins/default_colors/default_colors.php b/plugins/default_colors/default_colors.php index 1928cc9f..e1fd5cfb 100644 --- a/plugins/default_colors/default_colors.php +++ b/plugins/default_colors/default_colors.php @@ -15,6 +15,8 @@ const DEFAULT_COLORS_PLACEHOLDERS = [ 'DEFAULT_COLORS_DARK_MAIN', ]; +const DEFAULT_COLORS_CSS_FILE = '/default_colors/default_colors.css'; + /** * Display an error if the plugin is active a no color is configured. * @@ -24,58 +26,62 @@ const DEFAULT_COLORS_PLACEHOLDERS = [ */ function default_colors_init($conf) { - $params = ''; + $params = []; foreach (DEFAULT_COLORS_PLACEHOLDERS as $placeholder) { - $params .= trim($conf->get('plugins.'. $placeholder, '')); + $value = trim($conf->get('plugins.'. $placeholder, '')); + if (strlen($value) > 0) { + $params[$placeholder] = $value; + } } if (empty($params)) { $error = t('Default colors plugin error: '. 'This plugin is active and no custom color is configured.'); - return array($error); + return [$error]; + } + + // Colors are defined but the custom CSS file does not exist -> generate it + if (!file_exists(PluginManager::$PLUGINS_PATH . DEFAULT_COLORS_CSS_FILE)) { + default_colors_generate_css_file($params); } } /** - * When plugin parameters are saved, we regenerate the custom CSS file with provided settings. + * When linklist is displayed, include default_colors CSS file. * - * @param array $data $_POST array + * @param array $data - header data. * - * @return array Updated $_POST array + * @return mixed - header data with default_colors CSS file added. */ -function hook_default_colors_save_plugin_parameters($data) +function hook_default_colors_render_includes($data) { $file = PluginManager::$PLUGINS_PATH . '/default_colors/default_colors.css'; - $template = file_get_contents(PluginManager::$PLUGINS_PATH . '/default_colors/default_colors.css.template'); - $content = ''; - foreach (DEFAULT_COLORS_PLACEHOLDERS as $rule) { - $content .= ! empty($data[$rule]) - ? default_colors_format_css_rule($data, $rule) .';'. PHP_EOL - : ''; - } - - if (! empty($content)) { - file_put_contents($file, sprintf($template, $content)); + if (file_exists($file )) { + $data['css_files'][] = $file ; } return $data; } /** - * When linklist is displayed, include default_colors CSS file. - * - * @param array $data - header data. + * Regenerate the custom CSS file with provided settings. * - * @return mixed - header data with default_colors CSS file added. + * @param array $params Plugin configuration (CSS rules) */ -function hook_default_colors_render_includes($data) +function default_colors_generate_css_file($params): void { $file = PluginManager::$PLUGINS_PATH . '/default_colors/default_colors.css'; - if (file_exists($file )) { - $data['css_files'][] = $file ; + $template = file_get_contents(PluginManager::$PLUGINS_PATH . '/default_colors/default_colors.css.template'); + $content = ''; + foreach (DEFAULT_COLORS_PLACEHOLDERS as $rule) { + $content .= !empty($params[$rule]) + ? default_colors_format_css_rule($params, $rule) .';'. PHP_EOL + : ''; } - return $data; + if (! empty($content)) { + file_put_contents($file, sprintf($template, $content)); + } } /** -- cgit v1.2.3