Commit 00bd4c02 authored by Yassine Doghri's avatar Yassine Doghri
Browse files

fix(plugins): delete relevant cache when submitting settings

parent 85704bfb
Loading
Loading
Loading
Loading
Loading
+3 −4
Original line number Diff line number Diff line
@@ -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',
                ]);
@@ -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',
                ]);
@@ -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',
                ]);
@@ -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',
+4 −1
Original line number Diff line number Diff line
@@ -80,7 +80,7 @@ class PluginController extends BaseController
        ]);
    }

    public function settings(
    public function settingsView(
        string $vendor,
        string $package,
        string $podcastId = null,
@@ -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(),
+9 −0
Original line number Diff line number Diff line
@@ -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
     */
+8 −0
Original line number Diff line number Diff line
@@ -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]'],