Überarbeitete Version der 1. Version. Es bestehen noch grosse Feher in einzelnen Skripten.
This commit is contained in:
@@ -2,7 +2,6 @@
|
||||
|
||||
use Dotenv\Dotenv;
|
||||
|
||||
if (session_status() !== PHP_SESSION_ACTIVE) session_start();
|
||||
|
||||
ini_set('display_errors', 1);
|
||||
ini_set('display_startup_errors', 1);
|
||||
@@ -11,12 +10,18 @@ ini_set('display_startup_errors', 1);
|
||||
// dependencies to versions compatible with your PHP runtime.
|
||||
error_reporting(E_ALL & ~E_DEPRECATED & ~E_USER_DEPRECATED);
|
||||
|
||||
$access_granted_wkl = $_SESSION['access_granted_wk_leitung'] ?? false;
|
||||
|
||||
if (!isset($baseDir)) {
|
||||
$baseDir = $_SERVER['DOCUMENT_ROOT'];
|
||||
}
|
||||
|
||||
require_once $baseDir . '/../scripts/session_functions.php';
|
||||
|
||||
ini_wkvs_session(true);
|
||||
|
||||
$csrf_token = $_SESSION['csrf_token'] ?? '';
|
||||
|
||||
$access_granted_wkl = check_user_permission('wk_leitung', true) ?? false;
|
||||
|
||||
if ( ! $access_granted_wkl ) :
|
||||
|
||||
$logintype = 'wk_leitung';
|
||||
@@ -31,7 +36,7 @@ echo '<link rel="icon" type="png" href="/intern/img/icon.png">';
|
||||
|
||||
require $baseDir . '/../scripts/db/db-functions.php';
|
||||
require $baseDir . '/../scripts/db/db-tables.php';
|
||||
require $baseDir . '/../scripts/csrf_functions.php';
|
||||
|
||||
|
||||
$type = 'wkl';
|
||||
|
||||
@@ -103,11 +108,11 @@ require $baseDir . '/intern/scripts/sidebar/sidebar.php';
|
||||
<div class="ot-modal-content">
|
||||
<div class="ot-modal-top-content">
|
||||
<div class="ot-title">One-Time Login URL:</div>
|
||||
<button id="otClose" class="ot-close-btn">✕</button>
|
||||
<button id="otCloseOTL" class="ot-close-btn">✕</button>
|
||||
</div>
|
||||
<a id="aOturl" class="ot-url" target="_blank" href="/"></a>
|
||||
<p id="oturlGb"></p>
|
||||
<button id="otCopy" class="ot-copy-btn">Copy URL</button>
|
||||
<button id="otCopy" class="ot-copy-btn">URL Kopieren</button>
|
||||
<div class="qrcodeWrapper">
|
||||
<div id="qrcode"></div>
|
||||
</div>
|
||||
@@ -118,7 +123,7 @@ require $baseDir . '/intern/scripts/sidebar/sidebar.php';
|
||||
const otModal = document.getElementById("oturldiv");
|
||||
const otUrl = document.getElementById("aOturl");
|
||||
const otCopy = document.getElementById("otCopy");
|
||||
const otClose = document.getElementById("otClose");
|
||||
const otClose = document.getElementById("otCloseOTL");
|
||||
|
||||
function showOneTimeUrl(fullUrl) {
|
||||
otUrl.innerHTML = fullUrl;
|
||||
@@ -177,11 +182,12 @@ otModal.addEventListener("click", (e) => {
|
||||
<div id="secure-password-msg"></div>
|
||||
<form id="secure-password-form-new">
|
||||
<input type="hidden" id="username-new" name="username" value="Neuer Benutzer">
|
||||
<input type="hidden" id="name_person-new" name="text" value="Neuer Benutzer">
|
||||
<input type="hidden" id="password-new" name="password" value="TemporaeresPasswort">
|
||||
<input type="hidden" id="nonce-new" value="<?php echo csrf_token(); ?>">
|
||||
<input type="hidden" id="field_id-new" name="field_id" value="0">
|
||||
<button type="submit">Neuer Benutzer</button>
|
||||
</form>
|
||||
<button type="submit" id="newUserLink">Neuer Benutzer (Registrationslink)</button>
|
||||
</div>
|
||||
<?php
|
||||
|
||||
@@ -201,7 +207,7 @@ $disciplines = array_map(
|
||||
$stmt->close();
|
||||
|
||||
$vereine = db_select($mysqli, $tableVereine, "id, verein, email", '', [], 'verein ASC');
|
||||
$entrys = db_select($mysqli, $tableInternUsers, "id, username, password_cipher, freigabe", '', [], 'username ASC');
|
||||
$entrys = db_select($mysqli, $tableInternUsers, "id, username, name_person, password_cipher, freigabe", '', [], 'username ASC');
|
||||
|
||||
echo '<h3 class="benutzer">Benutzer</h3><section class="inner-pw-set-bg" id="section-benutzer">';
|
||||
foreach ($entrys as $entry){
|
||||
@@ -234,6 +240,10 @@ foreach ($entrys as $entry){
|
||||
<label for="username-<?php echo $entry['id']; ?>">Benutzername</label>
|
||||
<input type="text" id="username-<?php echo $entry['id']; ?>" name="username" value="<?php echo $entry['username']; ?>" required>
|
||||
</div>
|
||||
<div class="field-group">
|
||||
<label for="name_person-<?php echo $entry['id']; ?>">Name des Benutzers:</label>
|
||||
<input type="text" id="name_person-<?php echo $entry['id']; ?>" name="name_person" value="<?php echo $entry['name_person']; ?>" required>
|
||||
</div>
|
||||
<div class="field-group">
|
||||
<label for="password-<?php echo $entry['id']; ?>">Passwort</label>
|
||||
<?php if ($decrypted_password === 'SET_BY_OTL'){
|
||||
@@ -322,24 +332,30 @@ foreach ($entrys as $entry){
|
||||
</div>
|
||||
|
||||
<button type="submit">Benutzer aktualisieren</button>
|
||||
<input type="hidden" id="nonce-<?php echo $entry['id']; ?>" value="<?php echo csrf_token(); ?>">
|
||||
<input type="hidden" id="field_id-<?php echo $entry['id']; ?>" name="field_id" value="<?php echo intval($entry['id']); ?>">
|
||||
</form>
|
||||
<button
|
||||
id="delete-user-<?php echo intval($entry['id']); ?>"
|
||||
class="delete-user-btn"
|
||||
data-id="<?php echo intval($entry['id']); ?>"
|
||||
data-nonce="<?php echo csrf_token(); ?>"
|
||||
type="button">
|
||||
Benutzer löschen
|
||||
</button>
|
||||
<button
|
||||
id="createOturl-<?php echo intval($entry['id']); ?>"
|
||||
class="createOturl"
|
||||
data-username="<?php echo $entry['username']; ?>"
|
||||
data-username="<?php echo $entry['username']; ?>"
|
||||
data-type="login"
|
||||
data-id="<?php echo intval($entry['id']); ?>"
|
||||
type="button">
|
||||
Einmallogin erstellen
|
||||
Einmallogin-Link erstellen
|
||||
</button>
|
||||
<button
|
||||
class="createOturl"
|
||||
data-username="<?php echo $entry['username']; ?>"
|
||||
data-type="pwreset"
|
||||
data-id="<?php echo intval($entry['id']); ?>"
|
||||
type="button">
|
||||
Passwortreset-Link erstellen
|
||||
</button>
|
||||
|
||||
|
||||
@@ -369,16 +385,14 @@ foreach ($entrys as $entry){
|
||||
</td>
|
||||
<td>
|
||||
<button type="submit" style="padding: 6px 14px; border: 1px solid #7777778e; background: #7777778e; color: #fff; border-radius: 4px; font-size: 0.85rem; cursor: pointer; transition: all 0.2s;">Speichern</button>
|
||||
<input type="hidden" id="nonceverein-<?php echo $entryvaer['id']; ?>" value="<?php echo csrf_token(); ?>">
|
||||
<input type="hidden" id="field_idverein-<?php echo $entryvaer['id']; ?>" name="field_id" value="<?php echo intval($entryvaer['id']); ?>">
|
||||
</td>
|
||||
</form>
|
||||
<td>
|
||||
<button
|
||||
id="delete-verein-<?php echo intval($entryvaer['id']); ?>"
|
||||
class="delete-verein-btn deleteProgramm"
|
||||
class="delete-verein-btn"
|
||||
data-id="<?php echo intval($entryvaer['id']); ?>"
|
||||
data-nonce="<?php echo csrf_token(); ?>"
|
||||
type="button" style="border:none; background:none; cursor:pointer;">
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round" style="color: #b91c1c;">
|
||||
<polyline points="3 6 5 6 21 6"></polyline>
|
||||
@@ -398,7 +412,6 @@ foreach ($entrys as $entry){
|
||||
</td>
|
||||
<td>
|
||||
<button type="submit">Hinzufügen</button>
|
||||
<input type="hidden" id="nonceverein-new" value="<?php echo csrf_token(); ?>">
|
||||
<input type="hidden" id="field_idverein-new" name="field_id" value="0">
|
||||
</td>
|
||||
</form>
|
||||
@@ -462,16 +475,127 @@ foreach ($entrys as $entry){
|
||||
</div>
|
||||
</section>
|
||||
</section>
|
||||
|
||||
<div class="bgNewUserLink hidden">
|
||||
<div class="newUserLink">
|
||||
<div class="ot-modal-top-content">
|
||||
<div class="ot-title">Daten & Freigaben:</div>
|
||||
<button id="otCloseNBL" class="ot-close-btn">✕</button>
|
||||
</div>
|
||||
<form>
|
||||
|
||||
<div class="field-group">
|
||||
<label for="username-linkUser">Benutzername (optional)</label>
|
||||
<input type="text" id="username-linkUser" name="username" value="">
|
||||
</div>
|
||||
<div class="field-group">
|
||||
<label for="name_person-linkUser">Name des Benutzers (optional)</label>
|
||||
<input type="text" id="name_person-linkUser" name="name_person" value="">
|
||||
</div>
|
||||
<div class="field-group">
|
||||
<label for="password-linkUser">Passwort (optional)</label>
|
||||
<input type="text" id="password-linkUser" name="password" value="">
|
||||
</div>
|
||||
|
||||
<p>Alle Daten, welche nicht hier gesetzt werden, werden durch den Benutzer selbst gesetzt.</p>
|
||||
|
||||
<!-- Permission dropdown: Zugang (Roles) -->
|
||||
|
||||
<div class="perm-section perm-section-types open" id="perm-zugang-linkUser">
|
||||
<div class="perm-section-header" onclick="this.parentElement.classList.toggle('open')">
|
||||
<span class="perm-section-title">
|
||||
Zugang
|
||||
<span class="perm-badge" id="badge-zugang-linkUser">erforderlich</span>
|
||||
</span>
|
||||
<svg class="perm-section-chevron" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M6 9l6 6 6-6"/></svg>
|
||||
</div>
|
||||
<div class="perm-section-body">
|
||||
<label>
|
||||
<input type="checkbox" name="freigabe[]" value="wk_leitung">
|
||||
WK-Leitung
|
||||
</label>
|
||||
<label>
|
||||
<input type="checkbox" name="freigabe[]" value="trainer">
|
||||
Trainer
|
||||
</label>
|
||||
<label>
|
||||
<input type="checkbox" name="freigabe[]" value="kampfrichter">
|
||||
Kampfrichter
|
||||
</label>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Permission dropdown: Trainer Vereine -->
|
||||
|
||||
<div class="perm-section perm-section-trainer" id="perm-tr-linkUser">
|
||||
<div class="perm-section-header" onclick="this.parentElement.classList.toggle('open')">
|
||||
<span class="perm-section-title">
|
||||
Trainer Vereine
|
||||
<span class="perm-badge" id="badge-tr-linkUser">erforderlich</span>
|
||||
</span>
|
||||
<svg class="perm-section-chevron" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M6 9l6 6 6-6"/></svg>
|
||||
</div>
|
||||
<div class="perm-section-body">
|
||||
<label>
|
||||
<input type="checkbox" name="freigabeTrainer[]" value="admin">
|
||||
Admin (alle Vereine)
|
||||
</label>
|
||||
<?php foreach ($vereine as $verein): ?>
|
||||
<label>
|
||||
<input type="checkbox" name="freigabeTrainer[]" value="<?php echo $verein['verein']; ?>">
|
||||
<?php echo ucfirst($verein['verein']); ?>
|
||||
</label>
|
||||
<?php endforeach; ?>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Permission dropdown: Kampfrichter Geräte -->
|
||||
<div class="perm-section perm-section-kampfrichter" id="perm-kr-linkUser">
|
||||
<div class="perm-section-header" onclick="this.parentElement.classList.toggle('open')">
|
||||
<span class="perm-section-title">
|
||||
Kampfrichter Geräte
|
||||
<span class="perm-badge" id="badge-kr-linkUser">erforderlich</span>
|
||||
</span>
|
||||
<svg class="perm-section-chevron" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M6 9l6 6 6-6"/></svg>
|
||||
</div>
|
||||
<div class="perm-section-body">
|
||||
<label>
|
||||
<input type="checkbox" name="freigabeKampfrichter[]" value="admin">
|
||||
Admin (alle Geräte)
|
||||
</label>
|
||||
<?php foreach ($disciplines as $discipline): ?>
|
||||
<label>
|
||||
<input type="checkbox" name="freigabeKampfrichter[]" value="<?php echo $discipline; ?>">
|
||||
<?php echo ucfirst($discipline); ?>
|
||||
</label>
|
||||
<?php endforeach; ?>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<button type="submit">Link erstellen</button>
|
||||
<input type="hidden" id="field_id-linkUser" name="field_id" value="linkUser">
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
<script>
|
||||
|
||||
const csrf_token = "<?= $csrf_token ?>";
|
||||
|
||||
jQuery(document).ready(function($) {
|
||||
|
||||
$(document).on('change', '.inputPreisProgramm', function() {
|
||||
const $input = $(this);
|
||||
const url = `/intern/scripts/logindata/ajax-update_programm_preis.php` +
|
||||
`?id=${encodeURIComponent($input.data('field-id'))}` +
|
||||
`&value=${encodeURIComponent($input.val())}` +
|
||||
`&token=k7uweziEUWZiJhwe7687UWIQZ28SQIH2ug74pINKyxHxPerB6wUZ`;
|
||||
const url = `/intern/scripts/logindata/ajax-update_programm_preis.php`;
|
||||
|
||||
fetch(url)
|
||||
fetch(url,{
|
||||
method: 'POST',
|
||||
headers: {'Content-Type': 'application/x-www-form-urlencoded'},
|
||||
body: new URLSearchParams({
|
||||
csrf_token,
|
||||
id: $input.data('field-id'),
|
||||
value: $input.val()
|
||||
})
|
||||
})
|
||||
.then(response => response.json())
|
||||
.then(data => {
|
||||
if (data.success) {
|
||||
@@ -488,12 +612,17 @@ jQuery(document).ready(function($) {
|
||||
$(document).on('change', '.inputAktivProgramm', function() {
|
||||
const $input = $(this);
|
||||
|
||||
const url = `/intern/scripts/logindata/ajax-update_programm_aktiv.php` +
|
||||
`?id=${encodeURIComponent($input.data('field-id'))}` +
|
||||
`&value=${encodeURIComponent($input.is(':checked') ? 1 : 0)}` +
|
||||
`&token=0UgBVHutbxTRTYsB04ujFKMjMRA8GgdqRJjVh3DKU1LRJfwtcDfrpDc7jpMxcrg9rYurAEwYPy5gu15R77MsgKsDMkFZEykx0A67`;
|
||||
const url = `/intern/scripts/logindata/ajax-update_programm_aktiv.php`;
|
||||
|
||||
fetch(url)
|
||||
fetch(url,{
|
||||
method: 'POST',
|
||||
headers: {'Content-Type': 'application/x-www-form-urlencoded'},
|
||||
body: new URLSearchParams({
|
||||
csrf_token,
|
||||
id: $input.data('field-id'),
|
||||
value: $input.is(':checked') ? 1 : 0
|
||||
})
|
||||
})
|
||||
.then(response => response.json())
|
||||
.then(data => {
|
||||
if (data.success) {
|
||||
@@ -564,11 +693,16 @@ jQuery(document).ready(function($) {
|
||||
return;
|
||||
}
|
||||
|
||||
const url = `/intern/scripts/logindata/ajax-neu_programm.php` +
|
||||
`?value=${encodeURIComponent(value)}` +
|
||||
`&token=sWZ4GxbsoVhUPk5zhjH0uU9hets3zV2KsV8CZUvAWCCRk4uuuDr9vfFVgxWqr5FtDttbtm50EdWK9YxuMPswGZBQZFHAUAET1aG1`;
|
||||
const url = `/intern/scripts/logindata/ajax-neu_programm.php`;
|
||||
|
||||
fetch(url)
|
||||
fetch(url,{
|
||||
method: 'POST',
|
||||
headers: {'Content-Type': 'application/x-www-form-urlencoded'},
|
||||
body: new URLSearchParams({
|
||||
csrf_token,
|
||||
value
|
||||
})
|
||||
})
|
||||
.then(response => response.json())
|
||||
.then(data => {
|
||||
if (data.success) {
|
||||
@@ -589,11 +723,16 @@ jQuery(document).ready(function($) {
|
||||
$(document).on('click', '.deleteProgramm', function() {
|
||||
const $input = $(this);
|
||||
|
||||
const url = `/intern/scripts/logindata/ajax-remove_programm.php` +
|
||||
`?id=${encodeURIComponent($input.data('field-id'))}` +
|
||||
`&token=bKqBAPjwojZdarJaE7jwvRrIEf2WzJUlFlufQadfLJ98qJcrWZK5pRlGoUQOHp1L06urGRbEdE9v5oIRirPiUCjm93wATghO4qx`;
|
||||
const url = `/intern/scripts/logindata/ajax-remove_programm.php`;
|
||||
|
||||
fetch(url)
|
||||
fetch(url,{
|
||||
method: 'POST',
|
||||
headers: {'Content-Type': 'application/x-www-form-urlencoded'},
|
||||
body: new URLSearchParams({
|
||||
csrf_token,
|
||||
id: $input.data('field-id')
|
||||
})
|
||||
})
|
||||
.then(response => response.json())
|
||||
.then(data => {
|
||||
if (data.success) {
|
||||
@@ -618,11 +757,15 @@ function toggleFreigabenDropdowns(el) {
|
||||
const $input = $(el);
|
||||
const type = $input.val();
|
||||
|
||||
console.log(type);
|
||||
|
||||
if (type !== 'kampfrichter' && type !== 'trainer') {
|
||||
return;
|
||||
}
|
||||
|
||||
const dropdown = $input.closest('.single_pwedit').find('.perm-section-' + type);
|
||||
const dropdown = $input.closest('form').find('.perm-section-' + type);
|
||||
|
||||
console.log(dropdown.length);
|
||||
|
||||
if ($input.is(':checked')) {
|
||||
dropdown.show();
|
||||
@@ -631,7 +774,7 @@ function toggleFreigabenDropdowns(el) {
|
||||
}
|
||||
}
|
||||
|
||||
const targetCheckboxes = '#section-benutzer .perm-section-types input[type="checkbox"]';
|
||||
const targetCheckboxes = '.perm-section-types input[type="checkbox"]';
|
||||
|
||||
$(targetCheckboxes).each(function() {
|
||||
toggleFreigabenDropdowns(this);
|
||||
@@ -642,9 +785,6 @@ $(document).on('change', targetCheckboxes, function() {
|
||||
});
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
// ----------------------------------------------------
|
||||
// ----------------------------------------------------
|
||||
// ----------------------------------------------------
|
||||
@@ -660,6 +800,7 @@ document.querySelectorAll('[id^="secure-password-form-"], #secure-password-form-
|
||||
|
||||
const password = document.getElementById('password-' + id)?.value || document.getElementById('password-new').value || 'TemporaeresPasswort';
|
||||
const username = document.getElementById('username-' + id)?.value || document.getElementById('username-new').value;
|
||||
const namePerson = document.getElementById('name_person-' + id)?.value || document.getElementById('name_person-new').value;
|
||||
const field_id = document.getElementById('field_id-' + id)?.value || document.getElementById('field_id-new').value;
|
||||
|
||||
// Collect all checked freigabe checkboxes within THIS form
|
||||
@@ -676,10 +817,12 @@ document.querySelectorAll('[id^="secure-password-form-"], #secure-password-form-
|
||||
params.append('action', 'set_general_password');
|
||||
params.append('password', password);
|
||||
params.append('username', username);
|
||||
params.append('namePerson', namePerson);
|
||||
params.append('field_id', field_id);
|
||||
|
||||
// We send an empty pwtype or 'all' to satisfy backend temporarily if it still checks it
|
||||
params.append('pwtype', 'all');
|
||||
params.append('csrf_token', csrf_token);
|
||||
|
||||
freigaben.forEach(value => params.append('freigaben[]', value));
|
||||
freigabenTrainer.forEach(value => params.append('freigabenTrainer[]', value));
|
||||
@@ -762,12 +905,12 @@ document.querySelectorAll('[id$="-verein"], #new-verein').forEach(form => {
|
||||
|
||||
const verein = document.getElementById('verein-' + id)?.value || document.getElementById('verein-new').value;
|
||||
const field_id = document.getElementById('field_idverein-' + id)?.value || document.getElementById('field_idverein-new').value;
|
||||
const nonce = document.getElementById('nonceverein-' + id)?.value || document.getElementById('nonceverein-new').value;
|
||||
|
||||
const params = new URLSearchParams();
|
||||
params.append('action', 'set_verein');
|
||||
params.append('verein', verein);
|
||||
params.append('field_id', field_id);
|
||||
params.append('csrf_token', csrf_token);
|
||||
|
||||
// Show loading overlay
|
||||
if (id === 'new'){
|
||||
@@ -801,10 +944,7 @@ document.querySelectorAll('[id$="-verein"], #new-verein').forEach(form => {
|
||||
.catch(err => {
|
||||
console.error(err);
|
||||
document.getElementById('loading-overlay').style.display = 'none';
|
||||
const error = document.getElementById('error-overlay');
|
||||
error.querySelector('.textError').textContent = 'Error, see console';
|
||||
error.classList.add('show');
|
||||
setTimeout(() => { error.classList.remove('show'); }, 2500);
|
||||
displayMsg(0, 'Fehler, siehe Konsole.');
|
||||
});
|
||||
});
|
||||
});
|
||||
@@ -813,7 +953,6 @@ document.querySelectorAll('.delete-user-btn').forEach(btn => {
|
||||
e.preventDefault();
|
||||
|
||||
const id = btn.dataset.id;
|
||||
const nonce = btn.dataset.nonce;
|
||||
|
||||
if (!confirm("Benutzer wirklich löschen?")) {
|
||||
return;
|
||||
@@ -825,8 +964,9 @@ document.querySelectorAll('.delete-user-btn').forEach(btn => {
|
||||
const params = new URLSearchParams();
|
||||
params.append('action', 'delete_secure_user');
|
||||
params.append('field_id', id);
|
||||
params.append('csrf_token', csrf_token);
|
||||
|
||||
fetch('/intern/scripts/logindata/ajax02.php', {
|
||||
fetch('/intern/scripts/logindata/ajax-delete-user.php', {
|
||||
method: 'POST',
|
||||
body: params
|
||||
})
|
||||
@@ -840,23 +980,15 @@ document.querySelectorAll('.delete-user-btn').forEach(btn => {
|
||||
if (div) div.remove();
|
||||
|
||||
const success = document.getElementById('success-overlay');
|
||||
success.querySelector('.textSucsess').textContent = data.message || 'Benutzer gelöscht!';
|
||||
success.classList.add('show');
|
||||
setTimeout(() => { success.classList.remove('show'); }, 2500);
|
||||
displayMsg(1, data.message || 'Benutzer gelöscht!');
|
||||
} else {
|
||||
const error = document.getElementById('error-overlay');
|
||||
error.querySelector('.textError').textContent = data.data || 'Fehler beim Löschen';
|
||||
error.classList.add('show');
|
||||
setTimeout(() => { error.classList.remove('show'); }, 2500);
|
||||
displayMsg(0, data.data || 'Fehler beim Löschen');
|
||||
}
|
||||
})
|
||||
.catch(err => {
|
||||
console.error(err);
|
||||
document.getElementById('loading-overlay').style.display = 'none';
|
||||
const error = document.getElementById('error-overlay');
|
||||
error.querySelector('.textError').textContent = 'Error, see console';
|
||||
error.classList.add('show');
|
||||
setTimeout(() => { error.classList.remove('show'); }, 2500);
|
||||
displayMsg(0, 'Fehler, siehe Konsole.');
|
||||
});
|
||||
});
|
||||
});
|
||||
@@ -876,12 +1008,15 @@ document.querySelectorAll('.createOturl').forEach(btn => {
|
||||
e.preventDefault();
|
||||
|
||||
const id = btn.dataset.id;
|
||||
const type = btn.dataset.type;
|
||||
const username = btn.getAttribute("data-username");
|
||||
|
||||
const params = new URLSearchParams();
|
||||
params.append('user_id', id);
|
||||
params.append('type', type);
|
||||
params.append('csrf_token', csrf_token);
|
||||
|
||||
fetch('/intern/scripts/logindata/ajax05.php', {
|
||||
fetch('/intern/scripts/logindata/ajax-create-otl.php', {
|
||||
method: 'POST',
|
||||
body: params
|
||||
})
|
||||
@@ -947,10 +1082,7 @@ document.querySelectorAll('.createOturl').forEach(btn => {
|
||||
})
|
||||
.catch(err => {
|
||||
console.error(err);
|
||||
const error = document.getElementById('error-overlay');
|
||||
error.querySelector('.textError').textContent = 'Error, see console';
|
||||
error.classList.add('show');
|
||||
setTimeout(() => { error.classList.remove('show'); }, 2500);
|
||||
displayMsg(0, 'Fehler, siehe Konsole.');
|
||||
});
|
||||
});
|
||||
});
|
||||
@@ -960,7 +1092,6 @@ document.querySelectorAll('.delete-verein-btn').forEach(btn => {
|
||||
e.preventDefault();
|
||||
|
||||
const id = btn.dataset.id;
|
||||
const nonce = btn.dataset.nonce;
|
||||
|
||||
if (!confirm("Verein wirklich löschen?")) {
|
||||
return;
|
||||
@@ -971,8 +1102,9 @@ document.querySelectorAll('.delete-verein-btn').forEach(btn => {
|
||||
|
||||
const params = new URLSearchParams();
|
||||
params.append('field_id', id);
|
||||
params.append('csrf_token', csrf_token);
|
||||
|
||||
fetch('/intern/scripts/logindata/ajax04.php', {
|
||||
fetch('/intern/scripts/logindata/ajax-delete-verein.php', {
|
||||
method: 'POST',
|
||||
body: params
|
||||
})
|
||||
@@ -985,27 +1117,143 @@ document.querySelectorAll('.delete-verein-btn').forEach(btn => {
|
||||
const tr = document.getElementById('div_verein-' + id);
|
||||
if (tr) tr.remove();
|
||||
|
||||
const success = document.getElementById('success-overlay');
|
||||
success.querySelector('.textSucsess').textContent = data.message || 'Verein gelöscht!';
|
||||
success.classList.add('show');
|
||||
setTimeout(() => { success.classList.remove('show'); }, 2500);
|
||||
displayMsg(0, data.message || 'Verein gelöscht!');
|
||||
} else {
|
||||
const error = document.getElementById('error-overlay');
|
||||
error.querySelector('.textError').textContent = data || 'Fehler beim Löschen';
|
||||
error.classList.add('show');
|
||||
setTimeout(() => { error.classList.remove('show'); }, 2500);
|
||||
displayMsg(0, data || 'Fehler beim Löschen');
|
||||
}
|
||||
})
|
||||
.catch(err => {
|
||||
console.error(err);
|
||||
document.getElementById('loading-overlay').style.display = 'none';
|
||||
const error = document.getElementById('error-overlay');
|
||||
error.querySelector('.textError').textContent = 'Error, see console';
|
||||
error.classList.add('show');
|
||||
setTimeout(() => { error.classList.remove('show'); }, 2500);
|
||||
displayMsg(0, 'Fehler, siehe Konsole.');
|
||||
});
|
||||
});
|
||||
|
||||
const $bgNewUserLink = $('.bgNewUserLink');
|
||||
const $closeXNUL = $('#otCloseNBL');
|
||||
|
||||
$('#newUserLink').on('click', function () {
|
||||
$bgNewUserLink.toggleClass("hidden");
|
||||
});
|
||||
|
||||
$closeXNUL.on('click', function (e) {
|
||||
$bgNewUserLink.addClass("hidden");
|
||||
});
|
||||
|
||||
$bgNewUserLink.on('click', function (e) {
|
||||
if (e.target === e.currentTarget) {
|
||||
$(this).addClass("hidden");
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
const formNewUserLink = document.querySelector('.newUserLink form');
|
||||
formNewUserLink.addEventListener('submit', e => {
|
||||
e.preventDefault();
|
||||
|
||||
const password = document.getElementById('password-linkUser').value ?? null;
|
||||
const username = document.getElementById('username-linkUser').value ?? null;
|
||||
const namePerson = document.getElementById('name_person-linkUser').value ?? null;
|
||||
|
||||
// Collect all checked freigabe checkboxes within THIS form
|
||||
const checkboxesFreigaben = formNewUserLink.querySelectorAll('input[name="freigabe[]"]:checked');
|
||||
const freigaben = Array.from(checkboxesFreigaben).map(cb => cb.value);
|
||||
|
||||
const checkboxesTrainer = formNewUserLink.querySelectorAll('input[name="freigabeTrainer[]"]:checked');
|
||||
const freigabenTrainer = Array.from(checkboxesTrainer).map(cb => cb.value);
|
||||
|
||||
const checkboxesKampfrichter = formNewUserLink.querySelectorAll('input[name="freigabeKampfrichter[]"]:checked');
|
||||
const freigabenKampfrichter = Array.from(checkboxesKampfrichter).map(cb => cb.value);
|
||||
|
||||
if (freigaben.length === 0) { displayMsg(2, "Keine Freigaben ausgewält."); return; }
|
||||
|
||||
if (freigaben.includes('kampfrichter') && freigabenKampfrichter.length === 0) { displayMsg(2, "Keine Freigabe für Kampfrichter ausgewält."); return; }
|
||||
if (freigaben.includes('trainer') && freigabenTrainer.length === 0) { displayMsg(2, "Keine Freigabe für Trainer ausgewält."); return; }
|
||||
|
||||
const params = new URLSearchParams();
|
||||
params.append('password', password);
|
||||
params.append('username', username);
|
||||
params.append('namePerson', namePerson);
|
||||
params.append('csrf_token', csrf_token);
|
||||
|
||||
freigaben.forEach(value => params.append('freigaben[]', value));
|
||||
freigabenTrainer.forEach(value => params.append('freigabenTrainer[]', value));
|
||||
freigabenKampfrichter.forEach(value => params.append('freigabenKampfrichter[]', value));
|
||||
|
||||
fetch('/intern/scripts/logindata/ajax-create-link-user.php', {
|
||||
method: 'POST',
|
||||
body: params
|
||||
})
|
||||
.then(res => res.json())
|
||||
.then(data => {
|
||||
|
||||
if (data.success) {
|
||||
|
||||
let urlDiv = document.getElementById('oturldiv');
|
||||
if (!urlDiv){
|
||||
return
|
||||
}
|
||||
urlDiv.style.display = 'flex';
|
||||
|
||||
let fullUrl = window.location.origin + '/intern/otlogin?otl=' + data.url;
|
||||
console.log(fullUrl);
|
||||
let aOturl = document.getElementById('aOturl');
|
||||
if (!aOturl){
|
||||
return
|
||||
}
|
||||
aOturl.innerHTML = fullUrl;
|
||||
aOturl.href = fullUrl;
|
||||
|
||||
let oturlGb = document.getElementById('oturlGb');
|
||||
if (!oturlGb){
|
||||
return
|
||||
}
|
||||
|
||||
|
||||
const tomorrow = new Date();
|
||||
tomorrow.setDate(tomorrow.getDate() + 1);
|
||||
|
||||
oturlGb.innerHTML = 'Link gültig bis: ' + germanDate(tomorrow);
|
||||
|
||||
|
||||
const qrcodeContainer = document.getElementById("qrcode");
|
||||
|
||||
qrcodeContainer.innerHTML = '';
|
||||
|
||||
// 1. Generate the QR Code
|
||||
const qr = new QRCode(qrcodeContainer, {
|
||||
text: fullUrl,
|
||||
width: 256,
|
||||
height: 256
|
||||
});
|
||||
|
||||
// 2. Add Download Logic
|
||||
document.getElementById("btnDownloadQRCode").addEventListener("click", () => {
|
||||
// Find the canvas element inside the qrcode div
|
||||
const canvas = qrcodeContainer.querySelector("canvas");
|
||||
|
||||
if (canvas) {
|
||||
const image = canvas.toDataURL("image/png");
|
||||
const link = document.createElement("a");
|
||||
link.href = image;
|
||||
link.download = `QR_Code_Einmallogin_${username}.png`;
|
||||
link.click();
|
||||
} else {
|
||||
alert("QR Code not ready yet!");
|
||||
}
|
||||
});
|
||||
}
|
||||
})
|
||||
.catch(err => {
|
||||
console.error(err);
|
||||
if (id === 'new'){
|
||||
document.getElementById('new-overlay').style.display = 'none';
|
||||
} else {
|
||||
document.getElementById('loading-overlay').style.display = 'none';
|
||||
}
|
||||
displayMsg(0, data.message || data || 'Es trat ein Fehler auf. Siehe Konsole.');
|
||||
});
|
||||
});
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
Reference in New Issue
Block a user