Skip to content

Commit 2c0b7a0

Browse files
committed
warn: verify user's block status to avoid conflict
1 parent 8be8898 commit 2c0b7a0

File tree

1 file changed

+81
-23
lines changed

1 file changed

+81
-23
lines changed

modules/twinklewarn.js

Lines changed: 81 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -252,19 +252,24 @@ Twinkle.warn.callback = function twinklewarnCallback() {
252252
}
253253
}
254254

255-
var init = function() {
256-
// We must init the first choice (General Note);
257-
var evt = document.createEvent('Event');
258-
evt.initEvent('change', true, true);
259-
result.main_group.dispatchEvent(evt);
260-
};
261255

262-
Morebits.wiki.flow.check('User_talk:' + Morebits.wiki.flow.relevantUserName(), function () {
263-
Twinkle.warn.isFlow = true;
264-
init();
265-
}, function () {
266-
Twinkle.warn.isFlow = false;
267-
init();
256+
// init after user info fetched
257+
Twinkle.block.fetchUserInfo(function() {
258+
var init = function() {
259+
// We must init the first choice (General Note);
260+
var evt = document.createEvent('Event');
261+
evt.initEvent('change', true, true);
262+
result.main_group.dispatchEvent(evt);
263+
};
264+
265+
Morebits.wiki.flow.check('User_talk:' + Morebits.wiki.flow.relevantUserName(), function () {
266+
Twinkle.warn.isFlow = true;
267+
init();
268+
}, function () {
269+
Twinkle.warn.isFlow = false;
270+
init();
271+
});
272+
268273
});
269274
};
270275

@@ -2620,19 +2625,72 @@ Twinkle.warn.callback.evaluate = function twinklewarnCallbackEvaluate(e) {
26202625
Morebits.simpleWindow.setButtonsEnabled(false);
26212626
Morebits.status.init(e.target);
26222627

2623-
Morebits.wiki.actionCompleted.redirect = userTalkPage;
2624-
Morebits.wiki.actionCompleted.notice = wgULS('警告完成,将在几秒后刷新', '警告完成,將在幾秒後重新整理');
2625-
2626-
if (Twinkle.warn.isFlow) {
2627-
var flow_page = new Morebits.wiki.flow(userTalkPage, wgULS('用户Flow讨论页留言', '使用者Flow討論頁留言'));
2628-
flow_page.setCallbackParameters(params);
2629-
Twinkle.warn.callbacks.main_flow(flow_page);
2628+
var query = {
2629+
format: 'json',
2630+
action: 'query',
2631+
list: 'blocks|logevents',
2632+
letype: 'block',
2633+
lelimit: 1,
2634+
letitle: 'User:' + Morebits.wiki.flow.relevantUserName()
2635+
};
2636+
if (Morebits.isIPRange(Morebits.wiki.flow.relevantUserName())) {
2637+
query.bkip = Morebits.wiki.flow.relevantUserName();
26302638
} else {
2631-
var wikipedia_page = new Morebits.wiki.page(userTalkPage, wgULS('用户讨论页修改', '使用者討論頁修改'));
2632-
wikipedia_page.setCallbackParameters(params);
2633-
wikipedia_page.setFollowRedirect(true, false);
2634-
wikipedia_page.load(Twinkle.warn.callbacks.main);
2639+
query.bkusers = Morebits.wiki.flow.relevantUserName();
26352640
}
2641+
2642+
new mw.Api().get(query).then(function(data) {
2643+
var block = data.query.blocks[0];
2644+
var logevents = data.query.logevents[0];
2645+
var logid = data.query.logevents.length ? logevents.logid : false;
2646+
2647+
if (logid !== Twinkle.block.blockLogId || !!block !== !!Twinkle.block.currentBlockInfo) {
2648+
var message = mw.config.get('wgRelevantUserName') + wgULS('的封禁状态已被修改。', '的封鎖狀態已被修改。');
2649+
if (block) {
2650+
message += wgULS('新状态:', '新狀態:');
2651+
} else {
2652+
message += wgULS('最新日志:', '最新日誌:');
2653+
}
2654+
2655+
var logExpiry = '';
2656+
var blockActionText = {
2657+
'block': wgULS('封禁', '封鎖'),
2658+
'reblock': wgULS('重新封禁', '重新封鎖'),
2659+
'unblock': wgULS('解除封禁', '解除封鎖')
2660+
};
2661+
2662+
if (logevents.params.duration) {
2663+
if (logevents.params.duration === 'infinity') {
2664+
logExpiry = wgULS('无限期', '無限期');
2665+
} else {
2666+
var expiryDate = new Morebits.date(logevents.params.expiry);
2667+
logExpiry += '到' + expiryDate.calendar();
2668+
}
2669+
} else { // no duration, action=unblock, just show timestamp
2670+
logExpiry = '於' + new Morebits.date(logevents.timestamp).calendar();
2671+
}
2672+
message += '由' + logevents.user + wgULS('以“', '以「') + logevents.comment + wgULS('”', '」') +
2673+
blockActionText[logevents.action] + logExpiry + wgULS(',你想要继续发送警告吗?', ',你想要繼續發送警告嗎?');
2674+
2675+
if (!confirm(message)) {
2676+
Morebits.status.error(wgULS('发送警告', '發送警告'), wgULS('用户取消操作', '使用者取消操作'));
2677+
return;
2678+
}
2679+
}
2680+
Morebits.wiki.actionCompleted.redirect = userTalkPage;
2681+
Morebits.wiki.actionCompleted.notice = wgULS('警告完成,将在几秒后刷新', '警告完成,將在幾秒後重新整理');
2682+
2683+
if (Twinkle.warn.isFlow) {
2684+
var flow_page = new Morebits.wiki.flow(userTalkPage, wgULS('用户Flow讨论页留言', '使用者Flow討論頁留言'));
2685+
flow_page.setCallbackParameters(params);
2686+
Twinkle.warn.callbacks.main_flow(flow_page);
2687+
} else {
2688+
var wikipedia_page = new Morebits.wiki.page(userTalkPage, wgULS('用户讨论页修改', '使用者討論頁修改'));
2689+
wikipedia_page.setCallbackParameters(params);
2690+
wikipedia_page.setFollowRedirect(true, false);
2691+
wikipedia_page.load(Twinkle.warn.callbacks.main);
2692+
}
2693+
});
26362694
};
26372695

26382696
Twinkle.addInitCallback(Twinkle.warn, 'warn');

0 commit comments

Comments
 (0)