use BookStack\Activity\Models\Activity;
use BookStack\Activity\Models\Loggable;
use BookStack\Activity\Models\Webhook;
-use BookStack\App\Model;
+use BookStack\Activity\Notifications\NotificationManager;
use BookStack\Entities\Models\Entity;
use BookStack\Facades\Theme;
use BookStack\Theming\ThemeEvents;
class ActivityLogger
{
+ public function __construct(
+ protected NotificationManager $notifications
+ ) {
+ $this->notifications->loadDefaultHandlers();
+ }
+
/**
* Add a generic activity event to the database.
*/
- public function add(string $type, $detail = '')
+ public function add(string $type, string|Loggable $detail = ''): void
{
$detailToStore = ($detail instanceof Loggable) ? $detail->logDescriptor() : $detail;
$activity->detail = $detailToStore;
if ($detail instanceof Entity) {
- $activity->entity_id = $detail->id;
- $activity->entity_type = $detail->getMorphClass();
+ $activity->loggable_id = $detail->id;
+ $activity->loggable_type = $detail->getMorphClass();
}
$activity->save();
$this->setNotification($type);
$this->dispatchWebhooks($type, $detail);
+ $this->notifications->handle($activity, $detail, user());
Theme::dispatch(ThemeEvents::ACTIVITY_LOGGED, $type, $detail);
}
public function removeEntity(Entity $entity): void
{
$entity->activity()->update([
- 'detail' => $entity->name,
- 'entity_id' => null,
- 'entity_type' => null,
+ 'detail' => $entity->name,
+ 'loggable_id' => null,
+ 'loggable_type' => null,
]);
}