Compare commits
18 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
143755a50f | ||
|
|
13927fb769 | ||
|
|
90075ceb4f | ||
|
|
526b338e41 | ||
|
|
aa60df83db | ||
|
|
58505a0f53 | ||
|
|
37c584e525 | ||
|
|
1010e4ffdd | ||
|
|
c17c2b64cf | ||
|
|
0658a44516 | ||
|
|
2f2d94bab4 | ||
|
|
dd854b7df5 | ||
|
|
c91dc57736 | ||
|
|
c8cef6ee95 | ||
|
|
3f7d7a40ec | ||
|
|
19f561ffde | ||
|
|
84677ef4dd | ||
|
|
1e0052f629 |
@@ -145,9 +145,9 @@ var compareResultsRaceCount;
|
|||||||
function compareResults (a, b) {
|
function compareResults (a, b) {
|
||||||
if (a['netto'] != b['netto']) return (a['netto'] < b['netto']) ? -1 : 1;
|
if (a['netto'] != b['netto']) return (a['netto'] < b['netto']) ? -1 : 1;
|
||||||
var tempA = [...a['values']];
|
var tempA = [...a['values']];
|
||||||
tempA.sort();
|
tempA.sort(function(a,b){return a-b;});
|
||||||
var tempB = [...b['values']];
|
var tempB = [...b['values']];
|
||||||
tempB.sort();
|
tempB.sort(function(a,b){return a-b;});
|
||||||
for (var i = 0; i < compareResultsRaceCount; i ++) {
|
for (var i = 0; i < compareResultsRaceCount; i ++) {
|
||||||
if (tempA[i] != tempB[i]) return (tempA[i] < tempB[i]) ? -1 : 1;
|
if (tempA[i] != tempB[i]) return (tempA[i] < tempB[i]) ? -1 : 1;
|
||||||
}
|
}
|
||||||
@@ -191,6 +191,8 @@ function dbGetResultCalculated(regatta) {
|
|||||||
case 'DNF': results[id]['values'][i] = gemeldet + 1; copy[i] = gemeldet + 1; break; // Did not finish
|
case 'DNF': results[id]['values'][i] = gemeldet + 1; copy[i] = gemeldet + 1; break; // Did not finish
|
||||||
case 'RET': results[id]['values'][i] = gemeldet + 1; copy[i] = gemeldet + 1; break; // Retired (Aufgegeben)
|
case 'RET': results[id]['values'][i] = gemeldet + 1; copy[i] = gemeldet + 1; break; // Retired (Aufgegeben)
|
||||||
case 'RAF': results[id]['values'][i] = gemeldet + 1; copy[i] = gemeldet + 1; break; // Retired after finish
|
case 'RAF': results[id]['values'][i] = gemeldet + 1; copy[i] = gemeldet + 1; break; // Retired after finish
|
||||||
|
// Kursfehler
|
||||||
|
case 'NSC': results[id]['values'][i] = gemeldet + 1; copy[i] = gemeldet + 1; break; // Not sailed course
|
||||||
// Disqualifizierun
|
// Disqualifizierun
|
||||||
case 'DSQ': results[id]['values'][i] = gemeldet + 1; copy[i] = gemeldet + 1; break; // Disqualified
|
case 'DSQ': results[id]['values'][i] = gemeldet + 1; copy[i] = gemeldet + 1; break; // Disqualified
|
||||||
case 'DNE': results[id]['values'][i] = gemeldet + 1; copy[i] = -1; break; // Disqualified, not excludable (disqu. kann nach 90.3(b) nicht gestrichen werden)
|
case 'DNE': results[id]['values'][i] = gemeldet + 1; copy[i] = -1; break; // Disqualified, not excludable (disqu. kann nach 90.3(b) nicht gestrichen werden)
|
||||||
@@ -256,7 +258,7 @@ function dbGetResultCalculated(regatta) {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
function dbGetRanking(minDate, maxDate, jugend, jugstrict) {
|
function dbGetRanking(minDate, maxDate, maxAge, ageStrict, altM = 9, ageCrew = false) {
|
||||||
return new Promise(async function(resolve) {
|
return new Promise(async function(resolve) {
|
||||||
var rankNoResults = [];
|
var rankNoResults = [];
|
||||||
|
|
||||||
@@ -275,10 +277,14 @@ function dbGetRanking(minDate, maxDate, jugend, jugstrict) {
|
|||||||
|
|
||||||
for (var i in regattas) {
|
for (var i in regattas) {
|
||||||
var regatta = regattas[i];
|
var regatta = regattas[i];
|
||||||
|
var date = parseDate(regatta.date);
|
||||||
|
|
||||||
// regatta has to be min. 2 days to be ranking regatta
|
// regatta has to be min. 2 days to be ranking regatta
|
||||||
if (regatta.length < 2) continue;
|
if (regatta.length < 2) continue;
|
||||||
|
|
||||||
|
// regatta has to have rlf
|
||||||
|
if (regatta.rlf == 0) continue;
|
||||||
|
|
||||||
var results = await dbGetDataIndex('results', 'regatta', regatta.id);
|
var results = await dbGetDataIndex('results', 'regatta', regatta.id);
|
||||||
if (results.length <= 0) {
|
if (results.length <= 0) {
|
||||||
if (regatta.dateTo <= getToday()) {
|
if (regatta.dateTo <= getToday()) {
|
||||||
@@ -328,7 +334,20 @@ function dbGetRanking(minDate, maxDate, jugend, jugstrict) {
|
|||||||
if (result.rlp == 0) continue;
|
if (result.rlp == 0) continue;
|
||||||
|
|
||||||
// check if crew is youth
|
// check if crew is youth
|
||||||
// TODO: not used
|
if ((maxAge != false) && ageCrew) {
|
||||||
|
var crew = result.crew.split(',');
|
||||||
|
var okay = true;
|
||||||
|
for (var c in crew) {
|
||||||
|
if ((c == '') || !(c in sailorIds)) continue;
|
||||||
|
var sailor = sailors[sailorIds[c]];
|
||||||
|
if (((sailor.year != null) && (sailor.year < (formatDate('Y', date) - maxAge))) ||
|
||||||
|
((sailor.year == null) && (ageStrict))) {
|
||||||
|
okay = false;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (!okay) continue;
|
||||||
|
}
|
||||||
|
|
||||||
sailors[sailorIds[result.steuermann]].regattas[regatta.id] = {
|
sailors[sailorIds[result.steuermann]].regattas[regatta.id] = {
|
||||||
regatta: regatta.id,
|
regatta: regatta.id,
|
||||||
@@ -350,9 +369,9 @@ function dbGetRanking(minDate, maxDate, jugend, jugstrict) {
|
|||||||
for (var i = sailors.length - 1; i >= 0; i --) {
|
for (var i = sailors.length - 1; i >= 0; i --) {
|
||||||
if (sailors[i].german == '0') {
|
if (sailors[i].german == '0') {
|
||||||
sailors.splice(i, 1);
|
sailors.splice(i, 1);
|
||||||
} else if (jugend) {
|
} else if (maxAge != false) {
|
||||||
if (((sailors[i].year != null) && (sailors[i].year < (formatDate('Y', maxDate) - (await dbGetClassProp('youth-age'))))) ||
|
if (((sailors[i].year != null) && (sailors[i].year < (formatDate('Y', maxDate) - maxAge))) ||
|
||||||
((sailors[i].year == null) && (jugstrict))) {
|
((sailors[i].year == null) && (ageStrict))) {
|
||||||
sailors.splice(i, 1);
|
sailors.splice(i, 1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -372,7 +391,7 @@ function dbGetRanking(minDate, maxDate, jugend, jugstrict) {
|
|||||||
sum += parseFloat(r[1]);
|
sum += parseFloat(r[1]);
|
||||||
sailors[i].regattas[r[0]].used ++;
|
sailors[i].regattas[r[0]].used ++;
|
||||||
cnt ++;
|
cnt ++;
|
||||||
if (cnt >= 9) break;
|
if (cnt >= altM) break;
|
||||||
}
|
}
|
||||||
delete sailors[i].tmp_rlp;
|
delete sailors[i].tmp_rlp;
|
||||||
if (cnt > 0) {
|
if (cnt > 0) {
|
||||||
|
|||||||
@@ -624,7 +624,7 @@ function sendErrorReport() {
|
|||||||
url: QUERY_URL + 'error_report',
|
url: QUERY_URL + 'error_report',
|
||||||
method: 'POST',
|
method: 'POST',
|
||||||
data: {
|
data: {
|
||||||
errors: consoleOutput,
|
errors: JSON.stringify(consoleOutput),
|
||||||
device: navigator.userAgent,
|
device: navigator.userAgent,
|
||||||
version: '<?php echo PWA_VERSION; ?>'
|
version: '<?php echo PWA_VERSION; ?>'
|
||||||
},
|
},
|
||||||
@@ -664,24 +664,24 @@ var addConsoleOpenerToPreloader = function() {
|
|||||||
}
|
}
|
||||||
addConsoleOpenerToPreloader();
|
addConsoleOpenerToPreloader();
|
||||||
|
|
||||||
function m2s_getLink(type, eventId) {
|
function m2s_getLink(type, eventId, classId) {
|
||||||
switch (type) {
|
switch (type) {
|
||||||
case 'entrylist':
|
case 'entrylist':
|
||||||
return 'https://manage2sail.com/de-DE/event/' + eventId + '#!/entries';
|
return 'https://manage2sail.com/de-DE/event/' + eventId + '#!/entries?classId=' + classId;
|
||||||
}
|
}
|
||||||
return '';
|
return '';
|
||||||
}
|
}
|
||||||
function ro_getLink(type, eventId) {
|
function ro_getLink(type, eventId, classId) {
|
||||||
switch (type) {
|
switch (type) {
|
||||||
case 'entrylist':
|
case 'entrylist':
|
||||||
return 'http://www.raceoffice.org/entrylist.php?eid=' + eventId;
|
return 'http://www.raceoffice.org/entrylist.php?eid=' + eventId;
|
||||||
}
|
}
|
||||||
return '';
|
return '';
|
||||||
}
|
}
|
||||||
function extServiceGetLink(serviceName, type, eventId = '') {
|
function extServiceGetLink(serviceName, type, eventId = '', classId = '') {
|
||||||
switch (serviceName) {
|
switch (serviceName) {
|
||||||
case 'm2s':
|
case 'm2s':
|
||||||
return m2s_getLink(type, eventId);
|
return m2s_getLink(type, eventId, classId);
|
||||||
case 'ro':
|
case 'ro':
|
||||||
return ro_getLink(type, eventId);
|
return ro_getLink(type, eventId);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -19,8 +19,13 @@
|
|||||||
|
|
||||||
// Menu
|
// Menu
|
||||||
$items = $tpl->load('menu/item-switch', ['In die Saison-Planung aufnehmen', 'html-id' => 'switch-planning-include', 'icon' => 'fa-check']);
|
$items = $tpl->load('menu/item-switch', ['In die Saison-Planung aufnehmen', 'html-id' => 'switch-planning-include', 'icon' => 'fa-check']);
|
||||||
|
$items .= $tpl->load('menu/item-simple', ['', '#', 'html-id' => 'item-boat']);
|
||||||
$items .= $tpl->load('menu/item-simple', ['', '#', 'html-id' => 'item-steuermann']);
|
$items .= $tpl->load('menu/item-simple', ['', '#', 'html-id' => 'item-steuermann']);
|
||||||
$sp['menus'] .= $tpl->load('menu/bottom', [$items, 'html-id' => 'menu-edit', 'title' => 'Regatta bearbeiten', 'height' => 320]);
|
$sp['menus'] .= $tpl->load('menu/bottom', [$items, 'html-id' => 'menu-edit', 'title' => 'Regatta bearbeiten', 'height' => 400]);
|
||||||
|
|
||||||
|
// Select boat
|
||||||
|
$items = $tpl->load('input', ['html-id' => 'input-edit-boat-search', 'placeholder' => 'Suche', 'type' => 'text']);
|
||||||
|
$sp['menus'] .= $tpl->load('menu/modal', [$items, 'html-id' => 'menu-boat', 'height' => 500, 'width' => 350]);
|
||||||
|
|
||||||
// Select sailor
|
// Select sailor
|
||||||
$items = $tpl->load('input', ['html-id' => 'input-edit-search', 'placeholder' => 'Suche', 'type' => 'text']);
|
$items = $tpl->load('input', ['html-id' => 'input-edit-search', 'placeholder' => 'Suche', 'type' => 'text']);
|
||||||
|
|||||||
@@ -1,31 +1,31 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
$sp['title'] = 'Saison-Planung - Regatten.net ' . $_CLASS['name'];
|
$sp['title'] = 'Saison-Planung - Regatten.net ' . $_CLASS['name'];
|
||||||
$sp['backbutton'] = 'regattas';
|
$sp['backbutton'] = 'regattas';
|
||||||
$sp['activenav'] = 2;
|
$sp['activenav'] = 2;
|
||||||
|
|
||||||
// Title, Inputs
|
// Title, Inputs
|
||||||
$content = '<h1 id="h1-title"></h1>';
|
$content = '<h1 id="h1-title"></h1>';
|
||||||
$content .= '<p id="p-title"></p>';
|
$content .= '<p id="p-title"></p>';
|
||||||
|
|
||||||
$sp['output'] .= $tpl->load('card', [$content]);
|
$sp['output'] .= $tpl->load('card', [$content]);
|
||||||
|
|
||||||
// Plannings
|
// Plannings
|
||||||
$content = '<p id="p-info" class="mb-0"></p>';
|
$content = '<p id="p-info" class="mb-0"></p>';
|
||||||
$thead = '<tr><th>Benutzer</th><th>Steuermann/-frau</th><th>Crew</th></tr>';
|
$thead = '<tr><th>Benutzer</th><th>Boot</th><th>Steuermann/-frau</th><th>Crew</th></tr>';
|
||||||
$content .= $tpl->load('table', [$thead, 'html-id' => 'table-plannings', 'css-class' => 'mb-0 text-nowrap']);
|
$content .= $tpl->load('table', [$thead, 'html-id' => 'table-plannings', 'css-class' => 'mb-0 text-nowrap']);
|
||||||
|
|
||||||
$sp['output'] .= $tpl->load('card', [$content, 'html-id' => 'card-plannings']);
|
$sp['output'] .= $tpl->load('card', [$content, 'html-id' => 'card-plannings']);
|
||||||
|
|
||||||
// Info
|
// Info
|
||||||
$content = '<p>Du planst, hier hinzufahren, aber stehst nicht auf dieser Liste?<br>';
|
$content = '<p>Du planst, hier hinzufahren, aber stehst nicht auf dieser Liste?<br>';
|
||||||
$content .= 'Das kannst Du ändern! ';
|
$content .= 'Das kannst Du ändern! ';
|
||||||
$content .= '<font class="show-loggedin">Erstelle einfach <a href="' . LINK_PRE . 'planning">hier</a> Deine eigene Saison-Planung.</font>';
|
$content .= '<font class="show-loggedin">Erstelle einfach <a href="' . LINK_PRE . 'planning">hier</a> Deine eigene Saison-Planung.</font>';
|
||||||
$content .= '<font class="show-notloggedin"><a href="#" data-menu="menu-login">Melde Dich an</a> oder <a href="#" data-menu="menu-signup">registriere Dich kostenlos</a> und erstelle Deine eigene Saison-Planung.</font>';
|
$content .= '<font class="show-notloggedin"><a href="#" data-menu="menu-login">Melde Dich an</a> oder <a href="#" data-menu="menu-signup">registriere Dich kostenlos</a> und erstelle Deine eigene Saison-Planung.</font>';
|
||||||
$content .= '</p>';
|
$content .= '</p>';
|
||||||
|
|
||||||
$sp['output'] .= $tpl->load('card', [$content]);
|
$sp['output'] .= $tpl->load('card', [$content]);
|
||||||
|
|
||||||
$sp['scripts'] .= $scripts->load('regatta_plan');
|
$sp['scripts'] .= $scripts->load('regatta_plan');
|
||||||
|
|
||||||
?>
|
?>
|
||||||
|
|||||||
@@ -57,11 +57,18 @@ async function onRegattaClicked(id) {
|
|||||||
// Your Planning
|
// Your Planning
|
||||||
if (planning != null) {
|
if (planning != null) {
|
||||||
$('#menu-item-yourplanning').show();
|
$('#menu-item-yourplanning').show();
|
||||||
|
var boat = null;
|
||||||
|
if (planning.boat != null) {
|
||||||
|
boat = (await dbGetData('boats', planning.boat)).sailnumber;
|
||||||
|
}
|
||||||
var steuermann = null;
|
var steuermann = null;
|
||||||
if (planning.steuermann != null) {
|
if (planning.steuermann != null) {
|
||||||
steuermann = (await dbGetData('sailors', planning.steuermann)).name;
|
steuermann = (await dbGetData('sailors', planning.steuermann)).name;
|
||||||
}
|
}
|
||||||
var crew = [steuermann == null ? '[noch unklar]' : steuermann];
|
var crew = [
|
||||||
|
boat == null ? '[Boot unklar]' : boat,
|
||||||
|
steuermann == null ? '[St.mann unklar]' : steuermann
|
||||||
|
];
|
||||||
crewA = planning.crew.split(',');
|
crewA = planning.crew.split(',');
|
||||||
for (i in crewA) {
|
for (i in crewA) {
|
||||||
var sailor = await dbGetData('sailors', crewA[i]);
|
var sailor = await dbGetData('sailors', crewA[i]);
|
||||||
@@ -107,7 +114,7 @@ async function onRegattaClicked(id) {
|
|||||||
}
|
}
|
||||||
if ((regatta.extService !== null) && ('entryCount' in extServiceData)) {
|
if ((regatta.extService !== null) && ('entryCount' in extServiceData)) {
|
||||||
$('#badge-regatta-entrylist').text(extServiceData.entryCount);
|
$('#badge-regatta-entrylist').text(extServiceData.entryCount);
|
||||||
$('#menu-item-entrylist').attr('href', extServiceGetLink(regatta.extService, 'entrylist', extServiceData.eventId)); // TODO
|
$('#menu-item-entrylist').attr('href', extServiceGetLink(regatta.extService, 'entrylist', extServiceData.eventId, extServiceData.classId)); // TODO
|
||||||
$('#menu-item-entrylist').show();
|
$('#menu-item-entrylist').show();
|
||||||
} else {
|
} else {
|
||||||
$('#menu-item-entrylist').hide();
|
$('#menu-item-entrylist').hide();
|
||||||
@@ -187,7 +194,7 @@ async function onRegattaClicked(id) {
|
|||||||
$('#badge-regatta-meldung').addClass('bg-highlight').removeClass('bg-green2-dark bg-red2-dark bg-yellow2-dark');
|
$('#badge-regatta-meldung').addClass('bg-highlight').removeClass('bg-green2-dark bg-red2-dark bg-yellow2-dark');
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
$('#badge-regatta-meldung').text('Meldeschluss abgelaufen');
|
$('#badge-regatta-meldung').text('Meldeschluss abgelaufen, Nachmeldung möglich');
|
||||||
$('#badge-regatta-meldung').addClass('bg-highlight').removeClass('bg-green2-dark bg-red2-dark bg-yellow2-dark');
|
$('#badge-regatta-meldung').addClass('bg-highlight').removeClass('bg-green2-dark bg-red2-dark bg-yellow2-dark');
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
|||||||
@@ -178,6 +178,9 @@ var siteScript = async function() {
|
|||||||
var club = null;
|
var club = null;
|
||||||
if (entry['club'] != null)
|
if (entry['club'] != null)
|
||||||
club = await dbGetData('clubs', entry['club']);
|
club = await dbGetData('clubs', entry['club']);
|
||||||
|
if (entry.planning.boat !== null) {
|
||||||
|
entry.planning.boat = (await dbGetData('boats', entry.planning.boat)).sailnumber;
|
||||||
|
}
|
||||||
if (entry.planning.steuermann !== null) {
|
if (entry.planning.steuermann !== null) {
|
||||||
entry.planning.steuermann = (await dbGetData('sailors', entry.planning.steuermann)).name;
|
entry.planning.steuermann = (await dbGetData('sailors', entry.planning.steuermann)).name;
|
||||||
}
|
}
|
||||||
@@ -197,6 +200,7 @@ var siteScript = async function() {
|
|||||||
row.keywords.push(entry['name']);
|
row.keywords.push(entry['name']);
|
||||||
if (entry['number'] != null) row.keywords.push(entry['number']);
|
if (entry['number'] != null) row.keywords.push(entry['number']);
|
||||||
if (club != null) row.keywords.push(club['kurz'], club['name']);
|
if (club != null) row.keywords.push(club['kurz'], club['name']);
|
||||||
|
if (entry.planning.boat != null) row.keywords.push(entry.planning.boat);
|
||||||
if (entry.planning.steuermann != null) row.keywords.push(entry.planning.steuermann);
|
if (entry.planning.steuermann != null) row.keywords.push(entry.planning.steuermann);
|
||||||
for (c in entry.planning.crew) row.keywords.push(entry.planning.crew[c]);
|
for (c in entry.planning.crew) row.keywords.push(entry.planning.crew[c]);
|
||||||
|
|
||||||
|
|||||||
@@ -141,37 +141,6 @@ async function sailorsSearch() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
async function initSailors() {
|
|
||||||
sailors = [];
|
|
||||||
known = [];
|
|
||||||
var plannings = await dbGetDataIndex('plannings', 'user', USER_ID);
|
|
||||||
knownIds = {};
|
|
||||||
for (var p in plannings) {
|
|
||||||
p = plannings[p];
|
|
||||||
if (p.steuermann !== null) knownIds[p.steuermann] = true;
|
|
||||||
var crew = p.crew.split(',');
|
|
||||||
for (var c in crew) {
|
|
||||||
c = crew[c];
|
|
||||||
if (c != '') knownIds[c] = true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
var dbSailors = await dbGetData('sailors');
|
|
||||||
dbSailors.sort(function(a,b){
|
|
||||||
return a.name.localeCompare(b.name);
|
|
||||||
});
|
|
||||||
for (var s in dbSailors) {
|
|
||||||
var item = '<a class="item-sailor-search" onclick="sailorSelected(' + dbSailors[s].id + ')">';
|
|
||||||
item += '<span>' + dbSailors[s].name + '</span>';
|
|
||||||
item += '<i class="fa fa-angle-right"></i>';
|
|
||||||
item += '</a>';
|
|
||||||
sailors.push({
|
|
||||||
keywords: [dbSailors[s].name],
|
|
||||||
content: item
|
|
||||||
});
|
|
||||||
if (dbSailors[s].id in knownIds) known.push(item);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
async function planningChangeCrew(sid = null) {
|
async function planningChangeCrew(sid = null) {
|
||||||
if (sid !== null) {
|
if (sid !== null) {
|
||||||
showLoader();
|
showLoader();
|
||||||
@@ -230,6 +199,136 @@ async function planningChangeSteuermann() {
|
|||||||
$('#input-edit-search').focus();
|
$('#input-edit-search').focus();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var boats = [];
|
||||||
|
var boatKnownIds = [];
|
||||||
|
var boatKnown = [];
|
||||||
|
|
||||||
|
async function boatSelected(bid) {
|
||||||
|
$('#menu-boat').hideMenu();
|
||||||
|
showLoader();
|
||||||
|
var rid = $('#switch-planning-include').data('regatta');
|
||||||
|
var action = 'planning_set_boat';
|
||||||
|
// add boat
|
||||||
|
var auth = {
|
||||||
|
id: localStorage.getItem('auth_id'),
|
||||||
|
hash: localStorage.getItem('auth_hash')
|
||||||
|
}
|
||||||
|
$.ajax({
|
||||||
|
url: QUERY_URL + action,
|
||||||
|
method: 'POST',
|
||||||
|
data: {
|
||||||
|
auth: auth,
|
||||||
|
regatta: rid,
|
||||||
|
boat: bid
|
||||||
|
},
|
||||||
|
error: function (xhr, status, error) {
|
||||||
|
if (xhr.status == 401) {
|
||||||
|
log('authentification failed');
|
||||||
|
toastError('Authentifizierung fehlgeschlagen. Versuche es erneut.');
|
||||||
|
} else if (xhr.status == 0) {
|
||||||
|
toastError('Du bist momentan offline.<br>Stelle eine Internetverbindung her, um die Änderungen zu speichern');
|
||||||
|
} else {
|
||||||
|
log(action + ': unbekannter Fehler', status, error);
|
||||||
|
log(xhr);
|
||||||
|
toastError('Ein unbekannter Fehler ist aufgetreten. Bitte versuche es noch einmal', 5000);
|
||||||
|
}
|
||||||
|
hideLoader();
|
||||||
|
},
|
||||||
|
success: async function (data, status, xhr) {
|
||||||
|
await sync();
|
||||||
|
if ((bid === null) || (bid in boatKnownIds)) {
|
||||||
|
planningEdit(rid);
|
||||||
|
hideLoader();
|
||||||
|
} else {
|
||||||
|
location.reload();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
async function boatsSearch() {
|
||||||
|
$('.item-boat-search').remove();
|
||||||
|
var item = '<a class="item-boat-search" onclick="boatSelected(null)">';
|
||||||
|
item += '<span style="font-style:italic;">noch unklar</span>';
|
||||||
|
item += '<i class="fa fa-angle-right"></i>';
|
||||||
|
item += '</a>';
|
||||||
|
$('#menu-boat').find('.content').find('.list-group').append(item);
|
||||||
|
if ($('#input-edit-boat-search').val().length == 0) {
|
||||||
|
boatKnown.forEach(function (entry) {
|
||||||
|
$('#menu-boat').find('.content').find('.list-group').append(entry);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
if ($('#input-edit-boat-search').val().length >= 3) {
|
||||||
|
boats.forEach(function (entry) {
|
||||||
|
if (search($('#input-edit-boat-search').val(), entry.keywords)) {
|
||||||
|
$('#menu-boat').find('.content').find('.list-group').append(entry.content);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
var item = '<p class="item-boat-search">Zum Suchen mindestens 3 Zeichen eingeben</p>';
|
||||||
|
$('#menu-boat').find('.content').find('.list-group').append(item);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
async function planningChangeBoat() {
|
||||||
|
$('#input-edit-boat-search').val('').trigger('focusin').trigger('focusout');
|
||||||
|
boatsSearch();
|
||||||
|
$('#menu-edit').hideMenu();
|
||||||
|
$('#menu-boat').find('.menu-title').find('h1').text('Boot bearbeiten');
|
||||||
|
$('#menu-boat').showMenu();
|
||||||
|
$('#input-edit-boat-search').focus();
|
||||||
|
}
|
||||||
|
|
||||||
|
async function initBoatsSailors() {
|
||||||
|
boats = [];
|
||||||
|
sailors = [];
|
||||||
|
boatKnown = [];
|
||||||
|
known = [];
|
||||||
|
var plannings = await dbGetDataIndex('plannings', 'user', USER_ID);
|
||||||
|
boatKnownIds = {};
|
||||||
|
knownIds = {};
|
||||||
|
for (var p in plannings) {
|
||||||
|
p = plannings[p];
|
||||||
|
if (p.boat !== null) boatKnownIds[p.boat] = true;
|
||||||
|
if (p.steuermann !== null) knownIds[p.steuermann] = true;
|
||||||
|
var crew = p.crew.split(',');
|
||||||
|
for (var c in crew) {
|
||||||
|
c = crew[c];
|
||||||
|
if (c != '') knownIds[c] = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
var dbBoats = await dbGetData('boats');
|
||||||
|
dbBoats.sort(function(a,b){
|
||||||
|
return a.sailnumber.localeCompare(b.sailnumber);
|
||||||
|
});
|
||||||
|
for (var b in dbBoats) {
|
||||||
|
var item = '<a class="item-boat-search" onclick="boatSelected(' + dbBoats[b].id + ')">';
|
||||||
|
item += '<span>' + dbBoats[b].sailnumber + ' - ' + dbBoats[b].name + '</span>';
|
||||||
|
item += '<i class="fa fa-angle-right"></i>';
|
||||||
|
item += '</a>';
|
||||||
|
boats.push({
|
||||||
|
keywords: [dbBoats[b].sailnumber, dbBoats[b].name],
|
||||||
|
content: item
|
||||||
|
});
|
||||||
|
if (dbBoats[b].id in boatKnownIds) boatKnown.push(item);
|
||||||
|
}
|
||||||
|
var dbSailors = await dbGetData('sailors');
|
||||||
|
dbSailors.sort(function(a,b){
|
||||||
|
return a.name.localeCompare(b.name);
|
||||||
|
});
|
||||||
|
for (var s in dbSailors) {
|
||||||
|
var item = '<a class="item-sailor-search" onclick="sailorSelected(' + dbSailors[s].id + ')">';
|
||||||
|
item += '<span>' + dbSailors[s].name + '</span>';
|
||||||
|
item += '<i class="fa fa-angle-right"></i>';
|
||||||
|
item += '</a>';
|
||||||
|
sailors.push({
|
||||||
|
keywords: [dbSailors[s].name],
|
||||||
|
content: item
|
||||||
|
});
|
||||||
|
if (dbSailors[s].id in knownIds) known.push(item);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
async function planningEdit(id) {
|
async function planningEdit(id) {
|
||||||
var regatta = await dbGetData('regattas', id);
|
var regatta = await dbGetData('regattas', id);
|
||||||
|
|
||||||
@@ -249,7 +348,13 @@ async function planningEdit(id) {
|
|||||||
$('#switch-planning-include').data('regatta', id);
|
$('#switch-planning-include').data('regatta', id);
|
||||||
if (planning !== null) {
|
if (planning !== null) {
|
||||||
$('#switch-planning-include').prop('checked', true);
|
$('#switch-planning-include').prop('checked', true);
|
||||||
|
$('#item-boat').show();
|
||||||
$('#item-steuermann').show();
|
$('#item-steuermann').show();
|
||||||
|
if (planning.boat !== null) {
|
||||||
|
$('#item-boat').find('span').text('Boot: ' + (await dbGetData('boats', planning.boat)).sailnumber);
|
||||||
|
} else {
|
||||||
|
$('#item-boat').find('span').html('Boot: <font style="font-style:italic;">noch unklar</font>');
|
||||||
|
}
|
||||||
if (planning.steuermann !== null) {
|
if (planning.steuermann !== null) {
|
||||||
$('#item-steuermann').find('span').text('Am Steuer: ' + (await dbGetData('sailors', planning.steuermann)).name);
|
$('#item-steuermann').find('span').text('Am Steuer: ' + (await dbGetData('sailors', planning.steuermann)).name);
|
||||||
} else {
|
} else {
|
||||||
@@ -274,6 +379,7 @@ async function planningEdit(id) {
|
|||||||
$('#menu-edit').find('.content').find('.list-group').append(item);
|
$('#menu-edit').find('.content').find('.list-group').append(item);
|
||||||
} else {
|
} else {
|
||||||
$('#switch-planning-include').prop('checked', false);
|
$('#switch-planning-include').prop('checked', false);
|
||||||
|
$('#item-boat').hide();
|
||||||
$('#item-steuermann').hide();
|
$('#item-steuermann').hide();
|
||||||
$('.item-crew').remove();
|
$('.item-crew').remove();
|
||||||
}
|
}
|
||||||
@@ -332,9 +438,11 @@ var siteScript = async function() {
|
|||||||
$('#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);
|
||||||
|
$('#item-boat').click(planningChangeBoat);
|
||||||
$('#item-steuermann').click(planningChangeSteuermann);
|
$('#item-steuermann').click(planningChangeSteuermann);
|
||||||
$('#input-edit-search').on('input', sailorsSearch);
|
$('#input-edit-search').on('input', sailorsSearch);
|
||||||
initSailors();
|
$('#input-edit-boat-search').on('input', boatsSearch);
|
||||||
|
initBoatsSailors();
|
||||||
}
|
}
|
||||||
|
|
||||||
today = getToday();
|
today = getToday();
|
||||||
@@ -393,6 +501,9 @@ var siteScript = async function() {
|
|||||||
if (entry['club'] != null)
|
if (entry['club'] != null)
|
||||||
club = await dbGetData('clubs', entry['club']);
|
club = await dbGetData('clubs', entry['club']);
|
||||||
if (entry.planning !== null) {
|
if (entry.planning !== null) {
|
||||||
|
if (entry.planning.boat !== null) {
|
||||||
|
entry.planning.boat = (await dbGetData('boats', entry.planning.boat)).sailnumber;
|
||||||
|
}
|
||||||
if (entry.planning.steuermann !== null) {
|
if (entry.planning.steuermann !== null) {
|
||||||
entry.planning.steuermann = (await dbGetData('sailors', entry.planning.steuermann)).name;
|
entry.planning.steuermann = (await dbGetData('sailors', entry.planning.steuermann)).name;
|
||||||
}
|
}
|
||||||
@@ -488,10 +599,15 @@ var siteScript = async function() {
|
|||||||
|
|
||||||
// ZEILE 5
|
// ZEILE 5
|
||||||
row.content += '<div>';
|
row.content += '<div>';
|
||||||
row.content += '<div>' + (entry.planning.steuermann !== null ? entry.planning.steuermann : 'noch unklar') + '</div>';
|
row.content += '<div>' + (entry.planning.boat !== null ? entry.planning.boat : '<i>Boot unklar</i>') + '</div>';
|
||||||
row.content += '</div>';
|
row.content += '</div>';
|
||||||
|
|
||||||
// ZEILE 6...
|
// ZEILE 6
|
||||||
|
row.content += '<div>';
|
||||||
|
row.content += '<div>' + (entry.planning.steuermann !== null ? entry.planning.steuermann : '<i>St.mann unklar</i>') + '</div>';
|
||||||
|
row.content += '</div>';
|
||||||
|
|
||||||
|
// ZEILE 7...
|
||||||
for (var i in entry.planning.crew) {
|
for (var i in entry.planning.crew) {
|
||||||
row.content += '<div>';
|
row.content += '<div>';
|
||||||
row.content += '<div>' + entry.planning.crew[i] + '</div>';
|
row.content += '<div>' + entry.planning.crew[i] + '</div>';
|
||||||
|
|||||||
@@ -124,6 +124,9 @@ var siteScript = async function() {
|
|||||||
var club = null;
|
var club = null;
|
||||||
if (entry['club'] != null)
|
if (entry['club'] != null)
|
||||||
club = await dbGetData('clubs', entry['club']);
|
club = await dbGetData('clubs', entry['club']);
|
||||||
|
if (entry.planning.boat !== null) {
|
||||||
|
entry.planning.boat = (await dbGetData('boats', entry.planning.boat)).sailnumber;
|
||||||
|
}
|
||||||
if (entry.planning.steuermann !== null) {
|
if (entry.planning.steuermann !== null) {
|
||||||
entry.planning.steuermann = (await dbGetData('sailors', entry.planning.steuermann)).name;
|
entry.planning.steuermann = (await dbGetData('sailors', entry.planning.steuermann)).name;
|
||||||
}
|
}
|
||||||
@@ -143,6 +146,7 @@ var siteScript = async function() {
|
|||||||
row.keywords.push(entry['name']);
|
row.keywords.push(entry['name']);
|
||||||
if (entry['number'] != null) row.keywords.push(entry['number']);
|
if (entry['number'] != null) row.keywords.push(entry['number']);
|
||||||
if (club != null) row.keywords.push(club['kurz'], club['name']);
|
if (club != null) row.keywords.push(club['kurz'], club['name']);
|
||||||
|
if (entry.planning.boat != null) row.keywords.push(entry.planning.boat);
|
||||||
if (entry.planning.steuermann != null) row.keywords.push(entry.planning.steuermann);
|
if (entry.planning.steuermann != null) row.keywords.push(entry.planning.steuermann);
|
||||||
for (c in entry.planning.crew) row.keywords.push(entry.planning.crew[c]);
|
for (c in entry.planning.crew) row.keywords.push(entry.planning.crew[c]);
|
||||||
|
|
||||||
@@ -215,10 +219,15 @@ var siteScript = async function() {
|
|||||||
|
|
||||||
// ZEILE 5
|
// ZEILE 5
|
||||||
row.content += '<div>';
|
row.content += '<div>';
|
||||||
row.content += '<div>' + (entry.planning.steuermann !== null ? entry.planning.steuermann : 'noch unklar') + '</div>';
|
row.content += '<div>' + (entry.planning.boat !== null ? entry.planning.boat : '<i>Boot unklar</i>') + '</div>';
|
||||||
row.content += '</div>';
|
row.content += '</div>';
|
||||||
|
|
||||||
// ZEILE 6...
|
// ZEILE 6
|
||||||
|
row.content += '<div>';
|
||||||
|
row.content += '<div>' + (entry.planning.steuermann !== null ? entry.planning.steuermann : '<i>St.mann unklar</i>') + '</div>';
|
||||||
|
row.content += '</div>';
|
||||||
|
|
||||||
|
// ZEILE 7...
|
||||||
for (var i in entry.planning.crew) {
|
for (var i in entry.planning.crew) {
|
||||||
row.content += '<div>';
|
row.content += '<div>';
|
||||||
row.content += '<div>' + entry.planning.crew[i] + '</div>';
|
row.content += '<div>' + entry.planning.crew[i] + '</div>';
|
||||||
|
|||||||
@@ -14,7 +14,7 @@ var siteScript = async function() {
|
|||||||
var dateFrom = parseDate(regatta['date']);
|
var dateFrom = parseDate(regatta['date']);
|
||||||
var dateTo = parseDate(regatta['date']);
|
var dateTo = parseDate(regatta['date']);
|
||||||
dateTo.setDate(dateTo.getDate() + Math.max(parseInt(regatta['length']) - 1, 0));
|
dateTo.setDate(dateTo.getDate() + Math.max(parseInt(regatta['length']) - 1, 0));
|
||||||
|
|
||||||
$('#h1-title').text(regatta.name);
|
$('#h1-title').text(regatta.name);
|
||||||
if (regatta.length < 1) {
|
if (regatta.length < 1) {
|
||||||
if (formatDate('d.m', dateFrom) == '01.01') {
|
if (formatDate('d.m', dateFrom) == '01.01') {
|
||||||
@@ -25,7 +25,7 @@ var siteScript = async function() {
|
|||||||
} else {
|
} else {
|
||||||
$('#p-title').html(formatDate('d.m.Y', dateFrom) + ' - ' + formatDate('d.m.Y', dateTo));
|
$('#p-title').html(formatDate('d.m.Y', dateFrom) + ' - ' + formatDate('d.m.Y', dateTo));
|
||||||
}
|
}
|
||||||
|
|
||||||
var plannings = await dbGetDataIndex('plannings', 'regatta', regatta.id);
|
var plannings = await dbGetDataIndex('plannings', 'regatta', regatta.id);
|
||||||
if (plannings.length > 0) {
|
if (plannings.length > 0) {
|
||||||
$('#table-plannings').show();
|
$('#table-plannings').show();
|
||||||
@@ -33,17 +33,23 @@ var siteScript = async function() {
|
|||||||
var tbody = '';
|
var tbody = '';
|
||||||
for (var p in plannings) {
|
for (var p in plannings) {
|
||||||
var planning = plannings[p];
|
var planning = plannings[p];
|
||||||
|
|
||||||
tbody += '<tr>';
|
tbody += '<tr>';
|
||||||
|
|
||||||
tbody += '<td>' + (await dbGetData('users', planning.user)).username + '</td>';
|
tbody += '<td>' + (await dbGetData('users', planning.user)).username + '</td>';
|
||||||
|
|
||||||
|
if (planning.boat != null) {
|
||||||
|
tbody += '<td>' + (await dbGetData('boats', planning.boat)).sailnumber + '</td>';
|
||||||
|
} else {
|
||||||
|
tbody += '<td>(noch unklar)</td>';
|
||||||
|
}
|
||||||
|
|
||||||
if (planning.steuermann != null) {
|
if (planning.steuermann != null) {
|
||||||
tbody += '<td>' + (await dbGetData('sailors', planning.steuermann)).name + '</td>';
|
tbody += '<td>' + (await dbGetData('sailors', planning.steuermann)).name + '</td>';
|
||||||
} else {
|
} else {
|
||||||
tbody += '<td>(noch unklar)</td>';
|
tbody += '<td>(noch unklar)</td>';
|
||||||
}
|
}
|
||||||
|
|
||||||
var crew = [];
|
var crew = [];
|
||||||
var cr = planning.crew.split(',');
|
var cr = planning.crew.split(',');
|
||||||
for (c in cr) {
|
for (c in cr) {
|
||||||
@@ -51,7 +57,7 @@ var siteScript = async function() {
|
|||||||
if (s != null) crew.push(s.name);
|
if (s != null) crew.push(s.name);
|
||||||
}
|
}
|
||||||
tbody += '<td>' + crew.join('<br>') + '</td>';
|
tbody += '<td>' + crew.join('<br>') + '</td>';
|
||||||
|
|
||||||
tbody += '</tr>';
|
tbody += '</tr>';
|
||||||
}
|
}
|
||||||
$('#table-plannings').find('tbody').html(tbody);
|
$('#table-plannings').find('tbody').html(tbody);
|
||||||
@@ -60,6 +66,6 @@ var siteScript = async function() {
|
|||||||
$('#p-info').show();
|
$('#p-info').show();
|
||||||
$('#table-plannings').hide();
|
$('#table-plannings').hide();
|
||||||
}
|
}
|
||||||
|
|
||||||
hideLoader();
|
hideLoader();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
define('PWA_VERSION', '1.11.5');
|
define('PWA_VERSION', '1.11.6');
|
||||||
|
|
||||||
?>
|
?>
|
||||||
|
|||||||
Reference in New Issue
Block a user