@@ -60,7 +60,7 @@ public function __construct(IFactory $languageFactory, IURLGenerator $url, IMana
6060 * @param array $eventData
6161 * @return array
6262 */
63- protected function generateObjectParameter (array $ eventData ) {
63+ protected function generateObjectParameter (array $ eventData, string $ affectedUser ) {
6464 if (!isset ($ eventData ['id ' ]) || !isset ($ eventData ['name ' ])) {
6565 throw new \InvalidArgumentException ();
6666 }
@@ -76,7 +76,15 @@ protected function generateObjectParameter(array $eventData) {
7676 // The calendar app needs to be manually loaded for the routes to be loaded
7777 OC_App::loadApp ('calendar ' );
7878 $ linkData = $ eventData ['link ' ];
79- $ objectId = base64_encode ($ this ->url ->getWebroot () . '/remote.php/dav/calendars/ ' . $ linkData ['owner ' ] . '/ ' . $ linkData ['calendar_uri ' ] . '/ ' . $ linkData ['object_uri ' ]);
79+ if ($ affectedUser === $ linkData ['owner ' ]) {
80+ $ objectId = base64_encode ($ this ->url ->getWebroot () . '/remote.php/dav/calendars/ ' . $ linkData ['owner ' ] . '/ ' . $ linkData ['calendar_uri ' ] . '/ ' . $ linkData ['object_uri ' ]);
81+ } else {
82+ // Can't use the "real" owner and calendar names here because we create a custom
83+ // calendar for incoming shares with the name "<calendar>_shared_by_<sharer>".
84+ // Hack: Fix the link by generating it for the incoming shared calendar instead,
85+ // as seen from the affected user.
86+ $ objectId = base64_encode ($ this ->url ->getWebroot () . '/remote.php/dav/calendars/ ' . $ affectedUser . '/ ' . $ linkData ['calendar_uri ' ] . '_shared_by_ ' . $ linkData ['owner ' ] . '/ ' . $ linkData ['object_uri ' ]);
87+ }
8088 $ link = [
8189 'view ' => 'dayGridMonth ' ,
8290 'timeRange ' => 'now ' ,
@@ -168,7 +176,7 @@ protected function getParameters(IEvent $event) {
168176 return [
169177 'actor ' => $ this ->generateUserParameter ($ parameters ['actor ' ]),
170178 'calendar ' => $ this ->generateCalendarParameter ($ parameters ['calendar ' ], $ this ->l ),
171- 'event ' => $ this ->generateClassifiedObjectParameter ($ parameters ['object ' ]),
179+ 'event ' => $ this ->generateClassifiedObjectParameter ($ parameters ['object ' ], $ event -> getAffectedUser () ),
172180 ];
173181 case self ::SUBJECT_OBJECT_ADD . '_event_self ' :
174182 case self ::SUBJECT_OBJECT_DELETE . '_event_self ' :
@@ -177,7 +185,7 @@ protected function getParameters(IEvent $event) {
177185 case self ::SUBJECT_OBJECT_RESTORE . '_event_self ' :
178186 return [
179187 'calendar ' => $ this ->generateCalendarParameter ($ parameters ['calendar ' ], $ this ->l ),
180- 'event ' => $ this ->generateClassifiedObjectParameter ($ parameters ['object ' ]),
188+ 'event ' => $ this ->generateClassifiedObjectParameter ($ parameters ['object ' ], $ event -> getAffectedUser () ),
181189 ];
182190 }
183191 }
@@ -189,13 +197,13 @@ protected function getParameters(IEvent $event) {
189197 'actor ' => $ this ->generateUserParameter ($ parameters ['actor ' ]),
190198 'sourceCalendar ' => $ this ->generateCalendarParameter ($ parameters ['sourceCalendar ' ], $ this ->l ),
191199 'targetCalendar ' => $ this ->generateCalendarParameter ($ parameters ['targetCalendar ' ], $ this ->l ),
192- 'event ' => $ this ->generateClassifiedObjectParameter ($ parameters ['object ' ]),
200+ 'event ' => $ this ->generateClassifiedObjectParameter ($ parameters ['object ' ], $ event -> getAffectedUser () ),
193201 ];
194202 case self ::SUBJECT_OBJECT_MOVE . '_event_self ' :
195203 return [
196204 'sourceCalendar ' => $ this ->generateCalendarParameter ($ parameters ['sourceCalendar ' ], $ this ->l ),
197205 'targetCalendar ' => $ this ->generateCalendarParameter ($ parameters ['targetCalendar ' ], $ this ->l ),
198- 'event ' => $ this ->generateClassifiedObjectParameter ($ parameters ['object ' ]),
206+ 'event ' => $ this ->generateClassifiedObjectParameter ($ parameters ['object ' ], $ event -> getAffectedUser () ),
199207 ];
200208 }
201209 }
@@ -212,22 +220,22 @@ protected function getParameters(IEvent $event) {
212220 return [
213221 'actor ' => $ this ->generateUserParameter ($ parameters [0 ]),
214222 'calendar ' => $ this ->generateLegacyCalendarParameter ($ event ->getObjectId (), $ parameters [1 ]),
215- 'event ' => $ this ->generateObjectParameter ($ parameters [2 ]),
223+ 'event ' => $ this ->generateObjectParameter ($ parameters [2 ], $ event -> getAffectedUser () ),
216224 ];
217225 case self ::SUBJECT_OBJECT_ADD . '_event_self ' :
218226 case self ::SUBJECT_OBJECT_DELETE . '_event_self ' :
219227 case self ::SUBJECT_OBJECT_UPDATE . '_event_self ' :
220228 return [
221229 'calendar ' => $ this ->generateLegacyCalendarParameter ($ event ->getObjectId (), $ parameters [1 ]),
222- 'event ' => $ this ->generateObjectParameter ($ parameters [2 ]),
230+ 'event ' => $ this ->generateObjectParameter ($ parameters [2 ], $ event -> getAffectedUser () ),
223231 ];
224232 }
225233
226234 throw new \InvalidArgumentException ();
227235 }
228236
229- private function generateClassifiedObjectParameter (array $ eventData ) {
230- $ parameter = $ this ->generateObjectParameter ($ eventData );
237+ private function generateClassifiedObjectParameter (array $ eventData, string $ affectedUser ) {
238+ $ parameter = $ this ->generateObjectParameter ($ eventData, $ affectedUser );
231239 if (!empty ($ eventData ['classified ' ])) {
232240 $ parameter ['name ' ] = $ this ->l ->t ('Busy ' );
233241 }
0 commit comments