%PDF- %PDF-
Direktori : /var/www/html/diaspora/api/vendor/spatie/laravel-activitylog/src/Traits/ |
Current File : /var/www/html/diaspora/api/vendor/spatie/laravel-activitylog/src/Traits/LogsActivity.php |
<?php namespace Spatie\Activitylog\Traits; use Illuminate\Support\Arr; use Illuminate\Support\Collection; use Spatie\Activitylog\ActivityLogger; use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\SoftDeletes; use Spatie\Activitylog\ActivitylogServiceProvider; use Illuminate\Database\Eloquent\Relations\MorphMany; trait LogsActivity { use DetectsChanges; protected $enableLoggingModelsEvents = true; protected static function bootLogsActivity() { static::eventsToBeRecorded()->each(function ($eventName) { return static::$eventName(function (Model $model) use ($eventName) { if (! $model->shouldLogEvent($eventName)) { return; } $description = $model->getDescriptionForEvent($eventName); $logName = $model->getLogNameToUse($eventName); if ($description == '') { return; } $logger = app(ActivityLogger::class) ->useLog($logName) ->performedOn($model) ->withProperties($model->attributeValuesToBeLogged($eventName)); if (method_exists($model, 'tapActivity')) { $logger->tap([$model, 'tapActivity'], $eventName); } $logger->log($description); }); }); } public function disableLogging() { $this->enableLoggingModelsEvents = false; return $this; } public function enableLogging() { $this->enableLoggingModelsEvents = true; return $this; } public function activities(): MorphMany { return $this->morphMany(ActivitylogServiceProvider::determineActivityModel(), 'subject'); } public function getDescriptionForEvent(string $eventName): string { return $eventName; } public function getLogNameToUse(string $eventName = ''): string { if (isset(static::$logName)) { return static::$logName; } return config('activitylog.default_log_name'); } /* * Get the event names that should be recorded. */ protected static function eventsToBeRecorded(): Collection { if (isset(static::$recordEvents)) { return collect(static::$recordEvents); } $events = collect([ 'created', 'updated', 'deleted', ]); if (collect(class_uses_recursive(static::class))->contains(SoftDeletes::class)) { $events->push('restored'); } return $events; } public function attributesToBeIgnored(): array { if (! isset(static::$ignoreChangedAttributes)) { return []; } return static::$ignoreChangedAttributes; } protected function shouldLogEvent(string $eventName): bool { if (! $this->enableLoggingModelsEvents) { return false; } if (! in_array($eventName, ['created', 'updated'])) { return true; } if (Arr::has($this->getDirty(), 'deleted_at')) { if ($this->getDirty()['deleted_at'] === null) { return false; } } //do not log update event if only ignored attributes are changed return (bool) count(Arr::except($this->getDirty(), $this->attributesToBeIgnored())); } }