1515use OCP \BackgroundJob \TimedJob ;
1616use OCP \Files \Folder ;
1717use OCP \Files \IRootFolder ;
18+ use OCP \Files \NotFoundException ;
1819use OCP \Share \IManager ;
1920use OCP \Share \IShare ;
21+ use OCP \User \Exceptions \UserNotFoundException ;
2022use Psr \Log \LoggerInterface ;
2123
2224class CleanupUploadedFilesJob extends TimedJob {
@@ -66,7 +68,15 @@ public function run($argument): void {
6668 }
6769
6870 $ usersToCleanup [$ form ->getOwnerId ()] = true ;
69- $ userFolder = $ this ->rootFolder ->getUserFolder ($ form ->getOwnerId ());
71+ try {
72+ $ userFolder = $ this ->rootFolder ->getUserFolder ($ form ->getOwnerId ());
73+ } catch (UserNotFoundException $ e ) {
74+ $ this ->logger ->warning ('Could not find user {ownerId} for uploaded file deletion. ' , [
75+ 'ownerId ' => $ form ->getOwnerId (),
76+ ]);
77+ $ this ->uploadedFileMapper ->delete ($ uploadedFile );
78+ continue ;
79+ }
7080
7181 $ nodes = $ userFolder ->getById ($ uploadedFile ->getFileId ());
7282
@@ -86,17 +96,28 @@ public function run($argument): void {
8696
8797 $ this ->logger ->info ('Deleted {deleted} uploaded files. ' , ['deleted ' => $ deleted ]);
8898
99+ // Files uploaded to an upload share that were never registered leave no
100+ // database record behind, so every form owner needs to be checked.
101+ foreach ($ this ->formMapper ->findAllOwnerIds () as $ ownerId ) {
102+ $ usersToCleanup [$ ownerId ] = true ;
103+ }
104+
89105 // now delete empty folders in user folders
90106 $ deleted = 0 ;
91107 foreach (array_keys ($ usersToCleanup ) as $ userId ) {
92- $ this ->logger ->info ('Cleaning up empty folders for user {userId}. ' , ['userId ' => $ userId ]);
93- $ userFolder = $ this ->rootFolder ->getUserFolder ($ userId );
108+ try {
109+ $ userFolder = $ this ->rootFolder ->getUserFolder ($ userId );
110+ $ unsubmittedFilesFolder = $ userFolder ->get (Constants::UNSUBMITTED_FILES_FOLDER );
111+ } catch (UserNotFoundException |NotFoundException $ e ) {
112+ continue ;
113+ }
94114
95- $ unsubmittedFilesFolder = $ userFolder ->get (Constants::UNSUBMITTED_FILES_FOLDER );
96115 if (!$ unsubmittedFilesFolder instanceof Folder) {
97116 continue ;
98117 }
99118
119+ $ this ->logger ->info ('Cleaning up empty folders for user {userId}. ' , ['userId ' => $ userId ]);
120+
100121 foreach ($ unsubmittedFilesFolder ->getDirectoryListing () as $ node ) {
101122 if ($ node ->getName () < $ dateTime ->getTimestamp ()) {
102123 if ($ node instanceof Folder) {
0 commit comments