]> BookStack Code Mirror - bookstack/blobdiff - app/Actions/ActivityService.php
Update verify-totp.blade.php
[bookstack] / app / Actions / ActivityService.php
index b2a35fd2a5115c7ba869a35ddbd34e69287b8e6d..33ed44b32efa0dd64715af5a227e90a642cc0574 100644 (file)
@@ -1,7 +1,10 @@
-<?php namespace BookStack\Actions;
+<?php
+
+namespace BookStack\Actions;
 
 use BookStack\Auth\Permissions\PermissionService;
 use BookStack\Auth\User;
+use BookStack\Entities\Models\Book;
 use BookStack\Entities\Models\Chapter;
 use BookStack\Entities\Models\Entity;
 use BookStack\Entities\Models\Page;
@@ -33,6 +36,7 @@ class ActivityService
 
     /**
      * Add a generic activity event to the database.
+     *
      * @param string|Loggable $detail
      */
     public function add(string $type, $detail = '')
@@ -52,9 +56,12 @@ class ActivityService
      */
     protected function newActivityForUser(string $type): Activity
     {
+        $ip = request()->ip() ?? '';
+
         return $this->activity->newInstance()->forceFill([
             'type'     => strtolower($type),
-            'user_id' => user()->id,
+            'user_id'  => user()->id,
+            'ip'       => config('app.env') === 'demo' ? '127.0.0.1' : $ip,
         ]);
     }
 
@@ -67,8 +74,8 @@ class ActivityService
     {
         $entity->activity()->update([
             'detail'       => $entity->name,
-            'entity_id'   => null,
-            'entity_type' => null,
+            'entity_id'    => null,
+            'entity_type'  => null,
         ]);
     }
 
@@ -78,7 +85,7 @@ class ActivityService
     public function latest(int $count = 20, int $page = 0): array
     {
         $activityList = $this->permissionService
-            ->filterRestrictedEntityRelations($this->activity, 'activities', 'entity_id', 'entity_type')
+            ->filterRestrictedEntityRelations($this->activity->newQuery(), 'activities', 'entity_id', 'entity_type')
             ->orderBy('created_at', 'desc')
             ->with(['user', 'entity'])
             ->skip($count * $page)
@@ -94,14 +101,14 @@ class ActivityService
      */
     public function entityActivity(Entity $entity, int $count = 20, int $page = 1): array
     {
-        /** @var [string => int[]] $queryIds */
+        /** @var array<string, int[]> $queryIds */
         $queryIds = [$entity->getMorphClass() => [$entity->id]];
 
-        if ($entity->isA('book')) {
-            $queryIds[(new Chapter)->getMorphClass()] = $entity->chapters()->visible()->pluck('id');
+        if ($entity instanceof Book) {
+            $queryIds[(new Chapter())->getMorphClass()] = $entity->chapters()->visible()->pluck('id');
         }
-        if ($entity->isA('book') || $entity->isA('chapter')) {
-            $queryIds[(new Page)->getMorphClass()] = $entity->pages()->visible()->pluck('id');
+        if ($entity instanceof Book || $entity instanceof Chapter) {
+            $queryIds[(new Page())->getMorphClass()] = $entity->pages()->visible()->pluck('id');
         }
 
         $query = $this->activity->newQuery();
@@ -131,7 +138,7 @@ class ActivityService
     public function userActivity(User $user, int $count = 20, int $page = 0): array
     {
         $activityList = $this->permissionService
-            ->filterRestrictedEntityRelations($this->activity, 'activities', 'entity_id', 'entity_type')
+            ->filterRestrictedEntityRelations($this->activity->newQuery(), 'activities', 'entity_id', 'entity_type')
             ->orderBy('created_at', 'desc')
             ->where('user_id', '=', $user->id)
             ->skip($count * $page)
@@ -143,7 +150,9 @@ class ActivityService
 
     /**
      * Filters out similar activity.
+     *
      * @param Activity[] $activities
+     *
      * @return array
      */
     protected function filterSimilar(iterable $activities): array
@@ -185,7 +194,7 @@ class ActivityService
             return;
         }
 
-        $message = str_replace("%u", $username, $message);
+        $message = str_replace('%u', $username, $message);
         $channel = config('logging.failed_login.channel');
         Log::channel($channel)->warning($message);
     }