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 @@