![]() Server : Apache System : Linux server2.corals.io 4.18.0-348.2.1.el8_5.x86_64 #1 SMP Mon Nov 15 09:17:08 EST 2021 x86_64 User : corals ( 1002) PHP Version : 7.4.33 Disable Function : exec,passthru,shell_exec,system Directory : /home/corals/dceprojects.corals.io/vendor/spatie/laravel-activitylog/src/Traits/ |
<?php namespace Spatie\Activitylog\Traits; use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Relations\MorphMany; use Illuminate\Database\Eloquent\SoftDeletes; use Illuminate\Support\Arr; use Illuminate\Support\Collection; use Spatie\Activitylog\ActivityLogger; use Spatie\Activitylog\ActivitylogServiceProvider; use Spatie\Activitylog\ActivityLogStatus; 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; } $attrs = $model->attributeValuesToBeLogged($eventName); if ($model->isLogEmpty($attrs) && ! $model->shouldSubmitEmptyLogs()) { return; } $logger = app(ActivityLogger::class) ->useLog($logName) ->performedOn($model) ->withProperties($attrs); if (method_exists($model, 'tapActivity')) { $logger->tap([$model, 'tapActivity'], $eventName); } $logger->log($description); }); }); } public function shouldSubmitEmptyLogs(): bool { return ! isset(static::$submitEmptyLogs) ? true : static::$submitEmptyLogs; } public function isLogEmpty($attrs): bool { return empty($attrs['attributes'] ?? []) && empty($attrs['old'] ?? []); } 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 { $logStatus = app(ActivityLogStatus::class); if (! $this->enableLoggingModelsEvents || $logStatus->disabled()) { 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())); } }