Magento 2 Documentation  2.3
Documentation for Magento 2 CMS v2.3 (December 2018)
DependencyChecker.php
Go to the documentation of this file.
1 <?php
7 
9 
14 {
20  private $enabledModuleList;
21 
27  private $fullModuleList;
28 
34  private $graph;
35 
39  protected $packageInfo;
40 
48  public function __construct(ModuleList $list, ModuleList\Loader $loader, PackageInfoFactory $packageInfoFactory)
49  {
50  $this->enabledModuleList = $list->getNames();
51  $this->fullModuleList = $loader->load();
52  $this->packageInfo = $packageInfoFactory->create();
53  }
54 
62  public function checkDependenciesWhenDisableModules($toBeDisabledModules, $currentlyEnabledModules = null)
63  {
64  $masterList = isset($currentlyEnabledModules) ? $currentlyEnabledModules : $this->enabledModuleList;
65  // assume disable succeeds: currently enabled modules - to-be-disabled modules
66  $enabledModules = array_diff($masterList, $toBeDisabledModules);
67  return $this->checkDependencyGraph(false, $toBeDisabledModules, $enabledModules);
68  }
69 
77  public function checkDependenciesWhenEnableModules($toBeEnabledModules, $currentlyEnabledModules = null)
78  {
79  $masterList = isset($currentlyEnabledModules) ? $currentlyEnabledModules : $this->enabledModuleList;
80  // assume enable succeeds: union of currently enabled modules and to-be-enabled modules
81  $enabledModules = array_unique(array_merge($masterList, $toBeEnabledModules));
82  return $this->checkDependencyGraph(true, $toBeEnabledModules, $enabledModules);
83  }
84 
93  private function checkDependencyGraph($isEnable, $moduleNames, $enabledModules)
94  {
95  $this->graph = $this->createGraph();
96  $dependenciesMissingAll = [];
97  $graphMode = $isEnable ? Graph::DIRECTIONAL : Graph::INVERSE;
98  foreach ($moduleNames as $moduleName) {
99  $dependenciesMissing = [];
100  $paths = $this->graph->findPathsToReachableNodes($moduleName, $graphMode);
101  $modules = array_merge(
102  array_keys($this->fullModuleList),
103  $this->packageInfo->getNonExistingDependencies()
104  );
105  foreach ($modules as $module) {
106  if (isset($paths[$module])) {
107  if ($isEnable && !in_array($module, $enabledModules)) {
108  $dependenciesMissing[$module] = $paths[$module];
109  } elseif (!$isEnable && in_array($module, $enabledModules)) {
110  $dependenciesMissing[$module] = array_reverse($paths[$module]);
111  }
112  }
113  }
114  $dependenciesMissingAll[$moduleName] = $dependenciesMissing;
115  }
116  return $dependenciesMissingAll;
117  }
118 
124  private function createGraph()
125  {
126  $nodes = [];
127  $dependencies = [];
128 
129  // build the graph data
130  foreach (array_keys($this->fullModuleList) as $moduleName) {
131  $nodes[] = $moduleName;
132  foreach ($this->packageInfo->getRequire($moduleName) as $dependModuleName) {
133  if ($dependModuleName) {
134  $dependencies[] = [$moduleName, $dependModuleName];
135  }
136  }
137  }
138  $nodes = array_unique(
139  array_merge($nodes, $this->packageInfo->getNonExistingDependencies())
140  );
141 
142  return new Graph($nodes, $dependencies);
143  }
144 }
elseif(isset( $params[ 'redirect_parent']))
Definition: iframe.phtml:17
$loader
Definition: autoload.php:8
checkDependenciesWhenDisableModules($toBeDisabledModules, $currentlyEnabledModules=null)
__construct(ModuleList $list, ModuleList\Loader $loader, PackageInfoFactory $packageInfoFactory)
$paths
Definition: _bootstrap.php:83
checkDependenciesWhenEnableModules($toBeEnabledModules, $currentlyEnabledModules=null)