User:Euphoria/massBlock.js: Difference between revisions
From Test Wiki
Content deleted Content added
No edit summary |
No edit summary |
||
| Line 1: | Line 1: | ||
// Check if the current user has admin rights |
|||
if (mw.config.get('wgUserGroups').includes('sysop')) { |
if (mw.config.get('wgUserGroups').includes('sysop')) { |
||
// Function to create the blocking interface |
// Function to create the blocking interface |
||
function createBlockingInterface() { |
function createBlockingInterface() { |
||
// Ensure the interface isn't already open |
|||
| ⚫ | |||
| ⚫ | |||
| ⚫ | |||
| ⚫ | |||
| ⚫ | |||
'<h1>Mass Block Tool</h1>' + |
|||
'<p>If you abuse this tool, it\'s your fault, not mine.</p>' + |
|||
| ⚫ | |||
| ⚫ | |||
| ⚫ | |||
'<h3>Common reasons:</h3>' + |
|||
'<select id="blockReasonSelect">' + |
|||
'<option value="vandalism">Vandalism</option>' + |
|||
'<option value="spam">Spam</option>' + |
|||
'<option value="harassment">Harassment</option>' + |
|||
'<option value="other">Other reason</option>' + |
|||
'</select><br>' + |
|||
'<input type="text" id="otherBlockReason" placeholder="Other/additional reason" style="display:none; margin-top: 10px;">' + |
|||
| ⚫ | |||
'<h3>Block duration:</h3>' + |
|||
'<select id="blockDuration">' + |
|||
'<option value="indefinite">indefinite</option>' + |
|||
'<option value="3 hours">3 hours</option>' + |
|||
'<option value="12 hours">12 hours</option>' + |
|||
| ⚫ | |||
'<option value="3 days">3 days</option>' + |
|||
'<option value="1 week">1 week</option>' + |
|||
'<option value="1 month">1 month</option>' + |
|||
'<option value="3 months">3 months</option>' + |
|||
'<option value="6 months">6 months</option>' + |
|||
| ⚫ | |||
'<option value="other">Other...</option>' + |
|||
'</select><br>' + |
|||
'<input type="text" id="customBlockDuration" placeholder="Custom duration" style="display:none; margin-top: 10px;">' + |
|||
| ⚫ | |||
'<input type="checkbox" id="nocreateCheckbox" checked> Prevent account creation<br>' + |
|||
'<input type="checkbox" id="noemailCheckbox" checked> Prevent user from sending email<br>' + |
|||
'<button id="executeMassBlock" style="margin-top: 10px;">Block Users</button>' + |
|||
'</div>'; |
|||
// Check if the form already exists to avoid duplicates |
|||
| ⚫ | |||
$('body').append(formHtml); |
$('body').append(formHtml); |
||
| ⚫ | |||
// Show or hide the custom reason input based on the selected reason |
|||
| ⚫ | |||
$('#blockReasonSelect').change(function() { |
|||
if ($(this).val() === 'other') { |
|||
$('#otherBlockReason').show(); |
|||
} else { |
|||
$('#otherBlockReason').hide(); |
|||
} |
|||
}); |
}); |
||
| ⚫ | |||
// Show or hide the custom duration input based on the selected duration |
|||
$('#blockDuration').change(function() { |
|||
if ($(this).val() === 'other') { |
|||
$('#customBlockDuration').show(); |
|||
} else { |
|||
$('#customBlockDuration').hide(); |
|||
} |
|||
| ⚫ | |||
// Handle the block users button click |
|||
| ⚫ | |||
var usernames = $('#usernamesToBlock').val().split('\n'); |
|||
var blockReason = $('#blockReasonSelect').val() === 'other' ? |
|||
$('#otherBlockReason').val() : $('#blockReasonSelect').find('option:selected').text(); |
|||
| ⚫ | |||
$('#customBlockDuration').val() : $('#blockDuration').val(); |
|||
var nocreate = $('#nocreateCheckbox').is(':checked'); |
|||
var noemail = $('#noemailCheckbox').is(':checked'); |
|||
usernames.forEach(function(username) { |
|||
if (username.trim() !== '') { |
|||
blockUser(username.trim(), blockReason, duration, nocreate, noemail); |
|||
} |
|||
}); |
|||
}); |
|||
| ⚫ | |||
} |
} |
||
// Function to block a user |
// Function to block a user |
||
function blockUser(username, reason, duration) { |
function blockUser(username, reason, duration, nocreate, noemail) { |
||
var api = new mw.Api(); |
var api = new mw.Api(); |
||
api.postWithToken('csrf', { |
api.postWithToken('csrf', { |
||
| Line 45: | Line 86: | ||
expiry: duration, |
expiry: duration, |
||
reason: reason, |
reason: reason, |
||
nocreate: |
nocreate: nocreate ? 1 : 0, |
||
autoblock: true, |
autoblock: true, |
||
noemail: |
noemail: noemail ? 1 : 0 |
||
}).done(function(data) { |
}).done(function(data) { |
||
console.log('User blocked: ' + username); |
console.log('User blocked: ' + username); |
||
| Line 58: | Line 99: | ||
$(document).ready(function() { |
$(document).ready(function() { |
||
var portletLink = mw.util.addPortletLink( |
var portletLink = mw.util.addPortletLink( |
||
'p-tb', |
'p-tb', |
||
'#', |
'#', |
||
'Mass Block', |
'Mass Block', |
||
't-massblock', |
't-massblock', |
||
'Mass block users' |
'Mass block users' |
||
); |
); |
||
// Bind click event to the link |
// Bind the click event to the link |
||
$(portletLink).click(function(e) { |
$(portletLink).click(function(e) { |
||
e.preventDefault(); |
e.preventDefault(); |
||
createBlockingInterface(); |
createBlockingInterface(); |
||
}); |
}); |
||
}); |
}); |
||