1010namespace OCA \Forms \Controller ;
1111
1212use OCA \Forms \Constants ;
13+ use OCA \Forms \Db \Form ;
1314use OCA \Forms \Db \FormMapper ;
1415use OCA \Forms \Db \Share ;
1516use OCA \Forms \Db \ShareMapper ;
@@ -270,16 +271,16 @@ public function updateShare(int $formId, int $shareId, array $keyValuePairs): Da
270271 $ formShare = $ this ->shareMapper ->update ($ formShare );
271272
272273 if (in_array ($ formShare ->getShareType (), [IShare::TYPE_USER , IShare::TYPE_GROUP , IShare::TYPE_USERGROUP , IShare::TYPE_CIRCLE ], true )) {
273- $ userFolder = $ this ->rootFolder ->getUserFolder ($ form ->getOwnerId ());
274- $ uploadedFilesFolderPath = $ this ->formsService ->getFormUploadedFilesFolderPath ($ form );
275- if ($ userFolder ->nodeExists ($ uploadedFilesFolderPath )) {
276- $ folder = $ userFolder ->get ($ uploadedFilesFolderPath );
277- } else {
278- $ folder = $ userFolder ->newFolder ($ uploadedFilesFolderPath );
279- }
280- /** @var \OCP\Files\Folder $folder */
281-
282274 if (in_array (Constants::PERMISSION_RESULTS , $ keyValuePairs ['permissions ' ], true )) {
275+ $ userFolder = $ this ->rootFolder ->getUserFolder ($ form ->getOwnerId ());
276+ $ uploadedFilesFolderPath = $ this ->formsService ->getFormUploadedFilesFolderPath ($ form );
277+ if ($ userFolder ->nodeExists ($ uploadedFilesFolderPath )) {
278+ $ folder = $ userFolder ->get ($ uploadedFilesFolderPath );
279+ } else {
280+ $ folder = $ userFolder ->newFolder ($ uploadedFilesFolderPath );
281+ }
282+ /** @var \OCP\Files\Folder $folder */
283+
283284 $ folderShare = $ this ->shareManager ->newShare ();
284285 $ folderShare ->setShareType ($ formShare ->getShareType ());
285286 $ folderShare ->setSharedWith ($ formShare ->getShareWith ());
@@ -290,12 +291,7 @@ public function updateShare(int $formId, int $shareId, array $keyValuePairs): Da
290291
291292 $ this ->shareManager ->createShare ($ folderShare );
292293 } else {
293- $ folderShares = $ this ->shareManager ->getSharesBy ($ form ->getOwnerId (), $ formShare ->getShareType (), $ folder );
294- foreach ($ folderShares as $ folderShare ) {
295- if ($ folderShare ->getSharedWith () === $ formShare ->getShareWith ()) {
296- $ this ->shareManager ->deleteShare ($ folderShare );
297- }
298- }
294+ $ this ->removeUploadedFilesShare ($ form , $ formShare );
299295 }
300296 }
301297
@@ -345,12 +341,37 @@ public function deleteShare(int $formId, int $shareId): DataResponse {
345341
346342 $ this ->formsService ->obtainFormLock ($ form );
347343
344+ // Revoke any linked Files share before deleting the Forms share
345+ if (in_array (Constants::PERMISSION_RESULTS , $ share ->getPermissions (), true )) {
346+ $ this ->removeUploadedFilesShare ($ form , $ share );
347+ }
348+
348349 $ this ->shareMapper ->delete ($ share );
349350 $ this ->formMapper ->update ($ form );
350351
351352 return new DataResponse ($ shareId );
352353 }
353354
355+ private function removeUploadedFilesShare (Form $ form , Share $ formShare ): void {
356+ if (!in_array ($ formShare ->getShareType (), [IShare::TYPE_USER , IShare::TYPE_GROUP , IShare::TYPE_USERGROUP , IShare::TYPE_CIRCLE ], true )) {
357+ return ;
358+ }
359+
360+ $ userFolder = $ this ->rootFolder ->getUserFolder ($ form ->getOwnerId ());
361+ $ uploadedFilesFolderPath = $ this ->formsService ->getFormUploadedFilesFolderPath ($ form );
362+ if (!$ userFolder ->nodeExists ($ uploadedFilesFolderPath )) {
363+ return ;
364+ }
365+
366+ $ folder = $ userFolder ->get ($ uploadedFilesFolderPath );
367+ $ folderShares = $ this ->shareManager ->getSharesBy ($ form ->getOwnerId (), $ formShare ->getShareType (), $ folder , false , -1 );
368+ foreach ($ folderShares as $ folderShare ) {
369+ if ($ folderShare ->getSharedWith () === $ formShare ->getShareWith ()) {
370+ $ this ->shareManager ->deleteShare ($ folderShare );
371+ }
372+ }
373+ }
374+
354375 /**
355376 * Validate user given permission array
356377 *
0 commit comments