ActiveRoute::isActiveMatch()   A
last analyzed

Complexity

Conditions 2
Paths 2

Size

Total Lines 6

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 2
nc 2
nop 2
dl 0
loc 6
rs 10
c 0
b 0
f 0
1
<?php
2
3
namespace Zengine\ActiveRoute;
4
5
use Illuminate\Routing\Router as Route;
6
use Illuminate\Routing\UrlGenerator as URL;
7
8
class ActiveRoute
9
{
10
    protected $route;
11
12
    protected $url;
13
14
    public function __construct(Route $route, URL $url)
15
    {
16
        $this->route = $route;
17
        $this->url = $url;
18
    }
19
20
    /**
21
     * Compares given route name with current route name.
22
     * Any section of the route name can be replaced with a * wildcard.
23
     * Example: user.*.
24
     *
25
     * @param  string $routeName
26
     * @param  string $output
27
     *
28
     * @return bool
29
     */
30
    public function isActiveRoute($routeName, $output = 'active')
31
    {
32
        if (strpos($routeName, '*') !== false) {
33
            // Quote all RE characters, then undo the quoted '*' characters to match any
34
            // sequence of non-'.' characters.
35
            $regex = '/^'.str_replace(preg_quote('*'), '[^.]*?', preg_quote($routeName, '/')).'$/';
36
            if (preg_match($regex, $this->route->currentRouteName())) {
37
                return $output;
38
            }
39
        } elseif ($this->route->currentRouteName() == $routeName) {
40
            return $output;
41
        }
42
    }
43
44
    /**
45
     * Compares given URL with current URL.
46
     *
47
     * @param  string $url
48
     * @param  string $output
49
     *
50
     * @return bool
51
     */
52
    public function isActiveURL($url, $output = 'active')
53
    {
54
        if ($this->url->current() == $this->url->to($url)) {
55
            return $output;
56
        }
57
    }
58
59
    /**
60
     * Detects if the given string is found in the current URL.
61
     *
62
     * @param  string $string
63
     * @param  string $output
64
     *
65
     * @return bool
66
     */
67
    public function isActiveMatch($string, $output = 'active')
68
    {
69
        if (strpos($this->url->current(), $string) !== false) {
70
            return $output;
71
        }
72
    }
73
74
    /**
75
     * Compares given array of route names with current route name.
76
     *
77
     * @param  array  $routeNames
78
     * @param  string $output
79
     *
80
     * @return bool
81
     */
82
    public function areActiveRoutes(array $routeNames, $output = 'active')
83
    {
84
        foreach ($routeNames as $routeName) {
85
            if ($this->isActiveRoute($routeName, true)) {
0 ignored issues
show
Documentation introduced by
true is of type boolean, but the function expects a string.

It seems like the type of the argument is not accepted by the function/method which you are calling.

In some cases, in particular if PHP’s automatic type-juggling kicks in this might be fine. In other cases, however this might be a bug.

We suggest to add an explicit type cast like in the following example:

function acceptsInteger($int) { }

$x = '123'; // string "123"

// Instead of
acceptsInteger($x);

// we recommend to use
acceptsInteger((integer) $x);
Loading history...
Bug Best Practice introduced by
The expression $this->isActiveRoute($routeName, true) of type string|null is loosely compared to true; this is ambiguous if the string can be empty. You might want to explicitly use !== null instead.

In PHP, under loose comparison (like ==, or !=, or switch conditions), values of different types might be equal.

For string values, the empty string '' is a special case, in particular the following results might be unexpected:

''   == false // true
''   == null  // true
'ab' == false // false
'ab' == null  // false

// It is often better to use strict comparison
'' === false // false
'' === null  // false
Loading history...
86
                return $output;
87
            }
88
        }
89
    }
90
91
    /**
92
     * Compares given array of URLs with current URL.
93
     *
94
     * @param  array  $urls
95
     * @param  string $output
96
     *
97
     * @return bool
98
     */
99
    public function areActiveURLs(array $urls, $output = 'active')
100
    {
101
        foreach ($urls as $url) {
102
            if ($this->isActiveURL($url, true)) {
0 ignored issues
show
Documentation introduced by
true is of type boolean, but the function expects a string.

It seems like the type of the argument is not accepted by the function/method which you are calling.

In some cases, in particular if PHP’s automatic type-juggling kicks in this might be fine. In other cases, however this might be a bug.

We suggest to add an explicit type cast like in the following example:

function acceptsInteger($int) { }

$x = '123'; // string "123"

// Instead of
acceptsInteger($x);

// we recommend to use
acceptsInteger((integer) $x);
Loading history...
Bug Best Practice introduced by
The expression $this->isActiveURL($url, true) of type string|null is loosely compared to true; this is ambiguous if the string can be empty. You might want to explicitly use !== null instead.

In PHP, under loose comparison (like ==, or !=, or switch conditions), values of different types might be equal.

For string values, the empty string '' is a special case, in particular the following results might be unexpected:

''   == false // true
''   == null  // true
'ab' == false // false
'ab' == null  // false

// It is often better to use strict comparison
'' === false // false
'' === null  // false
Loading history...
103
                return $output;
104
            }
105
        }
106
    }
107
}
108