IpAddressDetails   A
last analyzed

Complexity

Total Complexity 17

Size/Duplication

Total Lines 86
Duplicated Lines 0 %

Importance

Changes 0
Metric Value
eloc 62
dl 0
loc 86
rs 10
c 0
b 0
f 0
wmc 17

1 Method

Rating   Name   Duplication   Size   Complexity  
C checkIP() 0 75 17
1
<?php
2
3
namespace jeremykenedy\LaravelLogger\App\Http\Traits;
4
5
trait IpAddressDetails
6
{
7
    /**
8
     * Get the Location of the IP Address.
9
     *
10
     * @param string $ip          (optional, no value will always return NULL)
11
     * @param string $purpose     (optional)
12
     * @param bool   $deep_detect (optional)
13
     *
14
     * @return string
15
     */
16
    public static function checkIP($ip = null, $purpose = 'location', $deep_detect = true)
0 ignored issues
show
Coding Style introduced by
This method is not in camel caps format.

This check looks for method names that are not written in camelCase.

In camelCase names are written without any punctuation, the start of each new word being marked by a capital letter. Thus the name database connection seeker becomes databaseConnectionSeeker.

Loading history...
17
    {
18
        $output = null;
19
        if (filter_var($ip, FILTER_VALIDATE_IP) === false) {
20
            $ip = $_SERVER['REMOTE_ADDR'];
21
            if ($deep_detect) {
22
                if (filter_var(@$_SERVER['HTTP_X_FORWARDED_FOR'], FILTER_VALIDATE_IP)) {
23
                    $ip = $_SERVER['HTTP_X_FORWARDED_FOR'];
24
                }
25
                if (filter_var(@$_SERVER['HTTP_CLIENT_IP'], FILTER_VALIDATE_IP)) {
26
                    $ip = $_SERVER['HTTP_CLIENT_IP'];
27
                }
28
            }
29
        }
30
        $purpose = str_replace(['name', "\n", "\t", ' ', '-', '_'], null, strtolower(trim($purpose)));
0 ignored issues
show
Coding Style introduced by
This line exceeds maximum limit of 100 characters; contains 102 characters

Overly long lines are hard to read on any screen. Most code styles therefor impose a maximum limit on the number of characters in a line.

Loading history...
31
        $support = ['country', 'countrycode', 'state', 'region', 'city', 'location', 'address'];
32
        $continents = [
33
            'AF' => 'Africa',
34
            'AN' => 'Antarctica',
35
            'AS' => 'Asia',
36
            'EU' => 'Europe',
37
            'OC' => 'Australia (Oceania)',
38
            'NA' => 'North America',
39
            'SA' => 'South America',
40
        ];
41
        if (filter_var($ip, FILTER_VALIDATE_IP) && in_array($purpose, $support)) {
42
            $ipdat = @json_decode(file_get_contents('http://www.geoplugin.net/json.gp?ip='.$ip));
43
            if (@strlen(trim($ipdat->geoplugin_countryCode)) == 2) {
44
                switch ($purpose) {
45
                    case 'location':
46
                        $output = [
47
                            'city'           => @$ipdat->geoplugin_city,
48
                            'state'          => @$ipdat->geoplugin_regionName,
49
                            'country'        => @$ipdat->geoplugin_countryName,
50
                            'countryCode'    => @$ipdat->geoplugin_countryCode,
51
                            'continent'      => @$continents[strtoupper($ipdat->geoplugin_continentCode)],
0 ignored issues
show
Coding Style introduced by
This line exceeds maximum limit of 100 characters; contains 106 characters

Overly long lines are hard to read on any screen. Most code styles therefor impose a maximum limit on the number of characters in a line.

Loading history...
52
                            'continent_code' => @$ipdat->geoplugin_continentCode,
53
                            'latitude'       => @$ipdat->geoplugin_latitude,
54
                            'longitude'      => @$ipdat->geoplugin_longitude,
55
                            'currencyCode'   => @$ipdat->geoplugin_currencyCode,
56
                            'areaCode'       => @$ipdat->geoplugin_areaCode,
57
                            'dmaCode'        => @$ipdat->geoplugin_dmaCode,
58
                            'region'         => @$ipdat->geoplugin_region,
59
                        ];
60
                        break;
61
                    case 'address':
62
                        $address = [$ipdat->geoplugin_countryName];
63
                        if (@strlen($ipdat->geoplugin_regionName) >= 1) {
64
                            $address[] = $ipdat->geoplugin_regionName;
65
                        }
66
                        if (@strlen($ipdat->geoplugin_city) >= 1) {
67
                            $address[] = $ipdat->geoplugin_city;
68
                        }
69
                        $output = implode(', ', array_reverse($address));
70
                        break;
71
                    case 'city':
72
                        $output = @$ipdat->geoplugin_city;
73
                        break;
74
                    case 'state':
75
                        $output = @$ipdat->geoplugin_regionName;
76
                        break;
77
                    case 'region':
78
                        $output = @$ipdat->geoplugin_regionName;
79
                        break;
80
                    case 'country':
81
                        $output = @$ipdat->geoplugin_countryName;
82
                        break;
83
                    case 'countrycode':
84
                        $output = @$ipdat->geoplugin_countryCode;
85
                        break;
86
                }
87
            }
88
        }
89
90
        return $output;
91
    }
92
}
93