User:WikiBayer/Massblockinthelog.js
Appearance
Note: After publishing, you may have to bypass your browser's cache to see the changes.
- Firefox / Safari: Hold Shift while clicking Reload, or press either Ctrl-F5 or Ctrl-R (⌘-R on a Mac)
- Google Chrome: Press Ctrl-Shift-R (⌘-Shift-R on a Mac)
- Edge: Hold Ctrl while clicking Refresh, or press Ctrl-F5.
$(function () {
function addCheckboxesToUserLinks(selector) {
$(selector).find('.mw-userlink').each(function () {
var userLink = $(this);
if (!userLink.prev('.user-block-checkbox').length) {
var checkbox = $('<input type="checkbox" class="user-block-checkbox" style="margin-right: 5px; transform: scale(1.2); accent-color: yellow;">');
userLink.before(checkbox);
}
});
}
function addCheckboxes() {
// Füge Checkboxen zu den Benutzerzeilen in den letzten Änderungen, dem Spam-Blacklist-Logbuch und dem Missbrauchsfilter-Logbuch hinzu
addCheckboxesToUserLinks('.mw-changeslist'); // Letzte Änderungen
addCheckboxesToUserLinks('.mw-logline-spamblacklist'); // Spam-Blacklist-Logbuch
addCheckboxesToUserLinks('.mw-special-AbuseLog'); // Missbrauchsfilter-Logbuch
addCheckboxesToUserLinks('.action-history');
}
// Hinzufügen der Checkboxen
addCheckboxes();
mw.hook('wikipage.content').add(function ($content) {
addCheckboxesToUserLinks($content);
});
// Füge ein Panel für Sperrgrund, Sperrparameter und Sperrzeit hinzu
var blockPanel = $('<div id="blockPanel" style="margin: 20px 0;border:1px solid #ccc;background-color:#f9f9f9;">').append(
'<label>Sperrgrund: <input type="text" id="blockReason" style="margin-right: 10px;"></label>',
'<label>Sperrzeit: <select name="blockExpiry" style="margin:10px;"><option value="infinite">Unbeschränkt</option><option value="31 hours">31 Stunde</option> <option value="48 hours">2 Tage</option><option value="31 days">1 Monat</option><option value="option4">6 Monate</option><option value="365 days">1 Jahr</option></select></label>',
'<label><input type="checkbox" id="blockAnonOnly" style="margin-right: 5px;"> Nur anonyme Benutzer sperren</label> ',
'<label><input type="checkbox" id="blockDisableAccount" style="margin-right: 5px;"> Erstellung von Benutzerkonten</label> ',
'<label><input type="checkbox" id="blockDisableTalk" style="margin-right: 5px;"> Eigene Diskussionsseite sperren</label> ',
'<button id="blockSelectedUsers" style="margin-top: 10px;">Ausgewählte Benutzer sperren</button>'
);
$('#mw-content-text').prepend(blockPanel);
var confirmDialog = $('<div id="confirmBlockDialog" title="Benutzer sperren bestätigen" style="display: none;">').append(
'<p>Die folgenden Benutzer werden gesperrt:</p>',
'<ul id="userList"></ul>'
);
$('body').append(confirmDialog);
// Sperrfunktion
function blockUser(username, blockreason, expiry, anonOnly, disableAccount, disableTalk) {
return new Promise((resolve, reject) => {
$.post(mw.util.wikiScript('api'), {
action: 'block',
user: username,
expiry: expiry,
reason: blockreason,
anononly: anonOnly ? '1' : '0',
nocreate: disableAccount ? '1' : '0',
autoblock: '1',
allowusertalk: disableTalk ? '0' : '1',
token: mw.user.tokens.get('csrfToken'),
format: 'json'
})
.done(function (data) {
if (data.block && !data.error) {
resolve(username);
} else {
reject(data.error);
}
})
.fail(function (jqXHR, textStatus) {
reject(textStatus);
});
});
}
// Sperren-Button Klick-Handler
$('#blockSelectedUsers').on('click', function () {
var selectedUsers = $('.user-block-checkbox:checked').map(function () {
return $(this).next('.mw-userlink').text();
}).get();
selectedUsers = [...new Map(selectedUsers.map(item => [item, item])).keys()];
var blockReason;
if (mw.config.get('wgUserGroups').includes('sysop')) {
blockreason = $('#blockReason').val();
} else if (mw.config.get('wgGlobalGroups').includes('global-sysop')) {
blockreason = $('#blockReason').val() + " [[:meta:Global sysops|(global sysop action)]]";
}
var blockExpiry = $('#blockExpiry').val();
var blockAnonOnly = $('#blockAnonOnly').is(':checked');
var blockDisableAccount = $('#blockDisableAccount').is(':checked');
var blockDisableTalk = $('#blockDisableTalk').is(':checked');
if (selectedUsers.length === 0) {
mw.notify('Keine Benutzer ausgewählt.', { type: 'error' });
return;
}
// Benutzerliste im Bestätigungsdialog anzeigen
$('#userList').empty();
selectedUsers.forEach(function (username) {
$('#userList').append('<li>' + username + '</li>');
});
// Bestätigungsdialog anzeigen
$('#confirmBlockDialog').dialog({
modal: true,
buttons: {
"Bestätigen": function () {
$(this).dialog("close");
// Sperrvorgang ausführen
var promises = selectedUsers.map(function (username) {
return blockUser(username, blockReason, blockExpiry, blockAnonOnly, blockDisableAccount, blockDisableTalk);
});
Promise.allSettled(promises).then(function (results) {
var successCount = 0;
var failureCount = 0;
results.forEach(function (result) {
if (result.status === 'fulfilled') {
successCount++;
} else {
failureCount++;
}
});
if (successCount > 0) {
mw.notify(successCount + ' Benutzer erfolgreich gesperrt.');
}
if (failureCount > 0) {
mw.notify(failureCount + ' Benutzer konnten nicht gesperrt werden.', { type: 'error' });
}
});
},
"Abbrechen": function () {
$(this).dialog("close");
}
}
});
});
});