Compare commits

...

7 Commits

Author SHA1 Message Date
ostertun
07d01ae700 Merge branch 'release/V_1.11.4' 2020-12-07 16:48:32 +01:00
ostertun
08ab714a54 Release v_1.11.4 2020-12-07 16:48:08 +01:00
ostertun
44c962b7b3 Show next year in regattas lists 2020-12-07 16:47:24 +01:00
ostertun
004280f3ea Merge branch 'hotfix/pushsubscription_onerror' 2020-11-19 13:20:41 +01:00
ostertun
63a8d174d7 Merge branch 'hotfix/pushsubscription_onerror' into develop 2020-11-19 13:20:41 +01:00
ostertun
13f496f0a6 gitflow-hotfix-stash: pushsubscription_onerror 2020-11-19 13:20:29 +01:00
ostertun
69ef983c07 Merge branch 'release/v_1.11.3' into develop 2020-11-01 17:00:26 +01:00
10 changed files with 137 additions and 55 deletions

View File

@@ -13,6 +13,7 @@ var showConsoleButtonTimeout = setTimeout(function(){
$('#button-show-console').show(); $('#button-show-console').show();
}, 10000); }, 10000);
var showLoader = function() { var showLoader = function() {
log('[tpl] showLoader called, loaderCount:', loaderCount);
if (loaderCount < 1) { if (loaderCount < 1) {
$('#preloader').removeClass('preloader-hide'); $('#preloader').removeClass('preloader-hide');
loaderCount = 0; loaderCount = 0;
@@ -24,6 +25,7 @@ var showLoader = function() {
loaderCount ++; loaderCount ++;
} }
var hideLoader = function() { var hideLoader = function() {
log('[tpl] hideLoader called, loaderCount:', loaderCount);
loaderCount --; loaderCount --;
if (loaderCount < 1) { if (loaderCount < 1) {
$('#preloader').addClass('preloader-hide'); $('#preloader').addClass('preloader-hide');

View File

@@ -397,6 +397,33 @@ function dbGetRanking(minDate, maxDate, jugend, jugstrict) {
}); });
} }
function dbGetCurrentYear() {
return new Promise(async function (resolve) {
var date = new Date();
var year = date.getFullYear();
if (date.getMonth() == 11) {
year ++; // In DECEMBER show next year
} else {
// if there are no more regattas until end of the year, show next year
var regattas = dbGetRegattasRange(parseDate(date.getDate() + '.' + (date.getMonth() + 1) + '.' + year), parseDate('31.12.' + year));
if (regattas.length == 0) {
year ++;
}
}
var years = await dbGetData('years');
years.sort(function (a, b) {
if (a['year'] > b['year']) return -1;
if (a['year'] < b['year']) return 1;
return 0;
});
for (id in years) {
if (years[id].year < year) year = years[id].year;
if (years[id].year == year) break;
}
resolve(year);
});
}
function dbSettingsGet(key) { function dbSettingsGet(key) {
return new Promise(function(resolve) { return new Promise(function(resolve) {
if (canUseLocalDB) { if (canUseLocalDB) {

View File

@@ -156,12 +156,14 @@ function findGetParameter(parameterName) {
} }
var signup = function() { var signup = function() {
log('[app] Signup');
var username = $('#input-signup-username').val(); var username = $('#input-signup-username').val();
var email = $('#input-signup-email').val(); var email = $('#input-signup-email').val();
var password = $('#input-signup-password').val(); var password = $('#input-signup-password').val();
if (username == '') { $('#input-signup-username').focus(); return; } if (username == '') { $('#input-signup-username').focus(); return; }
if (email == '') { $('#input-signup-email').focus(); return; } if (email == '') { $('#input-signup-email').focus(); return; }
if (password == '') { $('#input-signup-password').focus(); return; } if (password == '') { $('#input-signup-password').focus(); return; }
log('[app] Signup: All fields okay');
showLoader(); showLoader();
$('#input-signup-username').val('').trigger('focusin').trigger('focusout'); $('#input-signup-username').val('').trigger('focusin').trigger('focusout');
$('#input-signup-email').val('').trigger('focusin').trigger('focusout'); $('#input-signup-email').val('').trigger('focusin').trigger('focusout');
@@ -175,6 +177,7 @@ var signup = function() {
password: password password: password
}, },
error: function (xhr, status, error) { error: function (xhr, status, error) {
log('[app] Signup: error:', xhr.status, status);
if (xhr.status == 409) { if (xhr.status == 409) {
toastError('Benutzername bereits vergeben'); toastError('Benutzername bereits vergeben');
$('#input-signup-email').val(email).trigger('focusin').trigger('focusout'); $('#input-signup-email').val(email).trigger('focusin').trigger('focusout');
@@ -189,6 +192,7 @@ var signup = function() {
hideLoader(); hideLoader();
}, },
success: function (data, status, xhr) { success: function (data, status, xhr) {
log('[app] Signup successful, logging in');
$('#input-login-username').val(username); $('#input-login-username').val(username);
$('#input-login-password').val(password); $('#input-login-password').val(password);
login(); login();
@@ -197,6 +201,7 @@ var signup = function() {
} }
var login = function() { var login = function() {
log('[app] Login');
showLoader(); showLoader();
var username = $('#input-login-username').val(); var username = $('#input-login-username').val();
var password = $('#input-login-password').val(); var password = $('#input-login-password').val();
@@ -211,6 +216,7 @@ var login = function() {
device: navigator.userAgent device: navigator.userAgent
}, },
error: function (xhr, status, error) { error: function (xhr, status, error) {
log('[app] Login: error:', xhr.status, status);
if (xhr.status == 401) { if (xhr.status == 401) {
toastError('Benutzername oder Passwort falsch'); toastError('Benutzername oder Passwort falsch');
$('#input-login-username').val(username).trigger('focusin').trigger('focusout'); $('#input-login-username').val(username).trigger('focusin').trigger('focusout');
@@ -225,6 +231,7 @@ var login = function() {
hideLoader(); hideLoader();
}, },
success: function (data, status, xhr) { success: function (data, status, xhr) {
log('[app] Login successful');
localStorage.setItem('auth_id', data.id); localStorage.setItem('auth_id', data.id);
localStorage.setItem('auth_hash', data.auth); localStorage.setItem('auth_hash', data.auth);
localStorage.setItem('auth_user', data.user); localStorage.setItem('auth_user', data.user);
@@ -245,6 +252,7 @@ var logoutClearStorage = function() {
} }
var logout = function() { var logout = function() {
log('[app] Logout');
showLoader(); showLoader();
var auth = { var auth = {
id: localStorage.getItem('auth_id'), id: localStorage.getItem('auth_id'),
@@ -262,6 +270,7 @@ var logout = function() {
auth: auth auth: auth
}, },
error: function (xhr, status, error) { error: function (xhr, status, error) {
log('[app] Logout: error:', xhr.status, status);
if (xhr.status == 401) { if (xhr.status == 401) {
log('[app] Not logged in'); log('[app] Not logged in');
logoutClearStorage(); logoutClearStorage();
@@ -276,12 +285,14 @@ var logout = function() {
} }
}, },
success: function (data, status, xhr) { success: function (data, status, xhr) {
log('[app] Logout successful');
logoutClearStorage(); logoutClearStorage();
} }
}); });
} }
function deleteDb() { function deleteDb() {
log('[app] Deleting DB');
$('#menu-developer').hideMenu(); $('#menu-developer').hideMenu();
if (canUseLocalDB) { if (canUseLocalDB) {
showLoader(); showLoader();
@@ -298,11 +309,13 @@ function deleteDb() {
setTimeout(function(){ location.reload(); }, 3000); setTimeout(function(){ location.reload(); }, 3000);
} }
} else { } else {
log('[app] DB not supported');
toastWarn('Dein Gerät unterstützt kein lokales Speichern der Daten. Alle Daten werden direkt vom Server gezogen.<br>Entsprechend kannst Du die Datenbank auch nicht zurücksetzen.', 10000); toastWarn('Dein Gerät unterstützt kein lokales Speichern der Daten. Alle Daten werden direkt vom Server gezogen.<br>Entsprechend kannst Du die Datenbank auch nicht zurücksetzen.', 10000);
} }
} }
function deleteCache() { function deleteCache() {
log('[app] Deleting cache');
$('#menu-developer').hideMenu(); $('#menu-developer').hideMenu();
navigator.serviceWorker.getRegistrations().then(function (registrations) { navigator.serviceWorker.getRegistrations().then(function (registrations) {
for (let registration of registrations) { for (let registration of registrations) {
@@ -340,16 +353,27 @@ function urlB64ToUint8Array(base64String) {
function pushesSubscribe() { function pushesSubscribe() {
log('[app] Subscribing'); log('[app] Subscribing');
const applicationServerKey = urlB64ToUint8Array(PUSH_SERVER_KEY); const applicationServerKey = urlB64ToUint8Array(PUSH_SERVER_KEY);
log('[app] Subscription app server key:', applicationServerKey);
swRegistration.pushManager.subscribe({ swRegistration.pushManager.subscribe({
userVisibleOnly: true, userVisibleOnly: true,
applicationServerKey: applicationServerKey applicationServerKey: applicationServerKey
}) })
.then(function(subscription) { .then(async function(subscription) {
pushesUpdateServerSubscription(subscription, true); log('[app] Subscription:', subscription);
if (await pushesUpdateServerSubscription(subscription, true)) {
log('[app] Subscription: Sent to server, updating UI');
updatePushSwitches(); updatePushSwitches();
updatePushBadge(); updatePushBadge();
} else {
$('#menu-pushes').hideMenu();
log('[app] Failed to subscribe the user due to connection error');
toastError('Da ist leider etwas schief gelaufen. Bitte stelle sicher, dass Du mit dem Internet verbunden bist und versuche es erneut.', 5000);
pushesUnSubscribe(true);
}
hideLoader();
}) })
.catch(function(err) { .catch(function(err) {
$('#menu-pushes').hideMenu();
log('[app] Failed to subscribe the user: ', err); log('[app] Failed to subscribe the user: ', err);
toastError('Da ist leider etwas schief gelaufen. Bitte stelle sicher, dass Du mit dem Internet verbunden bist und versuche es erneut.', 5000); toastError('Da ist leider etwas schief gelaufen. Bitte stelle sicher, dass Du mit dem Internet verbunden bist und versuche es erneut.', 5000);
pushesUnSubscribe(true); pushesUnSubscribe(true);
@@ -359,13 +383,21 @@ function pushesSubscribe() {
function pushesUnSubscribe(silent = false) { function pushesUnSubscribe(silent = false) {
log('[app] Unsubscribing'); log('[app] Unsubscribing');
swRegistration.pushManager.getSubscription() swRegistration.pushManager.getSubscription()
.then(function(subscription) { .then(async function(subscription) {
log('[app] Subscription:', subscription);
if (subscription) { if (subscription) {
pushesUpdateServerSubscription(subscription, false); if (await pushesUpdateServerSubscription(subscription, false)) {
log('[app] Subscription: Removed from server');
} else {
log('[app] Failed to unsubscribe the user due to connection error');
}
log('[app] Removing subscription');
subscription.unsubscribe(); subscription.unsubscribe();
log('[app] Subscription: Updating UI');
$('#menu-pushes').hideMenu(); $('#menu-pushes').hideMenu();
updatePushBadge(); updatePushBadge();
hideLoader(); hideLoader();
if (!silent) toastOk('Du erhältst ab sofort keine Benachrichtigungen mehr von uns.');
} }
}) })
.catch(function(error) { .catch(function(error) {
@@ -378,21 +410,22 @@ function pushesUnSubscribe(silent = false) {
} }
function pushesUpdateServerSubscription(subscription, enabled) { function pushesUpdateServerSubscription(subscription, enabled) {
return new Promise(function(resolve){
log('[app] updateServer', enabled, subscription); log('[app] updateServer', enabled, subscription);
$.ajax({ $.ajax({
url: QUERY_URL + (enabled ? 'add' : 'remove') + '_subscription', url: QUERY_URL + (enabled ? 'add' : 'remove') + '_subscription',
type: 'POST', type: 'POST',
data: { subscription: JSON.stringify(subscription) }, data: { subscription: JSON.stringify(subscription) },
success: function (data, textStatus, jqXHR) { success: function (data, textStatus, jqXHR) {
if (!enabled) { log('[app] Subscription sent to server');
toastOk('Du erhältst ab sofort keine Benachrichtigungen mehr von uns.'); resolve(true);
}
hideLoader();
}, },
error: function (jqXHR, textStatus, errorThrown) { error: function (jqXHR, textStatus, errorThrown) {
throw 'Cannot update server subscription'; log('[app] Error sending subscription to server');
resolve(false);
} }
}); });
});
} }
async function initPushSettings() { async function initPushSettings() {

View File

@@ -51,7 +51,7 @@ var siteScript = async function() {
if (firstCall) { if (firstCall) {
firstCall = false; firstCall = false;
$('#button-notifications-activate').click(function(){ $('#button-notifications-activate').click(function(){
$('#menu-pushes').showMenu(); pushesOpenMenu();
}); });
$('#a-notifications-later').click(function(){ $('#a-notifications-later').click(function(){
createCookie('regatten_app_' + BOATCLASS + '_rejected_push', true, 1); createCookie('regatten_app_' + BOATCLASS + '_rejected_push', true, 1);

View File

@@ -74,11 +74,15 @@ function selectChange() {
} }
function initYear() { function initYear() {
return new Promise(async function (resolve) {
var year = findGetParameter('year'); var year = findGetParameter('year');
if (year === null) year = new Date().getFullYear(); if (year === null) year = await dbGetCurrentYear();
$('#select-year').html('<option value="' + year + '">' + year + '</option>'); $('#select-year').html('<option value="' + year + '">' + year + '</option>');
$('#select-year').val(year); $('#select-year').val(year);
resolve();
});
} }
var firstCall = true; var firstCall = true;
@@ -107,7 +111,7 @@ var siteScript = async function() {
if (firstCall) { if (firstCall) {
firstCall = false; firstCall = false;
initYear(); await initYear();
$('#select-year').change(selectChange); $('#select-year').change(selectChange);
$('#input-search').on('input', drawList); $('#input-search').on('input', drawList);
$('#switch-status-gemeldet').parent().parent().click(planningSwitchChanged); $('#switch-status-gemeldet').parent().parent().click(planningSwitchChanged);

View File

@@ -291,11 +291,15 @@ function selectChange() {
} }
function initYear() { function initYear() {
return new Promise(async function (resolve) {
var year = findGetParameter('year'); var year = findGetParameter('year');
if (year === null) year = new Date().getFullYear(); if (year === null) year = await dbGetCurrentYear();
$('#select-year').html('<option value="' + year + '">' + year + '</option>'); $('#select-year').html('<option value="' + year + '">' + year + '</option>');
$('#select-year').val(year); $('#select-year').val(year);
resolve();
});
} }
var firstCall = true; var firstCall = true;
@@ -324,7 +328,7 @@ var siteScript = async function() {
if (firstCall) { if (firstCall) {
firstCall = false; firstCall = false;
initYear(); await initYear();
$('#select-year').change(selectChange); $('#select-year').change(selectChange);
$('#input-search').on('input', drawList); $('#input-search').on('input', drawList);
$('#switch-planning-include').parent().parent().click(planningSwitchChanged); $('#switch-planning-include').parent().parent().click(planningSwitchChanged);

View File

@@ -16,11 +16,15 @@ function selectChange() {
} }
function initYear() { function initYear() {
return new Promise(async function (resolve) {
var year = findGetParameter('year'); var year = findGetParameter('year');
if (year === null) year = new Date().getFullYear(); if (year === null) year = await dbGetCurrentYear();
$('#select-year').html('<option value="' + year + '">' + year + '</option>'); $('#select-year').html('<option value="' + year + '">' + year + '</option>');
$('#select-year').val(year); $('#select-year').val(year);
resolve();
});
} }
var firstCall = true; var firstCall = true;
@@ -47,7 +51,7 @@ var siteScript = async function() {
if (firstCall) { if (firstCall) {
firstCall = false; firstCall = false;
initYear(); await initYear();
$('#select-year').change(selectChange); $('#select-year').change(selectChange);
$('#input-search').on('input', drawList); $('#input-search').on('input', drawList);
} }

View File

@@ -11,11 +11,15 @@ function selectChange() {
} }
function initYear() { function initYear() {
return new Promise(async function (resolve) {
var year = findGetParameter('year'); var year = findGetParameter('year');
if (year === null) year = new Date().getFullYear(); if (year === null) year = await dbGetCurrentYear();
$('#select-year').html('<option value="' + year + '">' + year + '</option>'); $('#select-year').html('<option value="' + year + '">' + year + '</option>');
$('#select-year').val(year); $('#select-year').val(year);
resolve();
});
} }
var firstCall = true; var firstCall = true;
@@ -60,7 +64,7 @@ var siteScript = async function() {
if (firstCall) { if (firstCall) {
firstCall = false; firstCall = false;
initYear(); await initYear();
$('#select-year').change(selectChange); $('#select-year').change(selectChange);
$('#input-search').on('input', drawList); $('#input-search').on('input', drawList);
} }

View File

@@ -29,8 +29,9 @@ function buttonShowPressed() {
} }
function initYear() { function initYear() {
return new Promise(async function (resolve) {
var year = findGetParameter('year'); var year = findGetParameter('year');
if (year === null) year = new Date().getFullYear(); if (year === null) year = await dbGetCurrentYear();
$('#select-year').html('<option value="' + year + '">' + year + '</option>'); $('#select-year').html('<option value="' + year + '">' + year + '</option>');
$('#select-year').val(year); $('#select-year').val(year);
@@ -45,6 +46,9 @@ function initYear() {
} }
selectChange(false); selectChange(false);
resolve();
});
} }
var firstCall = true; var firstCall = true;
@@ -68,7 +72,7 @@ async function drawList () {
var siteScript = async function() { var siteScript = async function() {
if (firstCall) { if (firstCall) {
firstCall = false; firstCall = false;
initYear(); await initYear();
$('#select-year').change(selectChange); $('#select-year').change(selectChange);
$('#button-show').click(buttonShowPressed); $('#button-show').click(buttonShowPressed);
$('#input-search').on('input', drawList); $('#input-search').on('input', drawList);

View File

@@ -1,5 +1,5 @@
<?php <?php
define('PWA_VERSION', '1.11.3'); define('PWA_VERSION', '1.11.4');
?> ?>