@@ -48,13 +48,15 @@ class Dependency
48
48
* @param Filesystem $filesystem
49
49
* @param PackageFactory $packageFactory
50
50
* @param ComponentRegistrarInterface $componentRegistrar
51
+ * @param Filesystem\Directory\ReadInterfaceFactory $directoryReadFactory
52
+ * @throws \RuntimeException
51
53
*/
52
54
public function __construct (
53
55
ComposerInformation $ composerInformation ,
54
56
Filesystem $ filesystem ,
55
57
PackageFactory $ packageFactory ,
56
58
ComponentRegistrarInterface $ componentRegistrar ,
57
- \ Magento \ Framework \ Filesystem \Directory \ReadInterfaceFactory $ directoryReadFactory = null
59
+ Filesystem \Directory \ReadInterfaceFactory $ directoryReadFactory = null
58
60
) {
59
61
$ this ->composerInformation = $ composerInformation ;
60
62
$ this ->packageFactory = $ packageFactory ;
@@ -69,6 +71,7 @@ public function __construct(
69
71
* Retrieve list of sample data packages from suggests
70
72
*
71
73
* @return array
74
+ * @throws \Magento\Framework\Exception\FileSystemException
72
75
*/
73
76
public function getSampleDataPackages ()
74
77
{
@@ -87,20 +90,13 @@ public function getSampleDataPackages()
87
90
* Retrieve suggested sample data packages from modules composer.json
88
91
*
89
92
* @return array
93
+ * @throws \Magento\Framework\Exception\FileSystemException
90
94
*/
91
95
protected function getSuggestsFromModules ()
92
96
{
93
97
$ suggests = [];
94
98
foreach ($ this ->componentRegistrar ->getPaths (ComponentRegistrar::MODULE ) as $ moduleDir ) {
95
- /** @var Filesystem\Directory\ReadInterface $directory */
96
- $ directory = $ this ->directoryReadFactory ->create (['path ' => $ moduleDir ]);
97
- echo "path= $ moduleDir \n" ;
98
- if (!$ directory ->isExist ('composer.json ' ) || !$ directory ->isReadable ('composer.json ' )) {
99
- continue ;
100
- }
101
-
102
- /** @var Package $package */
103
- $ package = $ this ->getModuleComposerPackage ($ directory );
99
+ $ package = $ this ->getModuleComposerPackage ($ moduleDir );
104
100
$ suggest = json_decode (json_encode ($ package ->get ('suggest ' )), true );
105
101
if (!empty ($ suggest )) {
106
102
$ suggests += $ suggest ;
@@ -112,12 +108,26 @@ protected function getSuggestsFromModules()
112
108
/**
113
109
* Load package
114
110
*
115
- * @param Filesystem\Directory\ReadInterface $directory
111
+ * @param string $moduleDir
116
112
* @return Package
117
113
* @throws \Magento\Framework\Exception\FileSystemException
118
114
*/
119
- protected function getModuleComposerPackage (Filesystem \ Directory \ ReadInterface $ directory )
115
+ private function getModuleComposerPackage ($ moduleDir ): Package
120
116
{
121
- return $ this ->packageFactory ->create (['json ' => json_decode ($ directory ->readFile ('composer.json ' ))]);
117
+ /*
118
+ * Also look in parent directory of registered module directory to allow modules to follow the pds/skeleton
119
+ * standard and have their source code in a "src" subdirectory of the repository
120
+ *
121
+ * see: https://github.com/php-pds/skeleton
122
+ */
123
+ foreach ([$ moduleDir , $ moduleDir . DIRECTORY_SEPARATOR . '.. ' ] as $ dir ) {
124
+ /** @var Filesystem\Directory\ReadInterface $directory */
125
+ $ directory = $ this ->directoryReadFactory ->create (['path ' => $ dir ]);
126
+ if ($ directory ->isExist ('composer.json ' ) && $ directory ->isReadable ('composer.json ' )) {
127
+ /** @var Package $package */
128
+ return $ this ->packageFactory ->create (['json ' => json_decode ($ directory ->readFile ('composer.json ' ))]);
129
+ }
130
+ }
131
+ return $ this ->packageFactory ->create (['json ' => new \stdClass ]);
122
132
}
123
133
}
0 commit comments