*/ protected function casts(): array { return [ Submission::ATTRIBUTE_ACTIONABLE_TYPE => 'string', Submission::ATTRIBUTE_ACTIONABLE_ID => 'int', Submission::ATTRIBUTE_ASSIGNEE => 'int', Submission::ATTRIBUTE_CHANGES => 'array', Submission::ATTRIBUTE_FINISHED_AT => 'datetime', Submission::ATTRIBUTE_LOCKED => 'bool', Submission::ATTRIBUTE_NOTES => 'string', Submission::ATTRIBUTE_SOURCE => 'string', Submission::ATTRIBUTE_STATUS => SubmissionStatus::class, Submission::ATTRIBUTE_SUBMITTED_TYPE => 'string', Submission::ATTRIBUTE_SUBMITTED_ID => 'int', Submission::ATTRIBUTE_USER => 'int', ]; } public function getName(): string { return strval($this->getKey()); } public function getSubtitle(): string { if ($user = $this->user) { return $user->getName(); } return strval($this->getKey()); } public function isLocked(): bool { return $this->locked; } /** * Scope a query to only include pending submissions. */ #[Scope] protected function pending(Builder $query): void { $query->where(Submission::ATTRIBUTE_STATUS, SubmissionStatus::PENDING->value); } /** * Get the model that references the submission. * * @return MorphTo */ public function actionable(): MorphTo { return $this->morphTo(); } /** * Get the submitted model that references the submission. * * @return MorphTo */ public function submitted(): MorphTo { return $this->morphTo(); } /** * Get the moderator that is working on the submission. * * @return BelongsTo */ public function assignee(): BelongsTo { return $this->belongsTo(User::class, Submission::ATTRIBUTE_ASSIGNEE); } /** * Get the user that made the submission. * * @return BelongsTo */ public function user(): BelongsTo { return $this->belongsTo(User::class, Submission::ATTRIBUTE_USER); } public function submissionSynonyms(): HasMany { return $this->hasMany(SubmissionComparison::class) ->where(SubmissionComparison::ATTRIBUTE_SUBMITTED_TYPE, 'submission_synonym'); } public function submissionResources(): HasMany { return $this->hasMany(SubmissionComparison::class) ->where(SubmissionComparison::ATTRIBUTE_SUBMITTED_TYPE, 'submission_resource'); } public function submissionSeries(): HasMany { return $this->hasMany(SubmissionComparison::class) ->where(SubmissionComparison::ATTRIBUTE_SUBMITTED_TYPE, 'submission_series'); } public function submissionStudios(): HasMany { return $this->hasMany(SubmissionComparison::class) ->where(SubmissionComparison::ATTRIBUTE_SUBMITTED_TYPE, 'submission_studio'); } }