em = $em; $this->logger = $logger; } public static function getSubscribedEvents() { return [ EntrySavedEvent::NAME => 'entryActivity', EntryDeletedEvent::NAME => 'entryActivity', EntryEditedEvent::NAME => 'entryActivity', EntryTaggedEvent::NAME => 'taggedEntry', EntryFavouriteEvent::NAME => 'entryActivity', EntryReadEvent::NAME => 'entryActivity', AnnotationCreatedEvent::NAME => 'annotationActivity', AnnotationEditedEvent::NAME => 'annotationActivity', AnnotationDeletedEvent::NAME => 'annotationActivity', FollowEvent::NAME => 'followedAccount', UnfollowEvent::NAME => 'unfollowedAccount', RecommendedEntryEvent::NAME => 'recommendedEntry', ShareCreatedEvent::NAME => 'shareActivity', ShareAcceptedEvent::NAME => 'shareActivity', ShareDeniedEvent::NAME => 'shareActivity', ShareCancelledEvent::NAME => 'shareActivity', // when a user register using the normal form FOSUserEvents::REGISTRATION_COMPLETED => 'userActivity', // when we manually create a user using the command line // OR when we create it from the config UI FOSUserEvents::USER_CREATED => 'userActivity', UserEditedEvent::NAME => 'userActivity', UserDeletedEvent::NAME => 'userActivity', ]; } public function userActivity(Event $event) { $activityType = 0; if ($event instanceof UserEvent) { $activityType = Activity::USER_CREATE; } elseif ($event instanceof UserEditedEvent) { $activityType = Activity::USER_EDIT; } elseif ($event instanceof UserDeletedEvent) { $activityType = Activity::USER_REMOVE; } $user = $event->getUser(); $activity = new Activity($activityType, Activity::USER_OBJECT, $user->getId()); $activity->setUser($user->getAccount()); $this->em->persist($activity); $this->em->flush(); } public function entryActivity(EntryEvent $event) { $entry = $event->getEntry(); $activityType = 0; if ($event instanceof EntrySavedEvent) { $activityType = Activity::ENTRY_ADD; } elseif ($event instanceof EntryDeletedEvent) { $activityType = Activity::ENTRY_DELETE; } elseif ($event instanceof EntryEditedEvent) { $activityType = Activity::ENTRY_EDIT; } elseif ($event instanceof EntryFavouriteEvent) { if ($entry->isStarred()) { $activityType = Activity::ENTRY_FAVOURITE; } else { $activityType = Activity::ENTRY_UNFAVOURITE; } } elseif ($event instanceof EntryReadEvent) { if ($entry->isArchived()) { $activityType = Activity::ENTRY_READ; } else { $activityType = Activity::ENTRY_UNREAD; } } $activity = new Activity($activityType, Activity::ENTRY_OBJECT, $entry->getId()); $activity->setUser($entry->getUser()->getAccount()); $this->em->persist($activity); $this->em->flush(); } public function taggedEntry(EntryTaggedEvent $event) { $entry = $event->getEntry(); $activity = new Activity($event->isRemove() ? Activity::ENTRY_REMOVE_TAG : Activity::ENTRY_ADD_TAG, Activity::ENTRY_OBJECT, $entry->getId()); $activity->setUser($entry->getUser()->getAccount()); $activity->setSecondaryObjectType(Activity::TAG_OBJECT) ->setSecondaryObjectId($event->getTags()[0]->getId()); $this->em->persist($activity); $this->em->flush(); } public function annotationActivity(AnnotationEvent $event) { $annotation = $event->getAnnotation(); $activityType = 0; if ($event instanceof AnnotationCreatedEvent) { $activityType = Activity::ANNOTATION_ADD; } elseif ($event instanceof AnnotationEditedEvent) { $activityType = Activity::ANNOTATION_EDIT; } elseif ($event instanceof AnnotationDeletedEvent) { $activityType = Activity::ANNOTATION_REMOVE; } $activity = new Activity($activityType, Activity::ANNOTATION_OBJECT, $annotation->getId()); $activity->setUser($annotation->getUser()->getAccount()); $this->em->persist($activity); $this->em->flush(); } public function followedAccount(FollowEvent $event) { $activity = new Activity(Activity::FOLLOW_ACCOUNT, Activity::ACCOUNT_OBJECT, $event->getAccount()->getId()); $activity->setUser($event->getAccount()); $activity->setSecondaryObjectType(Activity::ACCOUNT_OBJECT) ->setSecondaryObjectId($event->getFollower()->getId()); $this->em->persist($activity); $this->em->flush(); } public function unfollowedAccount(UnfollowEvent $event) { $activity = new Activity(Activity::UNFOLLOW_ACCOUNT, Activity::ACCOUNT_OBJECT, $event->getAccount()->getId()); $activity->setUser($event->getAccount()); $activity->setSecondaryObjectType(Activity::ACCOUNT_OBJECT) ->setSecondaryObjectId($event->getFollower()->getId()); $this->em->persist($activity); $this->em->flush(); } public function recommendedEntry(RecommendedEntryEvent $event) { $entry = $event->getEntry(); $account = $entry->getUser()->getAccount(); $activity = new Activity(Activity::RECOMMEND_ENTRY, Activity::ACCOUNT_OBJECT, $account->getId()); $activity->setUser($account); $activity->setSecondaryObjectType(Activity::ENTRY_OBJECT) ->setSecondaryObjectId($entry->getId()); $this->em->persist($activity); $this->em->flush(); } public function shareActivity(ShareEvent $event) { $share = $event->getShare(); $activityType = 0; if ($event instanceof ShareCreatedEvent) { $activityType = Activity::USER_SHARE_CREATED; } elseif ($event instanceof ShareAcceptedEvent) { $activityType = Activity::USER_SHARE_ACCEPTED; } elseif ($event instanceof ShareDeniedEvent) { $activityType = Activity::USER_SHARE_REFUSED; } elseif ($event instanceof ShareCancelledEvent) { $activityType = Activity::USER_SHARE_CANCELLED; } $activity = new Activity($activityType, Activity::SHARE_OBJECT, $share->getId()); $activity->setUser($share->getUserOrigin()); $activity->setSecondaryObjectType(Activity::ACCOUNT_OBJECT) ->setSecondaryObjectId($share->getUserDestination()->getId()); $this->em->persist($activity); $this->em->flush(); } }