Compare commits
5 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
2bf623733d | ||
|
|
60caf85daa | ||
|
|
eddcff9e39 | ||
|
|
967ad50755 | ||
|
|
a437d05647 |
@@ -12,7 +12,7 @@ RewriteRule ^(.*)server(.*)$ / [R=301,L,NC]
|
||||
### CONTENT LOADER
|
||||
|
||||
# Keep this subfolders untouched
|
||||
RewriteRule ^(api)($|/) - [L]
|
||||
#RewriteRule ^(api)($|/) - [L]
|
||||
|
||||
# Show site
|
||||
RewriteRule ^([^\.]*)$ index.php?request=$1 [QSA]
|
||||
@@ -1,8 +0,0 @@
|
||||
RewriteEngine on
|
||||
# root directory:
|
||||
RewriteBase /projects/RegattenApp/api/
|
||||
|
||||
|
||||
|
||||
# Show site
|
||||
RewriteRule ^(.*)$ index.php?request=$1 [QSA]
|
||||
@@ -1,37 +0,0 @@
|
||||
<?php
|
||||
|
||||
// DATABASE Credentials
|
||||
define('DB_USER', 'regattenwebsite');
|
||||
define('DB_PASS', 'RBpOv4YYtZKWIGcN');
|
||||
define('DB_HOST', 'localhost');
|
||||
define('DB_DATABASE', 'regattenwebsite');
|
||||
|
||||
define('DB_CHANGE_TIME', true);
|
||||
define('DB_USE_UTF8', true); // use utf-8 in DB requests
|
||||
|
||||
// DATABASE Table names
|
||||
define('DB_TABLE_USERS', 'users');
|
||||
define('DB_TABLE_LOGINS', 'logins');
|
||||
define('DB_TABLE_KEEPLOGGEDIN', 'keeploggedin');
|
||||
define('DB_TABLE_RESET', 'rstpw');
|
||||
|
||||
define('DB_TABLE_CLUBS', 'regatta_clubs');
|
||||
define('DB_TABLE_SUFFIX_BOATS', '_boats');
|
||||
define('DB_TABLE_SUFFIX_SAILORS', '_sailors');
|
||||
define('DB_TABLE_SUFFIX_PLANNING', '_planning');
|
||||
define('DB_TABLE_SUFFIX_REGATTAS', '_regattas');
|
||||
define('DB_TABLE_SUFFIX_RESULTS', '_results');
|
||||
define('DB_TABLE_TRIM_BOATS', 'trim_boats');
|
||||
define('DB_TABLE_TRIM_USERS', 'trim_users');
|
||||
define('DB_TABLE_TRIM_TRIMS', 'trim_trims');
|
||||
define('DB_TABLE_NEWS', 'news');
|
||||
define('DB_TABLE_UPDATETIMES', '_updatetimes');
|
||||
|
||||
// OUTGOING MAILS - Credentials for outgoing mails
|
||||
define('MAIL_SMTP_HOST', 'ssl://ostertun.net'); // SMTP Server address
|
||||
define('MAIL_SMTP_PORT', 465); // port to use
|
||||
define('MAIL_FROM_ADDRESS', 'no-reply@regatten.net'); // address to send mails from
|
||||
define('MAIL_USERNAME', MAIL_FROM_ADDRESS); // if true: username
|
||||
define('MAIL_PASSWORD', 'pVc05j_3'); // & password
|
||||
|
||||
?>
|
||||
157
api/database.php
157
api/database.php
@@ -1,157 +0,0 @@
|
||||
<?php
|
||||
|
||||
/*
|
||||
|
||||
Mysql Database Support
|
||||
----------------------
|
||||
|
||||
Required defines:
|
||||
- DB_HOST (STRING)
|
||||
- DB_USER (STRING)
|
||||
- DB_PASS (STRING)
|
||||
- DB_DATABASE (STRING)
|
||||
- DB_USE_UTF8 (BOOL)
|
||||
- DB_CHANGE_TIME (BOOL)
|
||||
|
||||
Required functions:
|
||||
- logE (in /_global/log.php)
|
||||
|
||||
*/
|
||||
|
||||
$mysqli = mysqli_connect(DB_HOST, DB_USER, DB_PASS);
|
||||
|
||||
if ($mysqli === false) {
|
||||
logE("database", "Could not connect to database\n" . mysqli_connect_error);
|
||||
die('Error: Could not connect to database');
|
||||
}
|
||||
|
||||
mysqli_select_db($mysqli, DB_DATABASE);
|
||||
if (DB_USE_UTF8) {
|
||||
mysqli_set_charset($mysqli, 'utf8');
|
||||
}
|
||||
|
||||
function db_get_data($mysqli, $table, $fields = '*', $where = false, $limit = false) {
|
||||
$rest = '';
|
||||
if ($where != false) {
|
||||
$rest .= ' WHERE ' . $where;
|
||||
}
|
||||
if ($limit != false) {
|
||||
$rest .= sprintf(' LIMIT %d', $limit);
|
||||
}
|
||||
$query = 'SELECT ' . $fields . ' FROM ' . mysqli_real_escape_string($mysqli, $table) . $rest . ';';
|
||||
$response = mysqli_query($mysqli, $query);
|
||||
|
||||
if ($response !== false) {
|
||||
$result = array();
|
||||
if ($response->num_rows > 0) {
|
||||
$i = 0;
|
||||
while ($row = $response->fetch_assoc()) {
|
||||
if (isset($row['id'])) {
|
||||
$id = $row['id'];
|
||||
} else {
|
||||
$id = $i;
|
||||
$i ++;
|
||||
}
|
||||
foreach ($row as $key => $value) {
|
||||
$result[$id][$key] = $value;
|
||||
}
|
||||
}
|
||||
}
|
||||
return $result;
|
||||
} else {
|
||||
logE("database", "get_data\nInvalid request\n" . $query . "\n" . mysqli_error($mysqli));
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
function db_update_data($mysqli, $table, $data, $where, $limit = false) {
|
||||
$rest = '';
|
||||
if ($where != false) {
|
||||
$rest .= ' WHERE ' . $where;
|
||||
}
|
||||
if ($limit != false) {
|
||||
$rest .= sprintf(' LIMIT %d', $limit);
|
||||
}
|
||||
$set = '';
|
||||
$first = true;
|
||||
foreach ($data as $key => $value) {
|
||||
if ($first) {
|
||||
$first = false;
|
||||
} else {
|
||||
$set .= ', ';
|
||||
}
|
||||
if ($value === null) {
|
||||
$set .= '`' . mysqli_real_escape_string($mysqli, $key) . '`=NULL';
|
||||
} else {
|
||||
$set .= '`' . mysqli_real_escape_string($mysqli, $key) . '`="' . mysqli_real_escape_string($mysqli, $value) . '"';
|
||||
}
|
||||
}
|
||||
if (defined('DB_CHANGE_TIME')) $set .= ', `changed`=NOW()';
|
||||
$query = 'UPDATE ' . mysqli_real_escape_string($mysqli, $table) . ' SET ' . $set . $rest . ';';
|
||||
$response = mysqli_query($mysqli, $query);
|
||||
|
||||
if ($response === false) {
|
||||
logE("database", "update_data\nInvalid request\n" . $query . "\n" . mysqli_error($mysqli));
|
||||
} elseif (defined('DB_CHANGE_TIME')) {
|
||||
mysqli_query($mysqli, 'UPDATE `_updatetimes` SET `update`=NOW() WHERE `table`="' . mysqli_real_escape_string($mysqli, $table) . '";');
|
||||
}
|
||||
|
||||
return $response;
|
||||
}
|
||||
|
||||
function db_insert_data($mysqli, $table, $data) {
|
||||
$fields = '';
|
||||
$values = '';
|
||||
$first = true;
|
||||
foreach ($data as $key => $value) {
|
||||
if ($first) {
|
||||
$first = false;
|
||||
} else {
|
||||
$fields .= ', ';
|
||||
$values .= ', ';
|
||||
}
|
||||
$fields .= '`' . mysqli_real_escape_string($mysqli, $key) . '`';
|
||||
if ($value === null) {
|
||||
$values .= 'NULL';
|
||||
} else {
|
||||
$values .= '"' . mysqli_real_escape_string($mysqli, $value) . '"';
|
||||
}
|
||||
}
|
||||
if (defined('DB_CHANGE_TIME')) {
|
||||
$fields .= ', `changed`';
|
||||
$values .= ', NOW()';
|
||||
}
|
||||
$query = 'INSERT INTO `' . mysqli_real_escape_string($mysqli, $table) . '` (' . $fields . ') VALUES (' . $values . ');';
|
||||
$response = mysqli_query($mysqli, $query);
|
||||
if ($response === false) {
|
||||
logE("database", "insert_data\nInvalid request\n" . $query . "\n" . mysqli_error($mysqli));
|
||||
} else {
|
||||
$response = mysqli_insert_id($mysqli);
|
||||
if (defined('DB_CHANGE_TIME')) {
|
||||
mysqli_query($mysqli, 'UPDATE `_updatetimes` SET `update`=NOW() WHERE `table`="' . mysqli_real_escape_string($mysqli, $table) . '";');
|
||||
}
|
||||
}
|
||||
|
||||
return $response;
|
||||
}
|
||||
|
||||
function db_delete_data($mysqli, $table, $where, $limit = false) {
|
||||
$rest = '';
|
||||
if ($where != false) {
|
||||
$rest .= ' WHERE ' . $where;
|
||||
}
|
||||
if ($limit != false) {
|
||||
$rest .= sprintf(' LIMIT %d', $limit);
|
||||
}
|
||||
$query = 'DELETE FROM `' . mysqli_real_escape_string($mysqli, $table) . '`' . $rest . ';';
|
||||
$response = mysqli_query($mysqli, $query);
|
||||
if ($response === false) {
|
||||
logE("database", "delete_data\nInvalid request\n" . $query . "\n" . mysqli_error($mysqli));
|
||||
} elseif (defined('DB_CHANGE_TIME')) {
|
||||
mysqli_query($mysqli, 'UPDATE `_updatetimes` SET `update`=NOW() WHERE `table`="' . mysqli_real_escape_string($mysqli, $table) . '";');
|
||||
}
|
||||
|
||||
return $response;
|
||||
}
|
||||
|
||||
?>
|
||||
@@ -1,450 +0,0 @@
|
||||
<?php
|
||||
|
||||
function get_db_entry($mysqli, $table, $id = false, $order = false) {
|
||||
if ($id === false) {
|
||||
return db_get_data($mysqli, $table, '*', ($order !== false ? ('1=1 ORDER BY ' . $order) : false));
|
||||
} else {
|
||||
$result = db_get_data($mysqli, $table, '*', '`id` = "' . mysqli_real_escape_string($mysqli, $id) . '"', 1);
|
||||
if (($result === false) or (count($result) != 1))
|
||||
return false;
|
||||
else
|
||||
return array_values($result)[0];
|
||||
}
|
||||
}
|
||||
|
||||
function get_club($mysqli, $id = false) {
|
||||
return get_db_entry($mysqli, DB_TABLE_CLUBS, $id, '`kurz` ASC');
|
||||
}
|
||||
|
||||
function get_boat($mysqli, $id = false) {
|
||||
return get_db_entry($mysqli, BOATCLASS . DB_TABLE_SUFFIX_BOATS, $id, '`sailnumber` ASC');
|
||||
}
|
||||
|
||||
function get_sailor($mysqli, $id = false) {
|
||||
return get_db_entry($mysqli, BOATCLASS . DB_TABLE_SUFFIX_SAILORS, $id, '`name` ASC');
|
||||
}
|
||||
|
||||
function get_planning($mysqli, $userId = false, $regattaId = false) {
|
||||
$where = '';
|
||||
$limit = false;
|
||||
if ($userId !== false) {
|
||||
$where .= '(`user`="' . mysqli_real_escape_string($mysqli, $userId) . '")';
|
||||
}
|
||||
if (($userId !== false) and ($regattaId !== false)) {
|
||||
$where .= ' AND ';
|
||||
$limit = 1;
|
||||
}
|
||||
if ($regattaId !== false) {
|
||||
$where .= '(`regatta`="' . mysqli_real_escape_string($mysqli, $regattaId) . '")';
|
||||
}
|
||||
if ($where == '') $where = false;
|
||||
if ($limit === false) {
|
||||
return db_get_data($mysqli, BOATCLASS . DB_TABLE_SUFFIX_PLANNING, '*', $where);
|
||||
} else {
|
||||
$result = db_get_data($mysqli, BOATCLASS . DB_TABLE_SUFFIX_PLANNING, '*', $where, 1);
|
||||
if (($result === false) or (count($result) != 1))
|
||||
return false;
|
||||
else
|
||||
return array_values($result)[0];
|
||||
}
|
||||
}
|
||||
|
||||
function get_regatta($mysqli, $id = false) {
|
||||
return get_db_entry($mysqli, BOATCLASS . DB_TABLE_SUFFIX_REGATTAS, $id, '`date` ASC');
|
||||
}
|
||||
|
||||
function get_result($mysqli, $regattaId = false) {
|
||||
if ($regattaId === false) {
|
||||
return db_get_data($mysqli, BOATCLASS . DB_TABLE_SUFFIX_RESULTS);
|
||||
} else {
|
||||
return db_get_data($mysqli, BOATCLASS . DB_TABLE_SUFFIX_RESULTS, '*', '`regatta` = "' . mysqli_real_escape_string($mysqli, $regattaId) . '"');
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
function get_regattas_range($mysqli, $from, $to) {
|
||||
return db_get_data($mysqli, BOATCLASS . DB_TABLE_SUFFIX_REGATTAS, '*', '(`date` >= "' . date('Y-m-d', $from) . '") AND (`date` <= "' . date('Y-m-d', $to) . '") ORDER BY `date`');
|
||||
}
|
||||
|
||||
function get_regatta_years($mysqli) {
|
||||
$query = 'SELECT DISTINCT(YEAR(`date`)) as year FROM ' . BOATCLASS . DB_TABLE_SUFFIX_REGATTAS . ' ORDER BY `date`;';
|
||||
$response = mysqli_query($mysqli, $query);
|
||||
|
||||
if ($response !== false) {
|
||||
$result = array();
|
||||
if ($response->num_rows > 0) {
|
||||
while ($row = $response->fetch_assoc()) {
|
||||
$result[] = $row['year'];
|
||||
}
|
||||
}
|
||||
return $result;
|
||||
} else {
|
||||
logE("functions", "get_data\nInvalid request\n" . $query . "\n" . mysqli_error($mysqli));
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
function get_result_calculated($mysqli, $regatta_id) {
|
||||
$regatta = get_regatta($mysqli, $regatta_id);
|
||||
if ($regatta === false) {
|
||||
return false;
|
||||
}
|
||||
$results = get_result($mysqli, $regatta_id);
|
||||
if ($results !== false) {
|
||||
|
||||
// *** Replace , with .
|
||||
foreach ($results as $key => $value) {
|
||||
for ($i = 1; $i <= $regatta['races']; $i ++) {
|
||||
$results[$key]['race' . $i] = str_replace(',', '.', $results[$key]['race' . $i]);
|
||||
}
|
||||
}
|
||||
|
||||
// *** Calculation ***
|
||||
$gemeldet = count($results);
|
||||
|
||||
$sortarray = array();
|
||||
foreach ($results as $key => $value) {
|
||||
$results[$key]['finished'] = false;
|
||||
$results[$key]['values'] = array();
|
||||
$results[$key]['values_all'] = array();
|
||||
$results[$key]['texts'] = array();
|
||||
$copy = array();
|
||||
for ($i = 1; $i <= $regatta['races']; $i ++) {
|
||||
if (is_numeric($value['race' . $i])) {
|
||||
$results[$key]['values'][$i] = $value['race' . $i];
|
||||
$results[$key]['texts'][$i] = $value['race' . $i];
|
||||
$copy[$i] = $value['race' . $i];
|
||||
$results[$key]['finished'] = true;
|
||||
} else {
|
||||
switch ($value['race' . $i]) {
|
||||
// Nicht gestartet
|
||||
case 'DNC': $results[$key]['values'][$i] = $gemeldet + 1; $copy[$i] = $gemeldet + 1; break; // Did not come
|
||||
case 'DNS': $results[$key]['values'][$i] = $gemeldet + 1; $copy[$i] = $gemeldet + 1; break; // Did not started
|
||||
// Startfehler
|
||||
case 'OCS': $results[$key]['values'][$i] = $gemeldet + 1; $copy[$i] = $gemeldet + 1; /*$results[$key]['finished'] = true;*/ break; // On course site
|
||||
// Muss v. Hand case 'ZFP': $results[$key]['values'][$i] = $gemeldet + 1; $copy[$i] = $gemeldet + 1; $results[$key]['finished'] = true; break; // Z-Flag penalty (20% nach 30.2)
|
||||
case 'UFD': $results[$key]['values'][$i] = $gemeldet + 1; $copy[$i] = $gemeldet + 1; /*$results[$key]['finished'] = true;*/ break; // Uniform Flag Disqualified (disqu. nach 30.3)
|
||||
case 'BFD': $results[$key]['values'][$i] = $gemeldet + 1; $copy[$i] = $gemeldet + 1; /*$results[$key]['finished'] = true;*/ break; // Black Flag Disqualified (disqu. nach 30.4)
|
||||
// Nicht durch Ziel gegangen
|
||||
case 'DNF': $results[$key]['values'][$i] = $gemeldet + 1; $copy[$i] = $gemeldet + 1; break; // Did not finish
|
||||
case 'RET': $results[$key]['values'][$i] = $gemeldet + 1; $copy[$i] = $gemeldet + 1; break; // Retired (Aufgegeben)
|
||||
case 'RAF': $results[$key]['values'][$i] = $gemeldet + 1; $copy[$i] = $gemeldet + 1; /*$results[$key]['finished'] = true;*/ break; // Retired after finish
|
||||
// Disqualifizierun
|
||||
case 'DSQ': $results[$key]['values'][$i] = $gemeldet + 1; $copy[$i] = $gemeldet + 1; /*$results[$key]['finished'] = true;*/ break; // Disqualified
|
||||
case 'DNE': $results[$key]['values'][$i] = $gemeldet + 1; $copy[$i] = -1; /*$results[$key]['finished'] = true;*/ break; // Disqualified, not excludable (disqu. kann nach 90.3(b) nicht gestrichen werden)
|
||||
case 'DGM': $results[$key]['values'][$i] = $gemeldet + 1; $copy[$i] = -2; /*$results[$key]['finished'] = true;*/ break; // Disqualification Gross Missconduct (kann nach 69.1(b)(2) nicht gestr. werden, grobes Fehlverhalten)
|
||||
// Wiedergutmachung
|
||||
// Muss v. Hand case 'RDG': $results[$key]['values'][$i] = $gemeldet + 1; $copy[$i] = $gemeldet + 1; $results[$key]['finished'] = true; break; // Redress given (Wiedergutmachung gewährt)
|
||||
// Strafen
|
||||
// Muss v. Hand case 'SCP': $results[$key]['values'][$i] = $gemeldet + 1; $copy[$i] = $gemeldet + 1; $results[$key]['finished'] = true; break; // Wertungsstrafe nach 44.3(a) (20%)
|
||||
// Muss v. Hand case 'DPI': $results[$key]['values'][$i] = $gemeldet + 1; $copy[$i] = $gemeldet + 1; $results[$key]['finished'] = true; break; // Punktstrafe nach Ermessen der Jury
|
||||
// Unbekannt
|
||||
default: $results[$key]['values'][$i] = 0; $copy[$i] = 0; break;
|
||||
}
|
||||
|
||||
if ($results[$key]['values'][$i] != 0) {
|
||||
$results[$key]['texts'][$i] = $value['race' . $i] . ' (' . $results[$key]['values'][$i] . ')';
|
||||
} else {
|
||||
$results[$key]['texts'][$i] = $value['race' . $i] . ' (Unknown - 0)';
|
||||
}
|
||||
}
|
||||
}
|
||||
$results[$key]['values_all'] = $results[$key]['values'];
|
||||
for ($s = 0; $s < $regatta['streicher']; $s ++) {
|
||||
$max = max($copy);
|
||||
for ($i = 1; $i <= $regatta['races']; $i ++) {
|
||||
if ($copy[$i] == $max) {
|
||||
$copy[$i] = 0;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
$brutto = $netto = 0;
|
||||
for ($i = 1; $i <= $regatta['races']; $i ++) {
|
||||
$brutto += $results[$key]['values_all'][$i];
|
||||
if ($copy[$i] == -1) { $results[$key]['values'][$i] = $gemeldet + 1; }
|
||||
elseif ($copy[$i] == -2) { $results[$key]['values'][$i] = $gemeldet + 1; }
|
||||
else { $results[$key]['values'][$i] = $copy[$i]; }
|
||||
if ($results[$key]['values'][$i] == 0) {
|
||||
$results[$key]['texts'][$i] = '[' . $results[$key]['texts'][$i] . ']';
|
||||
}
|
||||
$netto += $results[$key]['values'][$i];
|
||||
}
|
||||
$results[$key]['brutto'] = $brutto;
|
||||
$results[$key]['netto'] = $netto;
|
||||
|
||||
if ($results[$key]['finished']) {
|
||||
$sortarray[$key] = 0;
|
||||
} else {
|
||||
$sortarray[$key] = 1;
|
||||
}
|
||||
$sortarray[$key] /*.*/= sprintf("%08.2f", $netto);
|
||||
$temp = $results[$key]['values'];
|
||||
sort($temp);
|
||||
$i = 0;
|
||||
foreach ($temp as $val) {
|
||||
if ($i < $regatta['races']) {
|
||||
$sortarray[$key] .= sprintf("%07.2f", $val);
|
||||
}
|
||||
$i ++;
|
||||
}
|
||||
for ($i = $regatta['races']; $i > 0; $i --) {
|
||||
$sortarray[$key] .= sprintf("%07.2f", $results[$key]['values_all'][$i]);
|
||||
}
|
||||
$results[$key]['sortvalue'] = $sortarray[$key];
|
||||
}
|
||||
array_multisort($sortarray, $results);
|
||||
$i = 1;
|
||||
foreach ($results as $key => $value) {
|
||||
if (($i > 1) and ($sortarray[$key] == $sortarray[$lastkey])) {
|
||||
$results[$key]['place'] = $results[$lastkey]['place'];
|
||||
} else {
|
||||
$results[$key]['place'] = $i;
|
||||
}
|
||||
$i ++;
|
||||
$lastkey = $key;
|
||||
}
|
||||
unset ($sortarray);
|
||||
|
||||
return $results;
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
function update_result_cache($mysqli, $regatta_id) {
|
||||
$regatta = get_regatta($mysqli, $regatta_id);
|
||||
if ($regatta === false) return;
|
||||
$results = get_result_calculated($mysqli, $regatta['id']);
|
||||
if ($results === false) return;
|
||||
|
||||
// count finished boats
|
||||
$fb = 0;
|
||||
foreach ($results as $result) {
|
||||
if ($result['finished']) {
|
||||
$fb ++;
|
||||
}
|
||||
}
|
||||
|
||||
db_update_data($mysqli, BOATCLASS . DB_TABLE_SUFFIX_REGATTAS, ['finishedBoats' => $fb], '`id`="' . $regatta['id'] . '"', 1);
|
||||
|
||||
foreach ($results as $result) {
|
||||
if ($fb == 0) {
|
||||
$rlp = 0;
|
||||
} else {
|
||||
$rlp = 100 * $regatta['rlf'] * (($fb + 1 - $result['place']) / $fb);
|
||||
}
|
||||
db_update_data($mysqli, BOATCLASS . DB_TABLE_SUFFIX_RESULTS, ['place' => $result['place'], 'rlp' => $rlp], '`id`="' . $result['id'] . '"', 1);
|
||||
}
|
||||
}
|
||||
|
||||
function get_ranking($mysqli, $from, $to, $jugend = false, $jugstrict = false) {
|
||||
global $rankNoResults, $_CLASSES;
|
||||
$rankNoResults = array();
|
||||
|
||||
$sailors = get_sailor($mysqli);
|
||||
$regattas = get_regattas_range($mysqli, $from, $to);
|
||||
|
||||
if (($sailors !== false) and ($regattas !== false)) {
|
||||
foreach ($sailors as $key => $sailor) {
|
||||
$sailors[$key]['regattas'] = array();
|
||||
$sailors[$key]['tmp_rlp'] = array();
|
||||
}
|
||||
|
||||
foreach ($regattas as $regatta) {
|
||||
$date = strtotime($regatta['date']);
|
||||
|
||||
// regatta has to be min. 2 days to be ranking-regatta
|
||||
if ($regatta['length'] < 2) {
|
||||
continue;
|
||||
}
|
||||
|
||||
$results = get_result($mysqli, $regatta['id']);
|
||||
if ($results === false) {
|
||||
continue;
|
||||
}
|
||||
|
||||
if (count($results) <= 0) {
|
||||
if (strtotime('+' . ($regatta['length']-1) . ' days', $date) <= time()) {
|
||||
if (!$regatta['canceled']) {
|
||||
$rankNoResults[] = $regatta;
|
||||
}
|
||||
}
|
||||
continue;
|
||||
}
|
||||
|
||||
// in one race there must be at least 10 boats started
|
||||
$ok = false;
|
||||
for ($i = 1; $i <= $regatta['races']; $i ++) {
|
||||
$temp = 0;
|
||||
foreach ($results as $result) {
|
||||
if (($result['race' . $i] != 'DNC') and ($result['race' . $i] != 'DNS')) {
|
||||
$temp ++;
|
||||
}
|
||||
}
|
||||
if ($temp >= 10) {
|
||||
$ok = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (!$ok) {
|
||||
continue;
|
||||
}
|
||||
|
||||
$fb = $regatta['finishedBoats'];
|
||||
|
||||
// add regatta to each sailor
|
||||
foreach ($results as $result) {
|
||||
if ($result['rlp'] == 0) {
|
||||
continue;
|
||||
}
|
||||
// check if crew is youth
|
||||
//if ($jugend) {
|
||||
// $crew = explode(',', $result['crew']);
|
||||
// $okay = true;
|
||||
// foreach ($crew as $sailor) {
|
||||
// if (($sailor == '') or !isset($sailors[$sailor])) continue;
|
||||
// $sailor = $sailors[$sailor];
|
||||
// if ((($sailor['year'] !== null) and ($sailor['year'] < (date('Y', $date) - $_CLASSES[BOATCLASS]['youth-age']))) or
|
||||
// (($sailor['year'] === null) and ($jugstrict))) {
|
||||
// $okay = false;
|
||||
// break;
|
||||
// }
|
||||
// }
|
||||
// if (!$okay) continue;
|
||||
//}
|
||||
// calc m
|
||||
if ($regatta['m'] > 0) {
|
||||
$m = $regatta['m'];
|
||||
} elseif ($regatta['races'] <= 4) {
|
||||
$m = $regatta['races'];
|
||||
} else {
|
||||
if (($regatta['length'] > 2) and ($regatta['races'] >= 6)) {
|
||||
$m = 5;
|
||||
} else {
|
||||
$m = 4;
|
||||
}
|
||||
}
|
||||
$rlp = $result['rlp'];
|
||||
$sailors[$result['steuermann']]['regattas'][$regatta['id']] = array(
|
||||
'regatta' => $regatta['id'],
|
||||
'boat' => $result['boat'],
|
||||
'crew' => $result['crew'],
|
||||
'place' => $result['place'],
|
||||
'fb' => $fb,
|
||||
'rlp' => $rlp,
|
||||
'used' => 0,
|
||||
'm' => $m
|
||||
);
|
||||
for ($i = 0; $i < $m; $i ++) {
|
||||
array_push($sailors[$result['steuermann']]['tmp_rlp'], array($regatta['id'], $rlp));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
foreach ($sailors as $key => $sailor) {
|
||||
if ($sailor['german'] == 0) {
|
||||
unset($sailors[$key]);
|
||||
} elseif ($jugend) {
|
||||
if ((($sailor['year'] !== null) and ($sailor['year'] < (date('Y', $to) - $_CLASSES[BOATCLASS]['youth-age']))) or
|
||||
(($sailor['year'] === null) and ($jugstrict))) {
|
||||
unset($sailors[$key]);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
$sortarray = array();
|
||||
|
||||
foreach ($sailors as $key => $sailor) {
|
||||
// sort rlps desc
|
||||
$sort = array();
|
||||
foreach ($sailor['tmp_rlp'] as $key2 => $value) {
|
||||
$sort[$key2] = $value[1];
|
||||
}
|
||||
array_multisort($sort, SORT_DESC, $sailors[$key]['tmp_rlp']);
|
||||
// calc mean. rlp
|
||||
$sum = 0;
|
||||
$cnt = 0;
|
||||
foreach ($sailors[$key]['tmp_rlp'] as $value) {
|
||||
$sum += $value[1];
|
||||
$sailors[$key]['regattas'][$value[0]]['used'] ++;
|
||||
$cnt ++;
|
||||
if ($cnt >= 9) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
unset($sailors[$key]['tmp_rlp']);
|
||||
if ($cnt > 0) {
|
||||
$rlp = $sum / $cnt;
|
||||
$sailors[$key]['rlp'] = $rlp;
|
||||
$sailors[$key]['m'] = $cnt;
|
||||
} else {
|
||||
unset($sailors[$key]);
|
||||
continue;
|
||||
}
|
||||
|
||||
if ($rlp == 0) {
|
||||
$sortarray[$key] = $cnt;
|
||||
} else {
|
||||
$sortarray[$key] = $cnt * 1000 + $rlp;
|
||||
}
|
||||
}
|
||||
array_multisort($sortarray, SORT_DESC, $sailors);
|
||||
unset($sortarray);
|
||||
|
||||
$i = 1;
|
||||
foreach ($sailors as $key => $sailor) {
|
||||
$sailors[$key]['rank'] = $i;
|
||||
$i ++;
|
||||
}
|
||||
|
||||
return $sailors;
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
function get_trim_boat($mysqli, $id = false) {
|
||||
return get_db_entry($mysqli, DB_TABLE_TRIM_BOATS, $id);
|
||||
}
|
||||
|
||||
function get_trim_boat_users($mysqli, $id) {
|
||||
$result = db_get_data($mysqli, DB_TABLE_TRIM_USERS, '*', '`boat` = "' . mysqli_real_escape_string($mysqli, $id) . '"');
|
||||
if ($result === false)
|
||||
return false;
|
||||
else
|
||||
return $result;
|
||||
}
|
||||
|
||||
function get_trim_user_boats($mysqli, $id) {
|
||||
$boats = db_get_data($mysqli, DB_TABLE_TRIM_USERS, '*', '`user` = "' . mysqli_real_escape_string($mysqli, $id) . '"');
|
||||
if ($boats === false) {
|
||||
return false;
|
||||
} else {
|
||||
$result = [];
|
||||
foreach ($boats as $value) {
|
||||
$result[$value['boat']] = get_trim_boat($mysqli, $value['boat']);
|
||||
}
|
||||
return $result;
|
||||
}
|
||||
}
|
||||
|
||||
function trim_is_boat_user($mysqli, $user, $boat) {
|
||||
$res = db_get_data($mysqli, DB_TABLE_TRIM_USERS, '*', '`user` = "' . mysqli_real_escape_string($mysqli, $user) . '" AND `boat` = "' . mysqli_real_escape_string($mysqli, $boat) . '"');
|
||||
return ($res !== false) and (count($res) == 1);
|
||||
}
|
||||
|
||||
function get_trim_trim($mysqli, $id = false) {
|
||||
return get_db_entry($mysqli, DB_TABLE_TRIM_TRIMS, $id);
|
||||
}
|
||||
|
||||
function get_trim_boat_trims($mysqli, $id) {
|
||||
$result = db_get_data($mysqli, DB_TABLE_TRIM_TRIMS, '*', '`boat` = "' . mysqli_real_escape_string($mysqli, $id) . '"');
|
||||
if ($result === false) {
|
||||
return false;
|
||||
} else {
|
||||
return $result;
|
||||
}
|
||||
}
|
||||
|
||||
?>
|
||||
466
api/index.php
466
api/index.php
@@ -1,466 +0,0 @@
|
||||
<?php
|
||||
|
||||
require_once(__DIR__ . '/../server/config.php');
|
||||
require_once(__DIR__ . '/config.php');
|
||||
require_once(__DIR__ . '/../server/log.php');
|
||||
require_once(__DIR__ . '/database.php');
|
||||
require_once(__DIR__ . '/login.php');
|
||||
require_once(__DIR__ . '/functions.php');
|
||||
|
||||
$request = false;
|
||||
if (isset($_GET['request'])) {
|
||||
$request = explode('/', $_GET['request']);
|
||||
}
|
||||
if ($request === false) {
|
||||
$request = array();
|
||||
}
|
||||
if (count($request) >= 1) {
|
||||
$action = array_shift($request);
|
||||
} else {
|
||||
$action = '';
|
||||
}
|
||||
|
||||
define('DONE_OKAY', 0);
|
||||
define('DONE_EMPTY', 1);
|
||||
define('DONE_DATABASE', 2);
|
||||
define('DONE_UNAUTHORIZED', 3);
|
||||
define('DONE_BAD_REQUEST', 4);
|
||||
define('DONE_CONFLICT', 5);
|
||||
define('DONE_SERVER_ERROR', 6);
|
||||
function done($donecode, $content = null) {
|
||||
switch ($donecode) {
|
||||
case DONE_OKAY:
|
||||
header('HTTP/1.0 200 OK');
|
||||
break;
|
||||
case DONE_EMPTY:
|
||||
header('HTTP/1.0 204 No Content');
|
||||
break;
|
||||
case DONE_DATABASE:
|
||||
header('HTTP/1.0 500 Internal Server Error');
|
||||
if ($content === null) {
|
||||
$content = array('error' => 'database error');
|
||||
}
|
||||
break;
|
||||
case DONE_UNAUTHORIZED:
|
||||
header('HTTP/1.0 401 Unauthorized');
|
||||
if ($content === null) {
|
||||
$content = array('error' => 'unauthorized');
|
||||
}
|
||||
break;
|
||||
case DONE_BAD_REQUEST:
|
||||
header('HTTP/1.0 400 Bad Request');
|
||||
if ($content === null) {
|
||||
$content = array('error' => 'bad request');
|
||||
}
|
||||
break;
|
||||
case DONE_CONFLICT:
|
||||
header('HTTP/1.0 409 Conflict');
|
||||
break;
|
||||
case DONE_SERVER_ERROR:
|
||||
header('HTTP/1.0 500 Internal Server Error');
|
||||
break;
|
||||
default:
|
||||
header('HTTP/1.0 500 Internal Server Error');
|
||||
break;
|
||||
}
|
||||
header('Content-Type: application/json');
|
||||
if ($content !== null) {
|
||||
echo json_encode($content);
|
||||
} else {
|
||||
echo '{ }';
|
||||
}
|
||||
exit;
|
||||
}
|
||||
|
||||
if (isset($_REQUEST['auth']['id'], $_REQUEST['auth']['hash'])) {
|
||||
$user_id = auth_check($mysqli, $_REQUEST['auth']['id'], $_REQUEST['auth']['hash']);
|
||||
} else {
|
||||
$user_id = false;
|
||||
}
|
||||
|
||||
function isLoggedIn() {
|
||||
global $user_id;
|
||||
return $user_id !== false;
|
||||
}
|
||||
|
||||
function checkLoggedIn() {
|
||||
if (!isLoggedIn()) done(DONE_UNAUTHORIZED, ['error' => 'permission denied']);
|
||||
}
|
||||
|
||||
function checkRequest($param) {
|
||||
if (!isset($_REQUEST[$param])) done(DONE_BAD_REQUEST, ['error' => 'missing parameter: ' . $param]);
|
||||
}
|
||||
|
||||
function replaceChanged($array) {
|
||||
return array_map(function ($entry) {
|
||||
unset($entry['changed']);
|
||||
return $entry;
|
||||
}, $array);
|
||||
}
|
||||
|
||||
$whereString = false;
|
||||
if (isset($_REQUEST['index'], $_REQUEST['value'])) {
|
||||
$whereString = '`' . mysqli_real_escape_string($mysqli, $_REQUEST['index']) . '`="' . mysqli_real_escape_string($mysqli, $_REQUEST['value']) . '"';
|
||||
}
|
||||
|
||||
function sendEntries($table) {
|
||||
global $mysqli, $whereString;
|
||||
$response = db_get_data($mysqli, $table, '*', $whereString);
|
||||
if ($response === false) done(DONE_DATABASE);
|
||||
$keys = array_keys($response);
|
||||
if (isset($_REQUEST['changed-after'])) {
|
||||
$response = db_get_data($mysqli, $table, '*', '`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_values($response);
|
||||
done(DONE_OKAY, array('data' => replaceChanged($response), 'keys' => $keys));
|
||||
}
|
||||
|
||||
function sendEntry($table) {
|
||||
global $mysqli;
|
||||
checkRequest('id');
|
||||
$response = db_get_data($mysqli, $table, '*', '`id` = "' . mysqli_real_escape_string($mysqli, $_REQUEST['id']) . '"');
|
||||
if ($response === false) done(DONE_DATABASE);
|
||||
if (count($response) != 1) done(DONE_BAD_REQUEST, ['error' => 'id not found']);
|
||||
$response = array_values($response)[0];
|
||||
unset($response['changed']);
|
||||
done(DONE_OKAY, ['data' => $response]);
|
||||
}
|
||||
|
||||
switch ($action) {
|
||||
|
||||
case 'login':
|
||||
checkRequest('username');
|
||||
checkRequest('password');
|
||||
checkRequest('device');
|
||||
$auth = auth_login($mysqli, $_REQUEST['username'], $_REQUEST['password'], $_REQUEST['device']);
|
||||
if ($auth === false) done(DONE_UNAUTHORIZED);
|
||||
done(DONE_OKAY, $auth);
|
||||
break;
|
||||
|
||||
case 'logout':
|
||||
checkLoggedIn();
|
||||
auth_logout($mysqli, $_REQUEST['auth']['id']);
|
||||
done(DONE_OKAY);
|
||||
break;
|
||||
|
||||
case 'get_update_time':
|
||||
$times = array();
|
||||
$response = db_get_data($mysqli, DB_TABLE_UPDATETIMES, '`update`', '`table` = "' . DB_TABLE_CLUBS . '"', 1);
|
||||
if (($response !== false) and (count($response) > 0)) {
|
||||
$times['clubs'] = strtotime(array_values($response)[0]['update']);
|
||||
} else {
|
||||
done(DONE_DATABASE);
|
||||
}
|
||||
$response = db_get_data($mysqli, DB_TABLE_UPDATETIMES, '`update`', '`table` = "' . BOATCLASS . DB_TABLE_SUFFIX_BOATS . '"', 1);
|
||||
if (($response !== false) and (count($response) > 0)) {
|
||||
$times['boats'] = strtotime(array_values($response)[0]['update']);
|
||||
} else {
|
||||
done(DONE_DATABASE);
|
||||
}
|
||||
$response = db_get_data($mysqli, DB_TABLE_UPDATETIMES, '`update`', '`table` = "' . BOATCLASS . DB_TABLE_SUFFIX_SAILORS . '"', 1);
|
||||
if (($response !== false) and (count($response) > 0)) {
|
||||
$times['sailors'] = strtotime(array_values($response)[0]['update']);
|
||||
} else {
|
||||
done(DONE_DATABASE);
|
||||
}
|
||||
$response = db_get_data($mysqli, DB_TABLE_UPDATETIMES, '`update`', '`table` = "' . BOATCLASS . DB_TABLE_SUFFIX_REGATTAS . '"', 1);
|
||||
if (($response !== false) and (count($response) > 0)) {
|
||||
$times['regattas'] = strtotime(array_values($response)[0]['update']);
|
||||
} else {
|
||||
done(DONE_DATABASE);
|
||||
}
|
||||
$response = db_get_data($mysqli, DB_TABLE_UPDATETIMES, '`update`', '`table` = "' . BOATCLASS . DB_TABLE_SUFFIX_RESULTS . '"', 1);
|
||||
if (($response !== false) and (count($response) > 0)) {
|
||||
$times['results'] = strtotime(array_values($response)[0]['update']);
|
||||
} else {
|
||||
done(DONE_DATABASE);
|
||||
}
|
||||
$response = db_get_data($mysqli, DB_TABLE_UPDATETIMES, '`update`', '`table` = "' . BOATCLASS . DB_TABLE_SUFFIX_PLANNING . '"', 1);
|
||||
if (($response !== false) and (count($response) > 0)) {
|
||||
$times['plannings'] = strtotime(array_values($response)[0]['update']);
|
||||
} else {
|
||||
done(DONE_DATABASE);
|
||||
}
|
||||
$response = db_get_data($mysqli, DB_TABLE_UPDATETIMES, '`update`', '`table` = "' . DB_TABLE_TRIM_BOATS . '"', 1);
|
||||
if (($response !== false) and (count($response) > 0)) {
|
||||
$times['trim_boats'] = strtotime(array_values($response)[0]['update']);
|
||||
} else {
|
||||
done(DONE_DATABASE);
|
||||
}
|
||||
$response = db_get_data($mysqli, DB_TABLE_UPDATETIMES, '`update`', '`table` = "' . DB_TABLE_TRIM_USERS . '"', 1);
|
||||
if (($response !== false) and (count($response) > 0)) {
|
||||
$times['trim_users'] = strtotime(array_values($response)[0]['update']);
|
||||
} else {
|
||||
done(DONE_DATABASE);
|
||||
}
|
||||
$response = db_get_data($mysqli, DB_TABLE_UPDATETIMES, '`update`', '`table` = "' . DB_TABLE_TRIM_TRIMS . '"', 1);
|
||||
if (($response !== false) and (count($response) > 0)) {
|
||||
$times['trim_trims'] = strtotime(array_values($response)[0]['update']);
|
||||
} else {
|
||||
done(DONE_DATABASE);
|
||||
}
|
||||
$response = db_get_data($mysqli, DB_TABLE_UPDATETIMES, '`update`', '`table` = "' . DB_TABLE_USERS . '"', 1);
|
||||
if (($response !== false) and (count($response) > 0)) {
|
||||
$times['users'] = strtotime(array_values($response)[0]['update']);
|
||||
} else {
|
||||
done(DONE_DATABASE);
|
||||
}
|
||||
done(DONE_OKAY, $times);
|
||||
break;
|
||||
|
||||
case 'get_clubs':
|
||||
sendEntries(DB_TABLE_CLUBS);
|
||||
break;
|
||||
|
||||
case 'get_club':
|
||||
sendEntry(DB_TABLE_CLUBS);
|
||||
break;
|
||||
|
||||
case 'get_boats':
|
||||
sendEntries(BOATCLASS . DB_TABLE_SUFFIX_BOATS);
|
||||
break;
|
||||
|
||||
case 'get_boat':
|
||||
sendEntry(BOATCLASS . DB_TABLE_SUFFIX_BOATS);
|
||||
break;
|
||||
|
||||
case 'get_sailors':
|
||||
sendEntries(BOATCLASS . DB_TABLE_SUFFIX_SAILORS);
|
||||
break;
|
||||
|
||||
case 'get_sailor':
|
||||
sendEntry(BOATCLASS . DB_TABLE_SUFFIX_SAILORS);
|
||||
break;
|
||||
|
||||
case 'get_years':
|
||||
$response = get_regatta_years($mysqli);
|
||||
if ($response === false) done(DONE_DATABASE);
|
||||
foreach ($response as $key => $value)
|
||||
$response[$key] = ['year' => $value];
|
||||
done(DONE_OKAY, ['data' => $response]);
|
||||
break;
|
||||
|
||||
case 'get_regattas':
|
||||
sendEntries(BOATCLASS . DB_TABLE_SUFFIX_REGATTAS);
|
||||
break;
|
||||
|
||||
case 'get_regatta':
|
||||
sendEntry(BOATCLASS . DB_TABLE_SUFFIX_REGATTAS);
|
||||
break;
|
||||
|
||||
case 'get_results':
|
||||
sendEntries(BOATCLASS . DB_TABLE_SUFFIX_RESULTS);
|
||||
break;
|
||||
|
||||
case 'get_result':
|
||||
sendEntry(BOATCLASS . DB_TABLE_SUFFIX_RESULTS);
|
||||
break;
|
||||
|
||||
case 'get_plannings':
|
||||
$response = db_get_data($mysqli, BOATCLASS . DB_TABLE_SUFFIX_PLANNING, '*', $whereString);
|
||||
if ($response === false) done(DONE_DATABASE);
|
||||
$keys = array_keys($response);
|
||||
if (isset($_REQUEST['changed-after'])) {
|
||||
$response = db_get_data($mysqli, BOATCLASS . DB_TABLE_SUFFIX_PLANNING, '*', '`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) {
|
||||
global $user_id;
|
||||
if (($user_id === false) or ($entry['user'] != $user_id)) {
|
||||
unset($entry['gemeldet'], $entry['bezahlt']);
|
||||
}
|
||||
return $entry;
|
||||
}, $response);
|
||||
$response = array_values($response);
|
||||
done(DONE_OKAY, array('data' => replaceChanged($response), 'keys' => $keys));
|
||||
break;
|
||||
|
||||
case 'get_planning':
|
||||
checkRequest('id');
|
||||
$response = db_get_data($mysqli, BOATCLASS . DB_TABLE_SUFFIX_PLANNING, '*', '`id` = "' . mysqli_real_escape_string($mysqli, $_REQUEST['id']) . '"');
|
||||
if ($response === false) done(DONE_DATABASE);
|
||||
if (count($response) != 1) done(DONE_BAD_REQUEST, ['error' => 'id not found']);
|
||||
$response = array_values($response)[0];
|
||||
if (($user_id === false) or ($response['user'] != $user_id)) {
|
||||
unset($response['gemeldet'], $response['bezahlt']);
|
||||
}
|
||||
unset($response['changed']);
|
||||
done(DONE_OKAY, ['data' => $response]);
|
||||
break;
|
||||
|
||||
case 'get_trim_boats':
|
||||
checkLoggedIn();
|
||||
$users = db_get_data($mysqli, DB_TABLE_TRIM_USERS, 'boat', '`user`="' . $user_id . '"');
|
||||
$boats = implode(',', array_column($users, 'boat'));
|
||||
if ($boats == '') {
|
||||
done(DONE_OKAY, array('data' => [], 'keys' => []));
|
||||
}
|
||||
$response = db_get_data($mysqli, DB_TABLE_TRIM_BOATS, '*', '`id` IN (' . $boats . ')' . ($whereString ? (' AND ' . $whereString) : ''));
|
||||
if ($response === false) done(DONE_DATABASE);
|
||||
$keys = array_keys($response);
|
||||
if (isset($_REQUEST['changed-after'])) {
|
||||
$response = db_get_data($mysqli, DB_TABLE_TRIM_BOATS, '*', '`id` IN (' . $boats . ') AND `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_values($response);
|
||||
done(DONE_OKAY, array('data' => replaceChanged($response), 'keys' => $keys));
|
||||
break;
|
||||
|
||||
case 'get_trim_boat':
|
||||
checkLoggedIn();
|
||||
checkRequest('id');
|
||||
$response = db_get_data($mysqli, DB_TABLE_TRIM_BOATS, '*', '`id` = "' . mysqli_real_escape_string($mysqli, $_REQUEST['id']) . '"');
|
||||
if ($response === false) done(DONE_DATABASE);
|
||||
if (count($response) != 1) done(DONE_BAD_REQUEST, ['error' => 'id not found']);
|
||||
$response = array_values($response)[0];
|
||||
if (count(db_get_data($mysqli, DB_TABLE_TRIM_USERS, 'id', '`user`="' . $user_id . '" AND `boat`="' . $response['id'] . '"')) != 1)
|
||||
done(DONE_BAD_REQUEST, ['error' => 'id not found']);
|
||||
unset($response['changed']);
|
||||
done(DONE_OKAY, ['data' => $response]);
|
||||
break;
|
||||
|
||||
case 'get_trim_users':
|
||||
checkLoggedIn();
|
||||
$users = db_get_data($mysqli, DB_TABLE_TRIM_USERS, 'boat', '`user`="' . $user_id . '"');
|
||||
$boats = implode(',', array_column($users, 'boat'));
|
||||
if ($boats == '') {
|
||||
done(DONE_OKAY, array('data' => [], 'keys' => []));
|
||||
}
|
||||
$response = db_get_data($mysqli, DB_TABLE_TRIM_USERS, '*', '`boat` IN (' . $boats . ')' . ($whereString ? (' AND ' . $whereString) : ''));
|
||||
if ($response === false) done(DONE_DATABASE);
|
||||
$keys = array_keys($response);
|
||||
if (isset($_REQUEST['changed-after'])) {
|
||||
$response = db_get_data($mysqli, DB_TABLE_TRIM_USERS, '*', '`boat` IN (' . $boats . ') AND `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_values($response);
|
||||
done(DONE_OKAY, array('data' => replaceChanged($response), 'keys' => $keys));
|
||||
break;
|
||||
|
||||
case 'get_trim_user':
|
||||
checkLoggedIn();
|
||||
checkRequest('id');
|
||||
$response = db_get_data($mysqli, DB_TABLE_TRIM_USERS, '*', '`id` = "' . mysqli_real_escape_string($mysqli, $_REQUEST['id']) . '"');
|
||||
if ($response === false) done(DONE_DATABASE);
|
||||
if (count($response) != 1) done(DONE_BAD_REQUEST, ['error' => 'id not found']);
|
||||
$response = array_values($response)[0];
|
||||
if (count(db_get_data($mysqli, DB_TABLE_TRIM_USERS, 'id', '`user`="' . $user_id . '" AND `boat`="' . $response['boat'] . '"')) != 1)
|
||||
done(DONE_BAD_REQUEST, ['error' => 'id not found']);
|
||||
unset($response['changed']);
|
||||
done(DONE_OKAY, ['data' => $response]);
|
||||
break;
|
||||
|
||||
case 'get_trim_trims':
|
||||
checkLoggedIn();
|
||||
$users = db_get_data($mysqli, DB_TABLE_TRIM_USERS, 'boat', '`user`="' . $user_id . '"');
|
||||
$boats = implode(',', array_column($users, 'boat'));
|
||||
if ($boats == '') {
|
||||
done(DONE_OKAY, array('data' => [], 'keys' => []));
|
||||
}
|
||||
$response = db_get_data($mysqli, DB_TABLE_TRIM_TRIMS, '*', '`boat` IN (' . $boats . ')' . ($whereString ? (' AND ' . $whereString) : ''));
|
||||
if ($response === false) done(DONE_DATABASE);
|
||||
$keys = array_keys($response);
|
||||
if (isset($_REQUEST['changed-after'])) {
|
||||
$response = db_get_data($mysqli, DB_TABLE_TRIM_TRIMS, '*', '`boat` IN (' . $boats . ') AND `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_values($response);
|
||||
done(DONE_OKAY, array('data' => replaceChanged($response), 'keys' => $keys));
|
||||
break;
|
||||
|
||||
case 'get_trim_trim':
|
||||
checkLoggedIn();
|
||||
checkRequest('id');
|
||||
$response = db_get_data($mysqli, DB_TABLE_TRIM_TRIMS, '*', '`id` = "' . mysqli_real_escape_string($mysqli, $_REQUEST['id']) . '"');
|
||||
if ($response === false) done(DONE_DATABASE);
|
||||
if (count($response) != 1) done(DONE_BAD_REQUEST, ['error' => 'id not found']);
|
||||
$response = array_values($response)[0];
|
||||
if (count(db_get_data($mysqli, DB_TABLE_TRIM_USERS, 'id', '`user`="' . $user_id . '" AND `boat`="' . $response['boat'] . '"')) != 1)
|
||||
done(DONE_BAD_REQUEST, ['error' => 'id not found']);
|
||||
unset($response['changed']);
|
||||
done(DONE_OKAY, ['data' => $response]);
|
||||
break;
|
||||
|
||||
case 'get_users':
|
||||
$followFields = '';
|
||||
for ($i = 1; $i <= 5; $i ++) $followFields .= ',' . BOATCLASS . '_sailor' . $i . ' AS sailor' . $i;
|
||||
$response = db_get_data($mysqli, DB_TABLE_USERS, 'id,username,email' . $followFields, $whereString);
|
||||
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) : ''));
|
||||
if ($response === false) done(DONE_DATABASE);
|
||||
}
|
||||
$response = array_map(function ($entry) {
|
||||
global $user_id;
|
||||
if ($entry['id'] != $user_id) {
|
||||
$entry = ['id' => $entry['id'], 'username' => $entry['username']];
|
||||
}
|
||||
return $entry;
|
||||
}, $response);
|
||||
$response = array_values($response);
|
||||
done(DONE_OKAY, array('data' => replaceChanged($response), 'keys' => $keys));
|
||||
break;
|
||||
|
||||
case 'get_user':
|
||||
checkRequest('id');
|
||||
$followFields = '';
|
||||
for ($i = 1; $i <= 5; $i ++) $followFields .= ',' . BOATCLASS . '_sailor' . $i . ' AS sailor' . $i;
|
||||
$response = db_get_data($mysqli, DB_TABLE_USERS, 'id,username,email' . $followFields, '`id` = "' . mysqli_real_escape_string($mysqli, $_REQUEST['id']) . '"');
|
||||
if ($response === false) done(DONE_DATABASE);
|
||||
if (count($response) != 1) done(DONE_BAD_REQUEST, ['error' => 'id not found']);
|
||||
$response = array_values($response)[0];
|
||||
if ($response['id'] != $user_id) {
|
||||
$response = ['id' => $response['id'], 'username' => $response['username']];
|
||||
}
|
||||
unset($response['changed']);
|
||||
done(DONE_OKAY, ['data' => $response]);
|
||||
break;
|
||||
|
||||
case 'add_subscription':
|
||||
checkRequest('subscription');
|
||||
$data = [
|
||||
'auth' => PUSH_AUTH,
|
||||
'subscription' => $_REQUEST['subscription']
|
||||
];
|
||||
$ch = curl_init('https://push.ostertun.net/add_subscription');
|
||||
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
|
||||
curl_setopt($ch, CURLOPT_POST, true);
|
||||
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
|
||||
$result = curl_exec($ch);
|
||||
curl_close($ch);
|
||||
if ($result == "OK")
|
||||
done(DONE_OKAY);
|
||||
else {
|
||||
logE('add_subscription', $result);
|
||||
done(DONE_SERVER_ERROR);
|
||||
}
|
||||
break;
|
||||
|
||||
case 'remove_subscription':
|
||||
checkRequest('subscription');
|
||||
$data = [
|
||||
'auth' => PUSH_AUTH,
|
||||
'subscription' => $_REQUEST['subscription']
|
||||
];
|
||||
$ch = curl_init('https://push.ostertun.net/remove_subscription');
|
||||
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
|
||||
curl_setopt($ch, CURLOPT_POST, true);
|
||||
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
|
||||
$result = curl_exec($ch);
|
||||
curl_close($ch);
|
||||
if ($result == "OK")
|
||||
done(DONE_OKAY);
|
||||
else {
|
||||
logE('remove_subscription', $result);
|
||||
done(DONE_SERVER_ERROR);
|
||||
}
|
||||
break;
|
||||
|
||||
default:
|
||||
done(DONE_BAD_REQUEST, ['error' => 'action invalid']);
|
||||
|
||||
}
|
||||
|
||||
?>
|
||||
107
api/login.php
107
api/login.php
@@ -1,107 +0,0 @@
|
||||
<?php
|
||||
|
||||
function get_user($mysqli, $username = null) {
|
||||
if ($username === null) {
|
||||
return db_get_data($mysqli, DB_TABLE_USERS);
|
||||
} else {
|
||||
$user = db_get_data($mysqli, DB_TABLE_USERS, '*', '`username` = "' . mysqli_real_escape_string($mysqli, $username) . '"', 1);
|
||||
if (($user === false) or (count($user) != 1)) return false;
|
||||
return array_values($user)[0];
|
||||
}
|
||||
}
|
||||
|
||||
function get_user_by_id($mysqli, $user_id) {
|
||||
$res = db_get_data($mysqli, DB_TABLE_USERS, '*', '`id` = "' . mysqli_real_escape_string($mysqli, $user_id) . '"', 1);
|
||||
if (($res !== false) and (count($res) == 1)) {
|
||||
return array_values($res)[0];
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
//function signup($mysqli, $username, $email, $password) {
|
||||
// if (($username == '') or ($email == '') or ($password == '')) {
|
||||
// return 1;
|
||||
// }
|
||||
// if (get_user($mysqli, $username) !== false) {
|
||||
// return 1;
|
||||
// }
|
||||
// $salt = hash('sha512', uniqid(openssl_random_pseudo_bytes(16), true));
|
||||
// $hashpassword = hash('sha512', $password . $salt);
|
||||
//
|
||||
// $user = array();
|
||||
// $user['username'] = $username;
|
||||
// $user['email'] = $email;
|
||||
// $user['password'] = $hashpassword;
|
||||
// $user['salt'] = $salt;
|
||||
// if (db_insert_data($mysqli, DB_TABLE_USERS, $user) !== false) {
|
||||
// $values = array();
|
||||
// $values['USERNAME'] = $username;
|
||||
// $message = createMail('signup', STRING_SIGNUP_EMAIL_SUBJECT, $values);
|
||||
// smtp_send_mail(['Regatten.net', MAIL_FROM_ADDRESS], [[$username, $email]], [], [], STRING_SIGNUP_EMAIL_SUBJECT, $message, [['Content-Type', 'text/html; charset="UTF-8"']]);
|
||||
// // Analytics
|
||||
// matomo_event('Login', 'SignUp', $username);
|
||||
// return true;
|
||||
// } else {
|
||||
// return 2;
|
||||
// }
|
||||
//}
|
||||
|
||||
function get_perm($mysqli, $user_id) {
|
||||
if ($user_id !== false) {
|
||||
$result = get_user_by_id($mysqli, $user_id);
|
||||
if ($result !== false) {
|
||||
return $result[DB_FIELD_PERM];
|
||||
} else {
|
||||
return 0;
|
||||
}
|
||||
} else {
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
// ### NEW LOGIN ####################################
|
||||
|
||||
function auth_login($mysqli, $username, $password, $device) {
|
||||
$user = get_user($mysqli, $username);
|
||||
if ($user === false) {
|
||||
// User does not exist
|
||||
return false;
|
||||
}
|
||||
$hashpassword = hash('sha512', $password . $user['salt']);
|
||||
if ($hashpassword !== $user['password']) {
|
||||
// Password incorrect
|
||||
return false;
|
||||
}
|
||||
// All correct
|
||||
$auth = [];
|
||||
$auth['user'] = $user['id'];
|
||||
$auth['username'] = $user['username'];
|
||||
$auth['auth'] = str_replace('/', '-', str_replace('+', '_', base64_encode(openssl_random_pseudo_bytes(24))));
|
||||
$salt = base64_encode(openssl_random_pseudo_bytes(24));
|
||||
$hash = hash('sha512', $auth['auth'] . $salt);
|
||||
$data = [
|
||||
'user' => $user['id'],
|
||||
'salt' => $salt,
|
||||
'authhash' => $hash,
|
||||
'device' => $device
|
||||
];
|
||||
$auth['id'] = db_insert_data($mysqli, DB_TABLE_LOGINS, $data);
|
||||
return $auth;
|
||||
}
|
||||
|
||||
function auth_logout($mysqli, $id) {
|
||||
db_delete_data($mysqli, DB_TABLE_LOGINS, 'id = "' . mysqli_real_escape_string($mysqli, $id) . '"', 1);
|
||||
return true;
|
||||
}
|
||||
|
||||
function auth_check($mysqli, $id, $hash) {
|
||||
$auth = db_get_data($mysqli, DB_TABLE_LOGINS, '*', 'id="' . mysqli_real_escape_string($mysqli, $id) . '"', 1);
|
||||
if (($auth === false) or (count($auth) != 1)) return false;
|
||||
$auth = array_values($auth)[0];
|
||||
$hash = hash('sha512', $hash . $auth['salt']);
|
||||
if ($hash != $auth['authhash']) return false;
|
||||
db_update_data($mysqli, DB_TABLE_LOGINS, ['id' => $auth['id']], 'id="' . $auth['id'] . '"', 1); // update changed field => last login
|
||||
return $auth['user'];
|
||||
}
|
||||
|
||||
?>
|
||||
@@ -6,7 +6,7 @@
|
||||
|
||||
?>
|
||||
|
||||
const QUERY_URL = '<?php echo SERVER_ADDR; ?>/api/';
|
||||
const QUERY_URL = '<?php echo QUERY_URL; ?>';
|
||||
const BOATCLASS = '<?php echo BOATCLASS; ?>';
|
||||
const LINK_PRE = '<?php echo SERVER_ADDR; ?>/';
|
||||
const YOUTH_AGE = '<?php echo $_CLASS['youth-age']; ?>';
|
||||
|
||||
@@ -4254,7 +4254,7 @@ code {
|
||||
}
|
||||
|
||||
/*Contact Form*/
|
||||
.menu input[type="text"] {
|
||||
/*.menu input[type="text"] {
|
||||
height: 35px;
|
||||
line-height: 35px;
|
||||
}
|
||||
@@ -4271,7 +4271,7 @@ code {
|
||||
.menu .form-field label {
|
||||
font-size: 12px;
|
||||
margin-bottom: -10px;
|
||||
}
|
||||
}*/
|
||||
|
||||
.form-field span {
|
||||
position: absolute;
|
||||
|
||||
@@ -4,18 +4,15 @@
|
||||
error_reporting(0); // disable error reporting in browser
|
||||
define('SEND_ERRORS', true); // send errors via log
|
||||
|
||||
define('BOATCLASS', 'pirat');
|
||||
|
||||
date_default_timezone_set('Europe/Berlin');
|
||||
define('SERVER_PATH', '/subfolder'); // path to root directory
|
||||
define('SERVER_ADDR', 'https://' . $_SERVER['SERVER_NAME'] . SERVER_PATH); // path to root directory
|
||||
define('QUERY_URL', 'http://' . $_SERVER['SERVER_NAME'] . '/api/' . BOATCLASS . '/'); // url to api backend
|
||||
define('LOGGING_APIKEY', 'xxx'); // Apikey for Logging API -> get from ostertun.net/logging
|
||||
|
||||
// PUSH SERVER
|
||||
define('PUSH_AUTH', 'xxxxxxx'); // auth string for push.ostertun.net
|
||||
define('PUSH_SERVERKEY', 'xxxxxxx'); // server key from push.ostertun.net
|
||||
|
||||
define('BOATCLASS', 'pirat');
|
||||
|
||||
// BOAT CLASSES
|
||||
// BOAT CLASS
|
||||
$_CLASS = array(
|
||||
'name' => 'Pirat',
|
||||
'desc' => 'eine vom DSV geförderte Jugendmeisterschaftsklasse',
|
||||
|
||||
@@ -35,6 +35,11 @@
|
||||
$items .= $tpl->load('menu/item-icon', ['Vereins-Website', '', 'html-id' => 'menu-item-clubwebsite', 'icon' => 'fa-globe', 'css-class' => 'border-0']);
|
||||
$sp['menus'] .= $tpl->load('menu/bottom', [$items, 'html-id' => 'menu-boat', 'title' => 'Boots-Details', 'height' => 200]);
|
||||
|
||||
$items = '<p class="mb-2 mt-1" style="line-height: 1.5em;">Bitte trage hier den Bootsnamen ein:</p>';
|
||||
$items .= $tpl->load('input', ['html-id' => 'input-editboatname', 'placeholder' => 'Bootsname', 'type' => 'text']);
|
||||
$items .= $tpl->load('button', ['Speichern', '#', 'html-id' => 'button-editboatname']);
|
||||
$sp['menus'] .= $tpl->load('menu/bottom', [$items, 'html-id' => 'menu-editboatname', 'height' => 240]);
|
||||
|
||||
$sp['scripts'] .= $scripts->load('pagination', ['pageChange', 'page', 'pageCount', 'pagination']);
|
||||
$sp['scripts'] .= $scripts->load('boats');
|
||||
|
||||
|
||||
@@ -1,19 +1,38 @@
|
||||
<?php
|
||||
|
||||
// TODO: Create site
|
||||
|
||||
$sp['title'] = 'Seite noch nicht unterstuuml;tzt - Regatten.net ' . $_CLASS['name'];
|
||||
$sp['title'] = 'Kontakt - Regatten.net ' . $_CLASS['name'];
|
||||
$sp['backbutton'] = true;
|
||||
$sp['activenav'] = 5;
|
||||
|
||||
$content = $tpl->load('error', ['404', 'Seite existiert noch nicht']);
|
||||
$content .= '<p>';
|
||||
$content .= 'Die gesuchte Seite ist leider noch nicht verfügbar.<br>';
|
||||
$content .= 'Wir arbeiten daran, sie schnellstmöglich zur Verfügung zu stellen.<br>';
|
||||
$content .= 'Wie wäre es mit der Homepage?';
|
||||
// TITLE
|
||||
$content = '<h1>Kontakt</h1>';
|
||||
|
||||
$sp['output'] .= $tpl->load('card', [$content]);
|
||||
|
||||
// Info
|
||||
$content = '<p>';
|
||||
$content .= 'Du hast eine Frage? Du hast einen Fehler in unserer Software oder in den gespeicherten Daten gefunden? Du willst Regatten.net auch für Deine Bootsklasse nutzen?<br>';
|
||||
$content .= 'Egal was es ist, lass es uns wissen! Schreibe uns eine Mail an <a href="mailto:info@regatten.net">info@regatten.net</a> oder nutze einfach dieses Kontakt-Formular.<br>';
|
||||
$content .= 'Wir werden Deine Anfrage so schnell wie möglich bearbeiten.';
|
||||
$content .= '</p>';
|
||||
$content .= '<p>';
|
||||
$content .= 'Alternativ erreichst Du uns auch telefonisch unter <a href="tel:+4941039659768">+49 (0) 4103 965 976 8</a><br>';
|
||||
$content .= 'Mo-Fr: 7-20 Uhr<br>';
|
||||
$content .= 'Sa: 9-17 Uhr';
|
||||
$content .= '</p>';
|
||||
$content .= $tpl->load('button', ['Zur Startseite', LINK_PRE . 'index', 'css-class' => 'mb-3']);
|
||||
$content .= $tpl->load('button', ['Kontakt', LINK_PRE . 'contact']);
|
||||
|
||||
$sp['output'] = $tpl->load('card', [$content, 'css-class' => 'text-center pt-3']);
|
||||
$sp['output'] .= $tpl->load('card', [$content]);
|
||||
|
||||
// Formular
|
||||
$content = '<h2>Kontakt-Formular</h2>';
|
||||
$content .= $tpl->load('input', ['html-id' => 'input-name', 'placeholder' => 'Dein Name', 'type' => 'text']);
|
||||
$content .= $tpl->load('input', ['html-id' => 'input-email', 'placeholder' => 'Email-Adresse', 'type' => 'email']);
|
||||
$content .= $tpl->load('input', ['html-id' => 'input-subject', 'placeholder' => 'Betreff', 'type' => 'text']);
|
||||
$content .= $tpl->load('textarea', ['html-id' => 'input-message', 'placeholder' => 'Deine Nachricht']);
|
||||
$content .= $tpl->load('button', ['Senden', '#', 'html-id' => 'button-send']);
|
||||
|
||||
$sp['output'] .= $tpl->load('card', [$content]);
|
||||
|
||||
$sp['scripts'] .= $scripts->load('contact');
|
||||
|
||||
?>
|
||||
@@ -35,6 +35,11 @@
|
||||
$items .= $tpl->load('menu/item-icon', ['Vereins-Website', '', 'html-id' => 'menu-item-clubwebsite', 'icon' => 'fa-globe', 'css-class' => 'border-0']);
|
||||
$sp['menus'] .= $tpl->load('menu/bottom', [$items, 'html-id' => 'menu-sailor', 'title' => 'Segler-Details', 'height' => 200]);
|
||||
|
||||
$items = '<p class="mb-2 mt-1" style="line-height: 1.5em;">Bitte trage hier den Jahrgang ein:</p>';
|
||||
$items .= $tpl->load('input', ['html-id' => 'input-edityear', 'placeholder' => 'Jahrgang', 'type' => 'number']);
|
||||
$items .= $tpl->load('button', ['Speichern', '#', 'html-id' => 'button-edityear']);
|
||||
$sp['menus'] .= $tpl->load('menu/bottom', [$items, 'html-id' => 'menu-edityear', 'height' => 240]);
|
||||
|
||||
$sp['scripts'] .= $scripts->load('pagination', ['pageChange', 'page', 'pageCount', 'pagination']);
|
||||
$sp['scripts'] .= $scripts->load('sailors');
|
||||
|
||||
|
||||
@@ -197,7 +197,7 @@
|
||||
Vielen Dank für Deine Unterstützung!
|
||||
</p>
|
||||
<p>
|
||||
Mehr Informationen findest <a href="https://info.ostertun.net/regatten/beta">hier</a>.
|
||||
Mehr Informationen findest Du <a href="https://info.ostertun.net/regatten/beta">hier</a>.
|
||||
</p>
|
||||
<p>
|
||||
Mit der Nutzung dieser App erklärst Du Dich außerdem damit einverstanden, dass wir Cookies einsetzen.
|
||||
|
||||
@@ -5,18 +5,64 @@ var page = 1;
|
||||
var pageCount = 0;
|
||||
const showCount = 25;
|
||||
|
||||
async function onEditBoatnameClick() {
|
||||
var id = $('#button-editboatname').attr('data-boat-id');
|
||||
var name = $('#input-editboatname').val();
|
||||
if (name != '') {
|
||||
showLoader();
|
||||
$.ajax({
|
||||
url: QUERY_URL + 'add_boatname',
|
||||
method: 'POST',
|
||||
data: {
|
||||
boat: id,
|
||||
name: name
|
||||
},
|
||||
error: function (xhr, status, error) {
|
||||
if (xhr.status == 0) {
|
||||
toastError('Du bist momentan offline.<br>Stelle eine Internetverbindung her, um den Bootsnamen zu bearbeiten');
|
||||
} else {
|
||||
console.log('EditBoatname: unbekannter Fehler', status, error);
|
||||
console.log(xhr);
|
||||
toastError('Ein unbekannter Fehler ist aufgetreten. Bitte versuche es noch einmal', 5000);
|
||||
}
|
||||
hideLoader();
|
||||
},
|
||||
success: function (data, status, xhr) {
|
||||
if ('status' in data) {
|
||||
if (data.status == 'added') {
|
||||
toastOk('Bootsnamen erfolgreich hinzugefügt');
|
||||
sync();
|
||||
} else {
|
||||
toastInfo('Wir prüfen Deine Anfrage und korrigieren den Bootsnamen schnellstmöglich', 5000);
|
||||
}
|
||||
} else {
|
||||
toastOk('Erfolgreich');
|
||||
}
|
||||
hideLoader();
|
||||
}
|
||||
});
|
||||
}
|
||||
$('#menu-editboatname').hideMenu();
|
||||
}
|
||||
|
||||
async function onListClicked(id) {
|
||||
var boat = await dbGetData('boats', id);
|
||||
|
||||
$('#menu-boat').find('.menu-title').find('p').text(boat.sailnumber);
|
||||
|
||||
// Edit Boatname
|
||||
// TODO: create menu for edit boatname
|
||||
$('#button-editboatname').attr('data-boat-id', boat.id);
|
||||
$('#menu-editboatname').find('.menu-title').find('p').text(boat.sailnumber);
|
||||
if (boat['name'] == '') {
|
||||
$('#menu-item-boatname').find('span').text('Bootsnamen hinzufügen');
|
||||
$('#menu-editboatname').find('.menu-title').find('h1').text('Bootsnamen hinzufügen');
|
||||
$('#input-editboatname').val('');
|
||||
} else {
|
||||
$('#menu-item-boatname').find('span').text('Bootsnamen bearbeiten');
|
||||
$('#menu-editboatname').find('.menu-title').find('h1').text('Bootsnamen bearbeiten');
|
||||
$('#input-editboatname').val(boat.name);
|
||||
}
|
||||
$('#input-editboatname').trigger('focusin').trigger('focusout');
|
||||
|
||||
// club website
|
||||
var clubwebsite = '';
|
||||
@@ -86,6 +132,8 @@ var siteScript = async function() {
|
||||
firstCall = false;
|
||||
initPagination();
|
||||
$('#input-search').on('input', reSearch);
|
||||
$('#menu-item-boatname').click(function(){ $('#menu-boat').hideMenu(); $('#menu-editboatname').showMenu(); });
|
||||
$('#button-editboatname').click(onEditBoatnameClick);
|
||||
}
|
||||
|
||||
var results = await dbGetData('boats');
|
||||
|
||||
49
server/scripts/contact.js
Normal file
49
server/scripts/contact.js
Normal file
@@ -0,0 +1,49 @@
|
||||
function sendMessage() {
|
||||
var name = $('#input-name').val();
|
||||
var email = $('#input-email').val();
|
||||
var subject = $('#input-subject').val();
|
||||
var message = $('#input-message').val();
|
||||
|
||||
if ((name == '') || (email == '') || (subject == '') || (message == '')) {
|
||||
toastError('Bitte fülle alle Felder aus!');
|
||||
return;
|
||||
}
|
||||
|
||||
showLoader();
|
||||
$.ajax({
|
||||
url: QUERY_URL + 'contact',
|
||||
method: 'POST',
|
||||
data: {
|
||||
name: name,
|
||||
email: email,
|
||||
subject: subject,
|
||||
message: message
|
||||
},
|
||||
error: function (xhr, status, error) {
|
||||
if (xhr.status == 0) {
|
||||
toastError('Du bist momentan offline.<br>Stelle eine Internetverbindung her, um eine Nachricht zu versenden');
|
||||
} else {
|
||||
console.log('Contact: unbekannter Fehler', status, error);
|
||||
console.log(xhr);
|
||||
toastError('Ein unbekannter Fehler ist aufgetreten. Bitte versuche es noch einmal', 5000);
|
||||
}
|
||||
hideLoader();
|
||||
},
|
||||
success: function (data, status, xhr) {
|
||||
toastOk('Nachricht erfolgreich versandt!');
|
||||
$('#input-subject').val('');
|
||||
$('#input-message').val('');
|
||||
hideLoader();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
var siteScript = async function () {
|
||||
if (isLoggedIn()) {
|
||||
var user = await dbGetData('users', USER_ID);
|
||||
$('#input-name').val(user.username).trigger('focusin').trigger('focusout');
|
||||
$('#input-email').val(user.email).trigger('focusin').trigger('focusout');
|
||||
}
|
||||
$('#button-send').click(sendMessage);
|
||||
hideLoader();
|
||||
}
|
||||
@@ -39,7 +39,7 @@ var siteScript = async function() {
|
||||
tbody += '<td>' + (await dbGetData('users', planning.user)).username + '</td>';
|
||||
|
||||
if (planning.steuermann != null) {
|
||||
tbody += '<td>' + (await dbGetData('users', planning.user)).username + '</td>';
|
||||
tbody += '<td>' + (await dbGetData('sailors', planning.steuermann)).name + '</td>';
|
||||
} else {
|
||||
tbody += '<td>(noch unklar)</td>';
|
||||
}
|
||||
|
||||
@@ -5,18 +5,64 @@ var page = 1;
|
||||
var pageCount = 0;
|
||||
const showCount = 25;
|
||||
|
||||
async function onEditYearClick() {
|
||||
var id = $('#button-edityear').attr('data-sailor-id');
|
||||
var year = $('#input-edityear').val();
|
||||
if (year != '') {
|
||||
showLoader();
|
||||
$.ajax({
|
||||
url: QUERY_URL + 'add_year',
|
||||
method: 'POST',
|
||||
data: {
|
||||
sailor: id,
|
||||
year: year
|
||||
},
|
||||
error: function (xhr, status, error) {
|
||||
if (xhr.status == 0) {
|
||||
toastError('Du bist momentan offline.<br>Stelle eine Internetverbindung her, um den Jahrgang zu bearbeiten');
|
||||
} else {
|
||||
console.log('EditYear: unbekannter Fehler', status, error);
|
||||
console.log(xhr);
|
||||
toastError('Ein unbekannter Fehler ist aufgetreten. Bitte versuche es noch einmal', 5000);
|
||||
}
|
||||
hideLoader();
|
||||
},
|
||||
success: function (data, status, xhr) {
|
||||
if ('status' in data) {
|
||||
if (data.status == 'added') {
|
||||
toastOk('Jahrgang erfolgreich hinzugefügt');
|
||||
sync();
|
||||
} else {
|
||||
toastInfo('Wir prüfen Deine Anfrage und korrigieren den Jahrgang schnellstmöglich', 5000);
|
||||
}
|
||||
} else {
|
||||
toastOk('Erfolgreich');
|
||||
}
|
||||
hideLoader();
|
||||
}
|
||||
});
|
||||
}
|
||||
$('#menu-edityear').hideMenu();
|
||||
}
|
||||
|
||||
async function onListClicked(id) {
|
||||
var sailor = await dbGetData('sailors', id);
|
||||
|
||||
$('#menu-sailor').find('.menu-title').find('p').text(sailor.name);
|
||||
|
||||
// Edit Year
|
||||
// TODO: create menu for edit year
|
||||
$('#button-edityear').attr('data-sailor-id', sailor.id);
|
||||
$('#menu-edityear').find('.menu-title').find('p').text(sailor.name);
|
||||
if (sailor['year'] == null) {
|
||||
$('#menu-item-year').find('span').text('Jahrgang hinzufügen');
|
||||
$('#menu-edityear').find('.menu-title').find('h1').text('Jahrgang hinzufügen');
|
||||
$('#input-edityear').val('');
|
||||
} else {
|
||||
$('#menu-item-year').find('span').text('Jahrgang bearbeiten');
|
||||
$('#menu-edityear').find('.menu-title').find('h1').text('Jahrgang bearbeiten');
|
||||
$('#input-edityear').val(sailor.year);
|
||||
}
|
||||
$('#input-edityear').trigger('focusin').trigger('focusout');
|
||||
|
||||
// club website
|
||||
var clubwebsite = '';
|
||||
@@ -86,6 +132,8 @@ var siteScript = async function() {
|
||||
firstCall = false;
|
||||
initPagination();
|
||||
$('#input-search').on('input', reSearch);
|
||||
$('#menu-item-year').click(function(){ $('#menu-sailor').hideMenu(); $('#menu-edityear').showMenu(); });
|
||||
$('#button-edityear').click(onEditYearClick);
|
||||
}
|
||||
|
||||
var results = await dbGetData('sailors');
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
<div class="input-style input-style-2 input-required $$css-class;">
|
||||
<span class="color-highlight">$$placeholder;</span>
|
||||
<textarea id="$$html-id;" class="form-control" placeholder="$$placeholder;">$$value;</textarea>
|
||||
<textarea id="$$html-id;" class="form-control pt-3 pb-3" placeholder="$$placeholder;" style="height: 10em; line-height: 1.5em;">$$value;</textarea>
|
||||
</div>
|
||||
@@ -1,5 +1,5 @@
|
||||
<?php
|
||||
|
||||
define('PWA_VERSION', '1.4');
|
||||
define('PWA_VERSION', '1.5');
|
||||
|
||||
?>
|
||||
Reference in New Issue
Block a user