Activity::subject()   A
last analyzed

Complexity

Conditions 2
Paths 2

Size

Total Lines 7
Code Lines 4

Duplication

Lines 0
Ratio 0 %

Importance

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