1313use OC \Share20 \Exception \InvalidShare ;
1414use OC \Share20 \Exception \ProviderException ;
1515use OC \User \LazyUser ;
16+ use OCA \Files_Sharing \AppInfo \Application ;
1617use OCP \AppFramework \Utility \ITimeFactory ;
1718use OCP \DB \QueryBuilder \IQueryBuilder ;
1819use OCP \Defaults ;
1920use OCP \Files \Folder ;
2021use OCP \Files \IRootFolder ;
2122use OCP \Files \Node ;
23+ use OCP \IConfig ;
2224use OCP \IDBConnection ;
2325use OCP \IGroupManager ;
2426use OCP \IL10N ;
@@ -58,6 +60,7 @@ public function __construct(
5860 private ITimeFactory $ timeFactory ,
5961 private LoggerInterface $ logger ,
6062 private IManager $ shareManager ,
63+ private IConfig $ config ,
6164 ) {
6265 }
6366
@@ -485,6 +488,15 @@ public function deleteFromSelf(IShare $share, $recipient) {
485488 protected function createUserSpecificGroupShare (IShare $ share , string $ recipient ): int {
486489 $ type = $ share ->getNodeType ();
487490
491+ $ shareFolder = $ this ->config ->getSystemValue ('share_folder ' , '/ ' );
492+ $ allowCustomShareFolder = $ this ->config ->getSystemValueBool ('sharing.allow_custom_share_folder ' , true );
493+ if ($ allowCustomShareFolder ) {
494+ $ shareFolder = $ this ->config ->getUserValue ($ recipient , Application::APP_ID , 'share_folder ' , $ shareFolder );
495+ }
496+
497+ $ target = $ shareFolder . '/ ' . $ share ->getNode ()->getName ();
498+ $ target = \OC \Files \Filesystem::normalizePath ($ target );
499+
488500 $ qb = $ this ->dbConn ->getQueryBuilder ();
489501 $ qb ->insert ('share ' )
490502 ->values ([
@@ -496,7 +508,7 @@ protected function createUserSpecificGroupShare(IShare $share, string $recipient
496508 'item_type ' => $ qb ->createNamedParameter ($ type ),
497509 'item_source ' => $ qb ->createNamedParameter ($ share ->getNodeId ()),
498510 'file_source ' => $ qb ->createNamedParameter ($ share ->getNodeId ()),
499- 'file_target ' => $ qb ->createNamedParameter ($ share -> getTarget () ),
511+ 'file_target ' => $ qb ->createNamedParameter ($ target ),
500512 'permissions ' => $ qb ->createNamedParameter ($ share ->getPermissions ()),
501513 'stime ' => $ qb ->createNamedParameter ($ share ->getShareTime ()->getTimestamp ()),
502514 ])->executeStatement ();
0 commit comments