2019-08-26 20:18:45 +01:00
|
|
|
<?php
|
|
|
|
|
|
|
|
namespace App;
|
|
|
|
|
|
|
|
use App\Concerns\Models\HasTags;
|
|
|
|
use Illuminate\Database\Eloquent\Builder;
|
|
|
|
use Illuminate\Database\Eloquent\Model;
|
|
|
|
use Illuminate\Database\Eloquent\Relations\MorphTo;
|
|
|
|
use Illuminate\Http\Request;
|
|
|
|
use Laravel\Scout\Searchable;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* @method Builder withPrivate(bool|User|Request $private)
|
|
|
|
*/
|
|
|
|
class Post extends Model
|
|
|
|
{
|
|
|
|
use HasTags,
|
|
|
|
Searchable;
|
|
|
|
|
|
|
|
protected $fillable = [
|
|
|
|
'postable_type',
|
|
|
|
'postable_id',
|
|
|
|
'is_private',
|
|
|
|
];
|
|
|
|
|
|
|
|
protected $casts = [
|
|
|
|
'is_private' => 'bool',
|
|
|
|
];
|
|
|
|
|
|
|
|
public function postable(): MorphTo
|
|
|
|
{
|
|
|
|
return $this->morphTo();
|
|
|
|
}
|
|
|
|
|
|
|
|
public function scopeWithPrivate(Builder $query, $private = false): Builder
|
|
|
|
{
|
|
|
|
if ($private instanceof Request) {
|
|
|
|
$private = $private->user() instanceof User;
|
|
|
|
}
|
|
|
|
|
|
|
|
if ($private instanceof User) {
|
|
|
|
$private = true;
|
|
|
|
}
|
|
|
|
|
|
|
|
if ($private === false) {
|
|
|
|
return $query->where('is_private', 0);
|
|
|
|
}
|
|
|
|
|
|
|
|
return $query;
|
|
|
|
}
|
|
|
|
|
|
|
|
public function toSearchableArray()
|
|
|
|
{
|
2019-08-27 14:43:44 +01:00
|
|
|
return array_merge([
|
2019-08-26 20:18:45 +01:00
|
|
|
'id' => $this->id,
|
2019-08-27 14:43:44 +01:00
|
|
|
'date' => $this->created_at->toDateTimeString(),
|
|
|
|
], $this->postable->toSearchableArray());
|
2019-08-26 20:18:45 +01:00
|
|
|
}
|
|
|
|
}
|