Jump to content

User:WikiBayer/Massblockinthelog.js

From Meta, a Wikimedia project coordination wiki

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");
                }
            }
        });
    });
});