diff --git a/docs/NEWS b/docs/NEWS index 9e200221..b8b4475c 100644 --- a/docs/NEWS +++ b/docs/NEWS @@ -4,6 +4,9 @@ Version 2.0-beta3 () ------------------------------------------------------------------------ + * Prevent "new" plugin api to install double instances of plugins + that are not stackable (issue #45) + * Back button in plugin-config * Adapted serendipity_editor.js to provide more global (though diff --git a/include/admin/plugins.inc.php b/include/admin/plugins.inc.php index 75dccee2..ae9066ae 100644 --- a/include/admin/plugins.inc.php +++ b/include/admin/plugins.inc.php @@ -345,7 +345,19 @@ if (isset($_GET['serendipity']['plugin_to_conf'])) { 'install' => true); serendipity_plugin_api::hook_event('backend_plugins_fetchplugin', $fetchplugin_data); - if ($fetchplugin_data['install']) { + // we now have to check that the plugin is not already installed or stackable to prevent invalid double instances + $existingPlugin =& serendipity_plugin_api::load_plugin($serendipity['GET']['install_plugin']); + $new_plugin = true; + if (is_object($existingPlugin)) { + $bag = new serendipity_property_bag(); + $existingPlugin->introspect($bag); + if ($bag->get('stackable') != true) { + $new_plugin = false; + } + } + $data['new_plugin_failed'] = ! $new_plugin; + + if ($fetchplugin_data['install'] && $new_plugin) { $serendipity['debug']['pluginload'] = array(); $inst = serendipity_plugin_api::create_plugin_instance($serendipity['GET']['install_plugin'], null, (serendipity_plugin_api::is_event_plugin($serendipity['GET']['install_plugin']) ? 'event': 'right'), $authorid, serendipity_db_escape_string($serendipity['GET']['pluginPath'])); diff --git a/templates/2k11/admin/plugins.inc.tpl b/templates/2k11/admin/plugins.inc.tpl index 5f56554e..4649efa4 100644 --- a/templates/2k11/admin/plugins.inc.tpl +++ b/templates/2k11/admin/plugins.inc.tpl @@ -146,6 +146,9 @@ {if $save} {$CONST.DONE}:{$CONST.SETTINGS_SAVED_AT|sprintf:"$timestamp"} {/if} + {if $new_plugin_failed} + {$CONST.ERROR}: Plugin not stackable and already installed {* i18n *} + {/if}