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,41 +26,24 @@ 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); - } -} - -/** - * When plugin parameters are saved, we regenerate the custom CSS file with provided settings. - * - * @param array $data $_POST array - * - * @return array Updated $_POST array - */ -function hook_default_colors_save_plugin_parameters($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 - : ''; + return [$error]; } - if (! empty($content)) { - file_put_contents($file, sprintf($template, $content)); + // 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); } - - return $data; } /** @@ -78,6 +63,27 @@ function hook_default_colors_render_includes($data) return $data; } +/** + * Regenerate the custom CSS file with provided settings. + * + * @param array $params Plugin configuration (CSS rules) + */ +function default_colors_generate_css_file($params): void +{ + $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($params[$rule]) + ? default_colors_format_css_rule($params, $rule) .';'. PHP_EOL + : ''; + } + + if (! empty($content)) { + file_put_contents($file, sprintf($template, $content)); + } +} + /** * Create a valid CSS rule from parameters settings and plugin parameter. * diff --git a/tests/plugins/PluginDefaultColorsTest.php b/tests/plugins/PluginDefaultColorsTest.php index b9951cca..9835dfa3 100644 --- a/tests/plugins/PluginDefaultColorsTest.php +++ b/tests/plugins/PluginDefaultColorsTest.php @@ -2,7 +2,6 @@ namespace Shaarli\Plugin\DefaultColors; -use DateTime; use PHPUnit\Framework\TestCase; use Shaarli\Bookmark\LinkDB; use Shaarli\Config\ConfigManager; @@ -57,6 +56,8 @@ class PluginDefaultColorsTest extends TestCase $conf->set('plugins.DEFAULT_COLORS_BACKGROUND', 'value'); $errors = default_colors_init($conf); $this->assertEmpty($errors); + + $this->assertFileExists($file = 'sandbox/default_colors/default_colors.css'); } /** @@ -72,9 +73,9 @@ class PluginDefaultColorsTest extends TestCase /** * Test the save plugin parameters hook with all colors specified. */ - public function testSavePluginParametersAll() + public function testGenerateCssFile() { - $post = [ + $params = [ 'other1' => true, 'DEFAULT_COLORS_MAIN' => 'blue', 'DEFAULT_COLORS_BACKGROUND' => 'pink', @@ -82,7 +83,7 @@ class PluginDefaultColorsTest extends TestCase 'DEFAULT_COLORS_DARK_MAIN' => 'green', ]; - hook_default_colors_save_plugin_parameters($post); + default_colors_generate_css_file($params); $this->assertFileExists($file = 'sandbox/default_colors/default_colors.css'); $content = file_get_contents($file); $expected = ':root { @@ -98,16 +99,16 @@ class PluginDefaultColorsTest extends TestCase /** * Test the save plugin parameters hook with only one color specified. */ - public function testSavePluginParametersSingle() + public function testGenerateCssFileSingle() { - $post = [ + $params = [ 'other1' => true, 'DEFAULT_COLORS_BACKGROUND' => 'pink', 'other2' => ['yep'], 'DEFAULT_COLORS_DARK_MAIN' => '', ]; - hook_default_colors_save_plugin_parameters($post); + default_colors_generate_css_file($params); $this->assertFileExists($file = 'sandbox/default_colors/default_colors.css'); $content = file_get_contents($file); $expected = ':root { @@ -121,9 +122,9 @@ class PluginDefaultColorsTest extends TestCase /** * Test the save plugin parameters hook with no color specified. */ - public function testSavePluginParametersNone() + public function testGenerateCssFileNone() { - hook_default_colors_save_plugin_parameters([]); + default_colors_generate_css_file([]); $this->assertFileNotExists($file = 'sandbox/default_colors/default_colors.css'); }