@@ -540,19 +540,24 @@ private function createDirsUnder(array &$directoriesById, Folder $currentFolder,
540540 // create dir if we are on top OR if its parent is current dir
541541 if (($ currentFolderId === '' && !array_key_exists ($ parentId , $ directoriesById ))
542542 || $ parentId === $ currentFolderId ) {
543- $ name = $ dir ['name ' ];
544- if (!$ currentFolder ->nodeExists ($ name )) {
545- $ newDir = $ currentFolder ->newFolder ($ name );
546- } else {
547- $ newDir = $ currentFolder ->get ($ name );
548- if (!($ newDir instanceof Folder)) {
543+ $ name = preg_replace ('/\/|\n|[^._A-Za-z0-9-]/ ' , '- ' , $ dir ['name ' ] ?? 'Untitled ' );
544+ try {
545+ if (!$ currentFolder ->nodeExists ($ name )) {
546+ $ newDir = $ currentFolder ->newFolder ($ name );
547+ } else {
548+ $ newDir = $ currentFolder ->get ($ name );
549+ if (!($ newDir instanceof Folder)) {
550+ throw new NotFoundException ("Node is not a folder: $ name " );
551+ }
552+ }
553+ $ directoriesById [$ id ]['node ' ] = $ newDir ;
554+ $ success = $ this ->createDirsUnder ($ directoriesById , $ newDir , $ id );
555+ if (!$ success ) {
549556 return false ;
550557 }
551- }
552- $ directoriesById [$ id ]['node ' ] = $ newDir ;
553- $ success = $ this ->createDirsUnder ($ directoriesById , $ newDir , $ id );
554- if (!$ success ) {
555- return false ;
558+ } catch (\Throwable $ e ) {
559+ $ this ->logger ->error ("Failed to create folder: $ name " , ['exception ' => $ e ]);
560+ continue ; // Skip problematic folder
556561 }
557562 }
558563 }
0 commit comments