2
2
3
3
namespace Codebender \LibraryBundle \Handler \ApiCommand ;
4
4
5
+ use Codebender \LibraryBundle \Entity \Version ;
5
6
use Symfony \Component \Finder \Finder ;
6
7
7
8
class FetchApiCommand extends AbstractApiCommand
@@ -11,9 +12,9 @@ public function execute($content)
11
12
$ content = $ this ->setDefault ($ content );
12
13
$ filename = $ content ['library ' ];
13
14
14
- $ last_slash = strrpos ($ content [ ' library ' ] , "/ " );
15
+ $ last_slash = strrpos ($ filename , "/ " );
15
16
if ($ last_slash !== false ) {
16
- $ filename = substr ($ content [ ' library ' ] , $ last_slash + 1 );
17
+ $ filename = substr ($ filename , $ last_slash + 1 );
17
18
}
18
19
19
20
$ apiHandler = $ this ->container ->get ('codebender_library.apiHandler ' );
@@ -37,24 +38,66 @@ public function execute($content)
37
38
if ($ content ['renderView ' ]) {
38
39
$ examples = $ this ->fetchLibraryExamples ($ exampleFinder , $ builtinLibrariesPath . "/libraries/ " . $ filename );
39
40
$ meta = [];
41
+ $ versions = [];
40
42
}
41
43
} else {
42
44
if (!$ apiHandler ->isExternalLibrary ($ filename , $ content ['disabled ' ])) {
43
45
return ["success " => false , "message " => "No Library named " . $ filename . " found. " ];
44
46
}
45
47
46
- $ response = $ this ->fetchLibraryFiles ($ finder , $ externalLibrariesPath . "/ " . $ filename . "/ " . $ content ['version ' ]);
47
- if (empty ($ response )) {
48
- return ['success ' => false , 'message ' => 'No files for Library named ` ' . $ filename . '` with version ` ' . $ content ['version ' ] . '` found. ' ];
48
+ // check if requested (if any) version is valid
49
+ if ($ content ['version ' ] !== null && !$ apiHandler ->libraryVersionExists ($ filename , $ content ['version ' ])) {
50
+ return [
51
+ 'success ' => false ,
52
+ 'message ' => 'No files for Library named ` ' . $ filename . '` with version ` ' . $ content ['version ' ] . '` found. '
53
+ ];
49
54
}
50
55
51
- if ($ content ['renderView ' ]) {
52
- $ examples = $ this ->fetchLibraryExamples ($ exampleFinder , $ externalLibrariesPath . "/ " . $ filename . "/ " . $ content ['version ' ]);
56
+ $ versionObjects = $ apiHandler ->getAllVersionsFromDefaultHeader ($ filename );
57
+
58
+ // use the requested version (if any) for fetching data
59
+ // else fetch data for all versions
60
+ $ versions = $ versionObjects ->toArray ();
61
+ if ($ content ['version ' ] !== null ) {
62
+ $ versionsCollection = $ versionObjects ->filter (function ($ version ) use ($ content ) {
63
+ return $ version ->getVersion () === $ content ['version ' ];
64
+ });
65
+ $ versions = $ versionsCollection ->toArray ();
66
+ }
67
+
68
+ // fetch library files for each version
69
+ $ response = [];
70
+ $ examples = [];
71
+ foreach ($ versions as $ version ) {
72
+ /* @var Version $version */
73
+ $ libraryPath = $ externalLibrariesPath . "/ " . $ filename . "/ " . $ version ->getFolderName ();
74
+
75
+ // fetch library files for this version
76
+ $ fetchResponse = $ this ->fetchLibraryFiles ($ finder ->create (), $ libraryPath );
77
+ if (!empty ($ fetchResponse )) {
78
+ $ response [$ version ->getVersion ()] = $ fetchResponse ;
79
+ }
53
80
54
- $ externalLibrary = $ this ->entityManager ->getRepository ('CodebenderLibraryBundle:ExternalLibrary ' )
55
- ->findOneBy (array ('machineName ' => $ filename ));
56
- $ filename = $ externalLibrary ->getMachineName ();
81
+ if ($ content ['renderView ' ]) {
82
+ // fetch example files for this version if it's rendering view
83
+ $ exampleResponse = $ this ->fetchLibraryExamples ($ exampleFinder ->create (), $ libraryPath );
84
+ if (!empty ($ exampleResponse )) {
85
+ $ examples [$ version ->getVersion ()] = $ exampleResponse ;
86
+ }
87
+ }
88
+ }
89
+
90
+ if ($ content ['renderView ' ]) {
91
+ $ externalLibrary = $ this ->entityManager ->getRepository ('CodebenderLibraryBundle:Library ' )
92
+ ->findOneBy (array ('default_header ' => $ filename ));
93
+ $ filename = $ externalLibrary ->getDefaultHeader ();
57
94
$ meta = $ externalLibrary ->getLiraryMeta ();
95
+ $ versions = array_map (
96
+ function ($ version ) {
97
+ return $ version ->getVersion ();
98
+ },
99
+ $ versions
100
+ );
58
101
}
59
102
}
60
103
@@ -65,6 +108,7 @@ public function execute($content)
65
108
return [
66
109
'success ' => true ,
67
110
'library ' => $ filename ,
111
+ 'versions ' => $ versions ,
68
112
'files ' => $ response ,
69
113
'examples ' => $ examples ,
70
114
'meta ' => $ meta
@@ -84,9 +128,9 @@ private function fetchLibraryFiles($finder, $directory, $getContent = true)
84
128
if (!is_dir ($ directory )) {
85
129
return array ();
86
130
}
87
-
88
131
$ finder ->in ($ directory )->exclude ('examples ' )->exclude ('Examples ' );
89
132
$ finder ->name ('*.* ' );
133
+ $ finder ->files (); // fetch only files
90
134
91
135
$ finfo = finfo_open (FILEINFO_MIME_TYPE );
92
136
0 commit comments