mirror of
https://code.castopod.org/adaures/castopod
synced 2025-04-19 13:01:19 +00:00
fix(plugins): delete relevant cache when submitting settings
This commit is contained in:
parent
85704bfbe0
commit
00bd4c02ee
@ -27,7 +27,7 @@ $routes->group(
|
|||||||
'as' => 'plugins-view',
|
'as' => 'plugins-view',
|
||||||
'filter' => 'permission:plugins.manage',
|
'filter' => 'permission:plugins.manage',
|
||||||
]);
|
]);
|
||||||
$routes->get('settings', 'PluginController::settings/$1/$2', [
|
$routes->get('settings', 'PluginController::settingsView/$1/$2', [
|
||||||
'as' => 'plugins-settings-general',
|
'as' => 'plugins-settings-general',
|
||||||
'filter' => 'permission:plugins.manage',
|
'filter' => 'permission:plugins.manage',
|
||||||
]);
|
]);
|
||||||
@ -35,7 +35,7 @@ $routes->group(
|
|||||||
'as' => 'plugins-settings-general-action',
|
'as' => 'plugins-settings-general-action',
|
||||||
'filter' => 'permission:plugins.manage',
|
'filter' => 'permission:plugins.manage',
|
||||||
]);
|
]);
|
||||||
$routes->get('(:num)', 'PluginController::settings/$1/$2/$3', [
|
$routes->get('(:num)', 'PluginController::settingsView/$1/$2/$3', [
|
||||||
'as' => 'plugins-settings-podcast',
|
'as' => 'plugins-settings-podcast',
|
||||||
'filter' => 'permission:podcast$3.edit',
|
'filter' => 'permission:podcast$3.edit',
|
||||||
]);
|
]);
|
||||||
@ -43,7 +43,7 @@ $routes->group(
|
|||||||
'as' => 'plugins-settings-podcast-action',
|
'as' => 'plugins-settings-podcast-action',
|
||||||
'filter' => 'permission:podcast$3.edit',
|
'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',
|
'as' => 'plugins-settings-episode',
|
||||||
'filter' => 'permission:podcast$3.episodes.edit',
|
'filter' => 'permission:podcast$3.episodes.edit',
|
||||||
]);
|
]);
|
||||||
@ -59,7 +59,6 @@ $routes->group(
|
|||||||
'as' => 'plugins-deactivate',
|
'as' => 'plugins-deactivate',
|
||||||
'filter' => 'permission:plugins.manage',
|
'filter' => 'permission:plugins.manage',
|
||||||
]);
|
]);
|
||||||
// TODO: change to delete
|
|
||||||
$routes->get('uninstall', 'PluginController::uninstall/$1/$2', [
|
$routes->get('uninstall', 'PluginController::uninstall/$1/$2', [
|
||||||
'as' => 'plugins-uninstall',
|
'as' => 'plugins-uninstall',
|
||||||
'filter' => 'permission:plugins.manage',
|
'filter' => 'permission:plugins.manage',
|
||||||
|
@ -80,7 +80,7 @@ class PluginController extends BaseController
|
|||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function settings(
|
public function settingsView(
|
||||||
string $vendor,
|
string $vendor,
|
||||||
string $package,
|
string $package,
|
||||||
string $podcastId = null,
|
string $podcastId = null,
|
||||||
@ -223,6 +223,9 @@ class PluginController extends BaseController
|
|||||||
$this->plugins->setOption($plugin, $field->key, $this->castFieldValue($field, $fieldValue), $context);
|
$this->plugins->setOption($plugin, $field->key, $this->castFieldValue($field, $fieldValue), $context);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// clear cache after setting options
|
||||||
|
$plugin->clearCache();
|
||||||
|
|
||||||
return redirect()->back()
|
return redirect()->back()
|
||||||
->with('message', lang('Plugins.messages.saveSettingsSuccess', [
|
->with('message', lang('Plugins.messages.saveSettingsSuccess', [
|
||||||
'pluginTitle' => $plugin->getTitle(),
|
'pluginTitle' => $plugin->getTitle(),
|
||||||
|
@ -121,6 +121,15 @@ abstract class BasePlugin implements PluginInterface
|
|||||||
return get_plugin_setting($this->key, $key, ['episode', $episodeId]);
|
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
|
* @return bool true on success, false on failure
|
||||||
*/
|
*/
|
||||||
|
@ -25,6 +25,14 @@ class Plugins
|
|||||||
*/
|
*/
|
||||||
public const HOOKS = ['rssBeforeChannel', 'rssAfterChannel', 'rssBeforeItem', 'rssAfterItem', 'siteHead'];
|
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 = [
|
public const FIELDS_VALIDATIONS = [
|
||||||
'checkbox' => ['permit_empty'],
|
'checkbox' => ['permit_empty'],
|
||||||
'datetime' => ['valid_date[Y-m-d H:i]'],
|
'datetime' => ['valid_date[Y-m-d H:i]'],
|
||||||
|
Loading…
x
Reference in New Issue
Block a user