ConvoyPanel/app/Models/ActivityLog.php
2024-01-01 21:44:45 -06:00

81 lines
2 KiB
PHP

<?php
namespace Convoy\Models;
use Carbon\Carbon;
use Illuminate\Database\Eloquent\Builder;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\HasMany;
use Illuminate\Database\Eloquent\Relations\MorphTo;
use LogicException;
class ActivityLog extends Model
{
public $timestamps = false;
protected $guarded = [
'id',
'timestamp',
];
protected $casts = [
'properties' => 'collection',
'timestamp' => 'datetime',
];
protected $with = ['subjects'];
public static array $validationRules = [
'event' => ['required', 'string'],
'batch' => ['nullable', 'uuid'],
'ip' => ['required', 'string'],
'description' => ['nullable', 'string'],
'properties' => ['array'],
];
public function actor(): MorphTo
{
$morph = $this->morphTo();
if (method_exists($morph, 'withTrashed')) {
return $morph->withTrashed();
}
return $morph;
}
public function subjects(): HasMany
{
return $this->hasMany(ActivityLogSubject::class);
}
public function scopeForEvent(Builder $builder, string $action): Builder
{
return $builder->where('event', $action);
}
/**
* Scopes a query to only return results where the actor is a given model.
*/
public function scopeForActor(Builder $builder, Model $actor): Builder
{
return $builder->whereMorphedTo('actor', $actor);
}
/**
* Returns models to be pruned.
*
* @see https://laravel.com/docs/9.x/eloquent#pruning-models
*/
public function prunable(): ActivityLog
{
if (is_null(config('activity.prune_days'))) {
throw new LogicException(
'Cannot prune activity logs: no "prune_days" configuration value is set.',
);
}
return static::where(
'created_at', '<=', Carbon::now()->subDays(config('activity.prune_days')),
);
}
}