Files
FreshRSS/lib/core-extensions/UserCSS/extension.php
TowyTowy f7c4fbeeed Redirect after saving user CSS/JS so changes apply immediately (#9006)
Saving custom CSS/JS rendered the response from the pre-save state (no
Post/Redirect/Get), so the stylesheet cache-busting URL was stale and
the change only appeared after a manual reload, which reads as erratic
behavior. Redirect back to the extension config after save, matching
the pattern used elsewhere in the codebase.

Fixes #8795

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
2026-07-09 16:37:49 +02:00

41 lines
1.1 KiB
PHP

<?php
declare(strict_types=1);
final class UserCSSExtension extends Minz_Extension {
public string $css_rules = '';
private const FILENAME = 'style.css';
#[\Override]
public function init(): void {
parent::init();
$this->registerTranslates();
if ($this->hasFile(self::FILENAME)) {
Minz_View::appendStyle($this->getFileUrl(self::FILENAME, isStatic: false));
}
}
#[\Override]
public function handleConfigureAction(): void {
parent::init();
$this->registerTranslates();
if (Minz_Request::isPost()) {
$css_rules = Minz_Request::paramString('css-rules', plaintext: true);
$this->saveFile(self::FILENAME, $css_rules);
FreshRSS_UserDAO::touch();
// Redirect (Post/Redirect/Get) so the next page is built after the save,
// with a fresh cache-busting URL for the updated stylesheet
Minz_Request::good(_t('feedback.conf.updated'), [
'c' => 'extension', 'a' => 'configure', 'params' => ['e' => $this->getName()],
]);
}
$this->css_rules = '';
if ($this->hasFile(self::FILENAME)) {
$this->css_rules = htmlspecialchars($this->getFile(self::FILENAME) ?? '', ENT_NOQUOTES, 'UTF-8');
}
}
}