function upgrade() { require_once $_SERVER['DOCUMENT_ROOT'] . DIRECTORY_SEPARATOR . "classes" . DIRECTORY_SEPARATOR . "common.class.php"; require_once $_SERVER['DOCUMENT_ROOT'] . DIRECTORY_SEPARATOR . "classes" . DIRECTORY_SEPARATOR . "settings.class.php"; $common = new common(); $settings = new settings(); try { // Add the positions.aircraft column if the portal is using MySQL or SQLite database. if ($settings::db_driver == "mysql") { // Check to see if the column already exists. $dbh = $common->pdoOpen(); if (count($dbh->query("SHOW COLUMNS FROM `" . $settings::db_prefix . "positions` LIKE 'aircraft'")->fetchAll()) == 0) { // Add the column if it does not exist. $sql = "ALTER TABLE " . $settings::db_prefix . "positions ADD COLUMN aircraft BIGINT"; $sth = $dbh->prepare($sql); $sth->execute(); $sth = NULL; } $dbh = NULL; } if ($settings::db_driver == "sqlite") { // Check to see if the column already exists. $dbh = $common->pdoOpen(); $columns = $dbh->query("pragma table_info(positions)")->fetchArray(SQLITE3_ASSOC); $columnExists = FALSE; foreach ($columns as $column) { if ($column['name'] == 'lastSeen') { $columnExists = TRUE; } } // Add the column if it does not exist. if (!$columnExists) { $sql = "ALTER TABLE " . $settings::db_prefix . "positionss ADD COLUMN aircraft BIGINT"; $sth = $dbh->prepare($sql); $sth->execute(); $sth = NULL; } $dbh = NULL; } // Update the version and patch settings.. $common->updateSetting("version", "2.1.0"); $common->updateSetting("patch", ""); // The upgrade process completed successfully. $results['success'] = TRUE; $results['message'] = "Upgrade to v2.1.0 successful."; return $results; } catch (Exception $e) { // Something went wrong during this upgrade process. $results['success'] = FALSE; $results['message'] = $e->getMessage(); return $results; } }
function getByPosition() { require_once $_SERVER['DOCUMENT_ROOT'] . DIRECTORY_SEPARATOR . "classes" . DIRECTORY_SEPARATOR . "settings.class.php"; require_once $_SERVER['DOCUMENT_ROOT'] . DIRECTORY_SEPARATOR . "classes" . DIRECTORY_SEPARATOR . "common.class.php"; $settings = new settings(); $common = new common(); // $flightData = array(); // PDO $dbh = $common->pdoOpen(); $sql = "SELECT flight, aircraft FROM " . $settings::db_prefix . "positions WHERE id = :id"; $sth = $dbh->prepare($sql); $sth->bindParam(':id', $_GET['position'], PDO::PARAM_INT); $sth->execute(); $position = $sth->fetch(); $sth = NULL; $dbh = NULL; $dbh = $common->pdoOpen(); $sql = "SELECT flight, firstSeen, lastSeen FROM " . $settings::db_prefix . "flights WHERE id = :id"; $sth = $dbh->prepare($sql); $sth->bindParam(':id', $position['flight'], PDO::PARAM_INT); $sth->execute(); $flight = $sth->fetch(); $sth = NULL; $dbh = NULL; $dbh = $common->pdoOpen(); $sql = "SELECT icao, firstSeen, lastSeen FROM " . $settings::db_prefix . "aircraft WHERE id = :id"; $sth = $dbh->prepare($sql); $sth->bindParam(':id', $position['flight'], PDO::PARAM_INT); $sth->execute(); $aircraft = $sth->fetch(); $sth = NULL; $dbh = NULL; $flightData['icao'] = $aircraft['icao']; $flightData['flight'] = $flight['flight']; $date = new DateTime($aircraft['firstSeen'], new DateTimeZone('UTC')); $date->setTimezone(new DateTimeZone($common->getSetting('timeZone'))); $flightData['afs'] = $date->format($common->getSetting('dateFormat')); $date = new DateTime($aircraft['lastSeen'], new DateTimeZone('UTC')); $date->setTimezone(new DateTimeZone($common->getSetting('timeZone'))); $flightData['als'] = $date->format($common->getSetting('dateFormat')); $date = new DateTime($flight['firstSeen'], new DateTimeZone('UTC')); $date->setTimezone(new DateTimeZone($common->getSetting('timeZone'))); $flightData['ffs'] = $date->format($common->getSetting('dateFormat')); $date = new DateTime($flight['lastSeen'], new DateTimeZone('UTC')); $date->setTimezone(new DateTimeZone($common->getSetting('timeZone'))); $flightData['fls'] = $date->format($common->getSetting('dateFormat')); return $flightData; }
function getVisibleFlights() { require_once $_SERVER['DOCUMENT_ROOT'] . DIRECTORY_SEPARATOR . "classes" . DIRECTORY_SEPARATOR . "settings.class.php"; require_once $_SERVER['DOCUMENT_ROOT'] . DIRECTORY_SEPARATOR . "classes" . DIRECTORY_SEPARATOR . "common.class.php"; $settings = new settings(); $common = new common(); // Get all flights to be notified about from the flightNotifications.xml file. $lookingFor = array(); if ($settings::db_driver == "xml") { // XML $savedFlights = simplexml_load_file($_SERVER['DOCUMENT_ROOT'] . DIRECTORY_SEPARATOR . "data" . DIRECTORY_SEPARATOR . "flightNotifications.xml"); foreach ($savedFlights as $savedFlight) { $lookingFor[] = array($savedFlight); } } else { // PDO $dbh = $common->pdoOpen(); $sql = "SELECT flight, lastMessageCount FROM " . $settings::db_prefix . "flightNotifications"; $sth = $dbh->prepare($sql); $sth->execute(); $lookingFor = $sth->fetchAll(); $sth = NULL; $dbh = NULL; } // Check dump1090-mutability's aircraft JSON output to see if the flight is visible. $visibleFlights = array(); $url = "http://localhost/dump1090/data/aircraft.json"; $json = file_get_contents($url); $data = json_decode($json, true); foreach ($data['aircraft'] as $aircraft) { if (array_key_exists('flight', $aircraft)) { $visibleFlights[] = strtoupper(trim($aircraft['flight'])); } } $foundFlights = array(); $foundFlights['tracking'] = ''; foreach ($lookingFor as $flight) { if (strpos($flight[0], "%") !== false) { $searchFor = str_replace("%", "", $flight[0]); foreach ($visibleFlights as $visible) { // Still needs to be modified to send data using the new format as done below. if (strpos(strtolower($visible), strtolower($searchFor)) !== false) { $foundFlights[] = $visible; } } } else { if (in_array($flight[0], $visibleFlights)) { $thisFlight['flight'] = $flight[0]; $thisFlight['lastMessageCount'] = $flight[1]; $foundFlights['tracking'][] = $thisFlight; } } } return json_decode(json_encode((array) $foundFlights), true); }
function upgrade() { require_once $_SERVER['DOCUMENT_ROOT'] . DIRECTORY_SEPARATOR . "classes" . DIRECTORY_SEPARATOR . "common.class.php"; require_once $_SERVER['DOCUMENT_ROOT'] . DIRECTORY_SEPARATOR . "classes" . DIRECTORY_SEPARATOR . "settings.class.php"; $common = new common(); $settings = new settings(); try { // Change tables containing datetime data to datetime. if ($settings::db_driver != "mysql") { $dbh = $common->pdoOpen(); $sql = "ALTER TABLE " . $settings::db_prefix . "aircraft MODIFY firstSeen DATETIME NOT NULL"; $sth = $dbh->prepare($sql); $sth->execute(); $sth = NULL; $sql = "ALTER TABLE adsb_aircraft MODIFY lastSeen DATETIME NOT NULL"; $sth = $dbh->prepare($sql); $sth->execute(); $sth = NULL; $sql = "ALTER TABLE adsb_blogPosts MODIFY date DATETIME NOT NULL"; $sth = $dbh->prepare($sql); $sth->execute(); $sth = NULL; $sql = "ALTER TABLE adsb_flights MODIFY firstSeen DATETIME NOT NULL"; $sth = $dbh->prepare($sql); $sth->execute(); $sth = NULL; $sql = "ALTER TABLE adsb_flights MODIFY firstSeen DATETIME NOT NULL"; $sth = $dbh->prepare($sql); $sth->execute(); $sth = NULL; $sql = "ALTER TABLE adsb_positions MODIFY time DATETIME NOT NULL"; $sth = $dbh->prepare($sql); $sth->execute(); $sth = NULL; $dbh = NULL; } // Add timezone setting. $common->addSetting("timeZone", date_default_timezone_get()); // update the version and patch settings. $common->updateSetting("version", "2.0.1"); $common->updateSetting("patch", ""); // The upgrade process completed successfully. $results['success'] = TRUE; $results['message'] = "Upgrade to v2.0.1 successful."; return $results; } catch (Exception $e) { // Something went wrong during this upgrade process. $results['success'] = FALSE; $results['message'] = $e->getMessage(); return $results; } }
// Items per page. $itemsPerPage = 25; // The title of this page. $pageData['title'] = "Flights Seen"; // Add flight data to the $pageData array using the search string if available. if (isset($_POST['flight'])) { $searchString = $_POST['flight']; } else { $searchString = ""; } // Set the start stop positions to be used in the query. $start = 1; if (isset($_GET['page'])) { $start = $_GET['page'] * $itemsPerPage; } $dbh = $common->pdoOpen(); $sql = "SELECT COUNT(*) FROM " . $settings::db_prefix . "flights WHERE flight LIKE :like ORDER BY lastSeen DESC, flight"; $sth = $dbh->prepare($sql); $sth->bindValue(':like', "%" . $searchString . "%", PDO::PARAM_STR); $sth->execute(); $totalFlights = $sth->fetchColumn(); $sth = NULL; $dbh = NULL; $dbh = $common->pdoOpen(); $sql = "SELECT * FROM " . $settings::db_prefix . "flights WHERE flight LIKE :like ORDER BY lastSeen DESC, flight LIMIT :start, :items"; $sth = $dbh->prepare($sql); $sth->bindValue(':like', "%" . $searchString . "%", PDO::PARAM_STR); $sth->bindValue(':start', $start, PDO::PARAM_INT); $sth->bindValue(':items', $itemsPerPage, PDO::PARAM_INT); $sth->execute(); $flights = $sth->fetchAll(PDO::FETCH_ASSOC);
function deleteSetting($name) { require_once $_SERVER['DOCUMENT_ROOT'] . DIRECTORY_SEPARATOR . "classes" . DIRECTORY_SEPARATOR . "settings.class.php"; $settings = new settings(); if ($settings::db_driver == "xml") { $xmlSettings = simplexml_load_file($_SERVER['DOCUMENT_ROOT'] . DIRECTORY_SEPARATOR . "data" . DIRECTORY_SEPARATOR . "settings.xml"); foreach ($xmlSettings as $xmlSetting) { if ($xmlSetting->name == $name) { $dom = dom_import_simplexml($xmlSetting); $dom->parentNode->removeChild($dom); } } file_put_contents($_SERVER['DOCUMENT_ROOT'] . DIRECTORY_SEPARATOR . "data" . DIRECTORY_SEPARATOR . "settings.xml", $xmlSettings->asXml()); } else { // PDO require_once $_SERVER['DOCUMENT_ROOT'] . DIRECTORY_SEPARATOR . "classes" . DIRECTORY_SEPARATOR . "common.class.php"; $common = new common(); $dbh = $common->pdoOpen(); $sql = "DELETE FROM " . $settings::db_prefix . "settings WHERE name = :name"; $sth = $dbh->prepare($sql); $sth->bindParam(':name', $name, PDO::PARAM_STR, 100); $sth->execute(); $sth = NULL; $dbh = NULL; } }
function getLoginUsingToken($token) { require_once $_SERVER['DOCUMENT_ROOT'] . DIRECTORY_SEPARATOR . "classes" . DIRECTORY_SEPARATOR . "settings.class.php"; $settings = new settings(); if ($settings::db_driver == "xml") { // XML $administrators = simplexml_load_file($_SERVER['DOCUMENT_ROOT'] . DIRECTORY_SEPARATOR . "data" . DIRECTORY_SEPARATOR . "administrators.xml"); foreach ($administrators as $administrator) { if ($administrator->token == $token) { return $administrator->login; } } return NULL; } else { // PDO require_once $_SERVER['DOCUMENT_ROOT'] . DIRECTORY_SEPARATOR . "classes" . DIRECTORY_SEPARATOR . "common.class.php"; $common = new common(); $dbh = $common->pdoOpen(); $sql = "SELECT * FROM " . $settings::db_prefix . "administrators WHERE token = :token"; $sth = $dbh->prepare($sql); $sth->bindParam(':token', $token, PDO::PARAM_STR, 10); $sth->execute(); $row = $sth->fetch(); $sth = NULL; $dbh = NULL; return $row['login']; } }
function upgrade() { require_once $_SERVER['DOCUMENT_ROOT'] . DIRECTORY_SEPARATOR . "classes" . DIRECTORY_SEPARATOR . "common.class.php"; require_once $_SERVER['DOCUMENT_ROOT'] . DIRECTORY_SEPARATOR . "classes" . DIRECTORY_SEPARATOR . "settings.class.php"; $common = new common(); $settings = new settings(); try { if ($settings::db_driver == "xml") { // Create XML files used to store links data. $xml = new XMLWriter(); $xml->openMemory(); $xml->setIndent(true); $xml->startDocument('1.0', 'UTF-8'); $xml->startElement("links"); $xml->endElement(); file_put_contents($_SERVER['DOCUMENT_ROOT'] . DIRECTORY_SEPARATOR . "data" . DIRECTORY_SEPARATOR . "links.xml", $xml->flush(true)); } if ($settings::db_driver == "mysql") { $dbh = $common->pdoOpen(); // Add the links table. $sql = "CREATE TABLE " . $settings::db_prefix . "links(id INT(11) AUTO_INCREMENT PRIMARY KEY, name VARCHAR(100) NOT NULL, address VARCHAR(250) NOT NULL);"; $sth = $dbh->prepare($sql); $sth->execute(); $sth = NULL; $dbh = NULL; } if ($settings::db_driver == "sqlite") { // Create a new settings.class.php file adding the path to the SQLite database as the value for the db_host constant. $content = <<<EOF <?php ///////////////////////////////////////////////////////////////////////////////////// // ADS-B RECEIVER PORTAL // // =============================================================================== // // Copyright and Licensing Information: // // // // The MIT License (MIT) // // // // Copyright (c) 2015-2016 Joseph A. Prochazka // // // // Permission is hereby granted, free of charge, to any person obtaining a copy // // of this software and associated documentation files (the "Software"), to deal // // in the Software without restriction, including without limitation the rights // // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell // // copies of the Software, and to permit persons to whom the Software is // // furnished to do so, subject to the following conditions: // // // // The above copyright notice and this permission notice shall be included in all // // copies or substantial portions of the Software. // // // // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR // // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, // // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE // // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER // // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, // // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE // // SOFTWARE. // ///////////////////////////////////////////////////////////////////////////////////// class settings { // Database Settings const db_driver = 'sqlite'; const db_database = ''; const db_username = ''; const db_password = ''; const db_host = '/var/www/html/data/portal.sqlite'; const db_prefix = 'adsb_'; // Security Settings const sec_length = 6; // PDO Settings const pdo_debug = TRUE; } ?> EOF; file_put_contents($_SERVER['DOCUMENT_ROOT'] . DIRECTORY_SEPARATOR . "classes" . DIRECTORY_SEPARATOR . "settings.class.php", $content); // Open a connection to the database. $dbh = $common->pdoOpen(); // Add the links table. $sql = "CREATE TABLE " . $settings::db_prefix . "links(INTEGER PRIMARY KEY, name TEXT NOT NULL, address TEXT NOT NULL);"; $sth = $dbh->prepare($sql); $sth->execute(); $sth = NULL; $dbh = NULL; } // Rename the enableFlightNotifications to enableWebNotifications. $enableWebNotifications = $common->getSetting('enableFlightNotifications'); $common->addSetting('enableWebNotifications', $enableWebNotifications); $common->deleteSetting('enableFlightNotifications'); // Add Google Maps API Key setting. $common->addSetting('googleMapsApiKey', ''); // Add enable custom links setting. $common->addSetting('enableLinks', FALSE); // Update the version and patch settings.. $common->updateSetting("version", "2.5.0"); $common->updateSetting("patch", ""); // The upgrade process completed successfully. $results['success'] = TRUE; $results['message'] = "Upgrade to v2.5.0 successful."; return $results; } catch (Exception $e) { // Something went wrong during this upgrade process. $results['success'] = FALSE; $results['message'] = $e->getMessage(); return $results; } }
function addPost($author, $title, $contents) { require_once $_SERVER['DOCUMENT_ROOT'] . DIRECTORY_SEPARATOR . "classes" . DIRECTORY_SEPARATOR . "settings.class.php"; $settings = new settings(); if ($settings::db_driver == "xml") { // XML $blogPosts = simplexml_load_file($_SERVER['DOCUMENT_ROOT'] . DIRECTORY_SEPARATOR . "data" . DIRECTORY_SEPARATOR . "blogPosts.xml"); $blogPost = $blogPosts->addChild('blogPost', ''); $blogPost->addChild('title', $title); $blogPost->addChild('date', gmdate('Y-m-d H:i:s', time())); $blogPost->addChild('author', $author); $blogPost->addChild('contents', html_entity_decode($contents, null, "UTF-8")); $dom = dom_import_simplexml($blogPosts)->ownerDocument; $dom->formatOutput = TRUE; file_put_contents($_SERVER['DOCUMENT_ROOT'] . DIRECTORY_SEPARATOR . "data" . DIRECTORY_SEPARATOR . "blogPosts.xml", $dom->saveXML()); } else { // PDO require_once $_SERVER['DOCUMENT_ROOT'] . DIRECTORY_SEPARATOR . "classes" . DIRECTORY_SEPARATOR . "common.class.php"; $common = new common(); $dbh = $common->pdoOpen(); $sql = "INSERT INTO " . $settings::db_prefix . "blogPosts (title, date, author, contents) VALUES (:title, :date, :author, :contents)"; $sth = $dbh->prepare($sql); $sth->bindParam(':title', $title, PDO::PARAM_STR, 100); $sth->bindParam(':date', gmdate('Y-m-d H:i:s', time()), PDO::PARAM_STR, 20); $sth->bindParam(':author', $author, PDO::PARAM_STR, 100); $sth->bindParam(':contents', $contents, PDO::PARAM_STR, 20000); $sth->execute(); $sth = NULL; $dbh = NULL; } }