. */ /* This script imports data from old phpTrackme database scheme. * * However, as μlogger users more secure password storage methods, * it is impossible to convert old password hashes to the new format. * Administrator will have to fill in user passwords manually. * Alternatively authentication code could be modify in order to * temporarily accept old hashes and convert it as users log in. * It should be pretty simple, but this is not a top priority * for this small project. */ // this script is disabled by default. Change below to true before running. $enabled = false; // path to root folder of phpTrackme $phpTrackmePath = "../../phpTrackme"; // path to root folder of μlogger $uloggerPath = ".."; /* -------------------------------------------- */ /* no user modifications should be needed below */ if ($enabled == false) { echo "Script is disabled\n"; exit(1); } $path = realpath(dirname(__FILE__)); if (!empty($phpTrackmePath) && $phpTrackmePath[0] == ".") { $phpTrackmePath = $path . "/" . $phpTrackmePath; } $phpTrackmeConfig = $phpTrackmePath . "/config.php"; if (!is_readable($phpTrackmeConfig)) { echo "Can't find phpTrackme config file: $phpTrackmeConfig\n"; exit(1); } include ($phpTrackmeConfig); $pt_dbhost = $dbhost; $pt_dbuser = $dbuser; $pt_dbpass = $dbpass; $pt_dbname = $dbname; $pt_mysqli = new mysqli($pt_dbhost, $pt_dbuser, $pt_dbpass, $pt_dbname); $pt_mysqli->set_charset("utf8"); if ($pt_mysqli->connect_errno) { echo "Can't connect to $pt_dbname database: (" . $pt_mysqli->errno . ") " . $pt_mysqli->error . "\n"; exit(1); } if (!empty($uloggerPath) && $uloggerPath[0] == ".") { $uloggerPath = $path . "/" . $uloggerPath; } $uloggerConfig = $uloggerPath . "/config.php"; if (!is_readable($uloggerConfig)) { echo "Can't find μlogger config fiel: $uloggerConfige\n"; exit(1); } include ($uloggerConfig); $mysqli = new mysqli($dbhost, $dbuser, $dbpass, $dbname); $mysqli->set_charset("utf8"); if ($mysqli->connect_errno) { echo "Can't connect to $dbname database : (" . $mysqli->errno . ") " . $mysqli->error . "\n"; exit(1); } // import data if (!$users_result = $pt_mysqli->query("SELECT * FROM users ORDER BY ID")) { echo "Query failed\n"; exit(1); } if (!($user_insert = $mysqli->prepare("INSERT INTO users (login, password) VALUES (?, ?)"))) { echo "Prepare failed: (" . $mysqli->errno . ") " . $mysqli->error . "\n"; exit(1); } $pt_user = null; $pt_pass = null; if (!$user_insert->bind_param("ss", $pt_user, $pt_pass)) { echo "Binding parameters failed: (" . $user_insert->errno . ") " . $user_insert->error . "\n"; exit(1); } while ($user = $users_result->fetch_assoc()) { $pt_user = $user['username']; $pt_pass = $user['password']; $pt_id = $user['ID']; if (!$user_insert->execute()) { echo "Execute failed: (" . $user_insert->errno . ") " . $user_insert->error . "\n"; exit(1); } $user_id = $user_insert->insert_id; process_user_tracks($user_id); } $users_result->close(); $user_insert->close(); $mysqli->close(); $pt_mysqli->close(); echo "Import finished successfully\n"; exit(0); /* Helper functions */ /** Import tracks metadata for given user * @param $user_id User id */ function process_user_tracks($user_id) { global $pt_mysqli, $mysqli; $sql = "SELECT ID, Name, Comments FROM trips WHERE FK_Users_ID = ? ORDER BY ID"; if (!($tracks_select = $pt_mysqli->prepare($sql))) { echo "Prepare failed: (" . $pt_mysqli->errno . ") " . $pt_mysqli->error . "\n"; exit(1); } if (!$tracks_select->bind_param('i', $user_id)) { echo "Binding parameters failed: (" . $tracks_select->errno . ") " . $tracks_select->error . "\n"; exit(1); } if (!$tracks_select->bind_result($pt_id, $pt_name, $pt_comment)) { echo "Binding parameters failed: (" . $tracks_select->errno . ") " . $tracks_select->error . "\n"; exit(1); } if (!$tracks_select->execute()) { echo "Execute failed: (" . $tracks_select->errno . ") " . $tracks_select->error . "\n"; exit(1); } $tracks_select->store_result(); if (!($track_insert = $mysqli->prepare("INSERT INTO tracks (user_id, name, comment) VALUES (?, ?, ?)"))) { echo "Prepare failed: (" . $mysqli->errno . ") " . $mysqli->error . "\n"; exit(1); } $pt_name = null; $pt_comment = null; if (!$track_insert->bind_param("iss", $user_id, $pt_name, $pt_comment)) { echo "Binding parameters failed: (" . $track_insert->errno . ") " . $track_insert->error . "\n"; exit(1); } while ($tracks_select->fetch()) { if (!$track_insert->execute()) { echo "Execute failed: (" . $track_insert->errno . ") " . $track_insert->error . "\n"; exit(1); } $track_id = $track_insert->insert_id; process_track($user_id, $pt_id, $track_id); } $tracks_select->free_result(); $tracks_select->close(); $track_insert->close(); } /** Import positions for given track * @param $user_id User id * @param $old_id Old database track id * @param $new_id New database track id */ function process_track($user_id, $old_id, $new_id) { global $pt_mysqli, $mysqli; $sql = "SELECT Latitude, Longitude, Altitude, Speed, Angle, DateOccurred, Comments FROM pt_positions WHERE FK_Users_ID = ? AND FK_Trips_ID = ? ORDER BY DateOccurred"; if (!($pos_select = $pt_mysqli->prepare($sql))) { echo "Prepare failed: (" . $pt_mysqli->errno . ") " . $pt_mysqli->error . "\n"; exit(1); } if (!$pos_select->bind_param('ii', $user_id, $old_id)) { echo "Binding parameters failed: (" . $pos_select->errno . ") " . $pos_select->error . "\n"; exit(1); } if (!$pos_select->bind_result($lat, $lon, $altitude, $speed, $bearing, $time, $comment)) { echo "Binding parameters failed: (" . $pos_select->errno . ") " . $pos_select->error . "\n"; exit(1); } if (!$pos_select->execute()) { echo "Execute failed: (" . $pos_select->errno . ") " . $pos_select->error . "\n"; exit(1); } $pos_select->store_result(); if (!($pos_insert = $mysqli->prepare("INSERT INTO positions (time, user_id, track_id, latitude, longitude, altitude, speed, bearing, accuracy, provider, comment, image_id) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)"))) { echo "Prepare failed: (" . $mysqli->errno . ") " . $mysqli->error . "\n"; exit(1); } $provider = $comment = $time = $imageid = null; $lat = $lon = 0; $altitude = $speed = $bearing = $accuracy = null; if (!$pos_insert->bind_param('siiddddddssi', $time, $user_id, $new_id, $lat, $lon, $altitude, $speed, $bearing, $accuracy, $provider, $comment, $imageid)) { echo "Binding parameters failed: (" . $pos_insert->errno . ") " . $pos_insert->error . "\n"; exit(1); } while ($pos_select->fetch()) { $provider = null; if (!$pos_insert->execute()) { echo "Execute failed: (" . $pos_insert->errno . ") " . $pos_insert->error . "\n"; exit(1); } } $pos_insert->close(); $pos_select->free_result(); $pos_select->close(); } ?>