X-Git-Url: http://source.bookstackapp.com/bookstack/blobdiff_plain/3b31ac75ec41b3990cea770a9e48e2066bd8e9a3..refs/pull/5676/head:/app/Activity/Models/Comment.php diff --git a/app/Activity/Models/Comment.php b/app/Activity/Models/Comment.php index e513bdf3d..91cea4fe0 100644 --- a/app/Activity/Models/Comment.php +++ b/app/Activity/Models/Comment.php @@ -4,23 +4,30 @@ namespace BookStack\Activity\Models; use BookStack\App\Model; use BookStack\Users\Models\HasCreatorAndUpdater; +use BookStack\Util\HtmlContentFilter; use Illuminate\Database\Eloquent\Factories\HasFactory; +use Illuminate\Database\Eloquent\Relations\BelongsTo; use Illuminate\Database\Eloquent\Relations\MorphTo; /** * @property int $id - * @property string $text + * @property string $text - Deprecated & now unused (#4821) * @property string $html - * @property int|null $parent_id + * @property int|null $parent_id - Relates to local_id, not id * @property int $local_id + * @property string $entity_type + * @property int $entity_id + * @property int $created_by + * @property int $updated_by + * @property string $content_ref + * @property bool $archived */ -class Comment extends Model +class Comment extends Model implements Loggable { use HasFactory; use HasCreatorAndUpdater; - protected $fillable = ['text', 'parent_id']; - protected $appends = ['created', 'updated']; + protected $fillable = ['parent_id']; /** * Get the entity that this comment belongs to. @@ -30,6 +37,16 @@ class Comment extends Model return $this->morphTo('entity'); } + /** + * Get the parent comment this is in reply to (if existing). + */ + public function parent(): BelongsTo + { + return $this->belongsTo(Comment::class, 'parent_id', 'local_id', 'parent') + ->where('entity_type', '=', $this->entity_type) + ->where('entity_id', '=', $this->entity_id); + } + /** * Check if a comment has been updated since creation. */ @@ -38,23 +55,13 @@ class Comment extends Model return $this->updated_at->timestamp > $this->created_at->timestamp; } - /** - * Get created date as a relative diff. - * - * @return mixed - */ - public function getCreatedAttribute() + public function logDescriptor(): string { - return $this->created_at->diffForHumans(); + return "Comment #{$this->local_id} (ID: {$this->id}) for {$this->entity_type} (ID: {$this->entity_id})"; } - /** - * Get updated date as a relative diff. - * - * @return mixed - */ - public function getUpdatedAttribute() + public function safeHtml(): string { - return $this->updated_at->diffForHumans(); + return HtmlContentFilter::removeScriptsFromHtmlString($this->html ?? ''); } }