Modul:Lapvédelem
Megjelenés
Lapvédelem[mi ez?] • [dokumentáció: mutat, ] • [tesztek: létrehozás]
Ez a sablon a lapvédelemmel kapcsolatos információkat kérdezi le. Ez minden lap esetén az első előfordulásnál költségesnek számít.
Függvények
[szerkesztés]p._testProtection(típus, szint, lap)
: Annak ellenőrzése, hogy a lap lap (ennek hiányában az aktuális lap) típus típusú (create, edit, move vagy upload) védelmi szintje szint (autoconfirmed, templateeditor, sysop vagy superprotect) szintű-e. A kimenete egy logikai érték.p._figureProtection(lap)
: A{{védelem}}
(?) sablon számára értelmezhető védelemtípus visszaadása (nem védett lapra nil) lap lapra, ennek hiányában az aktuális lapra nézve.p.figureProtection()
: wikiszövegből meghívható változat, bemenet nem lehet title objektum
A lap változó értéke wikiszövegből minden esetben a lap címe (vagy üres), Luából meghívva pedig title objektum, a lap címe (string) vagy a lap sorszáma (szám) lehet, egyéb típusú vagy üres stringből álló paraméterek esetén az aktuális lap címét használja.
local p = {}
local getArgs = require('Modul:Arguments').getArgs
local yesno = require('Modul:Yesno')
local protectedActions = {
create = 'create',
edit = 'edit',
move = 'move',
upload = 'upload'
}
local protectionLevelTypes = {
autoconfirmed = 'autoconfirmed',
edittrustedprotected = 'edittrustedprotected',
templateeditor = 'templateeditor',
sysop = 'sysop'
}
local protectionTemplateTexts = {
['részleges'] = { 'edit', 'autoconfirmed' },
['megerősített'] = { 'edit', 'edittrustedprotected' },
['műszaki'] = { 'edit', 'templateeditor' },
['teljes'] = { 'edit', 'sysop' },
['átnevezés'] = { 'move', '*' },
['létrehozás'] = { 'create', '*' }
}
local protectionDescriptions = {
['részleges'] = {
icon = 'Padlock-silver-medium.svg',
icontext = 'félig',
title = 'A %s szerkesztése nem bejelentkezett vagy frissen regisztrált szerkesztők számára jelenleg nem lehetséges',
text = 'Amennyiben nem tudod, de mégis szeretnéd szerkeszteni a %s, úgy változtatásokat kérhetsz a vitalapján, [[Wikipédia:Adminisztrátorok üzenőfala|kérheted]] a védelem feloldását, vagy [[Speciális:Belépés|bejelentkezhetsz]].',
replace = { title = {'gen'}, text = {'acc'} }
},
['műszaki'] = {
icon = 'Padlock-pink.svg',
icontext = 'műszaki',
title = 'A %s szerkesztése jelenleg csak adminisztrátorok és sablonszerkesztők számára lehetséges',
text = nil,
replace = { title = {'gen'} }
},
['teljes'] = {
icon = 'Padlock.svg',
icontext = 'teljesen',
title = 'Ez a %s teljesen [[:Kategória:Lapvédelem|védett]]',
text = 'A %s kapcsolatos észrevételeidet a [[{{TALKPAGENAME}}|vitalapján]] várjuk; a védelem feloldását az [[Wikipédia:Adminisztrátorok üzenőfala|Adminisztrátorok üzenőfalán]] kérheted.',
replace = { title = {'gen'}, text = {'inst'} }
},
['átnevezés'] = {
icon = 'Padlock-olive.svg',
icontext = 'átnevezés ellen',
title = 'Ez a %s jelenleg átnevezés ellen [[:Kategória:Lapvédelem|védett]]',
text = 'A %s szerkeszthető, de jelenleg nem átnevezhető. Észrevételeidet a [[{{TALKPAGENAME}}|vitalapján]] várjuk.',
replace = { title = {'gen'}, text = {'gen'} }
},
['létrehozás'] = {
icon = 'Padlock-skyblue.svg',
icontext = 'létrehozás ellen',
title = 'A %s létrehozása jelenleg nem [[:Kategória:Lapvédelem|engedélyezett]]',
text = 'További információkért lásd a [{{fullurl:Special:Log|type=delete&page={{FULLPAGENAMEE}}}} törlési naplót]. A védelem feloldását az [[Wikipédia:Adminisztrátorok üzenőfala|Adminisztrátorok üzenőfalán]] kérheted.',
replace = { title = {'gen'} }
},
['határozatlan'] = {
icon = 'Padlock-red.svg',
icontext = 'határozatlan időre',
title = 'A %s határozatlan időre [[:Kategória:Lapvédelem|védett]]',
text = 'A %s kapcsolatos észrevételeidet a [[{{TALKPAGENAME}}|vitalapján]] várjuk; a védelem feloldását az [[Wikipédia:Adminisztrátorok üzenőfala|Adminisztrátorok üzenőfalán]] kérheted.',
replace = { title = {'gen'}, text = {'inst'} }
}
}
local nameSpaceForms = {
[ 0] = { gen = 'szócikk', acc = 'szócikket', inst = 'szócikkel' },
[ 6] = { gen = 'fájl', acc = 'fájlt', inst = 'fájllal' },
[10] = { gen = 'sablon', acc = 'sablont', inst = 'sablonnal' },
[14] = { gen = 'kategória', acc = 'kategóriát', inst = 'kategóriával' },
[-1] = { gen = 'lap', acc = 'lapot', inst = 'lappal' },
[-2] = { gen = 'vitalap', acc = 'vitalapot', inst = 'vitalappal' }
}
local categoryNamespaces = {
[ 0] = 'szócikkek',
[ 2] = 'szerkesztőlapok',
[ 4] = 'Wikipédia-lapok',
[ 6] = 'fájlok',
[ 10] = 'sablonok',
[ 14] = 'kategóriák',
[100] = 'portálok',
[828] = 'modulok',
[ -1] = 'lapok',
[ -2] = 'vitalapok'
}
local function getProtectionTable(title)
if type(title) == 'table' and type(title.protectionLevels) == 'table' then
return title.protectionLevels
elseif (type(title) == 'string' and title ~= '') or type(title) == 'number' then
return mw.title.new(title).protectionLevels
else
return mw.title.getCurrentTitle().protectionLevels
end
end
local function getCategories(level, expiry)
local cats = {}
local function addCat(cat)
table.insert( cats, mw.ustring.format('[[Kategória:%s]]', cat) )
end
local maincat = {}
if expiry then
local lang = mw.language.getContentLanguage()
if tonumber( lang:formatDate('U', expiry) ) < tonumber( lang:formatDate('U') ) then
addCat('Hibásan használt védelemsablont tartalmazó lapok')
end
table.insert(maincat, 'Átmenetileg')
else
table.insert(maincat, 'Folyamatosan')
end
if level == 'részleges' then
table.insert(maincat, 'félig védett')
elseif level == 'műszaki' then
table.insert(maincat, 'műszaki védettségű')
elseif level == 'teljes' then
table.insert(maincat, 'teljesen védett')
elseif level == 'átnevezés' then
table.insert(maincat, 'átnevezés ellen védett')
else
-- létrehozás, határozatlan: ??
end
local title = mw.title.getCurrentTitle()
if categoryNamespaces[title.namespace] then
table.insert(maincat, categoryNamespaces[title.namespace])
else
if title.isTalkPage then
table.insert(maincat, categoryNamespaces[-2])
else
table.insert(maincat, categoryNamespaces[-1])
end
end
addCat( table.concat(maincat, ' ') )
return table.concat(cats)
end
function p._icon(level, expiry, options)
if not level then
return nil
end
local levelData = protectionDescriptions[level]
if not levelData then
return nil
end
options = options or {}
local frame = mw.getCurrentFrame()
options.icon = options.icon or levelData.icon
local title = mw.title.getCurrentTitle()
local nsForms = nameSpaceForms[title.namespace]
if not nsForms then
if title.isTalkPage then
nsForms = nameSpaceForms[-2]
else
nsForms = nameSpaceForms[-1]
end
end
local function format(str, data)
for _, v in pairs(data) do
str = str:gsub('%%s', nsForms[v], 1)
end
return str
end
local lang = mw.language.getContentLanguage()
local expiryHumanReadable
if expiry then
if not pcall(function() expiry = lang:formatDate('Y-m-d', expiry, true) end) then
expiry = nil
end
expiryHumanReadable = lang:formatDate('Y F j', expiry, true)
end
if not options.icontext then
options.icontext = string.format(format('Ez a %s %s védett', {'gen'}), levelData.icontext)
if options.small and expiry then
options.icontext = options.icontext .. mw.ustring.format(' %s-ig', expiryHumanReadable)
end
end
local fileLink = mw.ustring.format(
'[[Fájl:%s|%s|%s]]',
options.icon,
options.small and '20px|link=Wikipédia:Lapvédelem' or '55px',
options.icontext
)
local categories = (not options.demo and getCategories(level, expiry) or '')
if options.small then
return frame:extensionTag('indicator', fileLink, {name = 'protected'}) .. categories
end
if not options.title then
options.title = format(levelData.title, levelData.replace.title)
end
if not options.text then
options.text = ''
if options.dispute then
options.text = mw.ustring.format(
"Ez a védelem '''nem''' jelenti az %s támogatását. ",
level == 'átnevezés'
and mw.ustring.format('[%s aktuális cím]', tostring( mw.uri.fullUrl( 'Speciális:Rendszernaplók', { type = 'move', page = tostring(title) } ) ) )
or mw.ustring.format('[%s aktuális verzió]', tostring( title:fullUrl('action=history') ) )
)
end
options.text = options.text .. mw.ustring.format(
'További információkért lásd a [[Wikipédia:Lapvédelem|lapvédelmi irányelveket]] és a [%s lapvédelmi naplót].',
tostring( mw.uri.fullUrl( 'Speciális:Rendszernaplók', { type = 'protect', page = tostring(title) } ) )
)
if levelData.text then
options.text = options.text .. ' ' .. frame:preprocess( format(levelData.text, levelData.replace.text) )
end
end
local text = mw.ustring.format("'''%s'''<br />%s", options.title, options.text)
local templateArgs = { type = 'lapvédelem', image = fileLink, text = text }
local template = frame:expandTemplate{ title = 'ambox', args = templateArgs }
return template .. categories
end
function p.icon(frame)
local args = getArgs(frame)
local level = args['típus'] or args['védelem'] or args.level
local expiry = args['lejárat'] or args['lejár'] or args.expiry
local options = {
small = yesno(args.lakat or args.small or false),
icon = args['kép'] or args.icon or nil,
icontext = args['icon-text'] or args.icontext or nil,
title = args['címsor'] or args.title or nil,
text = args['szöveg'] or args.text or nil,
dispute = yesno(args.dispute or false),
demo = yesno(args.minta or args.demo)
}
return p._icon(level, expiry, options)
end
function p._testProtection(action, level, title)
if not protectedActions[action] then
action = 'edit'
end
if not protectionLevelTypes[level] then
level = 'sysop'
end
local protectionLevels = getProtectionTable(title)
return type(protectionLevels) == 'table'
and type(protectionLevels[action]) == 'table'
and protectionLevels[action][1] == level
end
function p.testProtection(frame)
local args = getArgs(frame)
local returns = {
[true] = args.igaz or args['true'] or true,
[false] = args.hamis or args['false'] or nil
}
local action = args['típus'] or args.action or args[1]
local level = args.szint or args.level or args[2]
if not (action and level) then
if protectionTemplateTexts[args.param] then
action, level = protectionTemplateTexts[args.param][1], protectionTemplateTexts[args.param][2]
else
return error('Modul:Lapvédelem: Nincs megadva érvényes tesztelendő paraméter/kombináció')
end
end
local title = args.lap or args['cím'] or args.page or args.title or args[3]
local test = p._testProtection(action, level, title)
return returns[test]
end
function p._figureProtection(title)
local function testProtectionLevel(protectionLevels, action, level)
if protectionLevels[action] then
if level == '*' then
return true
elseif protectionLevels[action] == level then
return true
end
elseif action == '*' then
for n, v in pairs(protectionLevels) do
if v == level then
return true
end
end
end
return false
end
local protectionLevels = getProtectionTable(title)
-- use string/nil instead of tables
for n, v in pairs(protectionLevels) do
protectionLevels[n] = nil
for m, w in pairs(v) do
protectionLevels[n] = w
end
end
local level
for n, v in pairs(protectionTemplateTexts) do
if testProtectionLevel(protectionLevels, v[1], v[2]) then
level = n
break
end
end
return level
end
function p.figureProtection(frame)
local args = getArgs(frame)
local title = args.lap or args['cím'] or args.page or args.title or args[1]
return p._figureProtection(title)
end
function p._autoTemplate(options)
local level = p._figureProtection()
if level then
return p._icon(level, nil, options)
else
return nil
end
end
function p.autoTemplate(frame)
local args = getArgs(frame)
local level = p.figureProtection(args)
if level then
args.level = level
return p.icon(args)
else
return nil
end
end
return p