Magento 2 Documentation  2.3
Documentation for Magento 2 CMS v2.3 (December 2018)
DeclarativeSchemaRule.php
Go to the documentation of this file.
1 <?php
9 
16 {
22  protected $_moduleTableMap;
23 
29  public function __construct(array $tables)
30  {
31  $this->_moduleTableMap = $tables;
32  }
33 
45  public function getDependencyInfo($currentModule, $fileType, $file, &$contents)
46  {
47  if ('db_schema' != $fileType || !preg_match('#.*/db_schema\.xml$#', $file)) {
48  return [];
49  }
50 
51  $dependenciesInfo = [];
52  $unKnowTables = [];
53 
54  $dom = new \DOMDocument();
55  $dom->loadXML($contents);
56  $tables = $dom->getElementsByTagName('table');
57  $constraints = $dom->getElementsByTagName('constraint');
58 
59  $tableNames = [];
60  $foreignKeyTables = [];
61  $foreignKeyReferenceTables = [];
62 
64  foreach ($tables as $table) {
65  $tableNames[] = $table->getAttribute('name');
66  }
67 
69  foreach ($constraints as $constraint) {
70  $xsiType = $constraint->getAttribute('xsi:type');
71  if (strtolower($xsiType) == 'foreign' && $constraint->getAttribute('disabled') !== '1') {
72  $foreignKeyTables[] = $constraint->getAttribute('table');
73  $foreignKeyReferenceTables[] = $constraint->getAttribute('referenceTable');
74  }
75  }
76 
77  $tableNames = array_unique(array_merge($tableNames, $foreignKeyReferenceTables, $foreignKeyTables));
78 
80  foreach ($tableNames as $table) {
81  if (!isset($this->_moduleTableMap[$table])) {
82  $unKnowTables[$file][$table] = $table;
83  continue;
84  }
85  if (strtolower($currentModule) !== strtolower($this->_moduleTableMap[$table])) {
86  $dependenciesInfo[] = [
87  'module' => $this->_moduleTableMap[$table],
88  'type' => RuleInterface::TYPE_HARD,
89  'source' => $table,
90  ];
91  }
92  }
93 
94  foreach ($unKnowTables as $tables) {
95  foreach ($tables as $table) {
96  $dependenciesInfo[] = ['module' => 'Unknown', 'source' => $table];
97  }
98  }
99  return $dependenciesInfo;
100  }
101 }
$contents
Definition: website.php:14
$table
Definition: trigger.php:14
getDependencyInfo($currentModule, $fileType, $file, &$contents)