public static function deactivate_plugin($file, $force = false)
{
$ok = true;
$name = '';
$ok = Plugins::filter('deactivate_plugin', $ok, $file);
// Allow plugins to reject deactivation
if ($ok || $force == true) {
// normalize directory separator
$file = str_replace('\\', '/', $file);
// strip base path from stored path
$short_file = MultiByte::substr($file, MultiByte::strlen(HABARI_PATH));
$activated = Options::get('active_plugins');
$index = array_search($short_file, $activated);
if (is_array($activated) && false !== $index) {
if ($force != true) {
// Get plugin name for logging
$name = self::$plugins[Plugins::id_from_file($file)]->info->name;
if (method_exists(self::$plugins[Plugins::id_from_file($file)], 'action_plugin_deactivation')) {
self::$plugins[Plugins::id_from_file($file)]->action_plugin_deactivation($file);
// For the plugin to uninstall itself
}
}
unset($activated[$index]);
Options::set('active_plugins', $activated);
if ($force != true) {
Plugins::act('plugin_deactivated', $file);
// For other plugins to react to a plugin uninstallation
EventLog::log(_t('Deactivated Plugin: %s', array($name)), 'notice', 'plugin', 'habari');
}
}
}
if ($force == true) {
// always return true for forced deactivations
return true;
} else {
return $ok;
}
}