11
11
12
12
use Framework \CLI \CLI ;
13
13
use Framework \CLI \Command ;
14
+ use RecursiveDirectoryIterator ;
15
+ use RecursiveIteratorIterator ;
14
16
15
17
/**
16
18
* Class NewCommand.
@@ -32,15 +34,33 @@ protected function create(string $package, string $name) : void
32
34
CLI ::error ('Package ' . $ package . ' not found ' );
33
35
return ;
34
36
}
35
- $ source = \strtr ($ source , [' ' => '\ ' ]);
36
- $ dir = \strtr ($ directory , [' ' => '\ ' ]);
37
- \shell_exec ("cp -r {$ source }/* {$ dir }" );
37
+ $ this ->copyDir ($ source , $ directory );
38
38
CLI ::write (
39
39
$ name . ' structure created at " ' . $ directory . '" ' ,
40
40
CLI ::FG_GREEN
41
41
);
42
42
}
43
43
44
+ protected function copyDir (string $ source , string $ directory ) : void
45
+ {
46
+ $ iterator = new RecursiveIteratorIterator (
47
+ new RecursiveDirectoryIterator ($ source , RecursiveDirectoryIterator::SKIP_DOTS ),
48
+ RecursiveIteratorIterator::SELF_FIRST
49
+ );
50
+ foreach ($ iterator as $ item ) {
51
+ if ($ item ->isDir ()) {
52
+ $ dir = $ directory . \DIRECTORY_SEPARATOR . $ iterator ->getSubPathname ();
53
+ if ( ! \mkdir ($ dir , 0755 , true ) && ! \is_dir ($ dir )) {
54
+ CLI ::error (
55
+ \sprintf ('Directory "%s" could not be created ' , $ dir )
56
+ );
57
+ }
58
+ continue ;
59
+ }
60
+ \copy ((string ) $ item , $ directory . \DIRECTORY_SEPARATOR . $ iterator ->getSubPathname ());
61
+ }
62
+ }
63
+
44
64
protected function getDirectory () : string
45
65
{
46
66
$ directory = $ this ->console ->getArgument (0 );
0 commit comments