diff --git a/api/index.php b/api/index.php
index 9eb94c3..3a03cff 100644
--- a/api/index.php
+++ b/api/index.php
@@ -389,7 +389,7 @@
if ($response === false) done(DONE_DATABASE);
$keys = array_keys($response);
if (isset($_REQUEST['changed-after'])) {
- $response = db_get_data($mysqli, DB_TABLE_USERS, 'id,username,email,' . $followFields, '`changed` > "' . mysqli_real_escape_string($mysqli, date('Y-m-d H:i:s', $_REQUEST['changed-after'])) . '"' . ($whereString ? (' AND ' . $whereString) : ''));
+ $response = db_get_data($mysqli, DB_TABLE_USERS, 'id,username,email' . $followFields, '`changed` > "' . mysqli_real_escape_string($mysqli, date('Y-m-d H:i:s', $_REQUEST['changed-after'])) . '"' . ($whereString ? (' AND ' . $whereString) : ''));
if ($response === false) done(DONE_DATABASE);
}
$response = array_map(function ($entry) {
diff --git a/client/scripts/database.js b/client/scripts/database.js
index aec34ee..87c0935 100644
--- a/client/scripts/database.js
+++ b/client/scripts/database.js
@@ -1,4 +1,4 @@
-const DB_VERSION = 3;
+const DB_VERSION = 4;
const USER_ID = localStorage.getItem('auth_user');
const USER_NAME = localStorage.getItem('auth_username');
@@ -283,6 +283,14 @@ async function updateSyncStatus() { // TODO
async function runPageScript() {
if (canUseLocalDB) {
+ var osUpdateTimes = db.transaction('update_times').objectStore('update_times');
+ osUpdateTimes.get('loggedin').onsuccess = function (event) {
+ var status = event.target.result.status;
+ if (status != isLoggedIn()) {
+ resetDb();
+ location.reload();
+ }
+ };
updateSyncStatus();
}
if (typeof updateSyncStatusTimer == 'undefined') { // TODO
@@ -341,7 +349,7 @@ function sync() {
// CLUBS
if (localTimes['clubs'] < serverTimes['clubs']) {
- getJSON(QUERY_URL + 'get_clubs?changer-after=' + localTimes['clubs'], function (code, data) {
+ getJSON(QUERY_URL + 'get_clubs?changed-after=' + localTimes['clubs'], function (code, data) {
if (code == 200) {
var os = db.transaction('clubs', 'readwrite').objectStore('clubs');
console.log(data);
@@ -373,7 +381,7 @@ function sync() {
// BOATS
if (localTimes['boats'] < serverTimes['boats']) {
- getJSON(QUERY_URL + 'get_boats?changer-after=' + localTimes['boats'], function (code, data) {
+ getJSON(QUERY_URL + 'get_boats?changed-after=' + localTimes['boats'], function (code, data) {
if (code == 200) {
var os = db.transaction('boats', 'readwrite').objectStore('boats');
console.log(data);
@@ -405,7 +413,7 @@ function sync() {
// SAILORS
if (localTimes['sailors'] < serverTimes['sailors']) {
- getJSON(QUERY_URL + 'get_sailors?changer-after=' + localTimes['sailors'], function (code, data) {
+ getJSON(QUERY_URL + 'get_sailors?changed-after=' + localTimes['sailors'], function (code, data) {
if (code == 200) {
var os = db.transaction('sailors', 'readwrite').objectStore('sailors');
console.log(data);
@@ -437,7 +445,7 @@ function sync() {
// REGATTAS
if (localTimes['regattas'] < serverTimes['regattas']) {
- getJSON(QUERY_URL + 'get_regattas?changer-after=' + localTimes['regattas'], function (code, data) {
+ getJSON(QUERY_URL + 'get_regattas?changed-after=' + localTimes['regattas'], function (code, data) {
if (code == 200) {
var os = db.transaction('regattas', 'readwrite').objectStore('regattas');
console.log(data);
@@ -485,7 +493,7 @@ function sync() {
// RESULTS
if (localTimes['results'] < serverTimes['results']) {
- getJSON(QUERY_URL + 'get_results?changer-after=' + localTimes['results'], function (code, data) {
+ getJSON(QUERY_URL + 'get_results?changed-after=' + localTimes['results'], function (code, data) {
if (code == 200) {
var os = db.transaction('results', 'readwrite').objectStore('results');
console.log(data);
@@ -517,7 +525,7 @@ function sync() {
// PLANNINGS
if (localTimes['plannings'] < serverTimes['plannings']) {
- getJSON(QUERY_URL + 'get_plannings?changer-after=' + localTimes['plannings'], function (code, data) {
+ getJSON(QUERY_URL + 'get_plannings?changed-after=' + localTimes['plannings'], function (code, data) {
if (code == 200) {
var os = db.transaction('plannings', 'readwrite').objectStore('plannings');
console.log(data);
@@ -550,7 +558,7 @@ function sync() {
if (isLoggedIn()) {
// TRIM_BOATS
if (localTimes['trim_boats'] < serverTimes['trim_boats']) {
- getJSON(QUERY_URL + 'get_trim_boats?changer-after=' + localTimes['trim_boats'], function (code, data) {
+ getJSON(QUERY_URL + 'get_trim_boats?changed-after=' + localTimes['trim_boats'], function (code, data) {
if (code == 200) {
var os = db.transaction('trim_boats', 'readwrite').objectStore('trim_boats');
console.log(data);
@@ -582,7 +590,7 @@ function sync() {
// TRIM_USERS
if (localTimes['trim_users'] < serverTimes['trim_users']) {
- getJSON(QUERY_URL + 'get_trim_users?changer-after=' + localTimes['trim_users'], function (code, data) {
+ getJSON(QUERY_URL + 'get_trim_users?changed-after=' + localTimes['trim_users'], function (code, data) {
if (code == 200) {
var os = db.transaction('trim_users', 'readwrite').objectStore('trim_users');
console.log(data);
@@ -614,7 +622,7 @@ function sync() {
// TRIM_TRIMS
if (localTimes['trim_trims'] < serverTimes['trim_trims']) {
- getJSON(QUERY_URL + 'get_trim_trims?changer-after=' + localTimes['trim_trims'], function (code, data) {
+ getJSON(QUERY_URL + 'get_trim_trims?changed-after=' + localTimes['trim_trims'], function (code, data) {
if (code == 200) {
var os = db.transaction('trim_trims', 'readwrite').objectStore('trim_trims');
console.log(data);
@@ -650,7 +658,7 @@ function sync() {
// USERS
if (localTimes['users'] < serverTimes['users']) {
- getJSON(QUERY_URL + 'get_users?changer-after=' + localTimes['users'], function (code, data) {
+ getJSON(QUERY_URL + 'get_users?changed-after=' + localTimes['users'], function (code, data) {
if (code == 200) {
var os = db.transaction('users', 'readwrite').objectStore('users');
console.log(data);
@@ -732,6 +740,8 @@ function initDatabase() {
var lastSync = event.target.result.time;
if (lastSync > 0) {
runPageScript();
+ } else {
+ db.transaction('update_times', 'readwrite').objectStore('update_times').put({ table: 'loggedin', status: isLoggedIn() });
}
};
@@ -795,6 +805,12 @@ function initDatabase() {
osUpdateTimes.put({ table: 'regattas', time: 0 });
}
+ if ((oldVersion < 4) && (newVersion >= 4)) {
+ console.log('to version 4');
+ var osUpdateTimes = upgradeTransaction.objectStore('update_times');
+ osUpdateTimes.add({ table: 'loggedin', status: isLoggedIn() });
+ }
+
var osUpdateTimes = upgradeTransaction.objectStore('update_times');
osUpdateTimes.put({ table: 'last_sync', time: 0 });
}
@@ -802,3 +818,29 @@ function initDatabase() {
runPageScript();
}
}
+
+function resetDb(silent = true) {
+ $('#menu-developer').hideMenu();
+ if (canUseLocalDB) {
+ showLoader();
+ var osUpdateTimes = db.transaction('update_times', 'readwrite').objectStore('update_times');
+ osUpdateTimes.put({ table: 'last_sync', time: 0 });
+ osUpdateTimes.put({ table: 'clubs', time: 0 });
+ osUpdateTimes.put({ table: 'boats', time: 0 });
+ osUpdateTimes.put({ table: 'sailors', time: 0 });
+ osUpdateTimes.put({ table: 'regattas', time: 0 });
+ osUpdateTimes.put({ table: 'results', time: 0 });
+ osUpdateTimes.put({ table: 'plannings', time: 0 });
+ osUpdateTimes.put({ table: 'trim_boats', time: 0 });
+ osUpdateTimes.put({ table: 'trim_users', time: 0 });
+ osUpdateTimes.put({ table: 'trim_trims', time: 0 });
+ osUpdateTimes.put({ table: 'users', time: 0 });
+ console.log('DB update times reset');
+ if (!silent)
+ toastInfo('The database was reset. Please reload or close this tab.
At the next visit, a full sync will be performed.');
+ hideLoader();
+ } else {
+ if (!silent)
+ toastWarn('Your device does not support storing data locally. All data is fetched directly from our server.
As a result, you can not reset your database.');
+ }
+}
diff --git a/client/scripts/regatten.js.php b/client/scripts/regatten.js.php
index fc3aa66..326fef0 100644
--- a/client/scripts/regatten.js.php
+++ b/client/scripts/regatten.js.php
@@ -200,26 +200,6 @@ var logout = function() {
});
}
-function resetDb() {
- $('#menu-developer').hideMenu();
- if (canUseLocalDB) {
- showLoader();
- var request = window.indexedDB.deleteDatabase('regatten_app_db_' + BOATCLASS);
- request.onerror = function (event) {
- console.log("Cannot open DB: " + event.target.errorCode);
- toastError('There was an error deleting your database.
Please report this to dev@regatten.net');
- hideLoader();
- };
- request.onsuccess = function (event) {
- console.log('DB deleted');
- toastInfo('The database was deleted. Please reload or close this tab.
At the next visit, a new database will be created.');
- hideLoader();
- }
- } else {
- toastWarn('Your device does not support storing data locally. All data is fetched directly from our server.
As a result, you can not reset your database.');
- }
-}
-
function resetCache() {
$('#menu-developer').hideMenu();
navigator.serviceWorker.getRegistrations().then(function (registrations) {
diff --git a/server/page/menus.php b/server/page/menus.php
index 46925dd..47b5774 100644
--- a/server/page/menus.php
+++ b/server/page/menus.php
@@ -130,7 +130,7 @@