Benutzer:MGChecker2/bot2.js
Zur Navigation springen
Zur Suche springen
Hinweis: Leere nach dem Veröffentlichen den Browser-Cache, um die Änderungen sehen zu können.
- Firefox/Safari: Umschalttaste drücken und gleichzeitig Aktualisieren anklicken oder entweder Strg+F5 oder Strg+R (⌘+R auf dem Mac) drücken
- Google Chrome: Umschalttaste+Strg+R (⌘+Umschalttaste+R auf dem Mac) drücken
- Internet Explorer/Edge: Strg+F5 drücken oder Strg drücken und gleichzeitig Aktualisieren anklicken
- Opera: Strg+F5
// <nowiki>
// Wait until needed objects are loaded
mw.loader.using(["mediawiki.api", "mediawiki.api.edit", "mediawiki.util"],
function SuppressredirectStart(sr) {
// Initialization of SSR.* library that can be used for configuration
if ( typeof mw.libs.srRequest !== "object" || ! mw.libs.srRequest) {
mw.libs.srRequest = { };
}
var SRR = mw.libs.srRequest;
if ( ! typeof SRR.opt || typeof SRR.opt !== "object" ) {
SRR.opt = { };
}
// Determine page of the bot queue
var project = mw.config.get('wgDBname');
if ( ! typeof SRR.botPage || typeof SRR.botPage !== "string") {
switch (project) {
case "dewiki":
SRR.botPage = "User:Luke081515Bot/Warteschlange/Auftraege2";
break;
case "enwiki":
SRR.botPage = "User:Luke081515Bot/Queue/Requests";
break;
// you can add further projects using this principle
}
}
// This provides a standard path to the bot template.
// You can use this option to specify non-standard bot templares for a project
if ( ! typeof SRR.botTemplate || typeof SRR.botTemplate !== "string") {
var botPageArray = SRR.botPage.split("/");
botPageArray.pop();
SRR.botTemplate = botPageArray.join("/"); + "/Job";
}
// Incorporating user preferences.
if ( ! typeof SRR.opt.defaultSummary || typeof SRR.opt.defaultSummary !== "string" ) {
SRR.opt.defaultSummary = "";
}
if ( ! typeof SRR.opt.wait || typeof SRR.opt.wait !== "number") {
SRR.opt.wait = 4500;
}
// i18n
var lang;
if ( ! typeof SRR.opt.lang || typeof SRR.opt.lang !== "string") {
lang = mw.config.get('wgUserLanguage').toLowerCase();
} else {
lang = SRR.opt.lang;
}
// Die Idee für einen Schlüssel dieser Art und einen Teil der Inhalte habe ich von https://en.wikipedia.org/wiki/User:PerfektesChaos/js/autoBackup/d.js
SRR.i18nKey = {
"de" : "de",
"de-ch" : "de",
"de-at" : "de",
"als" : "de",
"bar" : "de",
"dsb" : "de",
"frr" : "de",
"gsw" : "de",
"hsb" : "de",
"ksh" : "de",
"lb" : "de",
"nds" : "de",
"nds-NL" : "de",
"pdc" : "de",
"pdt" : "de",
"pfl" : "de",
"sli" : "de",
"stq" : "de",
"vmf" : "de",
"de-formal" : "de-formal",
"nl" : "nl",
"nl-informal" : "nl",
"af" : "nl",
"li" : "nl",
"vls" : "nl",
"zea" : "nl"
};
if (SRR.i18nKey[lang] !== undefined) {
lang = SRR.i18nKey[lang];
} else {
lang = 'en';
}
SRR.i18n = {
"de": {
"relevantPageMissing" : "Die Seite, die du verschieben möchtest, existiert nicht. Möchtest du sie überprüfen?",
"relevantPageWrongContentmodel" : "Die Seite, die du verschieben möchtest, beinhaltet JS/CSS-Code. Möchtest du sie überprüfen?",
"relevantPageProtected" : "Du vefrügst nicht über die nötigen EBrechtigungen, um diese Seite zu verschieben. Möchtest du sie überprüfen?",
"buttonLabel" : "Verschieben (ohne WL)",
"buttonMouseover" : "Den Luke081515Bot verschieben lassen, ohne eine Weiterleitung anzulegen",
"disallowedChar" : "Das Ziellemma erhält eines oder mehrere der unerlaubten Zeichen <, >, |, [, ]. Möchtest du deine Eingabe korrigieren, klicke bitte auf OK; wenn nicht klicke bitte auf Abbrechen.",
"missingTarget" : "Kein Ziellemma angegeben. Möchtest du deine Eingabe korrigieren, klicke bitte auf OK; wenn nicht klicke bitte auf Abbrechen.",
"badLemma" : "Du kannst keine Verschiebung vornehmen lassen, da das Ziellemma bereits belegt ist. Wenn du das Ziellemma überprüfen möchtest, klicke bitte auf OK. Wenn du auf der Seite bleiben willst, klicke auf Abbrechen.",
"protectedLemma" : "Du kannst keine Verschiebung vornehmen lassen, da das Ziellemma vollgeschützt ist. Wenn du das Ziellemma überprüfen willst, klicke bitte auf OK. Wenn du auf der Seite bleiben willst, klicke auf Abbrechen.",
"apiReadError" : "Beim Überprüfen der zur Verschiebung nötigen Voraussetzungen ist ein Fehler aufgetreten. Bitte Fehler mit Fehlercode melden: ",
"enterSummary" : "Hier Zusammenfassung für die Verschiebung eintragen.",
"requestSuccess1" : "Die Verschiebeanfrage wurde erfolgreich durchgeführt.",
"requestSuccess2" : "Möchtest du zum Ziellemma weitergeleitet werden? Dies kann aus technischen Gründen allerdings einige Sekunden in Anspruch nehmen.",
"requestSuccess3" : "Sollte das Ziellemma nicht existieren, ist ein Check auf der Botseite zu empfehlen, da wahrscheinlich ein ungewöhnlicher Fehler aufgetreten ist, der durch das Skript nicht abgefangen werden kann.",
"apiWriteError" : "Beim Stellen der Verschiebeanfrage ist ein Fehler aufgetreten. Bitte Fehler mit Fehlercode melden: "
},
"de-formal" : {
"disallowedChar" : "Das Ziellemma erhält eines oder mehrere der unerlaubten Zeichen <, >, |, [, ]. Möchten Sie das Ziellemma korrigieren?",
"badLemma" : "Sie können keine Verschiebung vornehmen lassen, da das Ziellemma bereits belegt ist. Wenn du das Ziellemma überprüfen möchtest, klicke bitte auf OK. Wenn du auf der Seite bleiben willst, klicke auf Abbrechen.",
"protectedLemma" : "Sie können keine Verschiebung vornehmen lassen, da das Ziellemma vollgeschützt ist. Wenn du das Ziellemma überprüfen willst, klicke bitte auf OK. Wenn du auf der Seite bleiben willst, klicke auf Abbrechen.",
"requestSuccess2" : "Möchten Sie zum Ziellemma weitergeleitet werden? Dies kann aus technischen Gründen allerdings einige Sekunden in Anspruch nehmen."
},
"en" : {
// Hier müssen einige Nachrichten ergänzt werden
"buttonLabel" : "Move (without redirect)",
"buttonMouseover" : "Have the article been moved by Luke081515Bot without redirection",
"disallowedChar" : "i18n missing",
"missingTarget" : "i18n missing",
"badLemma" : "You can't have the article moved, because the target lemma is already in use. If you want to check the target lemma, please click on OK. If you want to stay on the page, click on Cancel.",
"protectedLemma" : "You can't have the article moved, because the target lemma is protected. If you want to check the target lemma, please click on OK. If you want to stay on the page, click on Cancel.",
"apiReadError" : "The check of the requirements to move the article failed. Please report error code: ",
"enterSummary" : "Insert the edit summary for moving the article here.",
"requestSuccess1" : "The request for moving the article succeeded.",
"requestSuccess2" : "Would you like to be forwarded to the target lemma? For processing reasons could it take several seconds.",
"requestSuccess3" : "If the target lemma does not exist, check the bot page please, because an unusual error could have appeared.",
"apiWriteError" : "The request for moving the article failed. Please report error code: "
}
};
SRR.i18n.project = {
"enterTarget" : {
"dewiki" : {
"de" : "Hier Ziellemma im Artikelnamensraum eintragen.",
"en" : "Please insert target lemma in main namespace here."
},
"enwiki": {
"de" : "Hier Ziellemma im Artikelnamensraum eintragen.",
"en" : "Please insert target lemma in main namespace here."
}
},
"badNamespace" : {
"dewiki" : {
"de" : "Du kannst keine Verschiebung vornehmen lassen, da sich das Ziellemma nicht im Artikelnamensraum befindet. Möchtest du deine Eingabe korrigieren, klicke bitte auf OK; wenn nicht klicke bitte auf Abbrechen.",
"de-formal" : "Sie können keine Verschiebung vornehmen lassen, da sich das Ziellemma nicht im Artikelnamensraum befindet.",
"en" : "i18n missing"
},
"enwiki" : {
"de" : "Du kannst keine Verschiebung vornehmen lassen, da sich das Ziellemma nicht im Artikelnamensraum befindet. Möchtest du deine Eingabe korrigieren, klicke bitte auf OK; wenn nicht klicke bitte auf Abbrechen.",
"de-formal" : "Sie können keine Verschiebung vornehmen lassen, da sich das Ziellemma nicht im Artikelnamensraum befindet.",
"en" : "i18n missing"
}
}
};
// Standardvariablen
var startLemma;
var targetLemma;
var corr1;
var wl;
var successi18n = true;
var articlePath = mw.config.get('wgArticlePath').replace('$1', '');
// Spezialfall Spezialseite
var rpn;
var rpnArray;
var rpnAllowed = true;
var userspace;
var success1 = true;
// Vorarbeit für Conditions
rpn = ('wpRelevantPageName');
rpnArray = rpn.split(":");
rpn = rpnArray[0].toLowerCase();
if ( mw.config.get("wgNamespaceIds")[rpn] == 2) {
rpnAllowed = false;
} else {
rpnArray.splice(0, 1);
var temp = rpnArray.join(":");
if (temp == mw.config.get('wgUserName')) {
rpnAllowed = false;
} else {
rpnArray = temp.split("/");
if (rpnArray[0] != mw.config.get('wgUserName')) {
rpnAllowed = false;
} else {
specialPageApi();
if (corr1 === false) {
return;
} else {
portletLink(); // in diesem Fall können noch Fehler auftreten wegen unzureichender Berechtigungen. Dazu zählen: 3 (blocked)
}
}
}
}
// Conditions
if ( (mw.config.get('wgNamespaceNumber') == 2 && // 1
mw.config.get('wgRelevantUserName') == mw.config.get('wgUserName') && // 2
mw.config.get('wgIsProbablyEditable') === true && // 3
mw.config.get('wgUserName') != mw.config.get('wgTitle') && // 4
mw.config.get('wgCurRevisionId') > 0 && // 5
mw.config.get('wgPageContentModel') == 'wikitext' && // 6
mw.config.get('wgRestrictionMove').indexOf("sysop") == -1 // 7
) || (
rpn !== false &&
rpnAllowed === true
)
)
{
portletLink();
}
function portletLink () {
// Create portlet link
var portletLink = mw.util.addPortletLink('p-cactions', '#', i18n('buttonLabel'), 'ca-luke081515Bot', i18n('buttonMouseover'));
// Start of main function
$(portletLink).click(function GetTargetLemma(e) {
e.preventDefault();
corr1 = false;
// Definition of more specific variables
if (mw.config.get('wgNamespaceNumber') == -1) {
startLemma = mw.config.get('wgRelevantPageName');
} else {
startLemma = mw.config.get('wgPageName');
}
// Generation of Subpagename
var subpageArray = startLemma.split("/");
subpageArray.reverse();
var SubpageName = subpageArray[0];
// First prompt
targetLemmaNC = window.prompt(projecti18n('enterTarget'), SubpageName);
targetLemma = mw.util.wikiUrlencode(targetLemmaNC);
// Catch not supported characters
if (targetLemmaNC.indexOf("<") != -1 ||
targetLemmaNC.indexOf(">") != -1 ||
targetLemmaNC.indexOf("|") != -1 ||
targetLemmaNC.indexOf("[") != -1 ||
targetLemmaNC.indexOf("]") != -1) {
corr1 = window.confirm(i18n('disallowedChar'));
if (corr1 === true) {
GetTargetLemma();
return;
}
else {
return;
}
}
// Catch Cancel and empty targetLemma
if (targetLemma === null) {
return;
} else {
if (targetLemma === '') {
corr1 = window.confirm(i18n('missingTarget'));
if (corr1 === true) {
GetTargetLemma();
return;
}
else {
return;
}
} else {
conditionApi();
return;
}
}
});
}
function specialPageApi() {
// Check if wgRelevantPageName is valid
var corr2;
var apiCheck1 = new mw.Api();
var apiCheck1Params = {
prop: "info",
inprop: "protection",
titles: targetLemmaNC,
indexpageids: true
};
apiCheck1.get(apiCheck1Params).done(function(data) {
var query = data.query;
var id = -1;
if (query) {
pageids = query.pageids;
if (pageids) {
id = pageids[0];
missing = query.pages[id].missing;
if (missing === "") {
wl = window.confirm(i18n('relevantPageMissing'));
success1 = false;
if (wl === true) {
window.open(mw.config.get('wgServer') + articlePath + mw.config.get('wgRelevantPageName'), "_parent");
}
} else {
contentmodel = query.pages[id].contentmodel;
if (contentmodel != "wikitext") {
wl = window.confirm(i18n('relevantPageWrongContentmodel'));
if (wl === true) {
window.open(mw.config.get('wgServer') + articlePath + mw.config.get('wgRelevantPageName'), "_parent");
}
} else {
try {
protection = query.pages[id].protection;
if (protection) {
var prlevel1 = protection[0].level;
if (prlevel1 == "editprotected" || prlevel1 == "sysop") {
wl = window.confirm(i18n('relevantPageProtected'));
success1 = false;
if (wl === true) {
window.open(mw.config.get('wgServer') + articlePath + mw.config.get('wgRelevantPageName'), "_parent");
}
}
var prlevel2 = protection[1].level;
if (prlevel2 == "editprotected" || prlevel2 == "sysop") {
wl = window.confirm(i18n('relevantPageProtected'));
success1 = false;
if (wl === true) {
window.open(mw.config.get('wgServer') + articlePath + mw.config.get('wgRelevantPageName'), "_parent");
}
}
}
} catch (err) {}
}
}
} else {
window.alert(i18n('apiReadError') + "103");
success1 = false;
}
} else {
window.alert(i18n('apiReadError') + "102");
success1 = false;
}
if (success1 === false) {
rpnAllowed = false;
return;
} else {
request();
}
}).fail(function(uhff) {
// Fehlgeschlagen.
window.alert(i18n('apiReadError') + "101");
return;
});
}
function conditionApi() {
// Check if targetLemma is valid
var success2 = true;
var corr3;
var apiCheck2 = new mw.Api();
var apiCheck2Params = {
prop: "info",
inprop: "protection",
titles: targetLemmaNC,
indexpageids: true
};
apiCheck2.get(apiCheck2Params).done(function(data) {
var query = data.query;
var id = -1;
if (query) {
pageids = query.pageids;
if (pageids) {
id = pageids[0];
ns = query.pages[id].ns;
if (ns !== 0) {
corr3 = window.confirm(projecti18n('badNamespace'));
success2 = false;
if (corr3 === true) {
GetTargetLemma();
}
} else {
missing = query.pages[id].missing;
if (missing !== "") {
wl = window.confirm(i18n('badLemma'));
success2 = false;
if (wl === true) {
window.open(mw.config.get('wgServer') + articlePath + targetLemma, "_parent");
}
} else {
try {
protection = query.pages[id].protection;
if (protection) {
var prlevel1 = protection[0].level;
if (prlevel1 == "editprotected" || prlevel1 == "sysop") {
wl = window.confirm(i18n('protectedLemma'));
success2 = false;
if (wl === true) {
window.open(mw.config.get('wgServer') + articlePath + targetLemma, "_parent");
}
}
var prlevel2 = protection[1].level;
if (prlevel2 == "editprotected" || prlevel2 == "sysop") {
wl = window.confirm(i18n('protectedLemma'));
success2 = false;
if (wl === true) {
window.open(mw.config.get('wgServer') + articlePath + targetLemma, "_parent");
}
}
}
} catch (err) {}
}
}
} else {
window.alert(i18n('apiReadError') + "203");
success2 = false;
}
} else {
window.alert(i18n('apiReadError') + "202");
success2 = false;
}
if (success2 === false) {
return;
} else {
request();
}
}).fail(function(uhff) {
// Fehlgeschlagen.
window.alert(i18n('apiReadError') + "201");
return;
});
}
function request() {
// Second prompt
var summary = window.prompt(i18n('enterSummary'), SRR.opt.defaultSummary); // Als Standardwert später Variable Standardzusammenfassung
// Catch Cancel
if (summary === null) {
return;
}
// Main part of function which most important part isn't seen by the user: Saving of the edit, and alert if apiEdit has worked or not
var apiEdit = new mw.Api();
apiEdit.postWithToken('edit', {
action: 'edit',
title: SRR.botPage,
section: 'new',
notminor: true,
nocreate: true,
watchlist: 'nochange',
contentmodel: 'wikitext',
text: '{{'+ SRR.botTemplate + '|TASK=sr|USER={{subst:REVISIONUSER}}|StartLemma=' +
startLemma +
'|TargetLemma=' +
targetLemma +
'|Summary=' +
summary +
'|STATUS=s}}'
}).done(function() {
// goTo wird bestimmt
var goTo = targetLemma;
if ( typeof SRR.opt.goTo == "string" ||
typeof SRR.opt.goTo == "number" ||
SRR.opt.GoTo == false) {
goTo = SRR.opt.goTo;
if ( typeof goTo === "number") {
switch (goTo) {
case 0:
goTo = SRR.botPage;
break;
case 1:
goTo = startLemma;
break;
case 2:
goTo = targetLemma;
break;
default:
goTo = targetLemma;
break;
}
} else if (goTo === false) {
goTo = startLemma;
}
}
// goTo wird angewendet
if (goTo == startLemma) {
window.alert(i18n('requestSuccess1') + " " + i18n('requestSuccess3'));
} else {
wl = window.confirm(i18n('requestSuccess1') + " " + i18n('requestSuccess2') + " " + i18n('requestSuccess3'));
}
if (wl === true && goTo != startLemma) {
setTimeout(window.open(mw.config.get('wgServer') + articlePath + goTo, "_parent"), SRR.opt.wait);
}
}).fail(function() {
window.alert(i18n('apiReadError') + "301");
});
}
function i18n(msgname) {
var msg = SRR.i18n[lang][msgname];
if (typeof msg === 'undefined') {
if (UL == 'de-formal') { // Falls Message in de-formal nicht vorhanden, nimm die in Deutsch
msg = SRR.i18n['de'][msgname];
}
if (typeof msg === 'undefined') { // Falls eine Message nicht in einer der vorgehaltenen Sprachen vorliegt (sollte nicht geschehen), nimm zuerst die in englisch, dann die deutsche als Alternative
msg = SRR.i18n['en'][msgname];
}
if (typeof msg === 'undefined') {
msg = SRR.i18n['de'][msgname];
}
}
return msg;
}
function projecti18n(msgname) {
var msg = SRR.i18n.project[msgname][project][lang];
if (typeof msg === 'undefined') {
if (lang == 'de-formal') { // Falls Message in de-formal nicht vorhanden, nimm die in Deutsch
msg = SRR.i18n[msgname][project]['de'];
}
if (typeof msg === 'undefined') { // Falls eine Message nicht in einer der vorgehaltenen Sprachen vorliegt (sollte nicht geschehen), nimm zuerst die in englisch, dann die deutsche als Alternative
msg = SRR.i18n[msgname][project]['en'];
}
if (typeof msg === 'undefined') { // Falls eine Message nicht in einer der vorgehaltenen Sprachen vorliegt (sollte nicht geschehen), nimm zuerst die in englisch, dann die deutsche als Alternative
msg = SRR.i18n[msgname][project]['de'];
}
if (typeof msg === 'undefined') { // Falls eine Message nicht in einer der vorgehaltenen Sprachen vorliegt (sollte nicht geschehen), nimm zuerst die in englisch, dann die deutsche als Alternative
msg = SRR.i18n[msgname]['dewiki']['en'];
}
if (typeof msg === 'undefined') { // Falls eine Message nicht in einer der vorgehaltenen Sprachen vorliegt (sollte nicht geschehen), nimm zuerst die in englisch, dann die deutsche als Alternative
msg = SRR.i18n[msgname]['dewiki']['de'];
}
}
return msg;
}
});
// </nowiki>