/** * Удаляет плагины с сервера * * @param array $aPlugins Список плагинов для удаления */ public function Delete($aPlugins) { if (!is_array($aPlugins)) { $aPlugins = array($aPlugins); } $aActivePlugins = $this->GetActivePlugins(); foreach ($aPlugins as $sPluginCode) { if (!is_string($sPluginCode)) { continue; } /** * Если плагин активен, деактивируем его */ if (in_array($sPluginCode, $aActivePlugins)) { $this->Toggle($sPluginCode, 'deactivate'); } /** * Удаляем директорию с плагином */ func_rmdir($this->sPluginsDir . $sPluginCode); } }
/** * Рекурсивное удаление директории (со всем содержимым) * * @param string $sPath * @return bool */ function func_rmdir($sPath) { if (!is_dir($sPath)) { return true; } $sPath = rtrim($sPath, '/') . '/'; if ($aFiles = glob($sPath . '*', GLOB_MARK)) { foreach ($aFiles as $sFile) { if (is_dir($sFile)) { func_rmdir($sFile); } else { @unlink($sFile); } } } if (is_dir($sPath)) { @rmdir($sPath); } }
/** * Рекурсивное удаление директории (со всем содержимым) * * @param string $sPath * @return bool */ function func_rmdir($sPath) { if (!is_dir($sPath)) { return true; } $sPath = rtrim($sPath, '/'); $aFiles = array_diff(scandir($sPath), array('.', '..')); foreach ($aFiles as $sFile) { is_dir("{$sPath}/{$sFile}") ? func_rmdir("{$sPath}/{$sFile}") : @unlink("{$sPath}/{$sFile}"); } return @rmdir($sPath); }
/** * Удаляет физически плагин с сервера * * @param $sPlugin * * @return bool */ public function RemovePlugin($sPlugin) { $sPlugin = strtolower($sPlugin); $aPluginItemsActive = $this->GetPluginsActive(); /** * Если плагин активен, деактивируем его */ if (in_array($sPlugin, $aPluginItemsActive)) { if (!$this->DeactivatePlugin($sPlugin)) { return false; } } $sClassPlugin = 'Plugin' . func_camelize($sPlugin); $oPlugin = new $sClassPlugin(); /** * Сначала очищаем данные БД от плагина, а затем выполняем кастомный метод удаления плагина */ if ($oPlugin->Remove()) { /** * Делаем откат изменений БД, которые делал плагин (откат миграций) */ $this->PurgePluginUpdate($sPlugin); /** * Удаляем директорию с плагином */ func_rmdir($this->sPluginsDir . $sPlugin); return true; } return false; }
/** * Удаляет плагины с сервера * * @param array $aPlugins Список плагинов для удаления */ public function Delete($aPlugins) { if (!is_array($aPlugins)) { $aPlugins = array($aPlugins); } $aActivePlugins = $this->GetActivePlugins(); foreach ($aPlugins as $sPluginCode) { if (!is_string($sPluginCode)) { continue; } /** * Если плагин активен, деактивируем его */ if (in_array($sPluginCode, $aActivePlugins)) { $this->Toggle($sPluginCode, 'deactivate'); } /** * Выполняем кастомный метод удаление плагина */ $sPluginName = func_camelize($sPluginCode); $sFile = "{$this->sPluginsDir}{$sPluginCode}/Plugin{$sPluginName}.class.php"; if (is_file($sFile)) { require_once $sFile; $sClassName = "Plugin{$sPluginName}"; $oPlugin = new $sClassName(); if ($oPlugin->Delete()) { /** * Удаляем директорию с плагином */ func_rmdir($this->sPluginsDir . $sPluginCode); } } } }