Benutzer:MGChecker2/bot2.js

aus Wikipedia, der freien Enzyklopädie
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>