3232use OCA \Circles \Tools \Traits \TStringTools ;
3333use OCP \EventDispatcher \Event ;
3434use OCP \EventDispatcher \IEventListener ;
35+ use OCP \Files \IRootFolder ;
36+ use OCP \IURLGenerator ;
37+ use OCP \IUser ;
3538use OCP \IUserManager ;
3639
3740/** @template-implements IEventListener<FileShareCreatedEvent|Event> */
@@ -59,6 +62,10 @@ class ShareCreatedSendMail implements IEventListener {
5962 private $ contactService ;
6063 /** @var IUserManager */
6164 private $ userManager ;
65+ /** @var IURLGenerator */
66+ private $ urlGenerator ;
67+ /** @var IRootFolder */
68+ private $ rootFolder ;
6269
6370 public function __construct (
6471 ShareWrapperService $ shareWrapperService ,
@@ -68,6 +75,8 @@ public function __construct(
6875 ContactService $ contactService ,
6976 ConfigService $ configService ,
7077 IUserManager $ userManager ,
78+ IURLGenerator $ urlGenerator ,
79+ IRootFolder $ rootFolder ,
7180 ) {
7281 $ this ->shareWrapperService = $ shareWrapperService ;
7382 $ this ->shareTokenService = $ shareTokenService ;
@@ -76,6 +85,8 @@ public function __construct(
7685 $ this ->contactService = $ contactService ;
7786 $ this ->configService = $ configService ;
7887 $ this ->userManager = $ userManager ;
88+ $ this ->urlGenerator = $ urlGenerator ;
89+ $ this ->rootFolder = $ rootFolder ;
7990
8091 $ this ->setup ('app ' , Application::APP_ID );
8192 }
@@ -95,8 +106,39 @@ public function handle(Event $event): void {
95106
96107 $ circle = $ event ->getCircle ();
97108 $ clearPasswords = $ event ->getFederatedEvent ()->getInternal ()->gArray ('clearPasswords ' );
109+ /** @var ShareWrapper $wrappedShare */
110+ $ wrappedShare = $ event ->getFederatedEvent ()->getParams ()->gObj ('wrappedShare ' , ShareWrapper::class);
111+ $ iShare = $ wrappedShare ->getShare ($ this ->rootFolder , $ this ->userManager , $ this ->urlGenerator );
112+ $ link = $ this ->urlGenerator ->linkToRouteAbsolute ('files_sharing.sharecontroller.showShare ' , [
113+ 'token ' => $ iShare ->getToken ()
114+ ]);
115+ $ initiator = $ iShare ->getSharedBy ();
116+ $ initiatorUser = $ this ->userManager ->get ($ initiator );
117+ $ initiatorDisplayName = ($ initiatorUser instanceof IUser) ? $ initiatorUser ->getDisplayName () : $ initiator ;
118+ $ initiatorEmail = ($ initiatorUser instanceof IUser) ? $ initiatorUser ->getEMailAddress () : null ;
98119
99120 foreach ($ circle ->getInheritedMembers (false , true ) as $ member ) {
121+ if ($ member ->getUserType () == Member::TYPE_USER && $ member ->isLocal ()) {
122+ $ user = $ this ->userManager ->get ($ member ->getUserId ());
123+ if ($ user === null ) {
124+ continue ;
125+ }
126+ $ email = $ user ->getEMailAddress ();
127+ if ($ email === null
128+ || $ email === $ initiatorEmail
129+ ) {
130+ continue ;
131+ }
132+ $ this ->sendMailService ->sendUserShareMail (
133+ $ link ,
134+ $ user ->getEMailAddress (),
135+ $ initiatorDisplayName ,
136+ $ circle ->getDisplayName (),
137+ $ initiatorEmail ,
138+ $ iShare ,
139+ );
140+ }
141+
100142 if ($ member ->getUserType () !== Member::TYPE_MAIL
101143 && $ member ->getUserType () !== Member::TYPE_CONTACT ) {
102144 continue ;
0 commit comments