/** * * * @param $PluginName * @return bool * @throws Exception */ public function disablePlugin($PluginName) { // Get the plugin and make sure its name is the correct case. $Plugin = $this->getPluginInfo($PluginName); if ($Plugin) { $PluginName = $Plugin['Index']; } Gdn_Autoloader::smartFree(Gdn_Autoloader::CONTEXT_PLUGIN, $Plugin); $enabled = $this->isEnabled($PluginName); // 1. Check to make sure that no other enabled plugins rely on this one // Get all available plugins and compile their requirements foreach ($this->enabledPlugins() as $CheckingName => $Trash) { $CheckingInfo = $this->getPluginInfo($CheckingName); $RequiredPlugins = ArrayValue('RequiredPlugins', $CheckingInfo, false); if (is_array($RequiredPlugins) && array_key_exists($PluginName, $RequiredPlugins) === true) { throw new Exception(sprintf(T('You cannot disable the %1$s plugin because the %2$s plugin requires it in order to function.'), $PluginName, $CheckingName)); } } // 2. Perform necessary hook action $this->pluginHook($PluginName, self::ACTION_DISABLE, true); // 3. Disable it. SaveToConfig("EnabledPlugins.{$PluginName}", false); unset($this->EnabledPlugins[$PluginName]); if ($enabled) { Logger::event('addon_disabled', LogLevel::NOTICE, 'The {addonName} plugin was disabled.', array('addonName' => $PluginName)); } // Redefine the locale manager's settings $Locale->Set($CurrentLocale, $EnabledApps, $EnabledPlugins, TRUE); Gdn::locale()->refresh(); $this->EventArguments['AddonName'] = $PluginName; $this->fireEvent('AddonDisabled'); return true; }
/** * Clear the contents of the supplied cache, and remove it from disk. * * @param string|bool $CacheName name of cache library * @return void */ public static function clearCache($CacheName = false) { Gdn_Autoloader::smartFree(); if ($CacheName != 'locale') { return; } if (!array_key_exists($CacheName, self::$Caches)) { return self::prepareCache($CacheName); } $UseCache = Gdn::cache()->type() == Gdn_Cache::CACHE_TYPE_MEMORY && Gdn::cache()->activeEnabled(); if ($UseCache) { $CacheKey = sprintf(Gdn_LibraryMap::CACHE_CACHE_NAME_FORMAT, $CacheName); $Deleted = Gdn::cache()->remove($CacheKey); } else { @unlink(PATH_CACHE . DS . self::$Caches[$CacheName]['ondisk']); } self::$Caches[$CacheName]['cache'] = array(); }
/** * Disable an application. * * @param string $applicationName The name of the application to disable. * @throws \Exception Throws an exception if the application can't be disabled. */ public function disableApplication($applicationName) { // 1. Check to make sure that this application is allowed to be disabled $ApplicationInfo = (array) arrayValueI($applicationName, $this->availableApplications(), array()); $applicationName = $ApplicationInfo['Index']; if (!val('AllowDisable', $ApplicationInfo, true)) { throw new Exception(sprintf(t('You cannot disable the %s application.'), $applicationName)); } // 2. Check to make sure that no other enabled applications rely on this one foreach ($this->enabledApplications() as $CheckingName => $CheckingInfo) { $RequiredApplications = val('RequiredApplications', $CheckingInfo, false); if (is_array($RequiredApplications) && array_key_exists($applicationName, $RequiredApplications) === true) { throw new Exception(sprintf(t('You cannot disable the %1$s application because the %2$s application requires it in order to function.'), $applicationName, $CheckingName)); } } // 3. Check to make sure that no other enabled plugins rely on this one $DependendPlugins = array(); foreach (Gdn::pluginManager()->enabledPlugins() as $CheckingName => $CheckingInfo) { $RequiredApplications = val('RequiredApplications', $CheckingInfo, false); if (is_array($RequiredApplications) && array_key_exists($applicationName, $RequiredApplications) === true) { $DependendPlugins[] = $CheckingName; } } if (!empty($DependendPlugins)) { throw new Exception(sprintf(t('You cannot disable the %1$s application because the following plugins require it in order to function: %2$s'), $applicationName, implode(', ', $DependendPlugins))); } // 2. Disable it removeFromConfig("EnabledApplications.{$applicationName}"); Logger::event('addon_disabled', Logger::NOTICE, 'The {addonName} application was disabled.', array('addonName' => $applicationName)); // Clear the object caches. Gdn_Autoloader::smartFree(Gdn_Autoloader::CONTEXT_APPLICATION, $ApplicationInfo); // Redefine the locale manager's settings $Locale->Set($CurrentLocale, $EnabledApps, $EnabledPlugins, true); $Locale = Gdn::locale(); $Locale->set($Locale->current(), $this->enabledApplicationFolders(), Gdn::pluginManager()->enabledPluginFolders(), true); $this->EventArguments['AddonName'] = $applicationName; Gdn::pluginManager()->callEventHandlers($this, 'ApplicationManager', 'AddonDisabled'); }