private function _cascade($to_deactivate) { $to_deactivate_deps = array(); foreach ($to_deactivate as $plugin_id) { $to_deactivate_deps = array_merge($to_deactivate_deps, self::get_provided($plugin_id)); } $found = array(); foreach (self::$active_plugins as $dep) { $matching_deps = array_intersect($to_deactivate_deps, self::get_dependencies($dep)); if (!empty($matching_deps)) { $found[] = $dep; } } $found = array_diff($found, self::$deactivate_cascade); // prevent endless loop if (empty($found)) { return; } self::$deactivate_cascade = array_merge(self::$deactivate_cascade, $found); self::_cascade($found); deactivate_plugins($found); }