3 namespace BookStack\Activity\Models;
5 use BookStack\App\Model;
6 use BookStack\Users\Models\HasCreatorAndUpdater;
7 use Illuminate\Database\Eloquent\Factories\HasFactory;
8 use Illuminate\Database\Eloquent\Relations\BelongsTo;
9 use Illuminate\Database\Eloquent\Relations\MorphTo;
13 * @property string $text
14 * @property string $html
15 * @property int|null $parent_id
16 * @property int $local_id
17 * @property string $entity_type
18 * @property int $entity_id
20 class Comment extends Model implements Loggable
23 use HasCreatorAndUpdater;
25 protected $fillable = ['text', 'parent_id'];
26 protected $appends = ['created', 'updated'];
29 * Get the entity that this comment belongs to.
31 public function entity(): MorphTo
33 return $this->morphTo('entity');
37 * Get the parent comment this is in reply to (if existing).
39 public function parent(): BelongsTo
41 return $this->belongsTo(Comment::class);
45 * Check if a comment has been updated since creation.
47 public function isUpdated(): bool
49 return $this->updated_at->timestamp > $this->created_at->timestamp;
53 * Get created date as a relative diff.
55 public function getCreatedAttribute(): string
57 return $this->created_at->diffForHumans();
61 * Get updated date as a relative diff.
63 public function getUpdatedAttribute(): string
65 return $this->updated_at->diffForHumans();
68 public function logDescriptor(): string
70 return "Comment #{$this->local_id} (ID: {$this->id}) for {$this->entity_type} (ID: {$this->entity_id})";