Magento 2 Documentation  2.3
Documentation for Magento 2 CMS v2.3 (December 2018)
ModuleDependency.php
Go to the documentation of this file.
1 <?php
8 
13 
18 {
24  private $subject;
25 
31  private $moduleList;
32 
38  private $orderedModules;
39 
46  public function __construct(
47  CollectorInterface $subject,
48  ModuleListInterface $listInterface
49  ) {
50  $this->subject = $subject;
51  $this->moduleList = $listInterface;
52  }
53 
61  public function getFiles(ThemeInterface $theme, $filePath)
62  {
63  $result = $this->subject->getFiles($theme, $filePath);
64  usort($result, [$this, 'compareFiles']);
65  return $result;
66  }
67 
75  public function compareFiles(File $fileOne, File $fileTwo)
76  {
77  if ($fileOne->getModule() == $fileTwo->getModule()) {
78  return strcmp($fileOne->getName(), $fileTwo->getName());
79  }
80  $moduleOnePriority = $this->getModulePriority($fileOne->getModule());
81  $moduleTwoPriority = $this->getModulePriority($fileTwo->getModule());
82  if ($moduleOnePriority == $moduleTwoPriority) {
83  return strcmp($fileOne->getModule(), $fileTwo->getModule());
84  }
85  return ($moduleOnePriority < $moduleTwoPriority ? -1 : 1);
86  }
87 
94  protected function getModulePriority($moduleName)
95  {
96  if ($this->orderedModules === null) {
97  $this->orderedModules = $this->moduleList->getNames();
98  }
99  $result = array_search($moduleName, $this->orderedModules);
100  // Assume unknown modules have the same priority, distinctive from known modules
101  if ($result === false) {
102  return -1;
103  }
104  return $result;
105  }
106 }
__construct(CollectorInterface $subject, ModuleListInterface $listInterface)