-
app/Models/Traits/Loggable.php
Open in GitHubuse Azuriom\Models\ActionLog; use Illuminate\Database\Eloquent\Model; trait Loggable { protected static function bootLoggable(): void { $events = static::$logEvents ?? ['created', 'updated', 'deleted']; foreach ($events as $event) { static::$event(function (Model $model) use ($event) { $action = str_replace('_', '-', $model->getTable()).'.'.$event; $log = ActionLog::log($action, $model, $model->getLogData($event)); if ($log !== null && $event === 'updated') { $model->createLogEntries($log, $event); } }); } } protected function getLogData(string $event): array { return []; } protected function shouldLogAttribute(string $attribute): bool { if ($attribute === $this->getCreatedAtColumn() || $attribute === $this->getUpdatedAtColumn()) { return false; } if (count($this->getVisible()) > 0) { return in_array($attribute, $this->getVisible(), true); } return ! in_array($attribute, $this->getHidden(), true); } public function createLogEntries(ActionLog $log): void { foreach ($this->getChanges() as $attribute => $value) { $original = $this->getOriginal($attribute); if ($this->shouldLogAttribute($attribute) && $this->isValidLogType($original) && $this->isValidLogType($value)) { $log->entries()->create([ 'attribute' => $attribute, 'old_value' => $original, 'new_value' => $value, ]); } } } protected function isValidLogType($value): bool { return $value === null || is_bool($value) || is_string($value) || is_numeric($value); } }
-
app/Models/Server.php
Open in GitHubuse Azuriom\Models\Traits\Loggable; class Server extends Model { use Loggable; // ... }
-
app/Models/Page.php
Open in GitHubuse Azuriom\Models\Traits\Loggable; class Page extends Model { use Loggable; // ... }