GitHub Access Token became invalid

It seems like the GitHub access token used for retrieving details about this repository from GitHub became invalid. This might prevent certain types of inspections from being run (in particular, everything related to pull requests).
Please ask an admin of your repository to re-new the access token on this website.
Completed
Push — master ( 291197...6788fe )
by Ash
03:21
created

TrackAnalyticListener::handle()   B

Complexity

Conditions 10
Paths 60

Size

Total Lines 43
Code Lines 28

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
eloc 28
dl 0
loc 43
rs 7.6666
c 0
b 0
f 0
cc 10
nc 60
nop 1

How to fix   Complexity   

Long Method

Small methods make your code easier to understand, in particular if combined with a good name. Besides, if your method is small, finding a good name is usually much easier.

For example, if you find yourself adding comments to a method's body, this is usually a good sign to extract the commented part to a new method, and use the comment as a starting point when coming up with a good name for this new method.

Commonly applied refactorings include:

1
<?php
2
3
namespace AshPowell\APAnalytics\Listeners;
4
5
use AshPowell\APAnalytics\Events\TrackAnalytic;
6
use Illuminate\Queue\InteractsWithQueue;
7
use Illuminate\Contracts\Queue\ShouldQueue;
8
9
use Illuminate\Bus\Queueable;
10
use Illuminate\Database\Eloquent\Collection;
11
use Illuminate\Database\Eloquent\Model;
12
use Illuminate\Foundation\Bus\Dispatchable;
13
use Illuminate\Pagination\LengthAwarePaginator;
14
use Illuminate\Pagination\Paginator;
15
use Illuminate\Queue\SerializesModels;
16
use Illuminate\Support\Facades\DB;
17
use Log;
18
19
class TrackAnalyticListener implements ShouldQueue
20
{
21
    /**
22
     * The name of the queue the job should be sent to.
23
     *
24
     * @var string|null
25
     */
26
    public $queue = 'analytics';
27
28
    /**
29
     * Create the event listener.
30
     *
31
     * @return void
32
     */
33
    public function __construct()
34
    {
35
        //
36
    }
37
38
    /**
39
     * Handle the event.
40
     *
41
     * @param  TrackAnalytic  $event
42
     * @return void
43
     */
44
    public function handle(TrackAnalytic $event)
45
    {
46
        $connection = $event->mongodb_connection;
47
        $collection = $event->collection;
48
        $items      = $event->items;
49
        $userId     = $event->userId;
50
        $params     = $event->params;
51
52
        $valid = ($items instanceof Collection) ? $items->count() : ($items instanceof Model) ? 1 : count($items);
53
54
        if ($valid) {
55
            $collection = str_plural($collection);
56
            $items      = array_wrap(($items instanceof Paginator || $items instanceof LengthAwarePaginator) ? $items->items() : $items);
57
            $postEvent  = in_array($collection, config('apanalytics.format_collections'));
58
            $event      = $postEvent ? [] : $this->addExtraEventData($items, $userId, $params);
59
60
            try {
61
                if ($postEvent) {
62
                    foreach ($items as $object) {
63
                        $basename = strtolower(class_basename($object));
64
65
                        $data = [
66
                            $basename => [
67
                                'id'   => $object->id ?? null,
68
                                'type' => $object->type ?? null,
69
                            ],
70
                            'business' => [
71
                                'id' => $object->business->id ?? null,
72
                            ],
73
                        ];
74
75
                        // Add Extra Stuff
76
                        $data = $this->addExtraEventData($data, $userId, $params);
77
78
                        $event[] = $data;
79
                    }
80
                }
81
82
                return DB::connection($connection)
83
                    ->collection($collection)
0 ignored issues
show
Bug introduced by
The method collection() does not exist on Illuminate\Database\ConnectionInterface. It seems like you code against a sub-type of Illuminate\Database\ConnectionInterface such as Jenssegers\Mongodb\Connection. ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-call  annotation

83
                    ->/** @scrutinizer ignore-call */ collection($collection)
Loading history...
84
                    ->insert($event);
85
            } catch (\Exception $e) {
86
                Log::error('Error Logging Event', ['error' => $e->getMessage()]);
87
            }
88
        }
89
    }
90
91
    private function addExtraEventData($data, $userId, $params)
92
    {
93
        // Merge our extra parameters
94
        if (is_array($params) && count($params)) {
95
            $data = array_merge($data, $params);
96
        }
97
98
        // Standard stuff
99
        $data = array_merge($data, [
100
            'user_id'    => $userId ?? auth()->id() ?? null,
101
            'updated_at' => mongoTime(),
102
            'created_at' => mongoTime(),
103
        ]);
104
105
        return $data;
106
    }
107
}
108