Completed
Push — master ( 5e982c...5c3baa )
by Freek
05:59 queued 04:14
created

Activity::changes()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 6
Code Lines 4

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 1
eloc 4
nc 1
nop 0
dl 0
loc 6
rs 9.4285
c 0
b 0
f 0
1
<?php
2
3
namespace Spatie\Activitylog\Models;
4
5
use Illuminate\Support\Collection;
6
use Illuminate\Database\Eloquent\Model;
7
use Illuminate\Database\Eloquent\Builder;
8
use Illuminate\Database\Eloquent\Relations\MorphTo;
9
10
class Activity extends Model
11
{
12
    protected $table = 'activity_log';
13
14
    public $guarded = [];
15
16
    protected $casts = [
17
        'properties' => 'collection',
18
    ];
19
20
    public function subject(): MorphTo
21
    {
22
        if (config('activitylog.subject_returns_soft_deleted_models')) {
23
            return $this->morphTo()->withTrashed();
24
        }
25
26
        return $this->morphTo();
27
    }
28
29
    public function causer(): MorphTo
30
    {
31
        return $this->morphTo();
32
    }
33
34
    /**
35
     * Get the extra properties with the given name.
36
     *
37
     * @param string $propertyName
38
     *
39
     * @return mixed
40
     */
41
    public function getExtraProperty(string $propertyName)
42
    {
43
        return array_get($this->properties->toArray(), $propertyName);
44
    }
45
46
    public function changes(): Collection
47
    {
48
        return collect(array_filter($this->properties->toArray(), function ($key) {
49
            return in_array($key, ['attributes', 'old']);
50
        }, ARRAY_FILTER_USE_KEY));
51
    }
52
53
    public function scopeInLog(Builder $query, ...$logNames): Builder
54
    {
55
        if (is_array($logNames[0])) {
56
            $logNames = $logNames[0];
57
        }
58
59
        return $query->whereIn('log_name', $logNames);
60
    }
61
62
    /**
63
     * Scope a query to only include activities by a given causer.
64
     *
65
     * @param \Illuminate\Database\Eloquent\Builder $query
66
     * @param \Illuminate\Database\Eloquent\Model $causer
67
     *
68
     * @return \Illuminate\Database\Eloquent\Builder
69
     */
70
    public function scopeCausedBy(Builder $query, Model $causer): Builder
71
    {
72
        return $query
73
            ->where('causer_type', $causer->getMorphClass())
74
            ->where('causer_id', $causer->getKey());
75
    }
76
77
    /**
78
     * Scope a query to only include activities for a given subject.
79
     *
80
     * @param \Illuminate\Database\Eloquent\Builder $query
81
     * @param \Illuminate\Database\Eloquent\Model $subject
82
     *
83
     * @return \Illuminate\Database\Eloquent\Builder
84
     */
85
    public function scopeForSubject(Builder $query, Model $subject): Builder
86
    {
87
        return $query
88
            ->where('subject_type', $subject->getMorphClass())
89
            ->where('subject_id', $subject->getKey());
90
    }
91
}
92