Completed
Push — master ( 4b9f50...005bcb )
by Yannick
28:37
created

update_schema::update_from_23()   D

Complexity

Conditions 10
Paths 38

Size

Total Lines 44
Code Lines 33

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 10
eloc 33
nc 38
nop 0
dl 0
loc 44
rs 4.8196
c 0
b 0
f 0

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
require_once(dirname(__FILE__).'/../require/settings.php');
3
require_once(dirname(__FILE__).'/../require/class.Connection.php');
4
require_once(dirname(__FILE__).'/../require/class.Scheduler.php');
5
require_once(dirname(__FILE__).'/class.create_db.php');
6
require_once(dirname(__FILE__).'/class.update_db.php');
7
8
class update_schema {
9
10
	public static function update_schedule() {
11
	    $Connection = new Connection();
12
	    $Schedule = new Schedule();
13
	    $query = "SELECT * FROM schedule";
14
            try {
15
            	$sth = $Connection->db->prepare($query);
16
		$sth->execute();
17
    	    } catch(PDOException $e) {
18
		return "error : ".$e->getMessage()."\n";
19
    	    }
20
    	    while ($row = $sth->fetch(PDO::FETCH_ASSOC)) {
21
    		$Schedule->addSchedule($row['ident'],$row['departure_airport_icao'],$row['departure_airport_time'],$row['arrival_airport_icao'],$row['arrival_airport_time']);
22
    	    }
23
	
24
	}
25
/*
26
	private static function tableExists($tableName) {
27
	    $Connection = new Connection();
28
	    $query = "SHOW TABLES LIKE :tableName";
29
            try {
30
            	$sth = $Connection->db->prepare($query);
31
		$sth->execute(array(':tableName' => $tableName));
32
    	    } catch(PDOException $e) {
33
		return "error : ".$e->getMessage()."\n";
34
    	    }
35
    	    $row = $sth->fetch(PDO::FETCH_NUM);
36
    	    if ($row[0]) {
37
        	//echo 'table was found';
38
        	return true;
39
    	    } else {
40
        	//echo 'table was not found';
41
        	return false;
42
    	    }
43
    	}
44
*/	
45
	private static function update_from_1() {
46
    		$Connection = new Connection();
47
    		// Add new column to routes table
48
    		//$query = "ALTER TABLE `routes` ADD `FromAirport_Time` VARCHAR(10),`ToAirport_Time` VARCHAR(10),`Source` VARCHAR(255),`date_added` DATETIME DEFAULT CURRENT TIMESTAMP,`date_modified` DATETIME,`date_lastseen` DATETIME";
49
		$query = "ALTER TABLE `routes` ADD `FromAirport_Time` VARCHAR(10) NULL , ADD `ToAirport_Time` VARCHAR(10) NULL , ADD `Source` VARCHAR(255) NULL, ADD `date_added` timestamp DEFAULT CURRENT_TIMESTAMP, ADD `date_modified` timestamp NULL, ADD `date_lastseen` timestamp NULL";
50
        	try {
51
            	    $sth = $Connection->db->prepare($query);
52
		    $sth->execute();
53
    		} catch(PDOException $e) {
54
		    return "error (add new columns to routes table) : ".$e->getMessage()."\n";
55
    		}
56
    		// Copy schedules data to routes table
57
    		self::update_schedule();
58
    		// Delete schedule table
59
		$query = "DROP TABLE `schedule`";
60
        	try {
61
            	    $sth = $Connection->db->prepare($query);
62
		    $sth->execute();
63
    		} catch(PDOException $e) {
64
		    return "error (delete schedule table) : ".$e->getMessage()."\n";
65
    		}
66
    		// Add source column
67
    		$query = "ALTER TABLE `aircraft_modes` ADD `Source` VARCHAR(255) NULL";
68
    		try {
69
            	    $sth = $Connection->db->prepare($query);
70
		    $sth->execute();
71
    		} catch(PDOException $e) {
72
		    return "error (add source column to aircraft_modes) : ".$e->getMessage()."\n";
73
    		}
74
		// Delete unused column
75
		$query = "ALTER TABLE `aircraft_modes`  DROP `SerialNo`,  DROP `OperatorFlagCode`,  DROP `Manufacturer`,  DROP `Type`,  DROP `FirstRegDate`,  DROP `CurrentRegDate`,  DROP `Country`,  DROP `PreviousID`,  DROP `DeRegDate`,  DROP `Status`,  DROP `PopularName`,  DROP `GenericName`,  DROP `AircraftClass`,  DROP `Engines`,  DROP `OwnershipStatus`,  DROP `RegisteredOwners`,  DROP `MTOW`,  DROP `TotalHours`,  DROP `YearBuilt`,  DROP `CofACategory`,  DROP `CofAExpiry`,  DROP `UserNotes`,  DROP `Interested`,  DROP `UserTag`,  DROP `InfoUrl`,  DROP `PictureUrl1`,  DROP `PictureUrl2`,  DROP `PictureUrl3`,  DROP `UserBool1`,  DROP `UserBool2`,  DROP `UserBool3`,  DROP `UserBool4`,  DROP `UserBool5`,  DROP `UserString1`,  DROP `UserString2`,  DROP `UserString3`,  DROP `UserString4`,  DROP `UserString5`,  DROP `UserInt1`,  DROP `UserInt2`,  DROP `UserInt3`,  DROP `UserInt4`,  DROP `UserInt5`";
76
    		try {
77
            	    $sth = $Connection->db->prepare($query);
78
		    $sth->execute();
79
    		} catch(PDOException $e) {
80
		    return "error (Delete unused column of aircraft_modes) : ".$e->getMessage()."\n";
81
    		}
82
		// Add ModeS column
83
		$query = "ALTER TABLE `spotter_output`  ADD `ModeS` VARCHAR(255) NULL";
84
    		try {
85
            	    $sth = $Connection->db->prepare($query);
86
		    $sth->execute();
87
    		} catch(PDOException $e) {
88
		    return "error (Add ModeS column in spotter_output) : ".$e->getMessage()."\n";
89
    		}
90
		$query = "ALTER TABLE `spotter_live`  ADD `ModeS` VARCHAR(255)";
91
    		try {
92
            	    $sth = $Connection->db->prepare($query);
93
		    $sth->execute();
94
    		} catch(PDOException $e) {
95
		    return "error (Add ModeS column in spotter_live) : ".$e->getMessage()."\n";
96
    		}
97
    		// Add auto_increment for aircraft_modes
98
    		$query = "ALTER TABLE `aircraft_modes` CHANGE `AircraftID` `AircraftID` INT(11) NOT NULL AUTO_INCREMENT";
99
    		try {
100
            	    $sth = $Connection->db->prepare($query);
101
		    $sth->execute();
102
    		} catch(PDOException $e) {
103
		    return "error (Add Auto increment in aircraft_modes) : ".$e->getMessage()."\n";
104
    		}
105
    		$error = '';
106
		$error .= create_db::import_file('../db/acars_live.sql');
107
		$error .= create_db::import_file('../db/config.sql');
108
		// Update schema_version to 2
109
		$query = "UPDATE `config` SET `value` = '2' WHERE `name` = 'schema_version'";
110
        	try {
111
            	    $sth = $Connection->db->prepare($query);
112
		    $sth->execute();
113
    		} catch(PDOException $e) {
114
		    return "error (update schema_version) : ".$e->getMessage()."\n";
115
    		}
116
		return $error;
117
        }
118
119
	private static function update_from_2() {
120
    		$Connection = new Connection();
121
    		// Add new column decode to acars_live table
122
		$query = "ALTER TABLE `acars_live` ADD `decode` TEXT";
123
        	try {
124
            	    $sth = $Connection->db->prepare($query);
125
		    $sth->execute();
126
    		} catch(PDOException $e) {
127
		    return "error (add new columns to routes table) : ".$e->getMessage()."\n";
128
    		}
129
    		$error = '';
130
    		// Create table acars_archive
131
		$error .= create_db::import_file('../db/acars_archive.sql');
132
		// Update schema_version to 3
133
		$query = "UPDATE `config` SET `value` = '3' WHERE `name` = 'schema_version'";
134
        	try {
135
            	    $sth = $Connection->db->prepare($query);
136
		    $sth->execute();
137
    		} catch(PDOException $e) {
138
		    return "error (update schema_version) : ".$e->getMessage()."\n";
139
    		}
140
		return $error;
141
	}
142
143
	private static function update_from_3() {
144
    		$Connection = new Connection();
145
    		// Add default CURRENT_TIMESTAMP to aircraft_modes column FirstCreated
146
		$query = "ALTER TABLE `aircraft_modes` CHANGE `FirstCreated` `FirstCreated` timestamp DEFAULT CURRENT_TIMESTAMP";
147
        	try {
148
            	    $sth = $Connection->db->prepare($query);
149
		    $sth->execute();
150
    		} catch(PDOException $e) {
151
		    return "error (add new columns to aircraft_modes) : ".$e->getMessage()."\n";
152
    		}
153
    		// Add image_source_website column to spotter_image
154
		$query = "ALTER TABLE `spotter_image` ADD `image_source_website` VARCHAR(999) NULL";
155
        	try {
156
            	    $sth = $Connection->db->prepare($query);
157
		    $sth->execute();
158
    		} catch(PDOException $e) {
159
		    return "error (add new columns to spotter_image) : ".$e->getMessage()."\n";
160
    		}
161
    		$error = '';
162
		// Update schema_version to 4
163
		$query = "UPDATE `config` SET `value` = '4' WHERE `name` = 'schema_version'";
164
        	try {
165
            	    $sth = $Connection->db->prepare($query);
166
		    $sth->execute();
167
    		} catch(PDOException $e) {
168
		    return "error (update schema_version) : ".$e->getMessage()."\n";
169
    		}
170
		return $error;
171
	}
172
	
173
	private static function update_from_4() {
174
    		$Connection = new Connection();
175
	
176
    		$error = '';
177
    		// Create table acars_label
178
		$error .= create_db::import_file('../db/acars_label.sql');
179
		if ($error == '') {
180
		    // Update schema_version to 5
181
		    $query = "UPDATE `config` SET `value` = '5' WHERE `name` = 'schema_version'";
182
        	    try {
183
            		$sth = $Connection->db->prepare($query);
184
			$sth->execute();
185
    		    } catch(PDOException $e) {
186
			return "error (update schema_version) : ".$e->getMessage()."\n";
187
    		    }
188
    		}
189
		return $error;
190
	}
191
192
	private static function update_from_5() {
193
    		$Connection = new Connection();
194
    		// Add columns to translation
195
		$query = "ALTER TABLE `translation` ADD `Source` VARCHAR(255) NULL, ADD `date_added` timestamp DEFAULT CURRENT_TIMESTAMP , ADD `date_modified` timestamp DEFAULT CURRENT_TIMESTAMP ;";
196
        	try {
197
            	    $sth = $Connection->db->prepare($query);
198
		    $sth->execute();
199
    		} catch(PDOException $e) {
200
		    return "error (add new columns to translation) : ".$e->getMessage()."\n";
201
    		}
202
    		// Add aircraft_shadow column to aircraft
203
    		$query = "ALTER TABLE `aircraft` ADD `aircraft_shadow` VARCHAR(255) NULL";
204
        	try {
205
            	    $sth = $Connection->db->prepare($query);
206
		    $sth->execute();
207
    		} catch(PDOException $e) {
208
		    return "error (add new column to aircraft) : ".$e->getMessage()."\n";
209
    		}
210
    		// Add aircraft_shadow column to spotter_live
211
    		$query = "ALTER TABLE `spotter_live` ADD `aircraft_shadow` VARCHAR(255) NULL";
212
        	try {
213
            	    $sth = $Connection->db->prepare($query);
214
		    $sth->execute();
215
    		} catch(PDOException $e) {
216
		    return "error (add new column to spotter_live) : ".$e->getMessage()."\n";
217
    		}
218
    		$error = '';
219
    		// Update table aircraft
220
		$error .= create_db::import_file('../db/aircraft.sql');
221
		$error .= create_db::import_file('../db/spotter_archive.sql');
222
223
		// Update schema_version to 6
224
		$query = "UPDATE `config` SET `value` = '6' WHERE `name` = 'schema_version'";
225
        	try {
226
            	    $sth = $Connection->db->prepare($query);
227
		    $sth->execute();
228
    		} catch(PDOException $e) {
229
		    return "error (update schema_version) : ".$e->getMessage()."\n";
230
    		}
231
		return $error;
232
	}
233
234
	private static function update_from_6() {
235
    		$Connection = new Connection();
236
    		if (!$Connection->indexExists('spotter_output','flightaware_id')) {
237
    		    $query = "ALTER TABLE spotter_output ADD INDEX(flightaware_id);
238
			ALTER TABLE spotter_output ADD INDEX(date);
239
			ALTER TABLE spotter_output ADD INDEX(ident);
240
			ALTER TABLE spotter_live ADD INDEX(flightaware_id);
241
			ALTER TABLE spotter_live ADD INDEX(ident);
242
			ALTER TABLE spotter_live ADD INDEX(date);
243
			ALTER TABLE spotter_live ADD INDEX(longitude);
244
			ALTER TABLE spotter_live ADD INDEX(latitude);
245
			ALTER TABLE routes ADD INDEX(CallSign);
246
			ALTER TABLE aircraft_modes ADD INDEX(ModeS);
247
			ALTER TABLE aircraft ADD INDEX(icao);
248
			ALTER TABLE airport ADD INDEX(icao);
249
			ALTER TABLE translation ADD INDEX(Operator);";
250
        	    try {
251
            		$sth = $Connection->db->prepare($query);
252
			$sth->execute();
253
    		    } catch(PDOException $e) {
254
			return "error (add some indexes) : ".$e->getMessage()."\n";
255
    		    }
256
    		}
257
    		$error = '';
258
    		// Update table countries
259
    		if ($Connection->tableExists('airspace')) {
260
    		    $error .= update_db::update_countries();
261
		    if ($error != '') return $error;
262
		}
263
		// Update schema_version to 7
264
		$query = "UPDATE `config` SET `value` = '7' WHERE `name` = 'schema_version'";
265
        	try {
266
            	    $sth = $Connection->db->prepare($query);
267
		    $sth->execute();
268
    		} catch(PDOException $e) {
269
		    return "error (update schema_version) : ".$e->getMessage()."\n";
270
    		}
271
		return $error;
272
    	}
273
274
	private static function update_from_7() {
275
		global $globalDBname, $globalDBdriver;
276
    		$Connection = new Connection();
277
    		$query="ALTER TABLE spotter_live ADD pilot_name VARCHAR(255) NULL, ADD pilot_id VARCHAR(255) NULL;
278
    			ALTER TABLE spotter_output ADD pilot_name VARCHAR(255) NULL, ADD pilot_id VARCHAR(255) NULL;";
279
        	try {
280
            	    $sth = $Connection->db->prepare($query);
281
		    $sth->execute();
282
    		} catch(PDOException $e) {
283
		    return "error (add pilot column to spotter_live and spotter_output) : ".$e->getMessage()."\n";
284
    		}
285
    		if ($globalDBdriver == 'mysql') {
286
    		    $query = "SELECT ENGINE FROM information_schema.TABLES where TABLE_SCHEMA = '".$globalDBname."' AND TABLE_NAME = 'spotter_archive'";
287
		    try {
288
            		$sth = $Connection->db->prepare($query);
289
			$sth->execute();
290
    		    } catch(PDOException $e) {
291
			return "error (problem when select engine for spotter_engine) : ".$e->getMessage()."\n";
292
    		    }
293
    		    $row = $sth->fetch(PDO::FETCH_ASSOC);
294
    		    if ($row['engine'] == 'ARCHIVE') {
295
			$query = "CREATE TABLE copy LIKE spotter_archive; 
296
				ALTER TABLE copy ENGINE=ARCHIVE;
297
				ALTER TABLE copy ADD pilot_name VARCHAR(255) NULL, ADD pilot_id VARCHAR(255) NULL;
298
				INSERT INTO copy SELECT *, '' as pilot_name, '' as pilot_id FROM spotter_archive ORDER BY `spotter_archive_id`;
299
				DROP TABLE spotter_archive;
300
				RENAME TABLE copy TO spotter_archive;";
301
            	    } else {
302
    			$query="ALTER TABLE spotter_archive ADD pilot_name VARCHAR(255) NULL, ADD pilot_id VARCHAR(255) NULL";
303
            	    }
304
                } else {
305
    		    $query="ALTER TABLE spotter_archive ADD pilot_name VARCHAR(255) NULL, ADD pilot_id VARCHAR(255) NULL";
306
                }
307
        	try {
308
            	    $sth = $Connection->db->prepare($query);
309
		    $sth->execute();
310
    		} catch(PDOException $e) {
311
		    return "error (add pilot column to spotter_archive) : ".$e->getMessage()."\n";
312
    		}
313
314
    		$error = '';
315
    		// Update table aircraft
316
		$error .= create_db::import_file('../db/source_location.sql');
317
		if ($error != '') return $error;
318
		// Update schema_version to 6
319
		$query = "UPDATE `config` SET `value` = '8' WHERE `name` = 'schema_version'";
320
        	try {
321
            	    $sth = $Connection->db->prepare($query);
322
		    $sth->execute();
323
    		} catch(PDOException $e) {
324
		    return "error (update schema_version) : ".$e->getMessage()."\n";
325
    		}
326
		return $error;
327
	}
328
329
	private static function update_from_8() {
330
    		$Connection = new Connection();
331
    		$error = '';
332
    		// Update table aircraft
333
		$error .= create_db::import_file('../db/notam.sql');
334
		if ($error != '') return $error;
335
		$query = "DELETE FROM config WHERE name = 'last_update_db';
336
                        INSERT INTO config (name,value) VALUES ('last_update_db',NOW());
337
                        DELETE FROM config WHERE name = 'last_update_notam_db';
338
                        INSERT INTO config (name,value) VALUES ('last_update_notam_db',NOW());";
339
        	try {
340
            	    $sth = $Connection->db->prepare($query);
341
		    $sth->execute();
342
    		} catch(PDOException $e) {
343
		    return "error (insert last_update values) : ".$e->getMessage()."\n";
344
    		}
345
		$query = "UPDATE `config` SET `value` = '9' WHERE `name` = 'schema_version'";
346
        	try {
347
            	    $sth = $Connection->db->prepare($query);
348
		    $sth->execute();
349
    		} catch(PDOException $e) {
350
		    return "error (update schema_version) : ".$e->getMessage()."\n";
351
    		}
352
		return $error;
353
	}
354
355
	private static function update_from_9() {
356
    		$Connection = new Connection();
357
    		$query="ALTER TABLE spotter_live ADD verticalrate INT(11) NULL;
358
    			ALTER TABLE spotter_output ADD verticalrate INT(11) NULL;";
359
        	try {
360
            	    $sth = $Connection->db->prepare($query);
361
		    $sth->execute();
362
    		} catch(PDOException $e) {
363
		    return "error (add verticalrate column to spotter_live and spotter_output) : ".$e->getMessage()."\n";
364
    		}
365
		$error = '';
366
    		// Update table atc
367
		$error .= create_db::import_file('../db/atc.sql');
368
		if ($error != '') return $error;
369
		
370
		$query = "UPDATE `config` SET `value` = '10' WHERE `name` = 'schema_version'";
371
        	try {
372
            	    $sth = $Connection->db->prepare($query);
373
		    $sth->execute();
374
    		} catch(PDOException $e) {
375
		    return "error (update schema_version) : ".$e->getMessage()."\n";
376
    		}
377
		return $error;
378
	}
379
380
	private static function update_from_10() {
381
    		$Connection = new Connection();
382
    		$query="ALTER TABLE atc CHANGE `type` `type` ENUM('Observer','Flight Information','Delivery','Tower','Approach','ACC','Departure','Ground','Flight Service Station','Control Radar or Centre') CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL";
383
        	try {
384
            	    $sth = $Connection->db->prepare($query);
385
		    $sth->execute();
386
    		} catch(PDOException $e) {
387
		    return "error (add new enum to ATC table) : ".$e->getMessage()."\n";
388
    		}
389
		$error = '';
390
    		// Add tables
391
		$error .= create_db::import_file('../db/aircraft_owner.sql');
392
		if ($error != '') return $error;
393
		$error .= create_db::import_file('../db/metar.sql');
394
		if ($error != '') return $error;
395
		$error .= create_db::import_file('../db/taf.sql');
396
		if ($error != '') return $error;
397
		$error .= create_db::import_file('../db/airport.sql');
398
		if ($error != '') return $error;
399
		
400
		$query = "UPDATE `config` SET `value` = '11' WHERE `name` = 'schema_version'";
401
        	try {
402
            	    $sth = $Connection->db->prepare($query);
403
		    $sth->execute();
404
    		} catch(PDOException $e) {
405
		    return "error (update schema_version) : ".$e->getMessage()."\n";
406
    		}
407
		return $error;
408
	}
409
410
	private static function update_from_11() {
411
		global $globalDBdriver, $globalDBname;
412
    		$Connection = new Connection();
413
    		$query="ALTER TABLE spotter_output ADD owner_name VARCHAR(255) NULL DEFAULT NULL, ADD format_source VARCHAR(255) NULL DEFAULT NULL, ADD ground BOOLEAN NOT NULL DEFAULT FALSE, ADD last_ground BOOLEAN NOT NULL DEFAULT FALSE, ADD last_seen DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, ADD last_latitude FLOAT NULL, ADD last_longitude FLOAT NULL, ADD last_altitude INT(11) NULL, ADD last_ground_speed INT(11), ADD real_arrival_airport_icao VARCHAR(999), ADD real_arrival_airport_time VARCHAR(20),ADD real_departure_airport_icao VARCHAR(999), ADD real_departure_airport_time VARCHAR(20)";
414
        	try {
415
            	    $sth = $Connection->db->prepare($query);
416
		    $sth->execute();
417
    		} catch(PDOException $e) {
418
		    return "error (add owner_name & format_source column to spotter_output) : ".$e->getMessage()."\n";
419
    		}
420
    		$query="ALTER TABLE spotter_live ADD format_source VARCHAR(255) NULL DEFAULT NULL, ADD ground BOOLEAN NOT NULL DEFAULT FALSE";
421
        	try {
422
            	    $sth = $Connection->db->prepare($query);
423
		    $sth->execute();
424
    		} catch(PDOException $e) {
425
		    return "error (format_source column to spotter_live) : ".$e->getMessage()."\n";
426
    		}
427
    		if ($globalDBdriver == 'mysql') {
428
    		    $query = "SELECT ENGINE FROM information_schema.TABLES where TABLE_SCHEMA = '".$globalDBname."' AND TABLE_NAME = 'spotter_archive'";
429
		    try {
430
            		$sth = $Connection->db->prepare($query);
431
			$sth->execute();
432
    		    } catch(PDOException $e) {
433
			return "error (problem when select engine for spotter_engine) : ".$e->getMessage()."\n";
434
    		    }
435
    		    $row = $sth->fetch(PDO::FETCH_ASSOC);
436
    		    if ($row['engine'] == 'ARCHIVE') {
437
			$query = "CREATE TABLE copy LIKE spotter_archive; 
438
				ALTER TABLE copy ENGINE=ARCHIVE;
439
				ALTER TABLE copy ADD verticalrate INT(11) NULL, ADD format_source VARCHAR(255) NULL DEFAULT NULL, ADD ground BOOLEAN NOT NULL DEFAULT FALSE;
440
				INSERT INTO copy SELECT *, '' as verticalrate, '' as format_source, '0' as ground FROM spotter_archive ORDER BY `spotter_archive_id`;
441
				DROP TABLE spotter_archive;
442
				RENAME TABLE copy TO spotter_archive;";
443
            	    } else {
444
    			$query="ALTER TABLE spotter_archive ADD verticalrate INT(11) NULL, ADD format_source VARCHAR(255) NULL DEFAULT NULL, ADD ground BOOLEAN NOT NULL DEFAULT FALSE";
445
            	    }
446
                } else {
447
    		    $query="ALTER TABLE spotter_archive ADD verticalrate INT(11) NULL, ADD format_source VARCHAR(255) NULL DEFAULT NULL, ADD ground BOOLEAN NOT NULL DEFAULT FALSE";
448
                }
449
        	try {
450
            	    $sth = $Connection->db->prepare($query);
451
		    $sth->execute();
452
    		} catch(PDOException $e) {
453
		    return "error (add columns to spotter_archive) : ".$e->getMessage()."\n";
454
    		}
455
456
		$error = '';
457
		
458
		$query = "UPDATE `config` SET `value` = '12' WHERE `name` = 'schema_version'";
459
        	try {
460
            	    $sth = $Connection->db->prepare($query);
461
		    $sth->execute();
462
    		} catch(PDOException $e) {
463
		    return "error (update schema_version) : ".$e->getMessage()."\n";
464
    		}
465
		return $error;
466
	}
467
	private static function update_from_12() {
468
    		$Connection = new Connection();
469
		$error = '';
470
    		// Add tables
471
		$error .= create_db::import_file('../db/stats.sql');
472
		if ($error != '') return $error;
473
		$error .= create_db::import_file('../db/stats_aircraft.sql');
474
		if ($error != '') return $error;
475
		$error .= create_db::import_file('../db/stats_airline.sql');
476
		if ($error != '') return $error;
477
		$error .= create_db::import_file('../db/stats_airport.sql');
478
		if ($error != '') return $error;
479
		$error .= create_db::import_file('../db/stats_owner.sql');
480
		if ($error != '') return $error;
481
		$error .= create_db::import_file('../db/stats_pilot.sql');
482
		if ($error != '') return $error;
483
		$error .= create_db::import_file('../db/spotter_archive_output.sql');
484
		if ($error != '') return $error;
485
		
486
		$query = "UPDATE `config` SET `value` = '13' WHERE `name` = 'schema_version'";
487
        	try {
488
            	    $sth = $Connection->db->prepare($query);
489
		    $sth->execute();
490
    		} catch(PDOException $e) {
491
		    return "error (update schema_version) : ".$e->getMessage()."\n";
492
    		}
493
		return $error;
494
	}
495
496
	private static function update_from_13() {
497
    		$Connection = new Connection();
498
    		if (!$Connection->checkColumnName('spotter_archive_output','real_departure_airport_icao')) {
499
    			$query="ALTER TABLE spotter_archive_output ADD real_departure_airport_icao VARCHAR(20), ADD real_departure_airport_time VARCHAR(20)";
500
			try {
501
				$sth = $Connection->db->prepare($query);
502
				$sth->execute();
503
	    		} catch(PDOException $e) {
504
				return "error (update spotter_archive_output) : ".$e->getMessage()."\n";
505
    			}
506
		}
507
    		$error = '';
508
		$query = "UPDATE `config` SET `value` = '14' WHERE `name` = 'schema_version'";
509
        	try {
510
            	    $sth = $Connection->db->prepare($query);
511
		    $sth->execute();
512
    		} catch(PDOException $e) {
513
		    return "error (update schema_version) : ".$e->getMessage()."\n";
514
    		}
515
		return $error;
516
	}
517
518
	private static function update_from_14() {
519
    		$Connection = new Connection();
520
		$error = '';
521
    		// Add tables
522
    		if (!$Connection->tableExists('stats_flight')) {
523
			$error .= create_db::import_file('../db/stats_flight.sql');
524
			if ($error != '') return $error;
525
		}
526
		$query = "UPDATE `config` SET `value` = '15' WHERE `name` = 'schema_version'";
527
        	try {
528
            	    $sth = $Connection->db->prepare($query);
529
		    $sth->execute();
530
    		} catch(PDOException $e) {
531
		    return "error (update schema_version) : ".$e->getMessage()."\n";
532
    		}
533
		return $error;
534
	}
535
536
537
	private static function update_from_15() {
538
    		$Connection = new Connection();
539
		$error = '';
540
    		// Add tables
541
    		$query="ALTER TABLE `stats` CHANGE `stats_date` `stats_date` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP";
542
        	try {
543
            	    $sth = $Connection->db->prepare($query);
544
		    $sth->execute();
545
    		} catch(PDOException $e) {
546
		    return "error (update stats) : ".$e->getMessage()."\n";
547
    		}
548
		if ($error != '') return $error;
549
		$query = "UPDATE `config` SET `value` = '16' WHERE `name` = 'schema_version'";
550
        	try {
551
            	    $sth = $Connection->db->prepare($query);
552
		    $sth->execute();
553
    		} catch(PDOException $e) {
554
		    return "error (update schema_version) : ".$e->getMessage()."\n";
555
    		}
556
		return $error;
557
	}
558
559
	private static function update_from_16() {
560
    		$Connection = new Connection();
561
		$error = '';
562
    		// Add tables
563
    		if (!$Connection->tableExists('stats_registration')) {
564
			$error .= create_db::import_file('../db/stats_registration.sql');
565
		}
566
    		if (!$Connection->tableExists('stats_callsign')) {
567
			$error .= create_db::import_file('../db/stats_callsign.sql');
568
		}
569
		if ($error != '') return $error;
570
		$query = "UPDATE `config` SET `value` = '17' WHERE `name` = 'schema_version'";
571
        	try {
572
            	    $sth = $Connection->db->prepare($query);
573
		    $sth->execute();
574
    		} catch(PDOException $e) {
575
		    return "error (update schema_version) : ".$e->getMessage()."\n";
576
    		}
577
		return $error;
578
	}
579
580
	private static function update_from_17() {
581
    		$Connection = new Connection();
582
		$error = '';
583
    		// Add tables
584
    		if (!$Connection->tableExists('stats_country')) {
585
			$error .= create_db::import_file('../db/stats_country.sql');
586
		}
587
		if ($error != '') return $error;
588
		$query = "UPDATE `config` SET `value` = '18' WHERE `name` = 'schema_version'";
589
        	try {
590
            	    $sth = $Connection->db->prepare($query);
591
		    $sth->execute();
592
    		} catch(PDOException $e) {
593
		    return "error (update schema_version) : ".$e->getMessage()."\n";
594
    		}
595
		return $error;
596
	}
597
	private static function update_from_18() {
598
    		$Connection = new Connection();
599
		$error = '';
600
    		// Modify stats_airport table
601
    		if (!$Connection->checkColumnName('stats_airport','airport_name')) {
602
    			$query = "ALTER TABLE `stats_airport` ADD `stats_type` VARCHAR(50) NOT NULL DEFAULT 'yearly', ADD `airport_name` VARCHAR(255) NOT NULL, ADD `date` DATE NULL DEFAULT NULL, DROP INDEX `airport_icao`, ADD UNIQUE `airport_icao` (`airport_icao`, `type`, `date`)";
603
    	        	try {
604
	            	    $sth = $Connection->db->prepare($query);
605
			    $sth->execute();
606
    			} catch(PDOException $e) {
607
			    return "error (update stats) : ".$e->getMessage()."\n";
608
    			}
609
    		}
610
		if ($error != '') return $error;
611
		$query = "UPDATE `config` SET `value` = '19' WHERE `name` = 'schema_version'";
612
        	try {
613
            	    $sth = $Connection->db->prepare($query);
614
		    $sth->execute();
615
    		} catch(PDOException $e) {
616
		    return "error (update schema_version) : ".$e->getMessage()."\n";
617
    		}
618
		return $error;
619
	}
620
621
	private static function update_from_19() {
622
    		$Connection = new Connection();
623
		$error = '';
624
    		// Update airport table
625
		$error .= create_db::import_file('../db/airport.sql');
626
		if ($error != '') return 'Import airport.sql : '.$error;
627
		// Remove primary key on Spotter_Archive
628
		$query = "alter table spotter_archive drop spotter_archive_id";
629
        	try {
630
            	    $sth = $Connection->db->prepare($query);
631
		    $sth->execute();
632
    		} catch(PDOException $e) {
633
		    return "error (remove primary key on spotter_archive) : ".$e->getMessage()."\n";
634
    		}
635
		$query = "alter table spotter_archive add spotter_archive_id INT(11)";
636
        	try {
637
            	    $sth = $Connection->db->prepare($query);
638
		    $sth->execute();
639
    		} catch(PDOException $e) {
640
		    return "error (add id again on spotter_archive) : ".$e->getMessage()."\n";
641
    		}
642
		if (!$Connection->checkColumnName('spotter_archive','over_country')) {
643
			// Add column over_country
644
    			$query = "ALTER TABLE `spotter_archive` ADD `over_country` VARCHAR(5) NULL DEFAULT NULL";
645
			try {
646
            			$sth = $Connection->db->prepare($query);
647
				$sth->execute();
648
			} catch(PDOException $e) {
649
				return "error (add over_country) : ".$e->getMessage()."\n";
650
			}
651
		}
652
		if (!$Connection->checkColumnName('spotter_live','over_country')) {
653
			// Add column over_country
654
    			$query = "ALTER TABLE `spotter_live` ADD `over_country` VARCHAR(5) NULL DEFAULT NULL";
655
			try {
656
            			$sth = $Connection->db->prepare($query);
657
				$sth->execute();
658
			} catch(PDOException $e) {
659
				return "error (add over_country) : ".$e->getMessage()."\n";
660
			}
661
		}
662
		if (!$Connection->checkColumnName('spotter_output','source_name')) {
663
			// Add source_name to spotter_output, spotter_live, spotter_archive, spotter_archive_output
664
    			$query = "ALTER TABLE `spotter_output` ADD `source_name` VARCHAR(255) NULL AFTER `format_source`";
665
			try {
666
				$sth = $Connection->db->prepare($query);
667
				$sth->execute();
668
			} catch(PDOException $e) {
669
				return "error (add source_name column) : ".$e->getMessage()."\n";
670
    			}
671
    		}
672
		if (!$Connection->checkColumnName('spotter_live','source_name')) {
673
			// Add source_name to spotter_output, spotter_live, spotter_archive, spotter_archive_output
674
    			$query = "ALTER TABLE `spotter_live` ADD `source_name` VARCHAR(255) NULL AFTER `format_source`";
675
			try {
676
				$sth = $Connection->db->prepare($query);
677
				$sth->execute();
678
			} catch(PDOException $e) {
679
				return "error (add source_name column) : ".$e->getMessage()."\n";
680
    			}
681
    		}
682
		if (!$Connection->checkColumnName('spotter_archive_output','source_name')) {
683
			// Add source_name to spotter_output, spotter_live, spotter_archive, spotter_archive_output
684
    			$query = "ALTER TABLE `spotter_archive_output` ADD `source_name` VARCHAR(255) NULL AFTER `format_source`";
685
			try {
686
				$sth = $Connection->db->prepare($query);
687
				$sth->execute();
688
			} catch(PDOException $e) {
689
				return "error (add source_name column) : ".$e->getMessage()."\n";
690
    			}
691
    		}
692
		if (!$Connection->checkColumnName('spotter_archive','source_name')) {
693
			// Add source_name to spotter_output, spotter_live, spotter_archive, spotter_archive_output
694
    			$query = "ALTER TABLE `spotter_archive` ADD `source_name` VARCHAR(255) NULL AFTER `format_source`;";
695
			try {
696
				$sth = $Connection->db->prepare($query);
697
				$sth->execute();
698
			} catch(PDOException $e) {
699
				return "error (add source_name column) : ".$e->getMessage()."\n";
700
    			}
701
    		}
702
		if ($error != '') return $error;
703
		$query = "UPDATE `config` SET `value` = '20' WHERE `name` = 'schema_version'";
704
        	try {
705
            	    $sth = $Connection->db->prepare($query);
706
		    $sth->execute();
707
    		} catch(PDOException $e) {
708
		    return "error (update schema_version) : ".$e->getMessage()."\n";
709
    		}
710
		return $error;
711
	}
712
713
	private static function update_from_20() {
714
		global $globalIVAO, $globalVATSIM, $globalphpVMS;
715
    		$Connection = new Connection();
716
		$error = '';
717
    		// Update airline table
718
    		if (!$globalIVAO && !$globalVATSIM && !$globalphpVMS) {
719
			$error .= create_db::import_file('../db/airlines.sql');
720
			if ($error != '') return 'Import airlines.sql : '.$error;
721
		}
722
		if (!$Connection->checkColumnName('aircraft_modes','type_flight')) {
723
			// Add column over_country
724
    			$query = "ALTER TABLE `aircraft_modes` ADD `type_flight` VARCHAR(50) NULL DEFAULT NULL;";
725
        		try {
726
				$sth = $Connection->db->prepare($query);
727
				$sth->execute();
728
			} catch(PDOException $e) {
729
				return "error (add over_country) : ".$e->getMessage()."\n";
730
    			}
731
    		}
732
		if ($error != '') return $error;
733
		/*
734
    		if (!$globalIVAO && !$globalVATSIM && !$globalphpVMS) {
735
			// Force update ModeS (this will put type_flight data
736
			$error .= update_db::update_ModeS;
737
			if ($error != '') return "error (update ModeS) : ".$error;
738
		}
739
		*/
740
		$query = "UPDATE `config` SET `value` = '21' WHERE `name` = 'schema_version'";
741
        	try {
742
            	    $sth = $Connection->db->prepare($query);
743
		    $sth->execute();
744
    		} catch(PDOException $e) {
745
		    return "error (update schema_version) : ".$e->getMessage()."\n";
746
    		}
747
		return $error;
748
	}
749
750
	private static function update_from_21() {
751
		$Connection = new Connection();
752
		$error = '';
753
		if (!$Connection->checkColumnName('stats_airport','stats_type')) {
754
			// Rename type to stats_type
755
			$query = "ALTER TABLE `stats_airport` CHANGE `type` `stats_type` VARCHAR(50);ALTER TABLE `stats` CHANGE `type` `stats_type` VARCHAR(50);ALTER TABLE `stats_flight` CHANGE `type` `stats_type` VARCHAR(50);";
756
			try {
757
				$sth = $Connection->db->prepare($query);
758
				$sth->execute();
759
			} catch(PDOException $e) {
760
				return "error (rename type to stats_type on stats*) : ".$e->getMessage()."\n";
761
			}
762
			if ($error != '') return $error;
763
		}
764
		$query = "UPDATE `config` SET `value` = '22' WHERE `name` = 'schema_version'";
765
        	try {
766
            	    $sth = $Connection->db->prepare($query);
767
		    $sth->execute();
768
    		} catch(PDOException $e) {
769
		    return "error (update schema_version) : ".$e->getMessage()."\n";
770
    		}
771
		return $error;
772
	}
773
774
	private static function update_from_22() {
775
		global $globalDBdriver;
776
    		$Connection = new Connection();
777
		$error = '';
778
		// Add table stats polar
779
    		if (!$Connection->tableExists('stats_source')) {
780
			if ($globalDBdriver == 'mysql') {
781
    				$error .= create_db::import_file('../db/stats_source.sql');
782
			} else {
783
				$error .= create_db::import_file('../db/pgsql/stats_source.sql');
784
			}
785
			if ($error != '') return $error;
786
		}
787
		$query = "UPDATE config SET value = '23' WHERE name = 'schema_version'";
788
        	try {
789
            	    $sth = $Connection->db->prepare($query);
790
		    $sth->execute();
791
    		} catch(PDOException $e) {
792
		    return "error (update schema_version) : ".$e->getMessage()."\n";
793
    		}
794
		return $error;
795
	}
796
797
798
	private static function update_from_23() {
799
		global $globalDBdriver;
800
		$Connection = new Connection();
801
		$error = '';
802
		$query = "";
803
		// Add table tle for satellites
804
		if ($globalDBdriver == 'mysql') {
805
			if (!$Connection->tableExists('tle')) {
806
				$error .= create_db::import_file('../db/tle.sql');
807
				if ($error != '') return $error;
808
			}
809
		} else {
810
			if (!$Connection->tableExists('tle')) {
811
				$error .= create_db::import_file('../db/pgsql/tle.sql');
812
				if ($error != '') return $error;
813
			}
814
			$query = "create index flightaware_id_idx ON spotter_archive USING btree(flightaware_id)";
815
			try {
816
				$sth = $Connection->db->prepare($query);
817
				$sth->execute();
818
			} catch(PDOException $e) {
819
				return "error (create index on spotter_archive) : ".$e->getMessage()."\n";
820
			}
821
		}
822
		if (!$Connection->checkColumnName('stats_aircraft','aircraft_manufacturer')) {
823
			// Add aircraft_manufacturer to stats_aircraft
824
    			$query = "ALTER TABLE stats_aircraft ADD aircraft_manufacturer VARCHAR(255) NULL";
825
			try {
826
				$sth = $Connection->db->prepare($query);
827
				$sth->execute();
828
			} catch(PDOException $e) {
829
				return "error (add aircraft_manufacturer column) : ".$e->getMessage()."\n";
830
    			}
831
    		}
832
		
833
		$query = "UPDATE config SET value = '24' WHERE name = 'schema_version'";
834
		try {
835
			$sth = $Connection->db->prepare($query);
836
			$sth->execute();
837
		} catch(PDOException $e) {
838
			return "error (update schema_version) : ".$e->getMessage()."\n";
839
		}
840
		return $error;
841
	}
842
843
	private static function update_from_24() {
844
		global $globalDBdriver;
845
		$Connection = new Connection();
846
		$error = '';
847
		if ($globalDBdriver == 'mysql') {
848
			$error .= create_db::import_file('../db/airlines.sql');
849
		} else {
850
			$error .= create_db::import_file('../db/pgsql/airlines.sql');
851
		}
852
		if ($error != '') return 'Import airlines.sql : '.$error;
853
		if (!$Connection->checkColumnName('airlines','forsource')) {
854
			// Add forsource to airlines
855
			$query = "ALTER TABLE airlines ADD forsource VARCHAR(255) NULL DEFAULT NULL";
856
			try {
857
				$sth = $Connection->db->prepare($query);
858
				$sth->execute();
859
			} catch(PDOException $e) {
860
				return "error (add forsource column) : ".$e->getMessage()."\n";
861
			}
862
		}
863
		if (!$Connection->checkColumnName('stats_aircraft','stats_airline')) {
864
			// Add forsource to airlines
865
			$query = "ALTER TABLE stats_aircraft ADD stats_airline VARCHAR(255) NULL DEFAULT '', ADD filter_name VARCHAR(255) NULL DEFAULT ''";
866
			try {
867
				$sth = $Connection->db->prepare($query);
868
				$sth->execute();
869
			} catch(PDOException $e) {
870
				return "error (add stats_airline & filter_name column in stats_aircraft) : ".$e->getMessage()."\n";
871
			}
872
			// Add unique key
873
			if ($globalDBdriver == 'mysql') {
874
				$query = "drop index aircraft_icao on stats_aircraft;ALTER TABLE stats_aircraft ADD UNIQUE aircraft_icao (aircraft_icao,stats_airline,filter_name);";
875
			} else {
876
				$query = "alter table stats_aircraft drop constraint stats_aircraft_aircraft_icao_key;ALTER TABLE stats_aircraft ADD CONSTRAINT aircraft_icao UNIQUE (aircraft_icao,stats_airline,filter_name);";
877
			}
878
			try {
879
				$sth = $Connection->db->prepare($query);
880
				$sth->execute();
881
			} catch(PDOException $e) {
882
				return "error (add unique key in stats_aircraft) : ".$e->getMessage()."\n";
883
			}
884
		}
885
		if (!$Connection->checkColumnName('stats_airport','stats_airline')) {
886
			// Add forsource to airlines
887
			$query = "ALTER TABLE stats_airport ADD stats_airline VARCHAR(255) NULL DEFAULT '', ADD filter_name VARCHAR(255) NULL DEFAULT ''";
888
			try {
889
				$sth = $Connection->db->prepare($query);
890
				$sth->execute();
891
			} catch(PDOException $e) {
892
				return "error (add filter_name column in stats_airport) : ".$e->getMessage()."\n";
893
			}
894
			// Add unique key
895
			if ($globalDBdriver == 'mysql') {
896
				$query = "drop index airport_icao on stats_airport;ALTER TABLE stats_airport ADD UNIQUE airport_icao (airport_icao,stats_type,date,stats_airline,filter_name);";
897
			} else {
898
				$query = "alter table stats_airport drop constraint stats_airport_airport_icao_stats_type_date_key;ALTER TABLE stats_airport ADD CONSTRAINT airport_icao UNIQUE (airport_icao,stats_type,date,stats_airline,filter_name);";
899
			}
900
			try {
901
				$sth = $Connection->db->prepare($query);
902
				$sth->execute();
903
			} catch(PDOException $e) {
904
				return "error (add unique key in stats_airport) : ".$e->getMessage()."\n";
905
			}
906
		}
907
		if (!$Connection->checkColumnName('stats_country','stats_airline')) {
908
			// Add forsource to airlines
909
			$query = "ALTER TABLE stats_country ADD stats_airline VARCHAR(255) NULL DEFAULT '', ADD filter_name VARCHAR(255) NULL DEFAULT ''";
910
			try {
911
				$sth = $Connection->db->prepare($query);
912
				$sth->execute();
913
			} catch(PDOException $e) {
914
				return "error (add stats_airline & filter_name column in stats_country) : ".$e->getMessage()."\n";
915
			}
916
			// Add unique key
917
			if ($globalDBdriver == 'mysql') {
918
				$query = "drop index iso2 on stats_country;ALTER TABLE stats_country ADD UNIQUE iso2 (iso2,stats_airline,filter_name);";
919
			} else {
920
				$query = "alter table stats_country drop constraint stats_country_iso2_key;ALTER TABLE stats_country ADD CONSTRAINT iso2 UNIQUE (iso2,stats_airline,filter_name);";
921
			}
922
			try {
923
				$sth = $Connection->db->prepare($query);
924
				$sth->execute();
925
			} catch(PDOException $e) {
926
				return "error (add unique key in stats_airline) : ".$e->getMessage()."\n";
927
			}
928
		}
929
		if (!$Connection->checkColumnName('stats_flight','stats_airline')) {
930
			// Add forsource to airlines
931
			$query = "ALTER TABLE stats_flight ADD stats_airline VARCHAR(255) NULL DEFAULT '', ADD filter_name VARCHAR(255) NULL DEFAULT ''";
932
			try {
933
				$sth = $Connection->db->prepare($query);
934
				$sth->execute();
935
			} catch(PDOException $e) {
936
				return "error (add stats_airline & filter_name column in stats_flight) : ".$e->getMessage()."\n";
937
			}
938
		}
939
		if (!$Connection->checkColumnName('stats','stats_airline')) {
940
			// Add forsource to airlines
941
			$query = "ALTER TABLE stats ADD stats_airline VARCHAR(255) NULL DEFAULT '', ADD filter_name VARCHAR(255) NULL DEFAULT ''";
942
			try {
943
				$sth = $Connection->db->prepare($query);
944
				$sth->execute();
945
			} catch(PDOException $e) {
946
				return "error (add stats_airline & filter_name column in stats) : ".$e->getMessage()."\n";
947
			}
948
			if ($globalDBdriver == 'mysql' && $Connection->indexExists('stats','type')) {
949
				// Add unique key
950
				$query = "drop index type on stats;ALTER TABLE stats ADD UNIQUE stats_type (stats_type,stats_date,stats_airline,filter_name);";
951
				try {
952
					$sth = $Connection->db->prepare($query);
953
					$sth->execute();
954
				} catch(PDOException $e) {
955
					return "error (add unique key in stats) : ".$e->getMessage()."\n";
956
				}
957
			} else {
958
				// Add unique key
959
				if ($globalDBdriver == 'mysql') {
960
					$query = "drop index stats_type on stats;ALTER TABLE stats ADD UNIQUE stats_type (stats_type,stats_date,stats_airline,filter_name);";
961
				} else {
962
					$query = "alter table stats drop constraint stats_stats_type_stats_date_key;ALTER TABLE stats ADD CONSTRAINT stats_type UNIQUE (stats_type,stats_date,stats_airline,filter_name);";
963
				}
964
				try {
965
					$sth = $Connection->db->prepare($query);
966
					$sth->execute();
967
				} catch(PDOException $e) {
968
					return "error (add unique key in stats) : ".$e->getMessage()."\n";
969
				}
970
			}
971
		}
972
		if (!$Connection->checkColumnName('stats_registration','stats_airline')) {
973
			// Add forsource to airlines
974
			$query = "ALTER TABLE stats_registration ADD stats_airline VARCHAR(255) NULL DEFAULT '', ADD filter_name VARCHAR(255) NULL DEFAULT ''";
975
			try {
976
				$sth = $Connection->db->prepare($query);
977
				$sth->execute();
978
			} catch(PDOException $e) {
979
				return "error (add stats_airline & filter_name column in stats_registration) : ".$e->getMessage()."\n";
980
			}
981
			// Add unique key
982
			if ($globalDBdriver == 'mysql') {
983
				$query = "drop index registration on stats_registration;ALTER TABLE stats_registration ADD UNIQUE registration (registration,stats_airline,filter_name);";
984
			} else {
985
				$query = "alter table stats_registration drop constraint stats_registration_registration_key;ALTER TABLE stats_registration ADD CONSTRAINT registration UNIQUE (registration,stats_airline,filter_name);";
986
			}
987
			try {
988
				$sth = $Connection->db->prepare($query);
989
				$sth->execute();
990
			} catch(PDOException $e) {
991
				return "error (add unique key in stats_registration) : ".$e->getMessage()."\n";
992
			}
993
		}
994
		if (!$Connection->checkColumnName('stats_callsign','filter_name')) {
995
			// Add forsource to airlines
996
			$query = "ALTER TABLE stats_callsign ADD filter_name VARCHAR(255) NULL DEFAULT ''";
997
			try {
998
				$sth = $Connection->db->prepare($query);
999
				$sth->execute();
1000
			} catch(PDOException $e) {
1001
				return "error (add filter_name column in stats_callsign) : ".$e->getMessage()."\n";
1002
			}
1003
			// Add unique key
1004
			if ($globalDBdriver == 'mysql') {
1005
				$query = "drop index callsign_icao on stats_callsign;ALTER TABLE stats_callsign ADD UNIQUE callsign_icao (callsign_icao,filter_name);";
1006
			} else {
1007
				$query = "drop index stats_callsign_callsign_icao_key;ALTER TABLE stats_callsign ADD CONSTRAINT callsign_icao UNIQUE (callsign_icao,filter_name);";
1008
			}
1009
			try {
1010
				$sth = $Connection->db->prepare($query);
1011
				$sth->execute();
1012
			} catch(PDOException $e) {
1013
				return "error (add unique key in stats_callsign) : ".$e->getMessage()."\n";
1014
			}
1015
		}
1016
		if (!$Connection->checkColumnName('stats_airline','filter_name')) {
1017
			// Add forsource to airlines
1018
			$query = "ALTER TABLE stats_airline ADD filter_name VARCHAR(255) NULL DEFAULT ''";
1019
			try {
1020
				$sth = $Connection->db->prepare($query);
1021
				$sth->execute();
1022
			} catch(PDOException $e) {
1023
				return "error (add filter_name column in stats_airline) : ".$e->getMessage()."\n";
1024
			}
1025
			// Add unique key
1026
			if ($globalDBdriver == 'mysql') {
1027
				$query = "drop index airline_icao on stats_airline;ALTER TABLE stats_airline ADD UNIQUE airline_icao (airline_icao,filter_name);";
1028
			} else {
1029
				$query = "drop index stats_airline_airline_icao_key;ALTER TABLE stats_airline ADD CONSTRAINT airline_icao UNIQUE (airline_icao,filter_name);";
1030
			}
1031
			try {
1032
				$sth = $Connection->db->prepare($query);
1033
				$sth->execute();
1034
			} catch(PDOException $e) {
1035
				return "error (add unique key in stats_callsign) : ".$e->getMessage()."\n";
1036
			}
1037
		}
1038
		
1039
		$query = "UPDATE config SET value = '25' WHERE name = 'schema_version'";
1040
		try {
1041
			$sth = $Connection->db->prepare($query);
1042
			$sth->execute();
1043
		} catch(PDOException $e) {
1044
			return "error (update schema_version) : ".$e->getMessage()."\n";
1045
		}
1046
		return $error;
1047
	}
1048
1049
	private static function update_from_25() {
1050
		global $globalDBdriver;
1051
		$Connection = new Connection();
1052
		$error = '';
1053
		if (!$Connection->checkColumnName('stats_owner','stats_airline')) {
1054
			// Add forsource to airlines
1055
			$query = "ALTER TABLE stats_owner ADD stats_airline VARCHAR(255) NULL DEFAULT '', ADD filter_name VARCHAR(255) NULL DEFAULT ''";
1056
			try {
1057
				$sth = $Connection->db->prepare($query);
1058
				$sth->execute();
1059
			} catch(PDOException $e) {
1060
				return "error (add stats_airline & filter_name column in stats_owner) : ".$e->getMessage()."\n";
1061
			}
1062
			// Add unique key
1063
			if ($globalDBdriver == 'mysql') {
1064
				$query = "drop index owner_name on stats_owner;ALTER TABLE stats_owner ADD UNIQUE owner_name (owner_name,stats_airline,filter_name);";
1065
			} else {
1066
				$query = "drop index stats_owner_owner_name_key;ALTER TABLE stats_owner ADD CONSTRAINT owner_name UNIQUE (owner_name,stats_airline,filter_name);";
1067
			}
1068
			try {
1069
				$sth = $Connection->db->prepare($query);
1070
				$sth->execute();
1071
			} catch(PDOException $e) {
1072
				return "error (add unique key in stats_owner) : ".$e->getMessage()."\n";
1073
			}
1074
		}
1075
		if (!$Connection->checkColumnName('stats_pilot','stats_airline')) {
1076
			// Add forsource to airlines
1077
			$query = "ALTER TABLE stats_pilot ADD stats_airline VARCHAR(255) NULL DEFAULT '', ADD filter_name VARCHAR(255) NULL DEFAULT ''";
1078
			try {
1079
				$sth = $Connection->db->prepare($query);
1080
				$sth->execute();
1081
			} catch(PDOException $e) {
1082
				return "error (add stats_airline & filter_name column in stats_pilot) : ".$e->getMessage()."\n";
1083
			}
1084
			// Add unique key
1085
			if ($globalDBdriver == 'mysql') {
1086
				$query = "drop index pilot_id on stats_pilot;ALTER TABLE stats_pilot ADD UNIQUE pilot_id (pilot_id,stats_airline,filter_name);";
1087
			} else {
1088
				$query = "drop index stats_pilot_pilot_id_key;ALTER TABLE stats_pilot ADD CONSTRAINT pilot_id UNIQUE (pilot_id,stats_airline,filter_name);";
1089
			}
1090
			try {
1091
				$sth = $Connection->db->prepare($query);
1092
				$sth->execute();
1093
			} catch(PDOException $e) {
1094
				return "error (add unique key in stats_pilot) : ".$e->getMessage()."\n";
1095
			}
1096
		}
1097
		$query = "UPDATE config SET value = '26' WHERE name = 'schema_version'";
1098
		try {
1099
			$sth = $Connection->db->prepare($query);
1100
			$sth->execute();
1101
		} catch(PDOException $e) {
1102
			return "error (update schema_version) : ".$e->getMessage()."\n";
1103
		}
1104
		return $error;
1105
	}
1106
1107
	private static function update_from_26() {
1108
		global $globalDBdriver;
1109
		$Connection = new Connection();
1110
		$error = '';
1111
		if (!$Connection->checkColumnName('atc','format_source')) {
1112
			$query = "ALTER TABLE atc ADD format_source VARCHAR(255) DEFAULT NULL, ADD source_name VARCHAR(255) DEFAULT NULL";
1113
			try {
1114
				$sth = $Connection->db->prepare($query);
1115
				$sth->execute();
1116
			} catch(PDOException $e) {
1117
				return "error (add format_source & source_name column in atc) : ".$e->getMessage()."\n";
1118
			}
1119
		}
1120
		$query = "UPDATE config SET value = '27' WHERE name = 'schema_version'";
1121
		try {
1122
			$sth = $Connection->db->prepare($query);
1123
			$sth->execute();
1124
		} catch(PDOException $e) {
1125
			return "error (update schema_version) : ".$e->getMessage()."\n";
1126
		}
1127
		return $error;
1128
	}
1129
1130
	private static function update_from_27() {
1131
		global $globalDBdriver;
1132
		$Connection = new Connection();
1133
		$error = '';
1134
		if (!$Connection->checkColumnName('stats_pilot','format_source')) {
1135
			// Add forsource to airlines
1136
			$query = "ALTER TABLE stats_pilot ADD format_source VARCHAR(255) NULL DEFAULT ''";
1137
			try {
1138
				$sth = $Connection->db->prepare($query);
1139
				$sth->execute();
1140
			} catch(PDOException $e) {
1141
				return "error (add format_source column in stats_pilot) : ".$e->getMessage()."\n";
1142
			}
1143
			// Add unique key
1144
			if ($globalDBdriver == 'mysql') {
1145
				$query = "drop index pilot_id on stats_pilot;ALTER TABLE stats_pilot ADD UNIQUE pilot_id (pilot_id,stats_airline,filter_name,format_source);";
1146
			} else {
1147
				$query = "drop index pilot_id;ALTER TABLE stats_pilot ADD CONSTRAINT pilot_id UNIQUE (pilot_id,stats_airline,filter_name,format_source);";
1148
			}
1149
			try {
1150
				$sth = $Connection->db->prepare($query);
1151
				$sth->execute();
1152
			} catch(PDOException $e) {
1153
				return "error (modify unique key in stats_pilot) : ".$e->getMessage()."\n";
1154
			}
1155
		}
1156
		$query = "UPDATE config SET value = '28' WHERE name = 'schema_version'";
1157
		try {
1158
			$sth = $Connection->db->prepare($query);
1159
			$sth->execute();
1160
		} catch(PDOException $e) {
1161
			return "error (update schema_version) : ".$e->getMessage()."\n";
1162
		}
1163
		return $error;
1164
	}
1165
1166
	private static function update_from_28() {
1167
		global $globalDBdriver;
1168
		$Connection = new Connection();
1169
		$error = '';
1170
		if ($globalDBdriver == 'mysql' && !$Connection->indexExists('spotter_live','latitude')) {
1171
			// Add unique key
1172
			$query = "alter table spotter_live add index(latitude,longitude)";
1173
			try {
1174
				$sth = $Connection->db->prepare($query);
1175
				$sth->execute();
1176
			} catch(PDOException $e) {
1177
				return "error (add index latitude,longitude on spotter_live) : ".$e->getMessage()."\n";
1178
			}
1179
                }
1180
		if (!$Connection->checkColumnName('aircraft','mfr')) {
1181
			// Add mfr to aircraft
1182
			$query = "ALTER TABLE aircraft ADD mfr VARCHAR(255) NULL";
1183
			try {
1184
				$sth = $Connection->db->prepare($query);
1185
				$sth->execute();
1186
			} catch(PDOException $e) {
1187
				return "error (add mfr column in aircraft) : ".$e->getMessage()."\n";
1188
			}
1189
		}
1190
		if (!$Connection->tableExists('accidents')) {
1191
			if ($globalDBdriver == 'mysql') {
1192
				$error .= create_db::import_file('../db/accidents.sql');
1193
			} else {
1194
				$error .= create_db::import_file('../db/pgsql/accidents.sql');
1195
			}
1196
		}
1197
1198
		$query = "UPDATE config SET value = '29' WHERE name = 'schema_version'";
1199
		try {
1200
			$sth = $Connection->db->prepare($query);
1201
			$sth->execute();
1202
		} catch(PDOException $e) {
1203
			return "error (update schema_version) : ".$e->getMessage()."\n";
1204
		}
1205
		return $error;
1206
	}
1207
1208
	private static function update_from_29() {
1209
		global $globalDBdriver;
1210
		$Connection = new Connection();
1211
		$error = '';
1212
		if ($Connection->checkColumnName('aircraft','mfr')) {
1213
			// drop mfr to aircraft
1214
			$query = "ALTER TABLE aircraft DROP COLUMN mfr";
1215
			try {
1216
				$sth = $Connection->db->prepare($query);
1217
				$sth->execute();
1218
			} catch(PDOException $e) {
1219
				return "error (drop mfr column in aircraft) : ".$e->getMessage()."\n";
1220
			}
1221
		}
1222
		if (!$Connection->tableExists('faamfr')) {
1223
			if ($globalDBdriver == 'mysql') {
1224
				$error .= create_db::import_file('../db/faamfr.sql');
1225
			} else {
1226
				$error .= create_db::import_file('../db/pgsql/faamfr.sql');
1227
			}
1228
		}
1229
1230
		$query = "UPDATE config SET value = '30' WHERE name = 'schema_version'";
1231
		try {
1232
			$sth = $Connection->db->prepare($query);
1233
			$sth->execute();
1234
		} catch(PDOException $e) {
1235
			return "error (update schema_version) : ".$e->getMessage()."\n";
1236
		}
1237
		return $error;
1238
	}
1239
1240
	private static function update_from_30() {
1241
		global $globalDBdriver;
1242
		$Connection = new Connection();
1243
		$error = '';
1244
		if (!$Connection->indexExists('notam','ref_idx')) {
1245
			// Add index key
1246
			$query = "create index ref_idx on notam (ref)";
1247
			try {
1248
				$sth = $Connection->db->prepare($query);
1249
				$sth->execute();
1250
			} catch(PDOException $e) {
1251
				return "error (add index ref on notam) : ".$e->getMessage()."\n";
1252
			}
1253
                }
1254
		if (!$Connection->indexExists('accidents','registration_idx')) {
1255
			// Add index key
1256
			$query = "create index registration_idx on accidents (registration)";
1257
			try {
1258
				$sth = $Connection->db->prepare($query);
1259
				$sth->execute();
1260
			} catch(PDOException $e) {
1261
				return "error (add index registration on accidents) : ".$e->getMessage()."\n";
1262
			}
1263
                }
1264
		if (!$Connection->indexExists('accidents','rdts')) {
1265
			// Add index key
1266
			$query = "create index rdts on accidents (registration,date,type,source)";
1267
			try {
1268
				$sth = $Connection->db->prepare($query);
1269
				$sth->execute();
1270
			} catch(PDOException $e) {
1271
				return "error (add index registration, date, type & source on accidents) : ".$e->getMessage()."\n";
1272
			}
1273
                }
1274
1275
		$query = "UPDATE config SET value = '31' WHERE name = 'schema_version'";
1276
		try {
1277
			$sth = $Connection->db->prepare($query);
1278
			$sth->execute();
1279
		} catch(PDOException $e) {
1280
			return "error (update schema_version) : ".$e->getMessage()."\n";
1281
		}
1282
		return $error;
1283
	}
1284
1285
	private static function update_from_31() {
1286
		global $globalDBdriver;
1287
		$Connection = new Connection();
1288
		$error = '';
1289
		if (!$Connection->checkColumnName('accidents','airline_name')) {
1290
			// Add airline_name to accidents
1291
			$query = "ALTER TABLE accidents ADD airline_name VARCHAR(255) NULL";
1292
			try {
1293
				$sth = $Connection->db->prepare($query);
1294
				$sth->execute();
1295
			} catch(PDOException $e) {
1296
				return "error (add airline_name column in accidents) : ".$e->getMessage()."\n";
1297
			}
1298
		}
1299
		if (!$Connection->checkColumnName('accidents','airline_icao')) {
1300
			// Add airline_icao to accidents
1301
			$query = "ALTER TABLE accidents ADD airline_icao VARCHAR(10) NULL";
1302
			try {
1303
				$sth = $Connection->db->prepare($query);
1304
				$sth->execute();
1305
			} catch(PDOException $e) {
1306
				return "error (add airline_icao column in accidents) : ".$e->getMessage()."\n";
1307
			}
1308
		}
1309
		$query = "UPDATE config SET value = '32' WHERE name = 'schema_version'";
1310
		try {
1311
			$sth = $Connection->db->prepare($query);
1312
			$sth->execute();
1313
		} catch(PDOException $e) {
1314
			return "error (update schema_version) : ".$e->getMessage()."\n";
1315
		}
1316
		return $error;
1317
	}
1318
1319
	private static function update_from_32() {
1320
		global $globalDBdriver, $globalVATSIM, $globalIVAO;
1321
		$Connection = new Connection();
1322
		$error = '';
1323
		if (!$Connection->checkColumnName('airlines','alliance')) {
1324
			// Add alliance to airlines
1325
			$query = "ALTER TABLE airlines ADD alliance VARCHAR(255) NULL";
1326
			try {
1327
				$sth = $Connection->db->prepare($query);
1328
				$sth->execute();
1329
			} catch(PDOException $e) {
1330
				return "error (add alliance column in airlines) : ".$e->getMessage()."\n";
1331
			}
1332
		}
1333
		if ($globalDBdriver == 'mysql') {
1334
			$error .= create_db::import_file('../db/airlines.sql');
1335
			if ($error != '') return $error;
1336
		} else {
1337
			$error .= create_db::import_file('../db/pgsql/airlines.sql');
1338
			if ($error != '') return $error;
1339
		}
1340
		if ((isset($globalVATSIM) && $globalVATSIM) || (isset($globalIVAO) && $globalIVAO)) {
1341
			include_once(dirname(__FILE__).'/class.update_db.php');
1342
			if (isset($globalVATSIM) && $globalVATSIM) {
1343
				$error .= update_db::update_vatsim();
1344
				if ($error != '') return $error;
1345
			}
1346
			if (isset($globalIVAO) && $globalIVAO && file_exists('tmp/ivae_feb2013.zip')) {
1347
				$error .= update_db::update_IVAO();
1348
				if ($error != '') return $error;
1349
			}
1350
		}
1351
1352
		$query = "UPDATE config SET value = '33' WHERE name = 'schema_version'";
1353
		try {
1354
			$sth = $Connection->db->prepare($query);
1355
			$sth->execute();
1356
		} catch(PDOException $e) {
1357
			return "error (update schema_version) : ".$e->getMessage()."\n";
1358
		}
1359
		return $error;
1360
	}
1361
1362
	private static function update_from_33() {
1363
		global $globalDBdriver, $globalVATSIM, $globalIVAO;
1364
		$Connection = new Connection();
1365
		$error = '';
1366
		if (!$Connection->checkColumnName('airlines','ban_eu')) {
1367
			// Add ban_eu to airlines
1368
			$query = "ALTER TABLE airlines ADD ban_eu INTEGER NOT NULL DEFAULT '0'";
1369
			try {
1370
				$sth = $Connection->db->prepare($query);
1371
				$sth->execute();
1372
			} catch(PDOException $e) {
1373
				return "error (add ban_eu column in airlines) : ".$e->getMessage()."\n";
1374
			}
1375
		}
1376
		$query = "UPDATE config SET value = '34' WHERE name = 'schema_version'";
1377
		try {
1378
			$sth = $Connection->db->prepare($query);
1379
			$sth->execute();
1380
		} catch(PDOException $e) {
1381
			return "error (update schema_version) : ".$e->getMessage()."\n";
1382
		}
1383
		return $error;
1384
	}
1385
1386
	private static function update_from_34() {
1387
		global $globalDBdriver;
1388
		$Connection = new Connection();
1389
		$error = '';
1390
		if ($globalDBdriver == 'mysql') {
1391
			if ($Connection->getColumnType('spotter_output','date') == 'TIMESTAMP' && $Connection->getColumnType('spotter_output','last_seen') != 'TIMESTAMP') {
1392
				$query = "ALTER TABLE spotter_output CHANGE date date TIMESTAMP NULL DEFAULT NULL";
1393
				try {
1394
					$sth = $Connection->db->prepare($query);
1395
					$sth->execute();
1396
				} catch(PDOException $e) {
1397
					return "error (delete default timestamp spotter_output) : ".$e->getMessage()."\n";
1398
				}
1399
				$query = "ALTER TABLE spotter_output MODIFY COLUMN last_seen timestamp not null default current_timestamp()";
1400
				try {
1401
					$sth = $Connection->db->prepare($query);
1402
					$sth->execute();
1403
				} catch(PDOException $e) {
1404
					return "error (convert spotter_output last_seen to timestamp) : ".$e->getMessage()."\n";
1405
				}
1406
				
1407
				$query = "ALTER TABLE spotter_output ALTER COLUMN last_seen DROP DEFAULT";
1408
				try {
1409
					$sth = $Connection->db->prepare($query);
1410
					$sth->execute();
1411
				} catch(PDOException $e) {
1412
					return "error (delete default timestamp spotter_output) : ".$e->getMessage()."\n";
1413
				}
1414
				/*$query = "SELECT date,last_seen FROM spotter_output WHERE last_seen < date ORDER BY date DESC LIMIT 150";
1415
				try {
1416
					$sth = $Connection->db->prepare($query);
1417
					$sth->execute();
1418
				} catch(PDOException $e) {
1419
					return "error (get date diff from spotter_output) : ".$e->getMessage()."\n";
1420
				}
1421
				$stats = array();
1422
				while($row = $sth->fetch(PDO::FETCH_ASSOC)) {
1423
					$hours = gmdate('H',strtotime($row['last_seen']) - strtotime($row['date']));
1424
					if ($hours < 12) {
1425
						if (isset($stats[$hours])) $stats[$hours] = $stats[$hours] + 1;
1426
						else $stats[$hours] = 1;
1427
					}
1428
				}
1429
				if (!empty($stats)) {
1430
					asort($stats);
1431
					reset($stats);
1432
					$hour = key($stats);
1433
					$i = 1;
1434
					$j = 0;
1435
					$query_chk = "SELECT count(*) as nb FROM spotter_output WHERE last_seen < date";
1436
					while ($i > 0) {
1437
						$query = "UPDATE spotter_output SET last_seen = DATE_ADD(last_seen, INTERVAL ".$hour." HOUR) WHERE last_seen < date";
1438
						try {
1439
							$sth = $Connection->db->prepare($query);
1440
							$sth->execute();
1441
						} catch(PDOException $e) {
1442
							return "error (fix date) : ".$e->getMessage()."\n";
1443
						}
1444
						try {
1445
							$sth_chk = $Connection->db->prepare($query_chk);
1446
							$sth_chk->execute();
1447
							$result = $sth_chk->fetchAll(PDO::FETCH_ASSOC);
1448
						} catch(PDOException $e) {
1449
							return "error (fix date chk) : ".$e->getMessage()."\n";
1450
						}
1451
						$i = $result[0]['nb'];
1452
						$hour = 1;
1453
						$j++;
1454
						if ($j > 12) $i = 0;
1455
					}
1456
				}
1457
				*/
1458
				$query = "UPDATE spotter_output SET last_seen = date WHERE last_seen < date";
1459
				try {
1460
					$sth = $Connection->db->prepare($query);
1461
					$sth->execute();
1462
				} catch(PDOException $e) {
1463
					return "error (fix date) : ".$e->getMessage()."\n";
1464
				}
1465
			}
1466
			/*
1467
			if ($Connection->getColumnType('spotter_archive_output','date') == 'TIMESTAMP' && $Connection->getColumnType('spotter_archive_output','last_seen') != 'TIMESTAMP') {
1468
				$query = "ALTER TABLE spotter_archive_output CHANGE date date TIMESTAMP NULL DEFAULT NULL";
1469
				try {
1470
					$sth = $Connection->db->prepare($query);
1471
					$sth->execute();
1472
				} catch(PDOException $e) {
1473
					return "error (delete default timestamp spotter_output) : ".$e->getMessage()."\n";
1474
				}
1475
				$query = "ALTER TABLE spotter_archive_output MODIFY COLUMN last_seen timestamp not null default current_timestamp()";
1476
				try {
1477
					$sth = $Connection->db->prepare($query);
1478
					$sth->execute();
1479
				} catch(PDOException $e) {
1480
					return "error (convert spotter_archive_output last_seen to timestamp) : ".$e->getMessage()."\n";
1481
				}
1482
				$query = "ALTER TABLE spotter_archive_output ALTER COLUMN last_seen DROP DEFAULT";
1483
				try {
1484
					$sth = $Connection->db->prepare($query);
1485
					$sth->execute();
1486
				} catch(PDOException $e) {
1487
					return "error (delete default timestamp spotter_output) : ".$e->getMessage()."\n";
1488
				}
1489
				$query = "SELECT date,last_seen FROM spotter_archive_output WHERE last_seen < date ORDER BY date DESC LIMIT 150";
1490
				try {
1491
					$sth = $Connection->db->prepare($query);
1492
					$sth->execute();
1493
				} catch(PDOException $e) {
1494
					return "error (get diff from spotter_archive_output) : ".$e->getMessage()."\n";
1495
				}
1496
				$stats = array();
1497
				while($row = $sth->fetch(PDO::FETCH_ASSOC)) {
1498
					$hours = gmdate('H',strtotime($row['last_seen']) - strtotime($row['date']));
1499
					if ($hours < 12) {
1500
						if (isset($stats[$hours])) $stats[$hours] = $stats[$hours] + 1;
1501
						else $stats[$hours] = 1;
1502
					}
1503
				}
1504
				if (!empty($stats)) {
1505
					asort($stats);
1506
					reset($stats);
1507
					$hour = key($stats);
1508
					$i = 1;
1509
					$j = 0;
1510
					$query_chk = "SELECT count(*) as nb FROM spotter_archive_output WHERE last_seen < date";
1511
					while ($i > 0) {
1512
						$query = "UPDATE spotter_archive_output SET last_seen = DATE_ADD(last_seen, INTERVAL ".$hour." HOUR) WHERE last_seen < date";
1513
						try {
1514
							$sth = $Connection->db->prepare($query);
1515
							$sth->execute();
1516
						} catch(PDOException $e) {
1517
							return "error (fix date) : ".$e->getMessage()."\n";
1518
						}
1519
						try {
1520
							$sth_chk = $Connection->db->prepare($query_chk);
1521
							$sth_chk->execute();
1522
							$result = $sth_chk->fetchAll(PDO::FETCH_ASSOC);
1523
						} catch(PDOException $e) {
1524
							return "error (fix date chk) : ".$e->getMessage()."\n";
1525
						}
1526
						$i = $result[0]['nb'];
1527
						$hour = 1;
1528
						$j++;
1529
						if ($j > 12) $i = 0;
1530
					}
1531
				}
1532
				$query = "UPDATE spotter_archive_output SET last_seen = date WHERE last_seen < date";
1533
				try {
1534
					$sth = $Connection->db->prepare($query);
1535
					$sth->execute();
1536
				} catch(PDOException $e) {
1537
					return "error (fix date) : ".$e->getMessage()."\n";
1538
				}
1539
			
1540
			}
1541
			*/
1542
		}
1543
		$query = "UPDATE config SET value = '35' WHERE name = 'schema_version'";
1544
		try {
1545
			$sth = $Connection->db->prepare($query);
1546
			$sth->execute();
1547
		} catch(PDOException $e) {
1548
			return "error (update schema_version) : ".$e->getMessage()."\n";
1549
		}
1550
		return $error;
1551
	}
1552
	private static function update_from_35() {
1553
		global $globalDBdriver;
1554
		$Connection = new Connection();
1555
		$error = '';
1556
		if (!$Connection->indexExists('accidents','type')) {
1557
			// Add index key
1558
			$query = "create index type on accidents (type,date)";
1559
			try {
1560
				$sth = $Connection->db->prepare($query);
1561
				$sth->execute();
1562
			} catch(PDOException $e) {
1563
				return "error (add index type on accidents) : ".$e->getMessage()."\n";
1564
			}
1565
                }
1566
		$query = "UPDATE config SET value = '36' WHERE name = 'schema_version'";
1567
		try {
1568
			$sth = $Connection->db->prepare($query);
1569
			$sth->execute();
1570
		} catch(PDOException $e) {
1571
			return "error (update schema_version) : ".$e->getMessage()."\n";
1572
		}
1573
		return $error;
1574
	}
1575
1576
	private static function update_from_36() {
1577
		global $globalDBdriver;
1578
		$Connection = new Connection();
1579
		$error = '';
1580
		if (!$Connection->checkColumnName('aircraft_modes','source_type')) {
1581
			$query = "ALTER TABLE aircraft_modes ADD source_type VARCHAR(255) DEFAULT 'modes'";
1582
			try {
1583
				$sth = $Connection->db->prepare($query);
1584
				$sth->execute();
1585
			} catch(PDOException $e) {
1586
				return "error (add source_type column in aircraft_modes) : ".$e->getMessage()."\n";
1587
			}
1588
		}
1589
		/*
1590
		if ($globalDBdriver == 'mysql') {
1591
			$query = "ALTER TABLE spotter_output MODIFY COLUMN ModeS VARCHAR(20) DEFAULT NULL; ALTER TABLE spotter_archive_output MODIFY COLUMN ModeS VARCHAR(20) DEFAULT NULL; ALTER TABLE spotter_live MODIFY COLUMN ModeS VARCHAR(20) DEFAULT NULL;ALTER TABLE spotter_archive MODIFY COLUMN ModeS VARCHAR(20) DEFAULT NULL;";
1592
			try {
1593
				$sth = $Connection->db->prepare($query);
1594
				$sth->execute();
1595
			} catch(PDOException $e) {
1596
				return "error (change ModeS column in spotter_* to NULL) : ".$e->getMessage()."\n";
1597
			}
1598
		} else {
1599
			$query = "ALTER TABLE spotter_output ALTER COLUMN ModeS DROP NOT NULL;ALTER TABLE spotter_live ALTER COLUMN ModeS DROP NOT NULL;ALTER TABLE spotter_archive_output ALTER COLUMN ModeS DROP NOT NULL;ALTER TABLE spotter_archive ALTER COLUMN ModeS DROP NOT NULL;";
1600
			try {
1601
				$sth = $Connection->db->prepare($query);
1602
				$sth->execute();
1603
			} catch(PDOException $e) {
1604
				return "error (change ModeS column in spotter_* to NULL) : ".$e->getMessage()."\n";
1605
			}
1606
		}
1607
		*/
1608
		if ($globalDBdriver == 'mysql') {
1609
			if (!$Connection->tableExists('tracker_output')) {
1610
				$error .= create_db::import_file('../db/tracker_output.sql');
1611
				if ($error != '') return $error;
1612
			}
1613
			if (!$Connection->tableExists('tracker_live')) {
1614
				$error .= create_db::import_file('../db/tracker_live.sql');
1615
				if ($error != '') return $error;
1616
			}
1617
			if (!$Connection->tableExists('marine_output')) {
1618
				$error .= create_db::import_file('../db/marine_output.sql');
1619
				if ($error != '') return $error;
1620
			}
1621
			if (!$Connection->tableExists('marine_live')) {
1622
				$error .= create_db::import_file('../db/marine_live.sql');
1623
				if ($error != '') return $error;
1624
			}
1625
			if (!$Connection->tableExists('marine_identity')) {
1626
				$error .= create_db::import_file('../db/marine_identity.sql');
1627
				if ($error != '') return $error;
1628
			}
1629
			if (!$Connection->tableExists('marine_mid')) {
1630
				$error .= create_db::import_file('../db/marine_mid.sql');
1631
				if ($error != '') return $error;
1632
			}
1633
		} else {
1634
			$error .= create_db::import_file('../db/pgsql/tracker_output.sql');
1635
			if ($error != '') return $error;
1636
			$error .= create_db::import_file('../db/pgsql/tracker_live.sql');
1637
			if ($error != '') return $error;
1638
			$error .= create_db::import_file('../db/pgsql/marine_output.sql');
1639
			if ($error != '') return $error;
1640
			$error .= create_db::import_file('../db/pgsql/marine_live.sql');
1641
			if ($error != '') return $error;
1642
			$error .= create_db::import_file('../db/pgsql/marine_identity.sql');
1643
			if ($error != '') return $error;
1644
			$error .= create_db::import_file('../db/pgsql/marine_mid.sql');
1645
			if ($error != '') return $error;
1646
		}
1647
		$query = "UPDATE config SET value = '37' WHERE name = 'schema_version'";
1648
		try {
1649
			$sth = $Connection->db->prepare($query);
1650
			$sth->execute();
1651
		} catch(PDOException $e) {
1652
			return "error (update schema_version) : ".$e->getMessage()."\n";
1653
		}
1654
		return $error;
1655
	}
1656
1657
	private static function update_from_37() {
1658
		global $globalDBdriver, $globalDBname;
1659
		$Connection = new Connection();
1660
		$error = '';
1661
		if ($globalDBdriver == 'mysql') {
1662
			if (!$Connection->tableExists('marine_image')) {
1663
				$error .= create_db::import_file('../db/marine_image.sql');
1664
				if ($error != '') return $error;
1665
			}
1666
			if (!$Connection->tableExists('marine_archive')) {
1667
				$error .= create_db::import_file('../db/marine_archive.sql');
1668
				if ($error != '') return $error;
1669
			}
1670
			if (!$Connection->tableExists('marine_archive_output')) {
1671
				$error .= create_db::import_file('../db/marine_archive_output.sql');
1672
				if ($error != '') return $error;
1673
			}
1674
			if (!$Connection->tableExists('tracker_archive')) {
1675
				$error .= create_db::import_file('../db/tracker_archive.sql');
1676
				if ($error != '') return $error;
1677
			}
1678
			if (!$Connection->tableExists('tracker_archive_output')) {
1679
				$error .= create_db::import_file('../db/tracker_archive_output.sql');
1680
				if ($error != '') return $error;
1681
			}
1682
			if (!$Connection->tableExists('marine_archive_output')) {
1683
				$error .= create_db::import_file('../db/tracker_archive_output.sql');
1684
				if ($error != '') return $error;
1685
			}
1686
		} else {
1687
			$error .= create_db::import_file('../db/pgsql/marine_image.sql');
1688
			if ($error != '') return $error;
1689
			$error .= create_db::import_file('../db/pgsql/marine_archive.sql');
1690
			if ($error != '') return $error;
1691
			$error .= create_db::import_file('../db/pgsql/marine_archive_output.sql');
1692
			if ($error != '') return $error;
1693
			$error .= create_db::import_file('../db/pgsql/tracker_archive.sql');
1694
			if ($error != '') return $error;
1695
			$error .= create_db::import_file('../db/pgsql/tracker_archive_output.sql');
1696
			if ($error != '') return $error;
1697
		}
1698
		if ($globalDBdriver == 'mysql') {
1699
			$query = "SELECT ENGINE FROM information_schema.TABLES where TABLE_SCHEMA = '".$globalDBname."' AND TABLE_NAME = 'spotter_archive'";
1700
			try {
1701
				$sth = $Connection->db->prepare($query);
1702
				$sth->execute();
1703
			} catch(PDOException $e) {
1704
				return "error (problem when select engine for spotter_engine) : ".$e->getMessage()."\n";
1705
			}
1706
			$row = $sth->fetch(PDO::FETCH_ASSOC);
1707
			if ($row['engine'] == 'ARCHIVE') {
1708
				$query = "ALTER TABLE spotter_archive ENGINE=InnoDB";
1709
				try {
1710
					$sth = $Connection->db->prepare($query);
1711
					$sth->execute();
1712
				} catch(PDOException $e) {
1713
					return "error (Change table format from archive to InnoDB for spotter_archive) : ".$e->getMessage()."\n";
1714
				}
1715
			}
1716
		}
1717
		if (!$Connection->indexExists('spotter_archive','flightaware_id_date_idx') && !$Connection->indexExists('spotter_archive','flightaware_id')) {
1718
			// Add index key
1719
			$query = "create index flightaware_id_date_idx on spotter_archive (flightaware_id,date)";
1720
			try {
1721
				$sth = $Connection->db->prepare($query);
1722
				$sth->execute();
1723
			} catch(PDOException $e) {
1724
				return "error (add index flightaware_id, date on spotter_archive) : ".$e->getMessage()."\n";
1725
			}
1726
                }
1727
		$query = "UPDATE config SET value = '38' WHERE name = 'schema_version'";
1728
		try {
1729
			$sth = $Connection->db->prepare($query);
1730
			$sth->execute();
1731
		} catch(PDOException $e) {
1732
			return "error (update schema_version) : ".$e->getMessage()."\n";
1733
		}
1734
		return $error;
1735
	}
1736
1737
	private static function update_from_38() {
1738
		global $globalDBdriver;
1739
		$Connection = new Connection();
1740
		$error = '';
1741
		if ($globalDBdriver == 'mysql') {
1742
			if (!$Connection->checkColumnName('marine_output','type_id')) {
1743
				$query = "ALTER TABLE marine_output ADD COLUMN type_id int(11) DEFAULT NULL";
1744
				try {
1745
					$sth = $Connection->db->prepare($query);
1746
					$sth->execute();
1747
				} catch(PDOException $e) {
1748
					return "error (add column type_id in marine_output) : ".$e->getMessage()."\n";
1749
				}
1750
			}
1751
			if (!$Connection->checkColumnName('marine_live','type_id')) {
1752
				$query = "ALTER TABLE marine_live ADD COLUMN type_id int(11) DEFAULT NULL";
1753
				try {
1754
					$sth = $Connection->db->prepare($query);
1755
					$sth->execute();
1756
				} catch(PDOException $e) {
1757
					return "error (add column type_id in marine_live) : ".$e->getMessage()."\n";
1758
				}
1759
			}
1760
			if (!$Connection->checkColumnName('marine_archive','type_id')) {
1761
				$query = "ALTER TABLE marine_archive ADD COLUMN type_id int(11) DEFAULT NULL";
1762
				try {
1763
					$sth = $Connection->db->prepare($query);
1764
					$sth->execute();
1765
				} catch(PDOException $e) {
1766
					return "error (add column type_id in marine_archive) : ".$e->getMessage()."\n";
1767
				}
1768
			}
1769
			if (!$Connection->checkColumnName('marine_archive_output','type_id')) {
1770
				$query = "ALTER TABLE marine_archive_output ADD COLUMN type_id int(11) DEFAULT NULL";
1771
				try {
1772
					$sth = $Connection->db->prepare($query);
1773
					$sth->execute();
1774
				} catch(PDOException $e) {
1775
					return "error (add column type_id in marine_archive_output) : ".$e->getMessage()."\n";
1776
				}
1777
			}
1778
			if (!$Connection->checkColumnName('marine_output','status_id')) {
1779
				$query = "ALTER TABLE marine_output ADD COLUMN status_id int(11) DEFAULT NULL";
1780
				try {
1781
					$sth = $Connection->db->prepare($query);
1782
					$sth->execute();
1783
				} catch(PDOException $e) {
1784
					return "error (add column status_id in marine_output) : ".$e->getMessage()."\n";
1785
				}
1786
			}
1787
			if (!$Connection->checkColumnName('marine_live','status_id')) {
1788
				$query = "ALTER TABLE marine_live ADD COLUMN status_id int(11) DEFAULT NULL";
1789
				try {
1790
					$sth = $Connection->db->prepare($query);
1791
					$sth->execute();
1792
				} catch(PDOException $e) {
1793
					return "error (add column status_id in marine_live) : ".$e->getMessage()."\n";
1794
				}
1795
			}
1796
			if (!$Connection->checkColumnName('marine_archive','status_id')) {
1797
				$query = "ALTER TABLE marine_archive ADD COLUMN status_id int(11) DEFAULT NULL";
1798
				try {
1799
					$sth = $Connection->db->prepare($query);
1800
					$sth->execute();
1801
				} catch(PDOException $e) {
1802
					return "error (add column status_id in marine_archive) : ".$e->getMessage()."\n";
1803
				}
1804
			}
1805
			if (!$Connection->checkColumnName('marine_archive_output','status_id')) {
1806
				$query = "ALTER TABLE marine_archive_output ADD COLUMN status_id int(11) DEFAULT NULL";
1807
				try {
1808
					$sth = $Connection->db->prepare($query);
1809
					$sth->execute();
1810
				} catch(PDOException $e) {
1811
					return "error (add column status_id in marine_archive_output) : ".$e->getMessage()."\n";
1812
				}
1813
			}
1814
		} else {
1815
			if (!$Connection->checkColumnName('marine_output','type_id')) {
1816
				$query = "ALTER TABLE marine_output ADD COLUMN type_id integer DEFAULT NULL";
1817
				try {
1818
					$sth = $Connection->db->prepare($query);
1819
					$sth->execute();
1820
				} catch(PDOException $e) {
1821
					return "error (add column type_id in marine_output) : ".$e->getMessage()."\n";
1822
				}
1823
			}
1824
			if (!$Connection->checkColumnName('marine_live','type_id')) {
1825
				$query = "ALTER TABLE marine_live ADD COLUMN type_id integer DEFAULT NULL";
1826
				try {
1827
					$sth = $Connection->db->prepare($query);
1828
					$sth->execute();
1829
				} catch(PDOException $e) {
1830
					return "error (add column type_id in marine_live) : ".$e->getMessage()."\n";
1831
				}
1832
			}
1833
			if (!$Connection->checkColumnName('marine_archive','type_id')) {
1834
				$query = "ALTER TABLE marine_archive ADD COLUMN type_id integer DEFAULT NULL";
1835
				try {
1836
					$sth = $Connection->db->prepare($query);
1837
					$sth->execute();
1838
				} catch(PDOException $e) {
1839
					return "error (add column type_id in marine_archive) : ".$e->getMessage()."\n";
1840
				}
1841
			}
1842
			if (!$Connection->checkColumnName('marine_archive_output','type_id')) {
1843
				$query = "ALTER TABLE marine_archive_output ADD COLUMN type_id integer DEFAULT NULL";
1844
				try {
1845
					$sth = $Connection->db->prepare($query);
1846
					$sth->execute();
1847
				} catch(PDOException $e) {
1848
					return "error (add column type_id in marine_archive_output) : ".$e->getMessage()."\n";
1849
				}
1850
			}
1851
			if (!$Connection->checkColumnName('marine_output','status_id')) {
1852
				$query = "ALTER TABLE marine_output ADD COLUMN status_id integer DEFAULT NULL";
1853
				try {
1854
					$sth = $Connection->db->prepare($query);
1855
					$sth->execute();
1856
				} catch(PDOException $e) {
1857
					return "error (add column status_id in marine_output) : ".$e->getMessage()."\n";
1858
				}
1859
			}
1860
			if (!$Connection->checkColumnName('marine_live','status_id')) {
1861
				$query = "ALTER TABLE marine_live ADD COLUMN status_id integer DEFAULT NULL";
1862
				try {
1863
					$sth = $Connection->db->prepare($query);
1864
					$sth->execute();
1865
				} catch(PDOException $e) {
1866
					return "error (add column status_id in marine_live) : ".$e->getMessage()."\n";
1867
				}
1868
			}
1869
			if (!$Connection->checkColumnName('marine_archive','status_id')) {
1870
				$query = "ALTER TABLE marine_archive ADD COLUMN status_id integer DEFAULT NULL";
1871
				try {
1872
					$sth = $Connection->db->prepare($query);
1873
					$sth->execute();
1874
				} catch(PDOException $e) {
1875
					return "error (add column status_id in marine_archive) : ".$e->getMessage()."\n";
1876
				}
1877
			}
1878
			if (!$Connection->checkColumnName('marine_archive_output','status_id')) {
1879
				$query = "ALTER TABLE marine_archive_output ADD COLUMN status_id integer DEFAULT NULL";
1880
				try {
1881
					$sth = $Connection->db->prepare($query);
1882
					$sth->execute();
1883
				} catch(PDOException $e) {
1884
					return "error (add column status_id in marine_archive_output) : ".$e->getMessage()."\n";
1885
				}
1886
			}
1887
		}
1888
		$query = "UPDATE config SET value = '39' WHERE name = 'schema_version'";
1889
		try {
1890
			$sth = $Connection->db->prepare($query);
1891
			$sth->execute();
1892
		} catch(PDOException $e) {
1893
			return "error (update schema_version) : ".$e->getMessage()."\n";
1894
		}
1895
		return $error;
1896
	}
1897
1898
	private static function update_from_39() {
1899
		global $globalDBdriver;
1900
		$Connection = new Connection();
1901
		$error = '';
1902
		if ($globalDBdriver == 'mysql') {
1903
			$query = "ALTER TABLE stats_pilot MODIFY COLUMN pilot_id varchar(255) NOT NULL";
1904
			try {
1905
				$sth = $Connection->db->prepare($query);
1906
				$sth->execute();
1907
			} catch(PDOException $e) {
1908
				return "error (change pilot_id type to varchar in stats_pilot) : ".$e->getMessage()."\n";
1909
			}
1910
			$query = "ALTER TABLE marine_identity MODIFY COLUMN mmsi varchar(255) DEFAULT NULL";
1911
			try {
1912
				$sth = $Connection->db->prepare($query);
1913
				$sth->execute();
1914
			} catch(PDOException $e) {
1915
				return "error (change mmsi type to varchar in marine_identity) : ".$e->getMessage()."\n";
1916
			}
1917
		} else {
1918
			$query = "alter table stats_pilot alter column pilot_id type varchar(255)";
1919
			try {
1920
				$sth = $Connection->db->prepare($query);
1921
				$sth->execute();
1922
			} catch(PDOException $e) {
1923
				return "error (change pilot_id type to varchar in stats_pilot) : ".$e->getMessage()."\n";
1924
			}
1925
			$query = "alter table marine_identity alter column mmsi type varchar(255)";
1926
			try {
1927
				$sth = $Connection->db->prepare($query);
1928
				$sth->execute();
1929
			} catch(PDOException $e) {
1930
				return "error (change mmsi type to varchar in marine_identity) : ".$e->getMessage()."\n";
1931
			}
1932
		}
1933
		$query = "UPDATE config SET value = '40' WHERE name = 'schema_version'";
1934
		try {
1935
			$sth = $Connection->db->prepare($query);
1936
			$sth->execute();
1937
		} catch(PDOException $e) {
1938
			return "error (update schema_version) : ".$e->getMessage()."\n";
1939
		}
1940
		return $error;
1941
	}
1942
1943
	private static function update_from_40() {
1944
		global $globalDBdriver;
1945
		$Connection = new Connection();
1946
		$error = '';
1947
		if (!$Connection->checkColumnName('source_location','last_seen')) {
1948
			$query = "ALTER TABLE source_location ADD COLUMN last_seen timestamp NULL DEFAULT NULL";
1949
			try {
1950
				$sth = $Connection->db->prepare($query);
1951
				$sth->execute();
1952
			} catch(PDOException $e) {
1953
				return "error (add column last_seen in source_location) : ".$e->getMessage()."\n";
1954
			}
1955
		}
1956
		if ($globalDBdriver == 'mysql') {
1957
			if (!$Connection->checkColumnName('source_location','location_id')) {
1958
				$query = "ALTER TABLE source_location ADD COLUMN location_id int(11) DEFAULT NULL";
1959
				try {
1960
					$sth = $Connection->db->prepare($query);
1961
					$sth->execute();
1962
				} catch(PDOException $e) {
1963
					return "error (add column location_id in source_location) : ".$e->getMessage()."\n";
1964
				}
1965
			}
1966
		} else {
1967
			if (!$Connection->checkColumnName('source_location','location_id')) {
1968
				$query = "ALTER TABLE source_location ADD COLUMN location_id integer DEFAULT NULL";
1969
				try {
1970
					$sth = $Connection->db->prepare($query);
1971
					$sth->execute();
1972
				} catch(PDOException $e) {
1973
					return "error (add column location_id in source_location) : ".$e->getMessage()."\n";
1974
				}
1975
			}
1976
		}
1977
		$query = "UPDATE config SET value = '41' WHERE name = 'schema_version'";
1978
		try {
1979
			$sth = $Connection->db->prepare($query);
1980
			$sth->execute();
1981
		} catch(PDOException $e) {
1982
			return "error (update schema_version) : ".$e->getMessage()."\n";
1983
		}
1984
		return $error;
1985
	}
1986
1987
	private static function update_from_41() {
1988
		global $globalDBdriver;
1989
		$Connection = new Connection();
1990
		$error = '';
1991
		if (!$Connection->checkColumnName('source_location','description')) {
1992
			$query = "ALTER TABLE source_location ADD COLUMN description text DEFAULT NULL";
1993
			try {
1994
				$sth = $Connection->db->prepare($query);
1995
				$sth->execute();
1996
			} catch(PDOException $e) {
1997
				return "error (add column description in source_location) : ".$e->getMessage()."\n";
1998
			}
1999
		}
2000
		$query = "UPDATE config SET value = '42' WHERE name = 'schema_version'";
2001
		try {
2002
			$sth = $Connection->db->prepare($query);
2003
			$sth->execute();
2004
		} catch(PDOException $e) {
2005
			return "error (update schema_version) : ".$e->getMessage()."\n";
2006
		}
2007
		return $error;
2008
	}
2009
2010
	private static function update_from_42() {
2011
		global $globalDBdriver;
2012
		$Connection = new Connection();
2013
		$error = '';
2014
		if (!$Connection->checkColumnName('spotter_live','real_altitude')) {
2015
			$query = "ALTER TABLE spotter_live ADD COLUMN real_altitude float DEFAULT NULL";
2016
			try {
2017
				$sth = $Connection->db->prepare($query);
2018
				$sth->execute();
2019
			} catch(PDOException $e) {
2020
				return "error (add column real_altitude in spotter_live) : ".$e->getMessage()."\n";
2021
			}
2022
		}
2023
		if (!$Connection->checkColumnName('spotter_output','real_altitude')) {
2024
			$query = "ALTER TABLE spotter_output ADD COLUMN real_altitude float DEFAULT NULL";
2025
			try {
2026
				$sth = $Connection->db->prepare($query);
2027
				$sth->execute();
2028
			} catch(PDOException $e) {
2029
				return "error (add column real_altitude in spotter_output) : ".$e->getMessage()."\n";
2030
			}
2031
		}
2032
		if (!$Connection->checkColumnName('spotter_archive_output','real_altitude')) {
2033
			$query = "ALTER TABLE spotter_archive_output ADD COLUMN real_altitude float DEFAULT NULL";
2034
			try {
2035
				$sth = $Connection->db->prepare($query);
2036
				$sth->execute();
2037
			} catch(PDOException $e) {
2038
				return "error (add column real_altitude in spotter_archive_output) : ".$e->getMessage()."\n";
2039
			}
2040
		}
2041
		if (!$Connection->checkColumnName('spotter_archive','real_altitude')) {
2042
			$query = "ALTER TABLE spotter_archive ADD COLUMN real_altitude float DEFAULT NULL";
2043
			try {
2044
				$sth = $Connection->db->prepare($query);
2045
				$sth->execute();
2046
			} catch(PDOException $e) {
2047
				return "error (add column real_altitude in spotter_archive) : ".$e->getMessage()."\n";
2048
			}
2049
		}
2050
		$query = "UPDATE config SET value = '43' WHERE name = 'schema_version'";
2051
		try {
2052
			$sth = $Connection->db->prepare($query);
2053
			$sth->execute();
2054
		} catch(PDOException $e) {
2055
			return "error (update schema_version) : ".$e->getMessage()."\n";
2056
		}
2057
		return $error;
2058
	}
2059
2060
	private static function update_from_43() {
2061
		global $globalDBdriver;
2062
		$Connection = new Connection();
2063
		$error = '';
2064
		if ($globalDBdriver == 'mysql') {
2065
			if (!$Connection->tableExists('tracker_archive_output')) {
2066
				$error .= create_db::import_file('../db/tracker_archive_output.sql');
2067
				if ($error != '') return $error;
2068
			}
2069
			$query = "ALTER TABLE tracker_live MODIFY COLUMN altitude float DEFAULT NULL;ALTER TABLE tracker_output MODIFY COLUMN last_altitude float DEFAULT NULL;ALTER TABLE tracker_output MODIFY COLUMN altitude float DEFAULT NULL;ALTER TABLE tracker_archive MODIFY COLUMN altitude float DEFAULT NULL;ALTER TABLE tracker_archive_output MODIFY COLUMN last_altitude float DEFAULT NULL;ALTER TABLE tracker_output MODIFY COLUMN altitude float DEFAULT NULL;";
2070
		} else {
2071
			$query = "ALTER TABLE tracker_live ALTER COLUMN altitude TYPE float;ALTER TABLE tracker_output ALTER COLUMN last_altitude TYPE float;ALTER TABLE tracker_output ALTER COLUMN altitude TYPE float;ALTER TABLE tracker_archive ALTER COLUMN altitude TYPE float;ALTER TABLE tracker_archive_output ALTER COLUMN last_altitude TYPE float;ALTER TABLE tracker_output ALTER COLUMN altitude TYPE float;";
2072
		}
2073
		try {
2074
			$sth = $Connection->db->prepare($query);
2075
			$sth->execute();
2076
		} catch(PDOException $e) {
2077
			return "error (modify column altitude in tracker_*) : ".$e->getMessage()."\n";
2078
		}
2079
		$query = "UPDATE config SET value = '44' WHERE name = 'schema_version'";
2080
		try {
2081
			$sth = $Connection->db->prepare($query);
2082
			$sth->execute();
2083
		} catch(PDOException $e) {
2084
			return "error (update schema_version) : ".$e->getMessage()."\n";
2085
		}
2086
		return $error;
2087
	}
2088
2089
	private static function update_from_44() {
2090
		global $globalDBdriver, $globalVATSIM, $globalIVAO;
2091
		$Connection = new Connection();
2092
		$error = '';
2093
		if ($globalDBdriver == 'mysql') {
2094
			$error .= create_db::import_file('../db/airport.sql');
2095
			if ($error != '') return $error;
2096
			$error .= create_db::import_file('../db/airlines.sql');
2097
			if ($error != '') return $error;
2098
		} else {
2099
			$error .= create_db::import_file('../db/pgsql/airport.sql');
2100
			if ($error != '') return $error;
2101
			$error .= create_db::import_file('../db/pgsql/airlines.sql');
2102
			if ($error != '') return $error;
2103
		}
2104
		if ((isset($globalVATSIM) && $globalVATSIM) && (isset($globalIVAO) && $globalIVAO)) {
2105
			if (file_exists('tmp/ivae_feb2013.zip')) {
2106
				$error .= update_db::update_IVAO();
2107
			} else {
2108
				$error .= update_db::update_vatsim();
2109
			}
2110
		} elseif (isset($globalVATSIM) && $globalVATSIM) {
2111
			$error .= update_db::update_vatsim();
2112
		} elseif (isset($globalIVAO) && $globalIVAO) {
2113
			if (file_exists('tmp/ivae_feb2013.zip')) {
2114
				$error .= update_db::update_IVAO();
2115
			} else {
2116
				$error .= update_db::update_vatsim();
2117
			}
2118
		}
2119
		if ($error != '') return $error;
2120
		$query = "UPDATE config SET value = '45' WHERE name = 'schema_version'";
2121
		try {
2122
			$sth = $Connection->db->prepare($query);
2123
			$sth->execute();
2124
		} catch(PDOException $e) {
2125
			return "error (update schema_version) : ".$e->getMessage()."\n";
2126
		}
2127
		return $error;
2128
	}
2129
2130
	private static function update_from_45() {
2131
		global $globalDBdriver;
2132
		$Connection = new Connection();
2133
		$error = '';
2134
		if (!$Connection->tableExists('satellite')) {
2135
			if ($globalDBdriver == 'mysql') {
2136
				$error .= create_db::import_file('../db/satellite.sql');
2137
				if ($error != '') return $error;
2138
			} else {
2139
				$error .= create_db::import_file('../db/pgsql/satellite.sql');
2140
				if ($error != '') return $error;
2141
			}
2142
		}
2143
		$query = "UPDATE config SET value = '46' WHERE name = 'schema_version'";
2144
		try {
2145
			$sth = $Connection->db->prepare($query);
2146
			$sth->execute();
2147
		} catch(PDOException $e) {
2148
			return "error (update schema_version) : ".$e->getMessage()."\n";
2149
		}
2150
		return $error;
2151
	}
2152
2153
2154
2155
    	public static function check_version($update = false) {
2156
    	    global $globalDBname;
2157
    	    $version = 0;
2158
    	    $Connection = new Connection();
2159
    	    if ($Connection->tableExists('aircraft')) {
2160
    		if (!$Connection->tableExists('config')) {
2161
    		    $version = '1';
2162
    		    if ($update) return self::update_from_1();
2163
    		    else return $version;
2164
		} else {
2165
    		    $Connection = new Connection();
2166
		    $query = "SELECT value FROM config WHERE name = 'schema_version' LIMIT 1";
2167
		    try {
2168
            		$sth = $Connection->db->prepare($query);
2169
		        $sth->execute();
2170
		    } catch(PDOException $e) {
2171
			return "error : ".$e->getMessage()."\n";
2172
    		    }
2173
    		    $result = $sth->fetch(PDO::FETCH_ASSOC);
2174
    		    if ($update) {
2175
    			if ($result['value'] == '2') {
2176
    			    $error = self::update_from_2();
2177
    			    if ($error != '') return $error;
2178
    			    else return self::check_version(true);
2179
    			} elseif ($result['value'] == '3') {
2180
    			    $error = self::update_from_3();
2181
    			    if ($error != '') return $error;
2182
    			    else return self::check_version(true);
2183
    			} elseif ($result['value'] == '4') {
2184
    			    $error = self::update_from_4();
2185
    			    if ($error != '') return $error;
2186
    			    else return self::check_version(true);
2187
    			} elseif ($result['value'] == '5') {
2188
    			    $error = self::update_from_5();
2189
    			    if ($error != '') return $error;
2190
    			    else return self::check_version(true);
2191
    			} elseif ($result['value'] == '6') {
2192
    			    $error = self::update_from_6();
2193
    			    if ($error != '') return $error;
2194
    			    else return self::check_version(true);
2195
    			} elseif ($result['value'] == '7') {
2196
    			    $error = self::update_from_7();
2197
    			    if ($error != '') return $error;
2198
    			    else return self::check_version(true);
2199
    			} elseif ($result['value'] == '8') {
2200
    			    $error = self::update_from_8();
2201
    			    if ($error != '') return $error;
2202
    			    else return self::check_version(true);
2203
    			} elseif ($result['value'] == '9') {
2204
    			    $error = self::update_from_9();
2205
    			    if ($error != '') return $error;
2206
    			    else return self::check_version(true);
2207
    			} elseif ($result['value'] == '10') {
2208
    			    $error = self::update_from_10();
2209
    			    if ($error != '') return $error;
2210
    			    else return self::check_version(true);
2211
    			} elseif ($result['value'] == '11') {
2212
    			    $error = self::update_from_11();
2213
    			    if ($error != '') return $error;
2214
    			    else return self::check_version(true);
2215
    			} elseif ($result['value'] == '12') {
2216
    			    $error = self::update_from_12();
2217
    			    if ($error != '') return $error;
2218
    			    else return self::check_version(true);
2219
    			} elseif ($result['value'] == '13') {
2220
    			    $error = self::update_from_13();
2221
    			    if ($error != '') return $error;
2222
    			    else return self::check_version(true);
2223
    			} elseif ($result['value'] == '14') {
2224
    			    $error = self::update_from_14();
2225
    			    if ($error != '') return $error;
2226
    			    else return self::check_version(true);
2227
    			} elseif ($result['value'] == '15') {
2228
    			    $error = self::update_from_15();
2229
    			    if ($error != '') return $error;
2230
    			    else return self::check_version(true);
2231
    			} elseif ($result['value'] == '16') {
2232
    			    $error = self::update_from_16();
2233
    			    if ($error != '') return $error;
2234
    			    else return self::check_version(true);
2235
    			} elseif ($result['value'] == '17') {
2236
    			    $error = self::update_from_17();
2237
    			    if ($error != '') return $error;
2238
    			    else return self::check_version(true);
2239
    			} elseif ($result['value'] == '18') {
2240
    			    $error = self::update_from_18();
2241
    			    if ($error != '') return $error;
2242
    			    else return self::check_version(true);
2243
    			} elseif ($result['value'] == '19') {
2244
    			    $error = self::update_from_19();
2245
    			    if ($error != '') return $error;
2246
    			    else return self::check_version(true);
2247
    			} elseif ($result['value'] == '20') {
2248
    			    $error = self::update_from_20();
2249
    			    if ($error != '') return $error;
2250
    			    else return self::check_version(true);
2251
    			} elseif ($result['value'] == '21') {
2252
    			    $error = self::update_from_21();
2253
    			    if ($error != '') return $error;
2254
    			    else return self::check_version(true);
2255
    			} elseif ($result['value'] == '22') {
2256
    			    $error = self::update_from_22();
2257
    			    if ($error != '') return $error;
2258
    			    else return self::check_version(true);
2259
    			} elseif ($result['value'] == '23') {
2260
    			    $error = self::update_from_23();
2261
    			    if ($error != '') return $error;
2262
    			    else return self::check_version(true);
2263
    			} elseif ($result['value'] == '24') {
2264
    			    $error = self::update_from_24();
2265
    			    if ($error != '') return $error;
2266
    			    else return self::check_version(true);
2267
    			} elseif ($result['value'] == '25') {
2268
    			    $error = self::update_from_25();
2269
    			    if ($error != '') return $error;
2270
    			    else return self::check_version(true);
2271
    			} elseif ($result['value'] == '26') {
2272
    			    $error = self::update_from_26();
2273
    			    if ($error != '') return $error;
2274
    			    else return self::check_version(true);
2275
    			} elseif ($result['value'] == '27') {
2276
    			    $error = self::update_from_27();
2277
    			    if ($error != '') return $error;
2278
    			    else return self::check_version(true);
2279
    			} elseif ($result['value'] == '28') {
2280
    			    $error = self::update_from_28();
2281
    			    if ($error != '') return $error;
2282
    			    else return self::check_version(true);
2283
    			} elseif ($result['value'] == '29') {
2284
    			    $error = self::update_from_29();
2285
    			    if ($error != '') return $error;
2286
    			    else return self::check_version(true);
2287
    			} elseif ($result['value'] == '30') {
2288
    			    $error = self::update_from_30();
2289
    			    if ($error != '') return $error;
2290
    			    else return self::check_version(true);
2291
    			} elseif ($result['value'] == '31') {
2292
    			    $error = self::update_from_31();
2293
    			    if ($error != '') return $error;
2294
    			    else return self::check_version(true);
2295
    			} elseif ($result['value'] == '32') {
2296
    			    $error = self::update_from_32();
2297
    			    if ($error != '') return $error;
2298
    			    else return self::check_version(true);
2299
    			} elseif ($result['value'] == '33') {
2300
    			    $error = self::update_from_33();
2301
    			    if ($error != '') return $error;
2302
    			    else return self::check_version(true);
2303
    			} elseif ($result['value'] == '34') {
2304
    			    $error = self::update_from_34();
2305
    			    if ($error != '') return $error;
2306
    			    else return self::check_version(true);
2307
    			} elseif ($result['value'] == '35') {
2308
    			    $error = self::update_from_35();
2309
    			    if ($error != '') return $error;
2310
    			    else return self::check_version(true);
2311
    			} elseif ($result['value'] == '36') {
2312
    			    $error = self::update_from_36();
2313
    			    if ($error != '') return $error;
2314
    			    else return self::check_version(true);
2315
    			} elseif ($result['value'] == '37') {
2316
    			    $error = self::update_from_37();
2317
    			    if ($error != '') return $error;
2318
    			    else return self::check_version(true);
2319
    			} elseif ($result['value'] == '38') {
2320
    			    $error = self::update_from_38();
2321
    			    if ($error != '') return $error;
2322
    			    else return self::check_version(true);
2323
    			} elseif ($result['value'] == '39') {
2324
    			    $error = self::update_from_39();
2325
    			    if ($error != '') return $error;
2326
    			    else return self::check_version(true);
2327
    			} elseif ($result['value'] == '40') {
2328
    			    $error = self::update_from_40();
2329
    			    if ($error != '') return $error;
2330
    			    else return self::check_version(true);
2331
    			} elseif ($result['value'] == '41') {
2332
    			    $error = self::update_from_41();
2333
    			    if ($error != '') return $error;
2334
    			    else return self::check_version(true);
2335
    			} elseif ($result['value'] == '42') {
2336
    			    $error = self::update_from_42();
2337
    			    if ($error != '') return $error;
2338
    			    else return self::check_version(true);
2339
    			} elseif ($result['value'] == '43') {
2340
    			    $error = self::update_from_43();
2341
    			    if ($error != '') return $error;
2342
    			    else return self::check_version(true);
2343
    			} elseif ($result['value'] == '44') {
2344
    			    $error = self::update_from_44();
2345
    			    if ($error != '') return $error;
2346
    			    else return self::check_version(true);
2347
    			} elseif ($result['value'] == '45') {
2348
    			    $error = self::update_from_45();
2349
    			    if ($error != '') return $error;
2350
    			    else return self::check_version(true);
2351
    			} else return '';
2352
    		    } else {
2353
    			if (isset($result['value']) && $result['value'] != '') return $result['value'];
2354
    			else return 0;
2355
		}
2356
		
2357
	    } else return $version;
0 ignored issues
show
Bug introduced by
This code did not parse for me. Apparently, there is an error somewhere around this line:

Syntax error, unexpected T_ELSE
Loading history...
2358
    	}
2359
    	
2360
}
2361
//echo update_schema::check_version();
2362
?>