Modül:Korumalı değişiklik isteği

Vikipedi, özgür ansiklopedi
Modül belgelemesi[oluştur]
require('Modül:Küresel değil')

local iletiKutusu = require("Modül:İleti kutusu").main

local function yapNesne(sayfa)
	local nesne = {}
	local baslik = mw.title.new(sayfa)
	local deneme = mw.title.new(sayfa.."/deneme")

	function nesne:adalani() return baslik.nsText end
	function nesne:baglanti() return "[["..baslik.fullText.."]]" end
	function nesne:duzenle() return "["..baslik:fullUrl{action = 'edit'}.." düzenle]" end
	function nesne:gecmis() return "["..baslik:fullUrl{action = 'history'}.." geçmiş]" end
	function nesne:sonDegisiklik() return "["..baslik:fullUrl{diff = 'cur', oldid = 'prev'}.." son]" end
	function nesne:baglantilar() return "[[Özel:SayfayaBağlantılar/"..baslik.fullText.."|bağlantılar]]" end
	
	function nesne:deneme() return "[["..deneme.fullText.."|deneme tahtası]]" end
	function nesne:denemeDuzenle()
		return "["..deneme:fullUrl{action = 'edit'}.." deneme tahtasını düzenle]"
	end
	function nesne:denemeGecmis()
		return "["..deneme:fullUrl{action = 'history'}.." deneme tahtası geçmişi]"
	end
	function nesne:denemeSon()
		return "["..deneme:fullUrl{diff = 'cur', oldid = 'prev'}.." deneme tahtası son]"
	end
	function nesne:fark()
		local kar = mw.title.new("Özel:SayfaKarşılaştır")
		return "["..kar:fullUrl{page1 = baslik.fullText, page2 = deneme.fullText}.." fark]"
	end
	
	function nesne:test()
		return "[["..mw.title.new(sayfa.."/test").fullText.."|test senaryosu]]"
	end
	
	function nesne:ciktiSayisi()
		local bag = mw.uri.new{
			host = 'tools.wmflabs.org',
			path = '/templatecount/index.php',
			query = {
				lang = 'tr',
				name = baslik.text,
				namespace = baslik.namespace,
			},
			fragment = 'bottom'
		}
		return "["..tostring(bag).." çıktı sayısı]"
	end
	
	function nesne:gunluk()
		local kar = mw.title.new("Özel:Günlük")
		return "["..kar:fullUrl{type = "protect", page = baslik.fullText}.." günlük]"
	end
	
	function nesne:altBar()
		local ciktilar = {nesne:duzenle(), nesne:gecmis(), nesne:sonDegisiklik(), nesne:baglantilar()}
		local denemeler = {
			nesne:deneme(), nesne:denemeDuzenle(), nesne:denemeGecmis(),
			nesne:denemeSon(), nesne:fark()
		}
		for _,d in ipairs(denemeler) do if deneme.exists then table.insert(ciktilar, d) end end
		if mw.title.new(sayfa.."/test").exists then table.insert(ciktilar, nesne:test()) end
		table.insert(ciktilar, nesne:ciktiSayisi())
		table.insert(ciktilar, nesne:gunluk())

		return "<small>(" .. table.concat(ciktilar, " '''·''' ") .. ")</small>"
	end

	return nesne
end

local function istek(params, tip)
	local sayfa = params[1]
	local nesne = yapNesne(sayfa)
	local hedef = params.hedef or ""
	local sebep = params.sebep or ""
	local args = {}
	args.resim = "[[Dosya:Yarı-koruma.svg|60px]]"
	args.metin = "'''"..(tip == "değişiklik" and "[[Yardım:Koruma|Koruma altında]] olan " or "")
		..nesne:baglanti().." sayfasında "
		..(tip == "değişiklik" and "bir değişiklik yapılması [[Vikipedi:Değişiklik istekleri|istendi]]" or "")
		..(tip == "taşıma" and "[["..hedef.."]] sayfasına yönlendirmesiz taşıma isteği yapıldı" or "")
		..".'''<br>"..nesne:altBar()
		.."<p>Bu şablonun hemen altında isteğin '''detaylı ve tam açıklaması''' bulunmalıdır ki "
		.."konuyla ilgisi olmayan bir hizmetli de bu değişikliği hızlıca yapabilsin.</p>"
		..(tip == "taşıma" and "<p>'''Taşıma gerekçesi:''' "..sebep..".</p>" or "")
		.."<p style='font-size:smaller; line-height:1.3em;'>"
		..(tip == "değişiklik" and "Koruma altındaki sayfalar için değişiklik istekleri" or "")
		..(tip == "taşıma" and "Yönlendirmesiz taşıma istekleri" or "")
		.." yalnızca '''tartışmasız''' veya [[Vikipedi:Fikir birliği|fikir birliği]] sağlanmış "
		..(tip == "değişiklik" and "değişiklikler" or "")
		..(tip == "taşıma" and "taşıma istekleri" or "")
		.." için yapılmalıdır. Eğer tartışmasız bir durum ise, bu şablonu '''kullanmadan''' "
		.."önce tartışma sayfasında argümanınızı belirtin. "
		..(tip == "değişiklik" and
		(nesne:adalani() == "Şablon" and "Bir değişiklik isteğinde bulunmadan önce şablonun "
		..nesne:deneme().."nda değişiklik yapın ve bunu da "..nesne:test().."nda test edin. " or "")
		.."Bir sayfanın korunmasını veya korunmasının kaldırılması isteğini [[Vikipedi:Sayfa koruma talepleri|"
		.."sayfa koruma talepleri]]nden yapın. " or "")
		.."Bu talep tamamlandığında veya reddedildiğinde, lütfen "
		.."şablonun etkisiz hale gelmesi için <code>|cevaplandı=evet</code> parametresini girin."
		.."</p>"
		..(params.test == "evet" and ""
		or (tip == "değişiklik" and "[[Kategori:Koruma altındaki sayfada değişiklik talepleri]]" or "")
		..(tip == "taşıma" and "[[Kategori:Yönlendirmesiz taşıma talepleri]]" or ""))
	
	return args
end

local function cevaplandi(params, tip)
	local sayfa = params[1]
	local args = {}
	args["küçük"] = "evet"
	args.metin = "[["..mw.title.new(sayfa).fullText.."]] sayfası için yapılan bu "
		..(tip == "değişiklik" and "[[Vikipedi:Değişiklik istekleri|değişiklik isteği]]" or "")
		..(tip == "taşıma" and "yönlendirmesiz taşıma isteği" or "")
		.." cevaplandı. Şablonu tekrar aktif "
		.."hale getirmek için <code>|cevaplandı=</code> parametresini ''hayır'' yapın."
	
	return args
end

local function goster(args, tip)
	local kutuArgs
	if args[1] then else
		args[1] = mw.title.getCurrentTitle().text
	end
	if args["cevaplandı"] == "evet" then
		kutuArgs = cevaplandi(args, tip)
	else
		kutuArgs = istek(args, tip)
	end
	if tip == "taşıma" or mw.ustring.find(mw.title.getCurrentTitle().nsText, "[Tt]artışma") or args.test == "evet" then
		return iletiKutusu("tmbox", kutuArgs)
	else
		error("Bu şablon yalnızca tartışma sayfalarında kullanılmalıdır")
	end
end

local function degisiklikIstegi(frame)
	return goster(frame:getParent().args, "değişiklik")
end

local function yonlendirmesizTasi(frame)
	return goster(frame:getParent().args, "taşıma")
end

return {
	degisiklikIstegi = degisiklikIstegi,
	yonlendirmesizTasi = yonlendirmesizTasi
}