260 lines
9.5 KiB
JavaScript
260 lines
9.5 KiB
JavaScript
/**
|
|
* Door Status Voting - Admin JavaScript
|
|
*/
|
|
|
|
(function($) {
|
|
'use strict';
|
|
|
|
$(document).ready(function() {
|
|
initSettingsForm();
|
|
initResetButtons();
|
|
initResetByTypeButtons();
|
|
initMismatchFilter();
|
|
initMetaStatusButtons();
|
|
});
|
|
|
|
/**
|
|
* Settings Form Handler
|
|
*/
|
|
function initSettingsForm() {
|
|
$('#dsv-settings-form').on('submit', function(e) {
|
|
e.preventDefault();
|
|
|
|
var $form = $(this);
|
|
var $btn = $form.find('.button-primary');
|
|
var $status = $form.find('.dsv-save-status');
|
|
|
|
$btn.prop('disabled', true).text('Speichern...');
|
|
$status.text('');
|
|
|
|
$.ajax({
|
|
type: 'POST',
|
|
url: dsvAdmin.ajaxUrl,
|
|
data: {
|
|
action: 'dsv_save_settings',
|
|
nonce: dsvAdmin.nonce,
|
|
disabled_posts: $('#dsv-disabled-posts').val()
|
|
},
|
|
success: function(response) {
|
|
if (response.success) {
|
|
$status.text('✓ Gespeichert').css('color', '#00a32a');
|
|
} else {
|
|
$status.text('✗ Fehler: ' + (response.data?.message || 'Unbekannt')).css('color', '#d63638');
|
|
}
|
|
},
|
|
error: function() {
|
|
$status.text('✗ Verbindungsfehler').css('color', '#d63638');
|
|
},
|
|
complete: function() {
|
|
$btn.prop('disabled', false).text('Einstellungen speichern');
|
|
|
|
setTimeout(function() {
|
|
$status.fadeOut(300, function() {
|
|
$(this).text('').show();
|
|
});
|
|
}, 3000);
|
|
}
|
|
});
|
|
});
|
|
}
|
|
|
|
/**
|
|
* Reset All Buttons Handler
|
|
*/
|
|
function initResetButtons() {
|
|
$(document).on('click', '.dsv-reset-btn', function() {
|
|
var $btn = $(this);
|
|
var $row = $btn.closest('tr');
|
|
var postId = $btn.data('post-id');
|
|
|
|
if (!confirm('Alle Votes für diesen Beitrag wirklich zurücksetzen?')) {
|
|
return;
|
|
}
|
|
|
|
$btn.prop('disabled', true).text('Löschen...');
|
|
|
|
$.ajax({
|
|
type: 'POST',
|
|
url: dsvAdmin.ajaxUrl,
|
|
data: {
|
|
action: 'dsv_reset_votes',
|
|
nonce: dsvAdmin.nonce,
|
|
post_id: postId
|
|
},
|
|
success: function(response) {
|
|
if (response.success) {
|
|
$row.fadeOut(300, function() {
|
|
$(this).remove();
|
|
checkEmptyTable();
|
|
});
|
|
} else {
|
|
alert('Fehler: ' + (response.data?.message || 'Unbekannt'));
|
|
$btn.prop('disabled', false).text('Alle löschen');
|
|
}
|
|
},
|
|
error: function() {
|
|
alert('Verbindungsfehler');
|
|
$btn.prop('disabled', false).text('Alle löschen');
|
|
}
|
|
});
|
|
});
|
|
}
|
|
|
|
/**
|
|
* Reset By Type Buttons Handler
|
|
*/
|
|
function initResetByTypeButtons() {
|
|
$(document).on('click', '.dsv-reset-type-btn', function() {
|
|
var $btn = $(this);
|
|
var $row = $btn.closest('tr');
|
|
var postId = $btn.data('post-id');
|
|
var type = $btn.data('type');
|
|
var typeLabel = type === 'open' ? 'Geöffnet' : 'Geschlossen';
|
|
|
|
if (!confirm('Alle "' + typeLabel + '" Stimmen für diesen Beitrag löschen?')) {
|
|
return;
|
|
}
|
|
|
|
var originalText = $btn.text();
|
|
$btn.prop('disabled', true).text('...');
|
|
|
|
$.ajax({
|
|
type: 'POST',
|
|
url: dsvAdmin.ajaxUrl,
|
|
data: {
|
|
action: 'dsv_reset_votes_by_type',
|
|
nonce: dsvAdmin.nonce,
|
|
post_id: postId,
|
|
type: type
|
|
},
|
|
success: function(response) {
|
|
if (response.success) {
|
|
// Zähler aktualisieren
|
|
$row.find('.dsv-count-open').text(response.data.votes.open);
|
|
$row.find('.dsv-count-closed').text(response.data.votes.closed);
|
|
$row.find('.dsv-count-total').text(response.data.votes.open + response.data.votes.closed);
|
|
|
|
// Status Badge aktualisieren
|
|
var $badge = $row.find('.dsv-badge');
|
|
$badge.removeClass('dsv-badge-open dsv-badge-closed dsv-badge-tied');
|
|
|
|
if (response.data.votes.open > response.data.votes.closed) {
|
|
$badge.addClass('dsv-badge-open').text('Geöffnet');
|
|
} else if (response.data.votes.closed > response.data.votes.open) {
|
|
$badge.addClass('dsv-badge-closed').text('Geschlossen');
|
|
} else {
|
|
$badge.addClass('dsv-badge-tied').text('Unklar');
|
|
}
|
|
|
|
// Wenn keine Votes mehr, Zeile entfernen
|
|
if (response.data.votes.open === 0 && response.data.votes.closed === 0) {
|
|
$row.fadeOut(300, function() {
|
|
$(this).remove();
|
|
checkEmptyTable();
|
|
});
|
|
} else {
|
|
// Kurzes Feedback
|
|
$btn.text('✓').css('color', '#00a32a');
|
|
setTimeout(function() {
|
|
$btn.prop('disabled', false).text(originalText).css('color', '');
|
|
}, 1000);
|
|
}
|
|
} else {
|
|
alert('Fehler: ' + (response.data?.message || 'Unbekannt'));
|
|
$btn.prop('disabled', false).text(originalText);
|
|
}
|
|
},
|
|
error: function() {
|
|
alert('Verbindungsfehler');
|
|
$btn.prop('disabled', false).text(originalText);
|
|
}
|
|
});
|
|
});
|
|
}
|
|
|
|
/**
|
|
* Filter: Nur Abweichungen anzeigen
|
|
*/
|
|
function initMismatchFilter() {
|
|
var $btn = $('#dsv-filter-mismatch');
|
|
var active = false;
|
|
|
|
$btn.on('click', function() {
|
|
active = !active;
|
|
var $table = $('#dsv-votes-table');
|
|
|
|
if (active) {
|
|
$table.find('tbody tr').not('.dsv-mismatch').hide();
|
|
$btn.addClass('button-primary').text('Alle anzeigen');
|
|
} else {
|
|
$table.find('tbody tr').show();
|
|
$btn.removeClass('button-primary').text('Nur Abweichungen anzeigen');
|
|
}
|
|
});
|
|
}
|
|
|
|
/**
|
|
* Meta-Status per Knopfdruck ändern
|
|
*/
|
|
function initMetaStatusButtons() {
|
|
$(document).on('click', '.dsv-meta-set-btn', function() {
|
|
var $btn = $(this);
|
|
var $cell = $btn.closest('.dsv-meta-status-cell');
|
|
var postId = $btn.data('post-id');
|
|
var status = $btn.data('status');
|
|
|
|
$cell.find('.dsv-meta-set-btn').prop('disabled', true);
|
|
|
|
$.ajax({
|
|
type: 'POST',
|
|
url: dsvAdmin.ajaxUrl,
|
|
data: {
|
|
action: 'dsv_update_meta_status',
|
|
nonce: dsvAdmin.nonce,
|
|
post_id: postId,
|
|
status: status
|
|
},
|
|
success: function(response) {
|
|
if (response.success) {
|
|
// Badge aktualisieren
|
|
var badgeClass = 'dsv-badge-tied';
|
|
var lower = status.toLowerCase();
|
|
if (lower === 'geöffnet') badgeClass = 'dsv-badge-open';
|
|
else if (lower === 'geschlossen') badgeClass = 'dsv-badge-closed';
|
|
|
|
var $badge = $cell.find('.dsv-badge, .dsv-meta-empty');
|
|
if ($badge.hasClass('dsv-meta-empty')) {
|
|
$badge.removeClass('dsv-meta-empty').addClass('dsv-badge');
|
|
}
|
|
$badge.removeClass('dsv-badge-open dsv-badge-closed dsv-badge-tied')
|
|
.addClass(badgeClass)
|
|
.text(status);
|
|
|
|
// Active-State der Buttons
|
|
$cell.find('.dsv-meta-set-btn').removeClass('active');
|
|
$btn.addClass('active');
|
|
} else {
|
|
alert('Fehler: ' + (response.data?.message || 'Unbekannt'));
|
|
}
|
|
},
|
|
error: function() {
|
|
alert('Verbindungsfehler');
|
|
},
|
|
complete: function() {
|
|
$cell.find('.dsv-meta-set-btn').prop('disabled', false);
|
|
}
|
|
});
|
|
});
|
|
}
|
|
|
|
/**
|
|
* Prüfen ob Tabelle leer ist
|
|
*/
|
|
function checkEmptyTable() {
|
|
if ($('tbody tr').length === 0) {
|
|
location.reload();
|
|
}
|
|
}
|
|
|
|
})(jQuery);
|