diff --git a/src/Service/Report/DefaultReport/Extractor/ModulePage/DependencyModuleExtractor.php b/src/Service/Report/DefaultReport/Extractor/ModulePage/DependencyModuleExtractor.php index aef1677..f649ba6 100644 --- a/src/Service/Report/DefaultReport/Extractor/ModulePage/DependencyModuleExtractor.php +++ b/src/Service/Report/DefaultReport/Extractor/ModulePage/DependencyModuleExtractor.php @@ -14,40 +14,84 @@ class DependencyModuleExtractor use UidGenerator; /** - * @param Module $currentModule + * @param Module $module * @param Module $linkedModule * @param Module[] $processedModules * @param bool $linkedModuleIsDependent * @return array */ - public function extract(Module $currentModule, Module $linkedModule, array $processedModules, bool $linkedModuleIsDependent = false): array + public function extract(Module $module, Module $linkedModule, array $processedModules, bool $linkedModuleIsDependent = false): array { $extracted = [ - 'name' => $this->generateUid($currentModule->name()), + 'name' => $this->generateUid($module->name()), + 'linked_module_name' => $this->generateUid($linkedModule->name()), 'units_of_code' => [], + 'reverted_units_of_code' => [], ]; - $unitsOfCodes = $linkedModuleIsDependent - ? $linkedModule->getDependentUnitsOfCode($currentModule) - : $currentModule->getDependentUnitsOfCode($linkedModule); + if ($linkedModuleIsDependent) { + foreach ($linkedModule->getDependencyUnitsOfCode($module) as $unitOfCode) { + $isAllowed = true; + $dependencies = []; + foreach ($unitOfCode->inputDependencies() as $dependency) { + if ($linkedModuleIsDependent && $dependency->module() !== $linkedModule + || !$linkedModuleIsDependent && $dependency->module() !== $module + ) { + continue; + } + + $dependencyIsAllowed = $unitOfCode->isAccessibleFromOutside() + && $dependency->module()->isDependencyAllowed($unitOfCode->module()); + if (!$dependencyIsAllowed) { + $isAllowed = false; + } + + $dependencies[] = [ + 'name' => $dependency->name(), + 'is_allowed' => $dependencyIsAllowed, + ]; + } + + $extractedRevertedUnitOfCode = [ + 'name' => $unitOfCode->name(), + 'dependencies' => $dependencies, + 'is_allowed' => $isAllowed, + ]; + + foreach ($processedModules as $processedModule) { + if ($unitOfCode->belongToModule($processedModule)) { + $extractedRevertedUnitOfCode['uid'] = $this->generateUid($unitOfCode->name()); + break; + } + } + + $extracted['reverted_units_of_code'][] = $extractedRevertedUnitOfCode; + } + + $unitsOfCodes = $linkedModule->getDependentUnitsOfCode($module); + } else { + $unitsOfCodes = $module->getDependentUnitsOfCode($linkedModule); + } foreach ($unitsOfCodes as $unitOfCode) { $isAllowed = true; - $outputDependencies = []; - foreach ($unitOfCode->outputDependencies() as $outputDependency) { - if (!$outputDependencyIsAllowed = $outputDependency->isAccessibleFromOutside()) { + $dependencies = []; + foreach ($unitOfCode->outputDependencies() as $dependency) { + $outputDependencyIsAllowed = $dependency->isAccessibleFromOutside() + && $unitOfCode->module()->isDependencyAllowed($dependency->module()); + if (!$outputDependencyIsAllowed) { $isAllowed = false; } - $outputDependencies[] = [ - 'name' => $outputDependency->name(), + $dependencies[] = [ + 'name' => $dependency->name(), 'is_allowed' => $outputDependencyIsAllowed, ]; } $extractedUnitOfCode = [ 'name' => $unitOfCode->name(), - 'output_dependencies' => $outputDependencies, + 'dependencies' => $dependencies, 'is_allowed' => $isAllowed, ]; diff --git a/src/Service/Report/DefaultReport/Template/module-info.twig b/src/Service/Report/DefaultReport/Template/module-info.twig index 01d3da7..4b2de6b 100644 --- a/src/Service/Report/DefaultReport/Template/module-info.twig +++ b/src/Service/Report/DefaultReport/Template/module-info.twig @@ -157,8 +157,8 @@
-
+ {{ unit_of_code.name }}
+ {% if unit_of_code.uid is defined %}
+ подробнее
+ {% endif %}
+
|