3 namespace BookStack\Entities\Models;
5 use BookStack\Activity\Models\Loggable;
6 use BookStack\Users\Models\User;
7 use Illuminate\Database\Eloquent\Model;
8 use Illuminate\Database\Eloquent\Relations\BelongsTo;
9 use Illuminate\Database\Eloquent\Relations\MorphTo;
13 * @property int $deleted_by
14 * @property string $deletable_type
15 * @property int $deletable_id
16 * @property Deletable $deletable
18 class Deletion extends Model implements Loggable
20 protected $hidden = [];
23 * Get the related deletable record.
25 public function deletable(): MorphTo
27 return $this->morphTo('deletable')->withTrashed();
31 * Get the user that performed the deletion.
33 public function deleter(): BelongsTo
35 return $this->belongsTo(User::class, 'deleted_by');
39 * Create a new deletion record for the provided entity.
41 public static function createForEntity(Entity $entity): self
43 $record = (new self())->forceFill([
44 'deleted_by' => user()->id,
45 'deletable_type' => $entity->getMorphClass(),
46 'deletable_id' => $entity->id,
53 public function logDescriptor(): string
55 $deletable = $this->deletable()->first();
57 if ($deletable instanceof Entity) {
58 return "Deletion ({$this->id}) for {$deletable->getType()} ({$deletable->id}) {$deletable->name}";
61 return "Deletion ({$this->id})";
65 * Get a URL for this specific deletion.
67 public function getUrl(string $path = 'restore'): string
69 return url("/settings/recycle-bin/{$this->id}/" . ltrim($path, '/'));