Completed
Push — master ( fd6580...f7775e )
by Yannick
08:15
created

update_schema::update_from_8()   B

Complexity

Conditions 4
Paths 6

Size

Total Lines 25
Code Lines 18

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 4
eloc 18
nc 6
nop 0
dl 0
loc 25
rs 8.5806
c 0
b 0
f 0
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 = "";
0 ignored issues
show
Unused Code introduced by
$query is not used, you could remove the assignment.

This check looks for variable assignements that are either overwritten by other assignments or where the variable is not used subsequently.

$myVar = 'Value';
$higher = false;

if (rand(1, 6) > 3) {
    $higher = true;
} else {
    $higher = false;
}

Both the $myVar assignment in line 1 and the $higher assignment in line 2 are dead. The first because $myVar is never used and the second because $higher is always overwritten for every possible time line.

Loading history...
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;
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) {
0 ignored issues
show
Bug introduced by
The variable $globalVATSIM seems to never exist, and therefore isset should always return false. Did you maybe rename this variable?

This check looks for calls to isset(...) or empty() on variables that are yet undefined. These calls will always produce the same result and can be removed.

This is most likely caused by the renaming of a variable or the removal of a function/method parameter.

Loading history...
2111
			$error .= update_db::update_vatsim();
2112
		} elseif (isset($globalIVAO) && $globalIVAO) {
0 ignored issues
show
Bug introduced by
The variable $globalIVAO seems to never exist, and therefore isset should always return false. Did you maybe rename this variable?

This check looks for calls to isset(...) or empty() on variables that are yet undefined. These calls will always produce the same result and can be removed.

This is most likely caused by the renaming of a variable or the removal of a function/method parameter.

Loading history...
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
2131
2132
    	public static function check_version($update = false) {
2133
    	    global $globalDBname;
2134
    	    $version = 0;
2135
    	    $Connection = new Connection();
2136
    	    if ($Connection->tableExists('aircraft')) {
2137
    		if (!$Connection->tableExists('config')) {
2138
    		    $version = '1';
2139
    		    if ($update) return self::update_from_1();
2140
    		    else return $version;
2141
		} else {
2142
    		    $Connection = new Connection();
2143
		    $query = "SELECT value FROM config WHERE name = 'schema_version' LIMIT 1";
2144
		    try {
2145
            		$sth = $Connection->db->prepare($query);
2146
		        $sth->execute();
2147
		    } catch(PDOException $e) {
2148
			return "error : ".$e->getMessage()."\n";
2149
    		    }
2150
    		    $result = $sth->fetch(PDO::FETCH_ASSOC);
2151
    		    if ($update) {
2152
    			if ($result['value'] == '2') {
2153
    			    $error = self::update_from_2();
2154
    			    if ($error != '') return $error;
2155
    			    else return self::check_version(true);
2156
    			} elseif ($result['value'] == '3') {
2157
    			    $error = self::update_from_3();
2158
    			    if ($error != '') return $error;
2159
    			    else return self::check_version(true);
2160
    			} elseif ($result['value'] == '4') {
2161
    			    $error = self::update_from_4();
2162
    			    if ($error != '') return $error;
2163
    			    else return self::check_version(true);
2164
    			} elseif ($result['value'] == '5') {
2165
    			    $error = self::update_from_5();
2166
    			    if ($error != '') return $error;
2167
    			    else return self::check_version(true);
2168
    			} elseif ($result['value'] == '6') {
2169
    			    $error = self::update_from_6();
2170
    			    if ($error != '') return $error;
2171
    			    else return self::check_version(true);
2172
    			} elseif ($result['value'] == '7') {
2173
    			    $error = self::update_from_7();
2174
    			    if ($error != '') return $error;
2175
    			    else return self::check_version(true);
2176
    			} elseif ($result['value'] == '8') {
2177
    			    $error = self::update_from_8();
2178
    			    if ($error != '') return $error;
2179
    			    else return self::check_version(true);
2180
    			} elseif ($result['value'] == '9') {
2181
    			    $error = self::update_from_9();
2182
    			    if ($error != '') return $error;
2183
    			    else return self::check_version(true);
2184
    			} elseif ($result['value'] == '10') {
2185
    			    $error = self::update_from_10();
2186
    			    if ($error != '') return $error;
2187
    			    else return self::check_version(true);
2188
    			} elseif ($result['value'] == '11') {
2189
    			    $error = self::update_from_11();
2190
    			    if ($error != '') return $error;
2191
    			    else return self::check_version(true);
2192
    			} elseif ($result['value'] == '12') {
2193
    			    $error = self::update_from_12();
2194
    			    if ($error != '') return $error;
2195
    			    else return self::check_version(true);
2196
    			} elseif ($result['value'] == '13') {
2197
    			    $error = self::update_from_13();
2198
    			    if ($error != '') return $error;
2199
    			    else return self::check_version(true);
2200
    			} elseif ($result['value'] == '14') {
2201
    			    $error = self::update_from_14();
2202
    			    if ($error != '') return $error;
2203
    			    else return self::check_version(true);
2204
    			} elseif ($result['value'] == '15') {
2205
    			    $error = self::update_from_15();
2206
    			    if ($error != '') return $error;
2207
    			    else return self::check_version(true);
2208
    			} elseif ($result['value'] == '16') {
2209
    			    $error = self::update_from_16();
2210
    			    if ($error != '') return $error;
2211
    			    else return self::check_version(true);
2212
    			} elseif ($result['value'] == '17') {
2213
    			    $error = self::update_from_17();
2214
    			    if ($error != '') return $error;
2215
    			    else return self::check_version(true);
2216
    			} elseif ($result['value'] == '18') {
2217
    			    $error = self::update_from_18();
2218
    			    if ($error != '') return $error;
2219
    			    else return self::check_version(true);
2220
    			} elseif ($result['value'] == '19') {
2221
    			    $error = self::update_from_19();
2222
    			    if ($error != '') return $error;
2223
    			    else return self::check_version(true);
2224
    			} elseif ($result['value'] == '20') {
2225
    			    $error = self::update_from_20();
2226
    			    if ($error != '') return $error;
2227
    			    else return self::check_version(true);
2228
    			} elseif ($result['value'] == '21') {
2229
    			    $error = self::update_from_21();
2230
    			    if ($error != '') return $error;
2231
    			    else return self::check_version(true);
2232
    			} elseif ($result['value'] == '22') {
2233
    			    $error = self::update_from_22();
2234
    			    if ($error != '') return $error;
2235
    			    else return self::check_version(true);
2236
    			} elseif ($result['value'] == '23') {
2237
    			    $error = self::update_from_23();
2238
    			    if ($error != '') return $error;
2239
    			    else return self::check_version(true);
2240
    			} elseif ($result['value'] == '24') {
2241
    			    $error = self::update_from_24();
2242
    			    if ($error != '') return $error;
2243
    			    else return self::check_version(true);
2244
    			} elseif ($result['value'] == '25') {
2245
    			    $error = self::update_from_25();
2246
    			    if ($error != '') return $error;
2247
    			    else return self::check_version(true);
2248
    			} elseif ($result['value'] == '26') {
2249
    			    $error = self::update_from_26();
2250
    			    if ($error != '') return $error;
2251
    			    else return self::check_version(true);
2252
    			} elseif ($result['value'] == '27') {
2253
    			    $error = self::update_from_27();
2254
    			    if ($error != '') return $error;
2255
    			    else return self::check_version(true);
2256
    			} elseif ($result['value'] == '28') {
2257
    			    $error = self::update_from_28();
2258
    			    if ($error != '') return $error;
2259
    			    else return self::check_version(true);
2260
    			} elseif ($result['value'] == '29') {
2261
    			    $error = self::update_from_29();
2262
    			    if ($error != '') return $error;
2263
    			    else return self::check_version(true);
2264
    			} elseif ($result['value'] == '30') {
2265
    			    $error = self::update_from_30();
2266
    			    if ($error != '') return $error;
2267
    			    else return self::check_version(true);
2268
    			} elseif ($result['value'] == '31') {
2269
    			    $error = self::update_from_31();
2270
    			    if ($error != '') return $error;
2271
    			    else return self::check_version(true);
2272
    			} elseif ($result['value'] == '32') {
2273
    			    $error = self::update_from_32();
2274
    			    if ($error != '') return $error;
2275
    			    else return self::check_version(true);
2276
    			} elseif ($result['value'] == '33') {
2277
    			    $error = self::update_from_33();
2278
    			    if ($error != '') return $error;
2279
    			    else return self::check_version(true);
2280
    			} elseif ($result['value'] == '34') {
2281
    			    $error = self::update_from_34();
2282
    			    if ($error != '') return $error;
2283
    			    else return self::check_version(true);
2284
    			} elseif ($result['value'] == '35') {
2285
    			    $error = self::update_from_35();
2286
    			    if ($error != '') return $error;
2287
    			    else return self::check_version(true);
2288
    			} elseif ($result['value'] == '36') {
2289
    			    $error = self::update_from_36();
2290
    			    if ($error != '') return $error;
2291
    			    else return self::check_version(true);
2292
    			} elseif ($result['value'] == '37') {
2293
    			    $error = self::update_from_37();
2294
    			    if ($error != '') return $error;
2295
    			    else return self::check_version(true);
2296
    			} elseif ($result['value'] == '38') {
2297
    			    $error = self::update_from_38();
2298
    			    if ($error != '') return $error;
2299
    			    else return self::check_version(true);
2300
    			} elseif ($result['value'] == '39') {
2301
    			    $error = self::update_from_39();
2302
    			    if ($error != '') return $error;
2303
    			    else return self::check_version(true);
2304
    			} elseif ($result['value'] == '40') {
2305
    			    $error = self::update_from_40();
2306
    			    if ($error != '') return $error;
2307
    			    else return self::check_version(true);
2308
    			} elseif ($result['value'] == '41') {
2309
    			    $error = self::update_from_41();
2310
    			    if ($error != '') return $error;
2311
    			    else return self::check_version(true);
2312
    			} elseif ($result['value'] == '42') {
2313
    			    $error = self::update_from_42();
2314
    			    if ($error != '') return $error;
2315
    			    else return self::check_version(true);
2316
    			} elseif ($result['value'] == '43') {
2317
    			    $error = self::update_from_43();
2318
    			    if ($error != '') return $error;
2319
    			    else return self::check_version(true);
2320
    			} elseif ($result['value'] == '44') {
2321
    			    $error = self::update_from_44();
2322
    			    if ($error != '') return $error;
2323
    			    else return self::check_version(true);
2324
    			} else return '';
2325
    		    }
2326
    		    else return $result['value'];
2327
		}
2328
		
2329
	    } else return $version;
2330
    	}
2331
    	
2332
}
2333
//echo update_schema::check_version();
2334
?>