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 ;
3031use OCP \AppFramework \OCS \OCSNotFoundException ;
3132use OCP \AppFramework \OCSController ;
3233use OCP \Files \IRootFolder ;
34+ use OCP \Files \NotFoundException ;
3335use OCP \IGroup ;
3436use OCP \IGroupManager ;
3537use OCP \IRequest ;
@@ -270,16 +272,16 @@ public function updateShare(int $formId, int $shareId, array $keyValuePairs): Da
270272 $ formShare = $ this ->shareMapper ->update ($ formShare );
271273
272274 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-
282275 if (in_array (Constants::PERMISSION_RESULTS , $ keyValuePairs ['permissions ' ], true )) {
276+ $ userFolder = $ this ->rootFolder ->getUserFolder ($ form ->getOwnerId ());
277+ $ uploadedFilesFolderPath = $ this ->formsService ->getFormUploadedFilesFolderPath ($ form );
278+ try {
279+ /** @var \OCP\Files\Folder $folder */
280+ $ folder = $ userFolder ->get ($ uploadedFilesFolderPath );
281+ } catch (NotFoundException $ e ) {
282+ $ folder = $ userFolder ->newFolder ($ uploadedFilesFolderPath );
283+ }
284+
283285 $ folderShare = $ this ->shareManager ->newShare ();
284286 $ folderShare ->setShareType ($ formShare ->getShareType ());
285287 $ folderShare ->setSharedWith ($ formShare ->getShareWith ());
@@ -290,12 +292,7 @@ public function updateShare(int $formId, int $shareId, array $keyValuePairs): Da
290292
291293 $ this ->shareManager ->createShare ($ folderShare );
292294 } 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- }
295+ $ this ->removeUploadedFilesShare ($ form , $ formShare );
299296 }
300297 }
301298
@@ -345,12 +342,37 @@ public function deleteShare(int $formId, int $shareId): DataResponse {
345342
346343 $ this ->formsService ->obtainFormLock ($ form );
347344
345+ // Revoke any linked Files share before deleting the Forms share
346+ if (in_array (Constants::PERMISSION_RESULTS , $ share ->getPermissions (), true )) {
347+ $ this ->removeUploadedFilesShare ($ form , $ share );
348+ }
349+
348350 $ this ->shareMapper ->delete ($ share );
349351 $ this ->formMapper ->update ($ form );
350352
351353 return new DataResponse ($ shareId );
352354 }
353355
356+ private function removeUploadedFilesShare (Form $ form , Share $ formShare ): void {
357+ if (!in_array ($ formShare ->getShareType (), [IShare::TYPE_USER , IShare::TYPE_GROUP , IShare::TYPE_USERGROUP , IShare::TYPE_CIRCLE ], true )) {
358+ return ;
359+ }
360+
361+ $ userFolder = $ this ->rootFolder ->getUserFolder ($ form ->getOwnerId ());
362+ $ uploadedFilesFolderPath = $ this ->formsService ->getFormUploadedFilesFolderPath ($ form );
363+ try {
364+ $ folder = $ userFolder ->get ($ uploadedFilesFolderPath );
365+ } catch (NotFoundException $ e ) {
366+ return ;
367+ }
368+ $ folderShares = $ this ->shareManager ->getSharesBy ($ form ->getOwnerId (), $ formShare ->getShareType (), $ folder , false , -1 );
369+ foreach ($ folderShares as $ folderShare ) {
370+ if ($ folderShare ->getSharedWith () === $ formShare ->getShareWith ()) {
371+ $ this ->shareManager ->deleteShare ($ folderShare );
372+ }
373+ }
374+ }
375+
354376 /**
355377 * Validate user given permission array
356378 *
0 commit comments