Loading modules/Plugins/Config/Routes.php +3 −4 Original line number Diff line number Diff line Loading @@ -27,7 +27,7 @@ $routes->group( 'as' => 'plugins-view', 'filter' => 'permission:plugins.manage', ]); $routes->get('settings', 'PluginController::settings/$1/$2', [ $routes->get('settings', 'PluginController::settingsView/$1/$2', [ 'as' => 'plugins-settings-general', 'filter' => 'permission:plugins.manage', ]); Loading @@ -35,7 +35,7 @@ $routes->group( 'as' => 'plugins-settings-general-action', 'filter' => 'permission:plugins.manage', ]); $routes->get('(:num)', 'PluginController::settings/$1/$2/$3', [ $routes->get('(:num)', 'PluginController::settingsView/$1/$2/$3', [ 'as' => 'plugins-settings-podcast', 'filter' => 'permission:podcast$3.edit', ]); Loading @@ -43,7 +43,7 @@ $routes->group( 'as' => 'plugins-settings-podcast-action', 'filter' => 'permission:podcast$3.edit', ]); $routes->get('(:num)/(:num)', 'PluginController::settings/$1/$2/$3/$4', [ $routes->get('(:num)/(:num)', 'PluginController::settingsView/$1/$2/$3/$4', [ 'as' => 'plugins-settings-episode', 'filter' => 'permission:podcast$3.episodes.edit', ]); Loading @@ -59,7 +59,6 @@ $routes->group( 'as' => 'plugins-deactivate', 'filter' => 'permission:plugins.manage', ]); // TODO: change to delete $routes->get('uninstall', 'PluginController::uninstall/$1/$2', [ 'as' => 'plugins-uninstall', 'filter' => 'permission:plugins.manage', Loading modules/Plugins/Controllers/PluginController.php +4 −1 Original line number Diff line number Diff line Loading @@ -80,7 +80,7 @@ class PluginController extends BaseController ]); } public function settings( public function settingsView( string $vendor, string $package, string $podcastId = null, Loading Loading @@ -223,6 +223,9 @@ class PluginController extends BaseController $this->plugins->setOption($plugin, $field->key, $this->castFieldValue($field, $fieldValue), $context); } // clear cache after setting options $plugin->clearCache(); return redirect()->back() ->with('message', lang('Plugins.messages.saveSettingsSuccess', [ 'pluginTitle' => $plugin->getTitle(), Loading modules/Plugins/Core/BasePlugin.php +9 −0 Original line number Diff line number Diff line Loading @@ -121,6 +121,15 @@ abstract class BasePlugin implements PluginInterface return get_plugin_setting($this->key, $key, ['episode', $episodeId]); } final public function clearCache(): void { foreach ($this->getHooks() as $hook) { foreach (Plugins::CACHE_MAP[$hook] ?? [] as $cacheGlob) { cache()->deleteMatching($cacheGlob); } } } /** * @return bool true on success, false on failure */ Loading modules/Plugins/Core/Plugins.php +8 −0 Original line number Diff line number Diff line Loading @@ -25,6 +25,14 @@ class Plugins */ public const HOOKS = ['rssBeforeChannel', 'rssAfterChannel', 'rssBeforeItem', 'rssAfterItem', 'siteHead']; public const CACHE_MAP = [ 'rssBeforeChannel' => ['podcast*feed*'], 'rssAfterChannel' => ['podcast*feed*'], 'rssBeforeItem' => ['podcast*feed*'], 'rssAfterItem' => ['podcast*feed*'], 'siteHead' => ['page*'], ]; public const FIELDS_VALIDATIONS = [ 'checkbox' => ['permit_empty'], 'datetime' => ['valid_date[Y-m-d H:i]'], Loading Loading
modules/Plugins/Config/Routes.php +3 −4 Original line number Diff line number Diff line Loading @@ -27,7 +27,7 @@ $routes->group( 'as' => 'plugins-view', 'filter' => 'permission:plugins.manage', ]); $routes->get('settings', 'PluginController::settings/$1/$2', [ $routes->get('settings', 'PluginController::settingsView/$1/$2', [ 'as' => 'plugins-settings-general', 'filter' => 'permission:plugins.manage', ]); Loading @@ -35,7 +35,7 @@ $routes->group( 'as' => 'plugins-settings-general-action', 'filter' => 'permission:plugins.manage', ]); $routes->get('(:num)', 'PluginController::settings/$1/$2/$3', [ $routes->get('(:num)', 'PluginController::settingsView/$1/$2/$3', [ 'as' => 'plugins-settings-podcast', 'filter' => 'permission:podcast$3.edit', ]); Loading @@ -43,7 +43,7 @@ $routes->group( 'as' => 'plugins-settings-podcast-action', 'filter' => 'permission:podcast$3.edit', ]); $routes->get('(:num)/(:num)', 'PluginController::settings/$1/$2/$3/$4', [ $routes->get('(:num)/(:num)', 'PluginController::settingsView/$1/$2/$3/$4', [ 'as' => 'plugins-settings-episode', 'filter' => 'permission:podcast$3.episodes.edit', ]); Loading @@ -59,7 +59,6 @@ $routes->group( 'as' => 'plugins-deactivate', 'filter' => 'permission:plugins.manage', ]); // TODO: change to delete $routes->get('uninstall', 'PluginController::uninstall/$1/$2', [ 'as' => 'plugins-uninstall', 'filter' => 'permission:plugins.manage', Loading
modules/Plugins/Controllers/PluginController.php +4 −1 Original line number Diff line number Diff line Loading @@ -80,7 +80,7 @@ class PluginController extends BaseController ]); } public function settings( public function settingsView( string $vendor, string $package, string $podcastId = null, Loading Loading @@ -223,6 +223,9 @@ class PluginController extends BaseController $this->plugins->setOption($plugin, $field->key, $this->castFieldValue($field, $fieldValue), $context); } // clear cache after setting options $plugin->clearCache(); return redirect()->back() ->with('message', lang('Plugins.messages.saveSettingsSuccess', [ 'pluginTitle' => $plugin->getTitle(), Loading
modules/Plugins/Core/BasePlugin.php +9 −0 Original line number Diff line number Diff line Loading @@ -121,6 +121,15 @@ abstract class BasePlugin implements PluginInterface return get_plugin_setting($this->key, $key, ['episode', $episodeId]); } final public function clearCache(): void { foreach ($this->getHooks() as $hook) { foreach (Plugins::CACHE_MAP[$hook] ?? [] as $cacheGlob) { cache()->deleteMatching($cacheGlob); } } } /** * @return bool true on success, false on failure */ Loading
modules/Plugins/Core/Plugins.php +8 −0 Original line number Diff line number Diff line Loading @@ -25,6 +25,14 @@ class Plugins */ public const HOOKS = ['rssBeforeChannel', 'rssAfterChannel', 'rssBeforeItem', 'rssAfterItem', 'siteHead']; public const CACHE_MAP = [ 'rssBeforeChannel' => ['podcast*feed*'], 'rssAfterChannel' => ['podcast*feed*'], 'rssBeforeItem' => ['podcast*feed*'], 'rssAfterItem' => ['podcast*feed*'], 'siteHead' => ['page*'], ]; public const FIELDS_VALIDATIONS = [ 'checkbox' => ['permit_empty'], 'datetime' => ['valid_date[Y-m-d H:i]'], Loading