Passed
Push — master ( 87a739...e5254c )
by Ash
04:19 queued 01:40
created

AnalyticTracked::broadcastWith()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 9
Code Lines 6

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 1
eloc 6
nc 1
nop 0
dl 0
loc 9
rs 10
c 0
b 0
f 0
1
<?php
2
3
namespace AshPowell\APAnalytics\Events;
4
5
use Illuminate\Broadcasting\InteractsWithSockets;
6
use Illuminate\Broadcasting\PresenceChannel;
7
use Illuminate\Contracts\Broadcasting\ShouldBroadcast;
8
use Illuminate\Foundation\Events\Dispatchable;
9
use Illuminate\Queue\SerializesModels;
10
use Illuminate\Support\Arr;
11
12
class AnalyticTracked implements ShouldBroadcast
13
{
14
    use Dispatchable, InteractsWithSockets, SerializesModels;
0 ignored issues
show
introduced by
The trait Illuminate\Queue\SerializesModels requires some properties which are not provided by AshPowell\APAnalytics\Events\AnalyticTracked: $id, $class, $connection, $relations
Loading history...
15
16
    public $collection;
17
    public $basename;
18
    public $item;
19
    public $itemId;
20
21
    /**
22
     * Create a new event instance.
23
     *
24
     * @return void
25
     * @param  mixed $item
26
     * @param  mixed $basename
27
     * @param  mixed $collection
28
     */
29
    public function __construct($collection, $basename, $item)
30
    {
31
        $this->queue = 'analytics';
0 ignored issues
show
Bug Best Practice introduced by
The property queue does not exist. Although not strictly required by PHP, it is generally a best practice to declare properties explicitly.
Loading history...
32
33
        $this->collection = $collection;
34
        $this->basename   = $basename;
35
        $this->item       = $item;
36
        $this->itemId     = Arr::get($this->item, "{$this->basename}.id");
37
    }
38
39
    /**
40
     * Get the channels the event should broadcast on.
41
     *
42
     * @return \Illuminate\Broadcasting\Channel|array
43
     */
44
    public function broadcastOn()
45
    {
46
        return new PresenceChannel("analytics.{$this->collection}.{$this->basename}.{$this->itemId}");
47
    }
48
49
    /**
50
     * Get the data to broadcast.
51
     *
52
     * @return array
53
     */
54
    public function broadcastWith()
55
    {
56
        $created_at = Arr::get($this->item, 'created_at') ?? mongoTime();
57
58
        return [
59
            'collection' => $this->collection,
60
            'itemType'   => $this->basename,
61
            'itemId'     => $this->itemId,
62
            'created_at' => $created_at->toDateTime()->format('c'),
63
        ];
64
    }
65
}
66