@@ -58,7 +58,7 @@ public function __construct(
58
58
* @return ISimpleFolder
59
59
*/
60
60
61
- public function ensureDirectory (SettingsUrl $ settingsUrl ): ISimpleFolder {
61
+ public function ensureDirectory (SettingsUrl $ settingsUrl, string $ userId ): ISimpleFolder {
62
62
$ type = $ settingsUrl ->getType ();
63
63
$ category = $ settingsUrl ->getCategory ();
64
64
@@ -68,6 +68,14 @@ public function ensureDirectory(SettingsUrl $settingsUrl): ISimpleFolder {
68
68
$ baseFolder = $ this ->appData ->newFolder ($ type );
69
69
}
70
70
71
+ if ($ type === 'userconfig ' ) {
72
+ try {
73
+ $ baseFolder = $ baseFolder ->getFolder ($ userId );
74
+ } catch (NotFoundException $ e ) {
75
+ $ baseFolder = $ baseFolder ->newFolder ($ userId );
76
+ }
77
+ }
78
+
71
79
try {
72
80
$ categoryFolder = $ baseFolder ->getFolder ($ category );
73
81
} catch (NotFoundException $ e ) {
@@ -86,11 +94,11 @@ public function ensureDirectory(SettingsUrl $settingsUrl): ISimpleFolder {
86
94
* @return array ['stamp' => string, 'uri' => string]
87
95
*/
88
96
89
- public function uploadFile (SettingsUrl $ settingsUrl , string $ fileData ): array {
90
- $ categoryFolder = $ this ->ensureDirectory ($ settingsUrl );
97
+ public function uploadFile (SettingsUrl $ settingsUrl , string $ fileData, string $ userId ): array {
98
+ $ categoryFolder = $ this ->ensureDirectory ($ settingsUrl, $ userId );
91
99
$ fileName = $ settingsUrl ->getFileName ();
92
100
$ newFile = $ categoryFolder ->newFile ($ fileName , $ fileData );
93
- $ fileUri = $ this ->generateFileUri ($ settingsUrl ->getType (), $ settingsUrl ->getCategory (), $ fileName );
101
+ $ fileUri = $ this ->generateFileUri ($ settingsUrl ->getType (), $ settingsUrl ->getCategory (), $ fileName, $ userId );
94
102
95
103
return [
96
104
'stamp ' => $ newFile ->getETag (),
@@ -105,7 +113,7 @@ public function uploadFile(SettingsUrl $settingsUrl, string $fileData): array {
105
113
* @param string $category
106
114
* @return array Each item has 'stamp' and 'uri'.
107
115
*/
108
- public function getCategoryFileList (string $ type , string $ category ): array {
116
+ public function getCategoryFileList (string $ type , string $ category, string $ userId ): array {
109
117
try {
110
118
$ categoryFolder = $ this ->appData ->getFolder ($ type . '/ ' . $ category );
111
119
} catch (NotFoundException $ e ) {
@@ -114,10 +122,10 @@ public function getCategoryFileList(string $type, string $category): array {
114
122
115
123
$ files = $ categoryFolder ->getDirectoryListing ();
116
124
117
- return array_map (function (ISimpleFile $ file ) use ($ type , $ category ) {
125
+ return array_map (function (ISimpleFile $ file ) use ($ type , $ category, $ userId ) {
118
126
return [
119
127
'stamp ' => $ file ->getETag (),
120
- 'uri ' => $ this ->generateFileUri ($ type , $ category , $ file ->getName ()),
128
+ 'uri ' => $ this ->generateFileUri ($ type , $ category , $ file ->getName (), $ userId ),
121
129
];
122
130
}, $ files );
123
131
}
@@ -155,17 +163,21 @@ public function generateIframeToken(string $type, string $userId): array {
155
163
* @param string $type
156
164
* @return array
157
165
*/
158
- public function generateSettingsConfig (string $ type ): array {
166
+ public function generateSettingsConfig (string $ type, string $ userId ): array {
159
167
$ kind = $ type === 'userconfig ' ? 'user ' : 'shared ' ;
160
168
161
169
$ config = [
162
170
'kind ' => $ kind ,
163
171
];
164
172
173
+ if ($ type === "userconfig " ) {
174
+ $ type = $ type . '/ ' . $ userId ;
175
+ }
176
+
165
177
$ categories = $ this ->getAllCategories ($ type );
166
178
167
179
foreach ($ categories as $ category ) {
168
- $ files = $ this ->getCategoryFileList ($ type , $ category );
180
+ $ files = $ this ->getCategoryFileList ($ type , $ category, $ userId );
169
181
$ config [$ category ] = $ files ;
170
182
}
171
183
@@ -220,11 +232,20 @@ private function getCategoryDirFolderList(string $type) : array {
220
232
* @param string $fileName
221
233
* @return string
222
234
*/
223
- private function generateFileUri (string $ type , string $ category , string $ fileName ): string {
235
+ private function generateFileUri (string $ type , string $ category , string $ fileName , string $ userId ): string {
236
+
237
+ // Passing userId is dangerous so we have to trim from url...
238
+ if (strpos ($ type , '/ ' ) !== false ) {
239
+ $ type = explode ('/ ' , $ type )[0 ];
240
+ }
241
+
242
+ $ token = $ this ->generateIframeToken ($ type , $ userId );
243
+
224
244
return $ this ->urlGenerator ->linkToRouteAbsolute (
225
245
'richdocuments.settings.getSettingsFile ' ,
226
246
[
227
247
'type ' => $ type ,
248
+ 'token ' => $ token ['token ' ],
228
249
'category ' => $ category ,
229
250
'name ' => $ fileName ,
230
251
]
@@ -266,12 +287,21 @@ public function getSettingsFile(string $type, string $category, string $name): I
266
287
* @param string $category
267
288
* @param string $name
268
289
*/
269
- public function deleteSettingsFile (string $ type , string $ category , string $ name ): void {
290
+ public function deleteSettingsFile (string $ type , string $ category , string $ name, string $ userId ): void {
270
291
try {
271
292
$ baseFolder = $ this ->appData ->getFolder ($ type );
272
293
} catch (NotFoundException $ e ) {
273
294
throw new NotFoundException ("Type folder ' {$ type }' not found. " );
274
295
}
296
+
297
+ if ($ type === 'userconfig ' ) {
298
+ try {
299
+ $ baseFolder = $ baseFolder ->getFolder ($ userId );
300
+ } catch (NotFoundException $ e )
301
+ {
302
+ throw new NotFoundException ("User folder ' {$ userId }' not found. " );
303
+ }
304
+ }
275
305
276
306
try {
277
307
$ categoryFolder = $ baseFolder ->getFolder ($ category );
0 commit comments