Passed
Pull Request — master (#9)
by
unknown
17:20
created

MatomoController::visitorSummary()   A

Complexity

Conditions 2
Paths 2

Size

Total Lines 17
Code Lines 14

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 2
eloc 14
nc 2
nop 1
dl 0
loc 17
rs 9.7998
c 0
b 0
f 0
1
<?php
2
3
namespace Chuckbe\Chuckcms\Controllers;
4
5
use Illuminate\Http\Request;
6
use Illuminate\Foundation\Bus\DispatchesJobs;
7
use Illuminate\Routing\Controller as BaseController;
8
use Illuminate\Foundation\Validation\ValidatesRequests;
9
use Illuminate\Foundation\Auth\Access\AuthorizesRequests;
10
use Chuckbe\Chuckcms\Models\Site;
11
use Chuckbe\Chuckcms\Chuck\SiteRepository;
12
use Chuckbe\Chuckcms\Models\User;
13
use ChuckSite;
0 ignored issues
show
Bug introduced by
The type ChuckSite was not found. Maybe you did not declare it correctly or list all dependencies?

The issue could also be caused by a filter entry in the build configuration. If the path has been excluded in your configuration, e.g. excluded_paths: ["lib/*"], you can move it to the dependency path list as follows:

filter:
    dependency_paths: ["lib/*"]

For further information see https://scrutinizer-ci.com/docs/tools/php/php-scrutinizer/#list-dependency-paths

Loading history...
14
use Chuckbe\Chuckcms\Chuck\Matomo\QueryFactory;
15
16
class MatomoController extends BaseController
17
{
18
    use AuthorizesRequests, DispatchesJobs, ValidatesRequests;
19
20
    private $site;
21
    private $siteRepository;
22
    private $user;
23
    private $siteId;
24
    private $authToken;
25
26
    /**
27
     * Create a new controller instance.
28
     *
29
     * @return void
30
     */
31
     public function __construct(Site $site, SiteRepository $siteRepository, User $user)
32
    {
33
        $this->site = $site;
34
        $this->siteId = ChuckSite::getSetting('integrations.matomo-site-id');
35
        $this->authToken = ChuckSite::getSetting('integrations.matomo-auth-key');
36
        $this->siteRepository = $siteRepository;
37
        $this->user = $user;
38
    }
39
40
 
41
    public function reportingApi(Request $request)
42
    {
43
        $data = $request->all();
44
        $matomoUrl = ChuckSite::getSetting('integrations.matomo-site-url') !== null ? ChuckSite::getSetting('integrations.matomo-site-url') : config('chuckcms.analytics.matomoURL');
45
        $query_factory = QueryFactory::create($matomoUrl);
46
        $query_factory
47
            ->set('idSite', $this->siteId)
48
            ->set('token_auth', $this->authToken);
49
        
50
        $date = 'today';
51
        $period = 'day';
52
        
53
        if($data["value"]["range"] !== "Today" || $data["value"]["range"] !== "Yesterday"){        
54
            if(isset($data["value"]["y2"],$data["value"]["m2"],$data["value"]["d2"])){
55
                $now = \Carbon\Carbon::now();
56
                $startdate = \Carbon\Carbon::createFromFormat('Y-m-d', $data["value"]["y2"].'-'.$data["value"]["m2"].'-'.$data["value"]["d2"]);
57
                $enddate = \Carbon\Carbon::createFromFormat('Y-m-d',$data["value"]["y1"].'-'.$data["value"]["m1"].'-'.$data["value"]["d1"]);
58
                $checkforrange = $now->diffInDays($enddate);
59
                $diff = $startdate->diffInDays($enddate);
60
                if($checkforrange !== 0){
61
                    $period = 'range';
62
                    $date = $data["value"]["y2"].'-'.$data["value"]["m2"].'-'.$data["value"]["d2"].','.$data["value"]["y1"].'-'.$data["value"]["m1"].'-'.$data["value"]["d1"];                    
63
                }else{
64
                    if($diff == 6){
65
                        $period = 'week';
66
                        $date = 'last7';
67
                    }
68
                    if($diff == 29){
69
                        $period = 'month';
70
                        $date = 'last30';
71
                    }
72
                }
73
            }      
74
        }
75
        if($data["value"]["range"] == "Today"){
76
            $date = 'today';
77
            $period = 'day';
78
        }
79
        if($data["value"]["range"] == "Yesterday"){
80
            $date = 'yesterday';
81
            $period = 'day';
82
        }
83
            
84
        $lastVisitsDetails = $query_factory->getQuery('Live.getLastVisitsDetails')
85
            ->setParameter('date', $date)
86
            ->setParameter('period', $period)
87
            ->setParameter('filter_limit', -1)
88
            ->execute()
89
            ->getResponse();
90
        
91
92
93
        return response()->json([
94
            'success'=>'success',
95
            'lastVisitsDetails' => $lastVisitsDetails,
96
            'matomoUrl' => $matomoUrl
97
        ]);
98
99
    }
100
101
    public function visitorSummary(Request $request)
102
    {
103
        $data = $request->all();
104
        $matomoUrl = ChuckSite::getSetting('integrations.matomo-site-url') !== null ? ChuckSite::getSetting('integrations.matomo-site-url') : config('chuckcms.analytics.matomoURL');
105
        $query_factory = QueryFactory::create($matomoUrl);
106
        $query_factory
107
            ->set('idSite', $this->siteId)
108
            ->set('token_auth', $this->authToken);
109
110
        $visitorProfile = $query_factory->getQuery('Live.getVisitorProfile')
111
            ->setParameter('visitorId', $data['visitorid'])
112
            ->execute()
113
            ->getResponse();
114
        return response()->json([
115
            'success'=>'success',
116
            'visitorProfile' => $visitorProfile,
117
            'matomoUrl' => $matomoUrl
118
        ]);
119
    }
120
121
    public function getHeatMaps(Request $request)
122
    {
123
        $data = $request->all();
0 ignored issues
show
Unused Code introduced by
The assignment to $data is dead and can be removed.
Loading history...
124
        $matomoUrl = ChuckSite::getSetting('integrations.matomo-site-url') !== null ? ChuckSite::getSetting('integrations.matomo-site-url') : config('chuckcms.analytics.matomoURL');
125
        $query_factory = QueryFactory::create($matomoUrl);
126
        $query_factory
127
            ->set('idSite', $this->siteId)
128
            ->set('token_auth', $this->authToken);
129
        
130
        $heatMaps = $query_factory->getQuery('HeatmapSessionRecording.getHeatmaps')
131
        ->execute()
132
        ->getResponse();
133
        
134
        // $heatmapTypes = $query_factory->getQuery('HeatmapSessionRecording.getAvailableHeatmapTypes')
135
        // ->execute()
136
        // ->getResponse();
137
138
        // $heatMap = $query_factory->getQuery('HeatmapSessionRecording.getRecordedHeatmap')
139
        // ->setParameter('idSiteHsr', get_object_vars($heatMaps[0])['idsitehsr'])
140
        // ->setParameter('heatmapType', "Scroll")
141
        // ->setParameter('deviceType', 'Desktop')
142
        // ->setParameter('date', 'yesterday')
143
        // ->setParameter('period', 'day')
144
        // ->execute()
145
        // ->getResponse();
146
147
148
149
        return response()->json([
150
            'success'=>'success',
151
            'matomoUrl' => $matomoUrl,
152
            'heatMaps' => $heatMaps
153
        ]);
154
        
155
    }
156
157
    public function getSessionRecordings(Request $request)
158
    {
159
        $data = $request->all();
160
        $matomoUrl = ChuckSite::getSetting('integrations.matomo-site-url') !== null ? ChuckSite::getSetting('integrations.matomo-site-url') : config('chuckcms.analytics.matomoURL');
161
        if($data["value"]["range"] !== "Today" || $data["value"]["range"] !== "Yesterday"){
162
            if(isset($data["value"]["y2"]) && isset($data["value"]["y1"])){
163
                $now = \Carbon\Carbon::now();
164
                $startdate = \Carbon\Carbon::createFromFormat('Y-m-d', $data["value"]["y2"].'-'.$data["value"]["m2"].'-'.$data["value"]["d2"]);
165
                $enddate = \Carbon\Carbon::createFromFormat('Y-m-d',$data["value"]["y1"].'-'.$data["value"]["m1"].'-'.$data["value"]["d1"]);
166
                $checkforrange = $now->diffInDays($enddate);
167
          
168
                if($checkforrange !== 0){
169
                    $period = 'range';
170
                    $date = date('Y-m-d', strtotime($startdate)).",".date('Y-m-d', strtotime($enddate));
0 ignored issues
show
Bug introduced by
It seems like $startdate can also be of type false; however, parameter $datetime of strtotime() does only seem to accept string, maybe add an additional type check? ( Ignorable by Annotation )

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

170
                    $date = date('Y-m-d', strtotime(/** @scrutinizer ignore-type */ $startdate)).",".date('Y-m-d', strtotime($enddate));
Loading history...
171
                }
172
            }
173
        }
174
        if($data["value"]["range"] == "Today"){
175
            $date = 'today';
176
            $period = 'day';
177
        }
178
        if($data["value"]["range"] == "Yesterday"){
179
            $date = 'yesterday';
180
            $period = 'day';
181
        }
182
        
183
        
184
        
185
        $query_factory = QueryFactory::create($matomoUrl);
186
        $query_factory
187
            ->set('idSite', $this->siteId)
188
            ->set('token_auth', $this->authToken);
189
190
        $sessionRecordings = $query_factory->getQuery('HeatmapSessionRecording.getSessionRecordings')
191
            ->execute()
192
            ->getResponse();  
193
        
194
        
195
        if (!empty($sessionRecordings)) {
196
            $recordedSessions = $query_factory->getQuery('HeatmapSessionRecording.getRecordedSessions')
197
            ->setParameter('idSiteHsr', get_object_vars($sessionRecordings[0])['idsitehsr'])
198
            ->setParameter('date', $date)
0 ignored issues
show
Comprehensibility Best Practice introduced by
The variable $date does not seem to be defined for all execution paths leading up to this point.
Loading history...
199
            ->setParameter('period', $period)
0 ignored issues
show
Comprehensibility Best Practice introduced by
The variable $period does not seem to be defined for all execution paths leading up to this point.
Loading history...
200
            ->setParameter('filter_limit', -1)
201
            ->execute()
202
            ->getResponse();
203
        }else{
204
            $recordedSessions = [];
205
        }
206
        
207
208
        
209
        return response()->json([
210
            'success'=>'success',
211
            'matomoUrl' => $matomoUrl,
212
            'sessionRecordings' => $sessionRecordings,
213
            'recordedSessions'=> $recordedSessions,
214
            'sitehrs' => empty($sessionRecordings) ? null :get_object_vars($sessionRecordings[0])['idsitehsr']
215
        ]);
216
217
    }
218
219
    public function getRecordedSession(Request $request)
220
    {
221
        $data = $request->all();
222
        $matomoUrl = ChuckSite::getSetting('integrations.matomo-site-url') !== null ? ChuckSite::getSetting('integrations.matomo-site-url') : config('chuckcms.analytics.matomoURL');
223
        $query_factory = QueryFactory::create($matomoUrl);
224
        $query_factory
225
            ->set('idSite', $this->siteId)
226
            ->set('token_auth', $this->authToken);
227
    
228
        $recordedSessions = $query_factory->getQuery('HeatmapSessionRecording.getRecordedSession')
229
            ->setParameter('idSiteHsr', $data["idSiteHsr"])
230
            ->setParameter('idLogHsr', $data["idLogHsr"])
231
            ->setParameter('filter_limit', -1)
232
            ->execute()
233
            ->getResponse();
234
235
        return response()->json([
236
            'success'=>'success',
237
            'matomoUrl' => $matomoUrl,
238
            'recordedSession' => $recordedSessions
239
        ]);
240
        
241
    }
242
243
    public function getLiveCounter(Request $request)
244
    {
245
        $data = $request->all();
0 ignored issues
show
Unused Code introduced by
The assignment to $data is dead and can be removed.
Loading history...
246
        $matomoUrl = ChuckSite::getSetting('integrations.matomo-site-url') !== null ? ChuckSite::getSetting('integrations.matomo-site-url') : config('chuckcms.analytics.matomoURL');
247
        $query_factory = QueryFactory::create($matomoUrl);
248
        $query_factory
249
            ->set('idSite', $this->siteId)
250
            ->set('token_auth', $this->authToken);
251
        
252
        $liveCounter = $query_factory->getQuery('Live.getCounters')
253
            ->setParameter('lastMinutes', 3)
254
            ->execute()
255
            ->getResponse();
256
257
        return response()->json([
258
            'success'=>'success',
259
            'liveCounter' => $liveCounter
260
        ]);
261
    }
262
263
    public function getVisitsData(Request $request)
264
    {
265
        $data = $request->all();
266
        $imgDate = '';
267
        if($data["value"]["range"] !== "Today" || $data["value"]["range"] !== "Yesterday"){        
268
            if(isset($data["value"]["y2"],$data["value"]["m2"],$data["value"]["d2"])){
269
                $now = \Carbon\Carbon::now();
270
                $startdate = \Carbon\Carbon::createFromFormat('Y-m-d', $data["value"]["y2"].'-'.$data["value"]["m2"].'-'.$data["value"]["d2"]);
271
                $enddate = \Carbon\Carbon::createFromFormat('Y-m-d',$data["value"]["y1"].'-'.$data["value"]["m1"].'-'.$data["value"]["d1"]);
272
                $checkforrange = $now->diffInDays($enddate);
273
                $diff = $startdate->diffInDays($enddate);
274
                if($checkforrange !== 0){
275
                    $period = 'range';
276
                    $date = $data["value"]["y2"].'-'.$data["value"]["m2"].'-'.$data["value"]["d2"].','.$data["value"]["y1"].'-'.$data["value"]["m1"].'-'.$data["value"]["d1"];                    
277
                    $imgDate = $date;
278
                }else{
279
                    $imgDate = $data["value"]["y2"].'-'.$data["value"]["m2"].'-'.$data["value"]["d2"].','.$data["value"]["y1"].'-'.$data["value"]["m1"].'-'.$data["value"]["d1"];
280
                    if($diff == 6){
281
                        $period = 'week';
282
                        $date = 'last7';
283
                    }
284
                    if($diff == 29){
285
                        $period = 'month';
286
                        $date = 'last30';
287
                    }
288
                }
289
            }      
290
        }
291
        if($data["value"]["range"] == "Today"){
292
            $date = 'today';
293
            $period = 'day';
294
            $imgDate = date('Y-m-d').",".date('Y-m-d', strtotime(date('Y-m-d')." +2 day"));
295
        }
296
        if($data["value"]["range"] == "Yesterday"){
297
            $date = 'yesterday';
298
            $period = 'day';
299
            $imgDate = date('Y-m-d', strtotime(date('Y-m-d')." -1 day")).",".date('Y-m-d', strtotime(date('Y-m-d')." +1 day"));
300
        }
301
        $matomoUrl = ChuckSite::getSetting('integrations.matomo-site-url') !== null ? ChuckSite::getSetting('integrations.matomo-site-url') : config('chuckcms.analytics.matomoURL');
302
        $query_factory = QueryFactory::create($matomoUrl);
303
        $query_factory
304
            ->set('idSite', $this->siteId)
305
            ->set('token_auth', $this->authToken);
306
        
307
        $data = $query_factory->getQuery('API.get ')
308
            ->setParameter('date', $date)
0 ignored issues
show
Comprehensibility Best Practice introduced by
The variable $date does not seem to be defined for all execution paths leading up to this point.
Loading history...
309
            ->setParameter('period', $period)
0 ignored issues
show
Comprehensibility Best Practice introduced by
The variable $period does not seem to be defined for all execution paths leading up to this point.
Loading history...
310
            ->execute()
311
            ->getResponse();
312
        
313
            
314
        return response()->json([
315
                'success'=>'success',
316
                'visitimg'=> $matomoUrl.'/index.php?forceView=1&viewDataTable=sparkline&module=API&action=get&idSite='.$this->siteId.'&period='.$period.'&date='.$imgDate.'&segment=&showtitle=1&random=6179&columns=nb_visits%2Cnb_uniq_visitors&token_auth='.$this->authToken,
317
                'avgvisitimg'=> $matomoUrl.'/index.php?forceView=1&viewDataTable=sparkline&module=API&action=get&idSite='.$this->siteId.'&period='.$period.'&date='.$imgDate.'&showtitle=1&random=6179&columns=avg_time_on_site&token_auth='.$this->authToken,
318
                'bouncerateimg'=> $matomoUrl.'/index.php?forceView=1&viewDataTable=sparkline&module=API&idSite='.$this->siteId.'&period='.$period.'&date='.$imgDate.'&columns=bounce_rate&token_auth='.$this->authToken,
319
                'actions_per_visit_img'=> $matomoUrl.'/index.php?forceView=1&viewDataTable=sparkline&module=API&action=get&idSite='.$this->siteId.'&period='.$period.'&date='.$imgDate.'&columns=nb_actions_per_visit&token_auth='.$this->authToken,
320
                'pageviewimg' =>  $matomoUrl.'/index.php?forceView=1&viewDataTable=sparkline&module=API&action=get&idSite='.$this->siteId.'&period='.$period.'&date='.$imgDate.'&columns=nb_pageviews%2Cnb_uniq_pageviews&token_auth='.$this->authToken,
321
                'searchesandkeywordsimg' => $matomoUrl.'/index.php?forceView=1&viewDataTable=sparkline&module=API&action=get&idSite='.$this->siteId.'&period='.$period.'&date='.$imgDate.'&columns=nb_searches%2Cnb_keywords&token_auth='.$this->authToken,
322
                'downloadsimg' => $matomoUrl.'/index.php?forceView=1&viewDataTable=sparkline&module=API&action=get&idSite='.$this->siteId.'&period='.$period.'&date='.$imgDate.'&columns=nb_downloads%2Cnb_uniq_downloads&token_auth='.$this->authToken,
323
                'outlinksimg' => $matomoUrl.'/index.php?forceView=1&viewDataTable=sparkline&module=API&action=get&idSite='.$this->siteId.'&period='.$period.'&date='.$imgDate.'&columns=nb_outlinks%2Cnb_uniq_outlinks&token_auth='.$this->authToken,
324
                'maxactionsimg' => $matomoUrl.'/index.php?forceView=1&viewDataTable=sparkline&module=API&action=get&idSite='.$this->siteId.'&period='.$period.'&date='.$imgDate.'&columns=max_actions&token_auth='.$this->authToken,
325
                'data'=> $data
326
            ]);
327
    }
328
329
    public function getReferrers(Request $request)
330
    {
331
        $data = $request->all();
332
        if($data["value"]["range"] !== "Today" || $data["value"]["range"] !== "Yesterday"){        
333
            if(isset($data["value"]["y2"],$data["value"]["m2"],$data["value"]["d2"])){
334
                $now = \Carbon\Carbon::now();
335
                $startdate = \Carbon\Carbon::createFromFormat('Y-m-d', $data["value"]["y2"].'-'.$data["value"]["m2"].'-'.$data["value"]["d2"]);
336
                $enddate = \Carbon\Carbon::createFromFormat('Y-m-d',$data["value"]["y1"].'-'.$data["value"]["m1"].'-'.$data["value"]["d1"]);
337
                $checkforrange = $now->diffInDays($enddate);
338
                $diff = $startdate->diffInDays($enddate);
339
                if($checkforrange !== 0){
340
                    $period = 'range';
341
                    $date = $data["value"]["y2"].'-'.$data["value"]["m2"].'-'.$data["value"]["d2"].','.$data["value"]["y1"].'-'.$data["value"]["m1"].'-'.$data["value"]["d1"];                    
342
                    $imgDate = $date;
0 ignored issues
show
Unused Code introduced by
The assignment to $imgDate is dead and can be removed.
Loading history...
343
                }else{
344
                    $imgDate = $data["value"]["y2"].'-'.$data["value"]["m2"].'-'.$data["value"]["d2"].','.$data["value"]["y1"].'-'.$data["value"]["m1"].'-'.$data["value"]["d1"];
345
                    if($diff == 6){
346
                        $period = 'week';
347
                        $date = 'last7';
348
                    }
349
                    if($diff == 29){
350
                        $period = 'month';
351
                        $date = 'last30';
352
                    }
353
                }
354
            }      
355
        }
356
        if($data["value"]["range"] == "Today"){
357
            $date = 'today';
358
            $period = 'day';
359
            $imgDate = date('Y-m-d').",".date('Y-m-d', strtotime(date('Y-m-d')." +2 day"));
360
        }
361
        if($data["value"]["range"] == "Yesterday"){
362
            $date = 'yesterday';
363
            $period = 'day';
364
            $imgDate = date('Y-m-d', strtotime(date('Y-m-d')." -1 day")).",".date('Y-m-d', strtotime(date('Y-m-d')." +1 day"));
365
        }
366
        $matomoUrl = ChuckSite::getSetting('integrations.matomo-site-url') !== null ? ChuckSite::getSetting('integrations.matomo-site-url') : config('chuckcms.analytics.matomoURL');
367
        $query_factory = QueryFactory::create($matomoUrl);
368
        $query_factory
369
            ->set('idSite', $this->siteId)
370
            ->set('token_auth', $this->authToken);
371
        
372
        $data = $query_factory->getQuery('Referrers.getAll')
373
            ->setParameter('date', $date)
0 ignored issues
show
Comprehensibility Best Practice introduced by
The variable $date does not seem to be defined for all execution paths leading up to this point.
Loading history...
374
            ->setParameter('period', $period)
0 ignored issues
show
Comprehensibility Best Practice introduced by
The variable $period does not seem to be defined for all execution paths leading up to this point.
Loading history...
375
            ->execute()
376
            ->getResponse();
377
378
        return response()->json([
379
            'success'=>'success',
380
            'matomoUrl' => $matomoUrl,
381
            'data'=> $data
382
        ]);
383
    }
384
385
    public function submit(Request $request)
386
    {
387
        $request->validate([
388
            'siteId' => 'required',
389
            'authtoken' => 'required'
390
        ]);
391
        $settings = [];
392
        $settings['id'] = ChuckSite::getSite('id');
393
        $settings['name'] = ChuckSite::getSite('name');
394
        $settings['slug'] = ChuckSite::getSite('slug');
395
        $settings['company'] =  ChuckSite::getSetting('company') ;
396
        $settings['socialmedia'] =  ChuckSite::getSetting('socialmedia');
397
        $settings['favicon'] = ChuckSite::getSetting('favicon');
398
        $settings['logo'] =  ChuckSite::getSetting('logo');
399
        $settings['lang'] = ChuckSite::getSetting('lang');
400
        $settings['domain'] = ChuckSite::getSetting('domain');
401
        $settings['integrations'] = [
402
            'matomo-site-id' => $request->siteId,
403
            'matomo-auth-key' => $request->authtoken
404
        ];
405
        // //update or create settings
406
        $this->siteRepository->updateIntegrations($settings);
407
408
        //redirect back
409
        return redirect()->route('dashboard.matomo')->with('notification', 'Instellingen opgeslagen!');
410
        
411
    }
412
413
}