Ticket::getTable()   A
last analyzed

Complexity

Conditions 1
Paths 1

Size

Total Lines 4

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
dl 0
loc 4
rs 10
c 0
b 0
f 0
cc 1
nc 1
nop 0
1
<?php
2
3
4
namespace RexlManu\LaravelTickets\Models;
5
6
7
use Illuminate\Database\Eloquent\Model;
8
use Illuminate\Support\Collection;
9
use RexlManu\LaravelTickets\Traits\HasConfigModel;
10
11
/**
12
 * Class Ticket
13
 *
14
 * The main data model for the ticket system
15
 *
16
 * @package RexlManu\LaravelTickets\Models
17
 */
18
class Ticket extends Model
19
{
20
    use HasConfigModel;
21
22
    protected $fillable = [
23
        'subject',
24
        'priority',
25
        'state',
26
        'category_id',
27
    ];
28
29
    public function getTable()
30
    {
31
        return config('laravel-tickets.database.tickets-table');
32
    }
33
34
    /**
35
     * returns every user that had sent a message in the ticket
36
     *
37
     * @param false $ticketCreatorIncluded if the ticket user should be included
38
     *
39
     * @return Collection
40
     */
41
    public function getRelatedUsers($ticketCreatorIncluded = false)
42
    {
43
        return $this
44
            ->messages()
45
            ->whereNotIn('user_id', $ticketCreatorIncluded ? [] : [ $this->user_id ])
46
            ->pluck('user_id')
47
            ->unique()
48
            ->values();
49
    }
50
51
    /**
52
     * Gives every message
53
     *
54
     * @return \Illuminate\Database\Eloquent\Relations\HasMany
55
     */
56
    public function messages()
57
    {
58
        return $this->hasMany(TicketMessage::class);
59
    }
60
61
    /**
62
     * Gets the creator of the ticket,
63
     * can be null if the user has created ticket himself
64
     *
65
     * @return \Illuminate\Database\Eloquent\Relations\BelongsTo|null
66
     */
67
    public function opener()
68
    {
69
        return $this->belongsTo(config('laravel-tickets.user'));
70
    }
71
72
    /**
73
     * The owner of the ticket
74
     *
75
     * @return \Illuminate\Database\Eloquent\Relations\BelongsTo
76
     */
77
    public function user()
78
    {
79
        return $this->belongsTo(config('laravel-tickets.user'));
80
    }
81
82
    /**
83
     * The category that the ticket belongs to
84
     *
85
     * @return \Illuminate\Database\Eloquent\Relations\BelongsTo
86
     */
87
    public function category()
88
    {
89
        return $this->belongsTo(TicketCategory::class);
90
    }
91
92
    /**
93
     * The ticket reference that the ticket binds to
94
     * Can be null if the user hasnt selected any reference
95
     *
96
     * @return \Illuminate\Database\Eloquent\Relations\HasOne
97
     */
98
    public function reference()
99
    {
100
        return $this->hasOne(TicketReference::class);
101
    }
102
103
    /**
104
     * Gives the complete ticket activities
105
     *
106
     * @return \Illuminate\Database\Eloquent\Relations\HasMany
107
     */
108
    public function activities()
109
    {
110
        return $this->hasMany(TicketActivity::class);
111
    }
112
113
    /**
114
     * Used for filtering the tickets by state
115
     *
116
     * @param $query
117
     * @param $state
118
     *
119
     * @return mixed
120
     */
121
    public function scopeState($query, $state)
122
    {
123
        return $query->whereIn('state', is_string($state) ? [ $state ] : $state);
124
    }
125
126
    /**
127
     * Used for filtering the tickets by priority
128
     *
129
     * @param $query
130
     * @param $priority
131
     *
132
     * @return mixed
133
     */
134
    public function scopePriority($query, $priority)
135
    {
136
        return $query->where('priority', $priority);
137
    }
138
}
139