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.
Passed
Push — master ( 7f01d7...1527b5 )
by Oleg
02:36
created

Order::validateCoordinate()   B

Complexity

Conditions 10
Paths 10

Size

Total Lines 25

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
dl 0
loc 25
rs 7.6666
c 0
b 0
f 0
cc 10
nc 10
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
namespace Route4Me;
3
4
use Route4Me\Common;
5
use Route4Me\Enum\Endpoint;
6
7
class Order extends Common
8
{
9
    public $address_1;
10
    public $address_2;
11
    public $cached_lat;
12
    public $cached_lng;
13
    public $curbside_lat;
14
    public $curbside_lng;
15
    public $address_alias;
16
    public $address_city;
17
    public $EXT_FIELD_first_name;
18
    public $EXT_FIELD_last_name;
19
    public $EXT_FIELD_email;
20
    public $EXT_FIELD_phone;
21
    public $EXT_FIELD_custom_data;
22
    
23
    public $color;
24
    public $order_icon;
25
    public $local_time_window_start;
26
    public $local_time_window_end;
27
    public $local_time_window_start_2;
28
    public $local_time_window_end_2;
29
    public $service_time;
30
    
31
    public $day_scheduled_for_YYMMDD;
32
    
33
    public $route_id;
34
    public $redirect;
35
    public $optimization_problem_id;
36
    public $order_id;
37
    public $order_ids;
38
    
39
    public $day_added_YYMMDD;
40
    public $scheduled_for_YYMMDD;
41
    public $fields;
42
    public $offset;
43
    public $limit;
44
    public $query;
45
    
46
    public $created_timestamp;
47
    public $order_status_id;
48
    public $member_id;
49
    public $address_state_id;
50
    public $address_country_id;
51
    public $address_zip;
52
    public $in_route_count;
53
    public $last_visited_timestamp;
54
    public $last_routed_timestamp;
55
    public $local_timezone_string;
56
    public $is_validated;
57
    public $is_pending;
58
    public $is_accepted;
59
    public $is_started;
60
    public $is_completed;
61
    public $custom_user_fields;
62
    
63
    public $addresses = array();
64
    
65
    public static function fromArray(array $params) {
66
        $order = new Order();
67
        foreach ($params as $key => $value) {
68
            if (property_exists($order, $key)) {
69
                $order->{$key} = $value;
70
            }
71
        }
72
        
73
        return $order;
74
    }
75
    
76
    /**
77
     * @param Order $params
78
     */
79
    public static function addOrder($params)
80
    {
81
        $excludeFields = array('route_id', 'redirect', 'optimization_problem_id', 'order_id', 
82
        'order_ids', 'fields', 'offset', 'limit', 'query', 'created_timestamp');
83
        
84
        $allBodyFields = Route4Me::getObjectProperties(new Order(), $excludeFields);
85
        
86
        $response = Route4Me::makeRequst(array(
87
            'url'    => Endpoint::ORDER_V4,
88
            'method' => 'POST',
89
            'body'   => Route4Me::generateRequestParameters($allBodyFields, $params)
90
        ));
91
92
        return $response;
93
    }
94
95 View Code Duplication
    public static function addOrder2Route($params)
0 ignored issues
show
Duplication introduced by
This method seems to be duplicated in your project.

Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.

You can also find more detailed suggestions in the “Code” section of your repository.

Loading history...
96
    {
97
        $allQueryFields = array('route_id', 'redirect');
98
        $allBodyFields = array('addresses');
99
        
100
        $response = Route4Me::makeRequst(array(
101
            'url'    => Endpoint::ROUTE_V4,
102
            'method' => 'PUT',
103
            'query'  => Route4Me::generateRequestParameters($allQueryFields, $params),
104
            'body'   => Route4Me::generateRequestParameters($allBodyFields, $params)
105
        ));
106
107
        return $response;
108
    }
109
    
110 View Code Duplication
    public static function addOrder2Optimization($params)
0 ignored issues
show
Duplication introduced by
This method seems to be duplicated in your project.

Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.

You can also find more detailed suggestions in the “Code” section of your repository.

Loading history...
111
    {
112
        $allQueryFields = array('optimization_problem_id', 'redirect', 'device_type');
113
        $allBodyFields = array('addresses');
114
        
115
        $response = Route4Me::makeRequst(array(
116
            'url'    => Endpoint::OPTIMIZATION_PROBLEM,
117
            'method' => 'PUT',
118
            'query'  => Route4Me::generateRequestParameters($allQueryFields, $params),
119
            'body'   => Route4Me::generateRequestParameters($allBodyFields, $params)
120
        ));
121
122
        return $response;
123
    }
124
    
125 View Code Duplication
    public static function getOrder($params)
0 ignored issues
show
Duplication introduced by
This method seems to be duplicated in your project.

Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.

You can also find more detailed suggestions in the “Code” section of your repository.

Loading history...
126
    {
127
        $allQueryFields = array('order_id', 'fields', 'day_added_YYMMDD', 'scheduled_for_YYMMDD', 'query', 'offset', 'limit');
128
129
        $response = Route4Me::makeRequst(array(
130
            'url'    => Endpoint::ORDER_V4,
131
            'method' => 'GET',
132
            'query'  => Route4Me::generateRequestParameters($allQueryFields, $params)
133
        ));
134
135
        return $response;
136
    }
137
    
138
    public static function getOrders($params)
139
    {
140
        $allQueryFields = array('offset', 'limit');
141
        
142
        $response = Route4Me::makeRequst(array(
143
            'url'    => Endpoint::ORDER_V4,
144
            'method' => 'GET',
145
            'query'  => Route4Me::generateRequestParameters($allQueryFields, $params)
146
        ));
147
148
        return $response;
149
    }
150
    
151
    public function getRandomOrderId($offset, $limit)
152
    {
153
        $randomOrder = $this->getRandomOrder($offset, $limit);
154
        
155
        if (is_null($randomOrder)) {
156
            return null;
157
        }
158
        
159
        if (!isset($randomOrder)) {
160
            return null;
161
        }
162
        
163
        return $randomOrder['order_id'];
164
    }
165
    
166
    public function getRandomOrder($offset, $limit)
167
    {
168
        $params = array('offset' => $offset, 'limit' => $limit);
169
        
170
        $orders = self::getOrders($params);
171
        
172
        if (is_null($orders)) {
173
            return null;
174
        }
175
        
176
        if (!isset($orders['results'])) {
177
            return null;
178
        }
179
        
180
        $randomIndex = rand(0, sizeof($orders['results']) - 1);
181
        
182
        $order = $orders['results'][$randomIndex];
183
        
184
        return $order;
185
    }
186
    
187
    public static function removeOrder($params)
188
    {
189
        $allBodyFields = array('order_ids');
190
        
191
        $response = Route4Me::makeRequst(array(
192
            'url'    => Endpoint::ORDER_V4,
193
            'method' => 'DELETE',
194
            'body'   => Route4Me::generateRequestParameters($allBodyFields, $params)
195
        ));
196
197
        return $response;
198
    }
199
    
200 View Code Duplication
    public static function updateOrder($params)
0 ignored issues
show
Duplication introduced by
This method seems to be duplicated in your project.

Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.

You can also find more detailed suggestions in the “Code” section of your repository.

Loading history...
201
    {
202
        $excludeFields = array('route_id', 'redirect', 'optimization_problem_id', 
203
        'order_ids', 'fields', 'offset', 'limit', 'query', 'created_timestamp');
204
        
205
        $allBodyFields = Route4Me::getObjectProperties(new Order(), $excludeFields);
206
        
207
        $response = Route4Me::makeRequst(array(
208
            'url'    => Endpoint::ORDER_V4,
209
            'method' => 'PUT',
210
            'body'   => Route4Me::generateRequestParameters($allBodyFields, $params)
211
        ));
212
213
        return $response;
214
    }
215
    
216 View Code Duplication
    public static function searchOrder($params)
0 ignored issues
show
Duplication introduced by
This method seems to be duplicated in your project.

Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.

You can also find more detailed suggestions in the “Code” section of your repository.

Loading history...
217
    {
218
        $allQueryFields = array('fields', 'day_added_YYMMDD', 'scheduled_for_YYMMDD', 'query', 'offset', 'limit' );
219
        
220
        $response = Route4Me::makeRequst(array(
221
            'url'    => Endpoint::ORDER_V4,
222
            'method' => 'GET',
223
            'query'  => Route4Me::generateRequestParameters($allQueryFields, $params)
224
        ));
225
226
        return $response;
227
    }
228
    
229
    public static function validateCoordinate($coord)
230
    {
231
        $key = key($coord);
232
        
233
        if (!is_numeric($coord[$key])) {
234
            return false;
235
        }
236
        
237
        switch (variable) {
238
            case 'cached_lat':
239
            case 'curbside_lat':
240
                if ($lat>90 || $lat<-90) {
0 ignored issues
show
Bug introduced by
The variable $lat does not exist. Did you forget to declare it?

This check marks access to variables or properties that have not been declared yet. While PHP has no explicit notion of declaring a variable, accessing it before a value is assigned to it is most likely a bug.

Loading history...
241
                    return false;
242
                }
243
                break;
244
            case 'cached_lng':
245
            case 'curbside_lng':
246
                if ($lng>180 || $lng<-180) {
0 ignored issues
show
Bug introduced by
The variable $lng does not exist. Did you forget to declare it?

This check marks access to variables or properties that have not been declared yet. While PHP has no explicit notion of declaring a variable, accessing it before a value is assigned to it is most likely a bug.

Loading history...
247
                    return false;
248
                }
249
                break;
250
        }
251
        
252
        return true;
253
    }
254
    
255
    public function addOrdersFromCsvFile($csvFileHandle, $ordersFieldsMapping)
256
    {
257
        $max_line_length = 512;
258
        $delemietr = ',';
259
        
260
        $results = array();
261
        $results['fail'] = array();
262
        $results['success'] = array();
263
        
264
        $columns = fgetcsv($csvFileHandle, $max_line_length, $delemietr);
265
        
266
        $excludeFields = array('route_id', 'redirect', 'optimization_problem_id', 'order_id', 
267
        'order_ids', 'fields', 'offset', 'limit', 'query', 'created_timestamp');
268
        
269
        $allOrderFields = Route4Me::getObjectProperties(new Order(), $excludeFields);
270
        
271
        if (!empty($columns)) {
272
             array_push($results['fail'],'Empty CSV table');
273
             return ($results);
274
        }
275
                 
276
        $iRow=1;
277
        
278
        while (($rows = fgetcsv($csvFileHandle, $max_line_length, $delemietr))!==false) {
279
            if ($rows[$ordersFieldsMapping['cached_lat']] && $rows[$ordersFieldsMapping['cached_lng']] && $rows[$ordersFieldsMapping['address_1']] && array(null)!==$rows) {
280
                
281
                $cached_lat = 0.000;
282
                $cached_lng = 0.000;
283
                
284
                foreach (array('cached_lat', 'cached_lng', 'curbside_lat', 'curbside_lng') as $coord) {
285
                    if (!$this->validateCoordinate(array($coord => $rows[$ordersFieldsMapping[$coord]]))) {
286
                        array_push($results['fail'], "$iRow --> Wrong "+$coord); 
287
                        $iRow++;
288
                        continue;
289
                    } else {
290
                        switch ($coord) {
291
                            case 'cached_lat':
292
                                $cached_lat = doubleval($rows[$ordersFieldsMapping[$coord]]);
293
                                break;
294
                            case 'cached_lng':
295
                                $cached_lng = doubleval($rows[$ordersFieldsMapping[$coord]]);
296
                                break;
297
                        }
298
                    }
299
                }
300
                
301
                $address = $rows[$ordersFieldsMapping['address_1']];
302
                
303
                foreach (array('order_city', 'order_state_id', 'order_zip_code', 'order_country_id') as $addressPart) {
304
                    if (isset($ordersFieldsMapping[$addressPart])) {
305
                        $address .= ', '.$rows[$ordersFieldsMapping[$addressPart]];
306
                    }
307
                }
308
309
                echo "$iRow --> ".$ordersFieldsMapping['day_scheduled_for_YYMMDD'].", ".$rows[$ordersFieldsMapping['day_scheduled_for_YYMMDD']]."<br>";
310
                
311
                $parametersArray = array();
312
                
313
                $parametersArray["cached_lat"] = $cached_lat;
314
                $parametersArray["cached_lng"] = $cached_lng;
315
                
316
                
317
                foreach ($allOrderFields as $orderField) {
318
                    if (isset($ordersFieldsMapping[$orderField])) {
319
                        $parametersArray[$orderField] = $rows[$ordersFieldsMapping[$orderField]];
320
                    }
321
                }
322
                
323
                $orderParameters = Order::fromArray($parametersArray);
324
325
                $order = new Order();
326
                
327
                $orderResults = $order->addOrder($orderParameters);
328
                
329
                array_push($results['success'], "The order with order_id = ".strval($orderResults["order_id"])." added successfuly.");
330
            }
331
            else {
332
                array_push($results['fail'], "$iRow --> one of the parameters cached_lat, cached_lng, address_1 is not set"); 
333
            }
334
            
335
            $iRow++;
336
        }
337
    }
338
}
339