3030use OCA \DAV \CalDAV \CalDavBackend ;
3131use OCP \Activity \IEvent ;
3232use OCP \Activity \IManager as IActivityManager ;
33+ use OCP \App \IAppManager ;
3334use OCP \IGroup ;
3435use OCP \IGroupManager ;
3536use OCP \IUser ;
@@ -52,15 +53,14 @@ class Backend {
5253 /** @var IUserSession */
5354 protected $ userSession ;
5455
55- /**
56- * @param IActivityManager $activityManager
57- * @param IGroupManager $groupManager
58- * @param IUserSession $userSession
59- */
60- public function __construct (IActivityManager $ activityManager , IGroupManager $ groupManager , IUserSession $ userSession ) {
56+ /** @var IAppManager */
57+ protected $ appManager ;
58+
59+ public function __construct (IActivityManager $ activityManager , IGroupManager $ groupManager , IUserSession $ userSession , IAppManager $ appManager ) {
6160 $ this ->activityManager = $ activityManager ;
6261 $ this ->groupManager = $ groupManager ;
6362 $ this ->userSession = $ userSession ;
63+ $ this ->appManager = $ appManager ;
6464 }
6565
6666 /**
@@ -435,29 +435,41 @@ public function onTouchCalendarObject($action, array $calendarData, array $share
435435 $ users = $ this ->getUsersForShares ($ shares );
436436 $ users [] = $ owner ;
437437
438- foreach ($ users as $ user ) {
438+ // Users for share can return the owner itself if the calendar is published
439+ foreach (array_unique ($ users ) as $ user ) {
439440 if ($ classification === CalDavBackend::CLASSIFICATION_PRIVATE && $ user !== $ owner ) {
440441 // Private events are only shown to the owner
441442 continue ;
442443 }
443444
445+ $ params = [
446+ 'actor ' => $ event ->getAuthor (),
447+ 'calendar ' => [
448+ 'id ' => (int ) $ calendarData ['id ' ],
449+ 'uri ' => $ calendarData ['uri ' ],
450+ 'name ' => $ calendarData ['{DAV:}displayname ' ],
451+ ],
452+ 'object ' => [
453+ 'id ' => $ object ['id ' ],
454+ 'name ' => $ classification === CalDavBackend::CLASSIFICATION_CONFIDENTIAL && $ user !== $ owner ? 'Busy ' : $ object ['name ' ],
455+ 'classified ' => $ classification === CalDavBackend::CLASSIFICATION_CONFIDENTIAL && $ user !== $ owner ,
456+ ],
457+ ];
458+
459+ if ($ object ['type ' ] === 'event ' && strpos ($ action , Event::SUBJECT_OBJECT_DELETE ) === false && $ this ->appManager ->isEnabledForUser ('calendar ' )) {
460+ $ params ['object ' ]['link ' ]['firstoccurence ' ] = $ objectData ['firstoccurence ' ];
461+ $ params ['object ' ]['link ' ]['object_uri ' ] = $ objectData ['uri ' ];
462+ $ params ['object ' ]['link ' ]['calendar_uri ' ] = $ calendarData ['uri ' ];
463+ $ params ['object ' ]['link ' ]['owner ' ] = $ owner ;
464+ }
465+
466+
444467 $ event ->setAffectedUser ($ user )
445468 ->setSubject (
446469 $ user === $ currentUser ? $ action . '_self ' : $ action ,
447- [
448- 'actor ' => $ event ->getAuthor (),
449- 'calendar ' => [
450- 'id ' => (int ) $ calendarData ['id ' ],
451- 'uri ' => $ calendarData ['uri ' ],
452- 'name ' => $ calendarData ['{DAV:}displayname ' ],
453- ],
454- 'object ' => [
455- 'id ' => $ object ['id ' ],
456- 'name ' => $ classification === CalDavBackend::CLASSIFICATION_CONFIDENTIAL && $ user !== $ owner ? 'Busy ' : $ object ['name ' ],
457- 'classified ' => $ classification === CalDavBackend::CLASSIFICATION_CONFIDENTIAL && $ user !== $ owner ,
458- ],
459- ]
470+ $ params
460471 );
472+
461473 $ this ->activityManager ->publish ($ event );
462474 }
463475 }
@@ -496,11 +508,11 @@ protected function getObjectNameAndType(array $objectData) {
496508 protected function getUsersForShares (array $ shares ) {
497509 $ users = $ groups = [];
498510 foreach ($ shares as $ share ) {
499- $ prinical = explode ('/ ' , $ share ['{http://owncloud.org/ns}principal ' ]);
500- if ($ prinical [1 ] === 'users ' ) {
501- $ users [] = $ prinical [2 ];
502- } elseif ($ prinical [1 ] === 'groups ' ) {
503- $ groups [] = $ prinical [2 ];
511+ $ principal = explode ('/ ' , $ share ['{http://owncloud.org/ns}principal ' ]);
512+ if ($ principal [1 ] === 'users ' ) {
513+ $ users [] = $ principal [2 ];
514+ } elseif ($ principal [1 ] === 'groups ' ) {
515+ $ groups [] = $ principal [2 ];
504516 }
505517 }
506518
0 commit comments