@@ -58,7 +58,7 @@ public function __construct(
5858 * @return ISimpleFolder
5959 */
6060
61- public function ensureDirectory (SettingsUrl $ settingsUrl ): ISimpleFolder {
61+ public function ensureDirectory (SettingsUrl $ settingsUrl, string $ userId ): ISimpleFolder {
6262 $ type = $ settingsUrl ->getType ();
6363 $ category = $ settingsUrl ->getCategory ();
6464
@@ -68,6 +68,14 @@ public function ensureDirectory(SettingsUrl $settingsUrl): ISimpleFolder {
6868 $ baseFolder = $ this ->appData ->newFolder ($ type );
6969 }
7070
71+ if ($ type === 'userconfig ' ) {
72+ try {
73+ $ baseFolder = $ baseFolder ->getFolder ($ userId );
74+ } catch (NotFoundException $ e ) {
75+ $ baseFolder = $ baseFolder ->newFolder ($ userId );
76+ }
77+ }
78+
7179 try {
7280 $ categoryFolder = $ baseFolder ->getFolder ($ category );
7381 } catch (NotFoundException $ e ) {
@@ -86,11 +94,11 @@ public function ensureDirectory(SettingsUrl $settingsUrl): ISimpleFolder {
8694 * @return array ['stamp' => string, 'uri' => string]
8795 */
8896
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 );
9199 $ fileName = $ settingsUrl ->getFileName ();
92100 $ newFile = $ categoryFolder ->newFile ($ fileName , $ fileData );
93- $ fileUri = $ this ->generateFileUri ($ settingsUrl ->getType (), $ settingsUrl ->getCategory (), $ fileName );
101+ $ fileUri = $ this ->generateFileUri ($ settingsUrl ->getType (), $ settingsUrl ->getCategory (), $ fileName, $ userId );
94102
95103 return [
96104 'stamp ' => $ newFile ->getETag (),
@@ -105,7 +113,7 @@ public function uploadFile(SettingsUrl $settingsUrl, string $fileData): array {
105113 * @param string $category
106114 * @return array Each item has 'stamp' and 'uri'.
107115 */
108- public function getCategoryFileList (string $ type , string $ category ): array {
116+ public function getCategoryFileList (string $ type , string $ category, string $ userId ): array {
109117 try {
110118 $ categoryFolder = $ this ->appData ->getFolder ($ type . '/ ' . $ category );
111119 } catch (NotFoundException $ e ) {
@@ -114,10 +122,10 @@ public function getCategoryFileList(string $type, string $category): array {
114122
115123 $ files = $ categoryFolder ->getDirectoryListing ();
116124
117- return array_map (function (ISimpleFile $ file ) use ($ type , $ category ) {
125+ return array_map (function (ISimpleFile $ file ) use ($ type , $ category, $ userId ) {
118126 return [
119127 'stamp ' => $ file ->getETag (),
120- 'uri ' => $ this ->generateFileUri ($ type , $ category , $ file ->getName ()),
128+ 'uri ' => $ this ->generateFileUri ($ type , $ category , $ file ->getName (), $ userId ),
121129 ];
122130 }, $ files );
123131 }
@@ -155,17 +163,21 @@ public function generateIframeToken(string $type, string $userId): array {
155163 * @param string $type
156164 * @return array
157165 */
158- public function generateSettingsConfig (string $ type ): array {
166+ public function generateSettingsConfig (string $ type, string $ userId ): array {
159167 $ kind = $ type === 'userconfig ' ? 'user ' : 'shared ' ;
160168
161169 $ config = [
162170 'kind ' => $ kind ,
163171 ];
164172
173+ if ($ type === "userconfig " ) {
174+ $ type = $ type . '/ ' . $ userId ;
175+ }
176+
165177 $ categories = $ this ->getAllCategories ($ type );
166178
167179 foreach ($ categories as $ category ) {
168- $ files = $ this ->getCategoryFileList ($ type , $ category );
180+ $ files = $ this ->getCategoryFileList ($ type , $ category, $ userId );
169181 $ config [$ category ] = $ files ;
170182 }
171183
@@ -220,11 +232,20 @@ private function getCategoryDirFolderList(string $type) : array {
220232 * @param string $fileName
221233 * @return string
222234 */
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+
224244 return $ this ->urlGenerator ->linkToRouteAbsolute (
225245 'richdocuments.settings.getSettingsFile ' ,
226246 [
227247 'type ' => $ type ,
248+ 'token ' => $ token ['token ' ],
228249 'category ' => $ category ,
229250 'name ' => $ fileName ,
230251 ]
@@ -266,12 +287,21 @@ public function getSettingsFile(string $type, string $category, string $name): I
266287 * @param string $category
267288 * @param string $name
268289 */
269- public function deleteSettingsFile (string $ type , string $ category , string $ name ): void {
290+ public function deleteSettingsFile (string $ type , string $ category , string $ name, string $ userId ): void {
270291 try {
271292 $ baseFolder = $ this ->appData ->getFolder ($ type );
272293 } catch (NotFoundException $ e ) {
273294 throw new NotFoundException ("Type folder ' {$ type }' not found. " );
274295 }
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+ }
275305
276306 try {
277307 $ categoryFolder = $ baseFolder ->getFolder ($ category );
0 commit comments