Passed
Push — master ( e26094...28949d )
by Paul
02:50
created

Queries   A

Complexity

Total Complexity 11

Size/Duplication

Total Lines 72
Duplicated Lines 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
eloc 36
dl 0
loc 72
rs 10
c 1
b 0
f 0
wmc 11

7 Methods

Rating   Name   Duplication   Size   Complexity  
A label() 0 15 4
A isVisible() 0 3 1
A hasEntries() 0 4 1
A id() 0 3 1
A render() 0 3 1
A __construct() 0 3 1
A entries() 0 22 2
1
<?php
2
3
namespace GeminiLabs\BlackBar\Modules;
4
5
use GeminiLabs\BlackBar\Application;
6
7
class Queries implements Module
8
{
9
    /**
10
     * @var Application
11
     */
12
    protected $app;
13
14
    public function __construct(Application $app)
15
    {
16
        $this->app = $app;
17
    }
18
19
    public function entries(): array
20
    {
21
        global $wpdb;
22
        $entries = [];
23
        $search = [
24
            'AND', 'FROM', 'GROUP BY', 'INNER JOIN', 'LEFT JOIN', 'LIMIT',
25
            'ON DUPLICATE KEY UPDATE', 'ORDER BY', 'OFFSET', ' SET', 'WHERE',
26
        ];
27
        $replace = array_map(function ($value) {
28
            return PHP_EOL.$value;
29
        }, $search);
30
        foreach ($wpdb->queries as $query) {
31
            $miliseconds = number_format(round($query[1] * 1000, 4), 4);
32
            $sql = preg_replace('/\s\s+/', ' ', trim($query[0]));
33
            $sql = str_replace(PHP_EOL, ' ', $sql);
34
            $sql = str_replace($search, $replace, $sql);
35
            $entries[] = [
36
                'sql' => $sql,
37
                'time' => $miliseconds,
38
            ];
39
        }
40
        return $entries;
41
    }
42
43
    public function hasEntries(): bool
44
    {
45
        global $wpdb;
46
        return !empty($wpdb->queries);
47
    }
48
49
    public function id(): string
50
    {
51
        return 'glbb-queries';
52
    }
53
54
    public function isVisible(): bool
55
    {
56
        return true;
57
    }
58
59
    public function label(): string
60
    {
61
        $label = __('SQL', 'blackbar');
62
        if (!defined('SAVEQUERIES') || !SAVEQUERIES) {
63
            return $label;
64
        }
65
        global $wpdb;
66
        $queryTime = 0;
67
        foreach ($wpdb->queries as $query) {
68
            $queryTime += $query[1];
69
        }
70
        $queryTime = number_format($queryTime * 1000, 2);
71
        $queriesCount = sprintf('<span class="glbb-queries-count">%s</span>', count($wpdb->queries));
72
        $queriesTime = sprintf('<span class="glbb-queries-time">%s</span>', $queryTime);
73
        return $label.sprintf(' (%s %s | %s %s)', $queriesCount, __('queries', 'blackbar'), $queriesTime, __('ms', 'blackbar'));
74
    }
75
76
    public function render(): void
77
    {
78
        $this->app->render('panels/queries', ['queries' => $this]);
79
    }
80
}
81