User:Euphoria/massBlock.js

From Test Wiki
Revision as of 11:50, 28 December 2023 by Euphoria (talk | contribs)

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)
  • Internet Explorer / Edge: Hold Ctrl while clicking Refresh, or press Ctrl-F5
  • Opera: Press Ctrl-F5.
if (mw.config.get('wgUserGroups').includes('sysop')) {
    // Function to create the blocking interface
    function createBlockingInterface() {
        var formHtml = '<div id="massBlockForm" style="background: white; border: 1px solid black; padding: 10px;">'
            + '<h3>Mass Block</h3>'
            + 'Usernames (comma-separated):<br><textarea id="usernamesToBlock" rows="2" cols="20"></textarea><br>'
            + 'Block reason:<br><input type="text" id="blockReason"><br>'
            + 'Block duration:<br><select id="blockDuration">'
            + '<option value="6 hours">6 hours</option>'
            + '<option value="24 hours">24 hours</option>'
            + '<option value="31 hours">31 hours</option>'
            + '<option value="1 week">1 week</option>'
            + '<option value="2 weeks">2 weeks</option>'
            + '<option value="1 month">1 month</option>'
            + '<option value="3 months">3 months</option>'
            + '<option value="6 months">6 months</option>'
            + '<option value="1 year">1 year</option>'
            + '<option value="5 years">5 years</option>'
            + '<option value="indefinite">indefinite</option>'
            + '</select><br>'
            + '<button id="executeMassBlock">Block Users</button>'
            + '</div>';

        // Check if the form already exists to avoid duplicates
        if ($('#massBlockForm').length === 0) {
            $('body').append(formHtml);
        }

        $('#executeMassBlock').click(function() {
            var users = $('#usernamesToBlock').val().split(',');
            var reason = $('#blockReason').val();
            var duration = $('#blockDuration').val();
            users.forEach(function(user) {
                blockUser(user.trim(), reason, duration);
            });
        });
    }

    // Function to block a user
    function blockUser(username, reason, duration) {
        var api = new mw.Api();
        api.postWithToken('csrf', {
            action: 'block',
            user: username,
            expiry: duration,
            reason: reason,
            nocreate: true,
            autoblock: true,
            noemail: true
        }).done(function(data) {
            console.log('User blocked: ' + username);
        }).fail(function(error) {
            console.log('Error blocking user: ' + username);
        });
    }

    // Add link to the sidebar
    $(document).ready(function() {
        var portletLink = mw.util.addPortletLink(
            'p-tb', // This is the ID of the toolbox section in the sidebar
            '#', // We'll bind the click event to open the interface
            'Mass Block', // The text of the link
            't-massblock', // The ID of the new link
            'Mass block users' // Tooltip text for the link
        );

        // Bind click event to the link
        $(portletLink).click(function(e) {
            e.preventDefault(); // Prevent the default action
            createBlockingInterface(); // Call the function to create/open the blocking interface
        });
    });
}