<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="nl">
	<id>https://wikitest.nl/index.php?action=history&amp;feed=atom&amp;title=Module%3APermissionTicket</id>
	<title>Module:PermissionTicket - Bewerkingsoverzicht</title>
	<link rel="self" type="application/atom+xml" href="https://wikitest.nl/index.php?action=history&amp;feed=atom&amp;title=Module%3APermissionTicket"/>
	<link rel="alternate" type="text/html" href="https://wikitest.nl/index.php?title=Module:PermissionTicket&amp;action=history"/>
	<updated>2026-04-24T19:23:37Z</updated>
	<subtitle>Bewerkingsoverzicht voor deze pagina op de wiki</subtitle>
	<generator>MediaWiki 1.43.6</generator>
	<entry>
		<id>https://wikitest.nl/index.php?title=Module:PermissionTicket&amp;diff=127911&amp;oldid=prev</id>
		<title>Colani: 1 versie geïmporteerd: Category:Commons templates-i18n</title>
		<link rel="alternate" type="text/html" href="https://wikitest.nl/index.php?title=Module:PermissionTicket&amp;diff=127911&amp;oldid=prev"/>
		<updated>2024-07-29T10:00:02Z</updated>

		<summary type="html">&lt;p&gt;1 versie geïmporteerd: Category:Commons templates-i18n&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Nieuwe pagina&lt;/b&gt;&lt;/p&gt;&lt;div&gt;--[[  &lt;br /&gt;
___  ___          _       _       ______                   _         _           _____ _      _        _   &lt;br /&gt;
|  \/  |         | |     | |     _| ___ \                 (_)       (_)         |_   _(_)    | |      | |  &lt;br /&gt;
| .  . | ___   __| |_   _| | ___(_) |_/ /__ _ __ _ __ ___  _ ___ ___ _  ___  _ __ | |  _  ___| | _____| |_ &lt;br /&gt;
| |\/| |/ _ \ / _` | | | | |/ _ \ |  __/ _ \ &amp;#039;__| &amp;#039;_ ` _ \| / __/ __| |/ _ \| &amp;#039;_ \| | | |/ __| |/ / _ \ __|&lt;br /&gt;
| |  | | (_) | (_| | |_| | |  __/_| | |  __/ |  | | | | | | \__ \__ \ | (_) | | | | | | | (__|   &amp;lt;  __/ |_ &lt;br /&gt;
\_|  |_/\___/ \__,_|\__,_|_|\___(_)_|  \___|_|  |_| |_| |_|_|___/___/_|\___/|_| |_\_/ |_|\___|_|\_\___|\__|&lt;br /&gt;
                                                                                                           &lt;br /&gt;
                                                                    &lt;br /&gt;
This module is intended to be the engine behind &amp;quot;Template:PermissionTicket&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Please do not modify this code without applying the changes first at &lt;br /&gt;
&amp;quot;Module:PermissionTicket/sandbox&amp;quot; and testing at &amp;quot;Template:PermissionTicket/testcases&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Authors and maintainers:&lt;br /&gt;
* User:Jarekt - original version &lt;br /&gt;
]]&lt;br /&gt;
&lt;br /&gt;
-- =======================================&lt;br /&gt;
-- === Dependencies ======================&lt;br /&gt;
-- =======================================&lt;br /&gt;
local core = require(&amp;#039;Module:Core&amp;#039;)&lt;br /&gt;
&lt;br /&gt;
-- ==================================================&lt;br /&gt;
-- === Generic Local functions ======================&lt;br /&gt;
-- ==================================================&lt;br /&gt;
-------------------------------------------------------------------------------&lt;br /&gt;
local function getBestProperties(entity, prop)&lt;br /&gt;
	return core.parseStatements(entity:getBestStatements( prop ), nil)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-------------------------------------------------------------------------------&lt;br /&gt;
local function info_box(text)&lt;br /&gt;
	-- create warning infobox (borowed from Module:Coordinates)&lt;br /&gt;
	return string.format(&amp;#039;&amp;lt;table class=&amp;quot;messagebox plainlinks layouttemplate&amp;quot; style=&amp;quot;border-collapse:collapse; border-width:2px; border-style:solid; width:100%%; clear: both; &amp;#039;..&lt;br /&gt;
		&amp;#039;border-color:#f28500; background:#ffe;direction:ltr; border-left-width: 8px; &amp;quot;&amp;gt;&amp;#039;..&lt;br /&gt;
		&amp;#039;&amp;lt;tr&amp;gt;&amp;#039;..&lt;br /&gt;
		&amp;#039;&amp;lt;td class=&amp;quot;mbox-image&amp;quot; style=&amp;quot;padding-left:.9em;&amp;quot;&amp;gt;&amp;#039;..&lt;br /&gt;
		&amp;#039; [[File:Commons-emblem-issue.svg|class=noviewer|45px]]&amp;lt;/td&amp;gt;&amp;#039;..&lt;br /&gt;
		&amp;#039;&amp;lt;td class=&amp;quot;mbox-text&amp;quot; style=&amp;quot;&amp;quot;&amp;gt;%s&amp;lt;/td&amp;gt;&amp;#039;..&lt;br /&gt;
		&amp;#039;&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;&amp;#039;, text)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-------------------------------------------------------------------------------&lt;br /&gt;
local function autotranslate(base, lang, args) &lt;br /&gt;
    -- lua equivalent of {{Autotranslate}}&lt;br /&gt;
	-- get language fallback list&lt;br /&gt;
	local langList = mw.language.getFallbacksFor(lang)&lt;br /&gt;
	table.insert(langList,1,lang)&lt;br /&gt;
 &lt;br /&gt;
	-- find base template language subpage&lt;br /&gt;
	local page&lt;br /&gt;
	for _, language in ipairs(langList) do&lt;br /&gt;
		page =  &amp;#039;Template:&amp;#039; .. base .. &amp;#039;/&amp;#039; .. language -- returns only the page&lt;br /&gt;
		if mw.title.new(page).exists then&lt;br /&gt;
			break&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	assert(page, string.format(&amp;#039;No fallback page found for autotranslate (base=[[%s]], lang=%s)&amp;#039;, base, lang))&lt;br /&gt;
 &lt;br /&gt;
	-- Transclude {{page |....}} with template arguments the same as the ones passed to {{autotranslate}} template.&lt;br /&gt;
	return mw.getCurrentFrame():expandTemplate{ title = page, args = args}&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-------------------------------------------------------------------------------&lt;br /&gt;
local function get_sdc_vrts(mid, namespace)&lt;br /&gt;
	-- find entity and look up all &amp;#039;P6305&amp;#039; values with VRTS numbers&lt;br /&gt;
	local entity = nil&lt;br /&gt;
	if (namespace == 6) then &lt;br /&gt;
		entity = mw.wikibase.getEntity()&lt;br /&gt;
	elseif mid and type(mid)==&amp;#039;string&amp;#039; and mid:match( &amp;#039;^[Mm]%d+$&amp;#039; ) then&lt;br /&gt;
		entity = mw.wikibase.getEntity(mid)&lt;br /&gt;
	end&lt;br /&gt;
	local vrts_array = {}&lt;br /&gt;
	if entity then &lt;br /&gt;
		vrts_array = getBestProperties(entity, &amp;#039;P6305&amp;#039;)&lt;br /&gt;
	end&lt;br /&gt;
	return vrts_array or {}&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-------------------------------------------------------------------------------&lt;br /&gt;
local function check_template_parameters(args)&lt;br /&gt;
	-- code checking if the template has some unusual input parameters&lt;br /&gt;
	valid_args = {id=1, nocat=1, [&amp;#039;date&amp;#039;]=1, comment=1, user=1, lang=1, mid=1, [1]=1, [2]=1, [3]=1, [4]=1 }&lt;br /&gt;
	bad_args = {}&lt;br /&gt;
	for field, _ in pairs( args ) do &lt;br /&gt;
		if not valid_args[field] then&lt;br /&gt;
			table.insert(bad_args, field)&lt;br /&gt;
		end&lt;br /&gt;
	end &lt;br /&gt;
	if #bad_args&amp;gt;0 then&lt;br /&gt;
		local cat = &amp;#039;[[Category:Pages using PermissionTicket template with incorrect parameter]]\n&amp;#039;&lt;br /&gt;
		local msg = info_box(&amp;#039;Error in template [[Template:PermissionTicket]] unknown parameter(s): &amp;#039; .. table.concat(bad_args, &amp;#039;, &amp;#039;))&lt;br /&gt;
		return cat .. msg&lt;br /&gt;
	end&lt;br /&gt;
	return nil&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-------------------------------------------------------------------------------&lt;br /&gt;
local function render_template(vrts_str, lang, namespace)&lt;br /&gt;
	-- render the template based on vrts number, language and namespace&lt;br /&gt;
	local cat_lut = { -- 6 File, 10 template, 14 category&lt;br /&gt;
		bad  = &amp;#039;[[Category:Items with incorrect VRTS ticket ID]]&amp;#039;,&lt;br /&gt;
		[06] = &amp;#039;[[Category:Items with VRTS permission confirmed]]&amp;#039;,&lt;br /&gt;
		[07] = &amp;#039;[[Category:Items with VRTS permission confirmed]]&amp;#039;,&lt;br /&gt;
		[10] = &amp;#039;[[Category:Custom VRTS permission template]]&amp;#039;,&lt;br /&gt;
		[14] = &amp;#039;[[Category:Categories with VRTS permission template]]&amp;#039;,&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	local tag, msg, args&lt;br /&gt;
	local vrts_num = tonumber(vrts_str)&lt;br /&gt;
	local cat = cat_lut.bad&lt;br /&gt;
	local url = &amp;#039;https://ticket.wikimedia.org/otrs/index.pl?Action=AgentTicketZoom&amp;amp;TicketNumber=&amp;#039; .. vrts_str&lt;br /&gt;
	if vrts_num and vrts_num&amp;gt;1980000000000000 and vrts_num&amp;lt;3000000000000000 then&lt;br /&gt;
		-- CASE 1: parameter &amp;quot;id&amp;quot; or &amp;quot;1&amp;quot; which is numeric and in the correct range&lt;br /&gt;
		args = {url, vrts_str}&lt;br /&gt;
		cat  = cat_lut[namespace]  or &amp;#039;&amp;#039;&lt;br /&gt;
	elseif vrts_num then&lt;br /&gt;
		-- CASE 2: parameter &amp;quot;id&amp;quot; or &amp;quot;1&amp;quot; which is likely not right&lt;br /&gt;
		args = {url, &amp;#039;&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;&amp;#039; .. vrts_str .. &amp;#039;&amp;lt;/span&amp;gt;&amp;#039;}&lt;br /&gt;
		msg  = &amp;quot;&amp;#039;&amp;#039;&amp;#039;Warning:&amp;#039;&amp;#039;&amp;#039; This file&amp;#039;s Volunteer Response Team Software (VRTS) ticket ID seems to be invalid.&amp;quot;&lt;br /&gt;
	else&lt;br /&gt;
		-- CASE 3: everything else which means no &amp;quot;id&amp;quot; or &amp;quot;1&amp;quot; parameters&lt;br /&gt;
		args = {&amp;#039;&amp;#039;, &amp;#039;&amp;#039;}&lt;br /&gt;
		msg  = &amp;quot;&amp;#039;&amp;#039;&amp;#039;Warning:&amp;#039;&amp;#039;&amp;#039; This file is missing essential information needed to confirm validity of the Volunteer Response Team Software (VRTS) ticket.&amp;quot;&lt;br /&gt;
	end&lt;br /&gt;
	tag = autotranslate(&amp;#039;PermissionTicket&amp;#039;, lang, args)&lt;br /&gt;
	if msg then&lt;br /&gt;
		tag = tag .. &amp;#039;\n&amp;#039; .. info_box(msg)&lt;br /&gt;
	end&lt;br /&gt;
	return tag, cat&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- ==================================================&lt;br /&gt;
-- === External functions ===========================&lt;br /&gt;
-- ==================================================&lt;br /&gt;
local p = {}&lt;br /&gt;
&lt;br /&gt;
-- ===========================================================================&lt;br /&gt;
-- === Version of the function to be called from other LUA codes&lt;br /&gt;
-- ===========================================================================&lt;br /&gt;
&lt;br /&gt;
function p.compare_ids(vrts, vrts_array)&lt;br /&gt;
	-- compare wikitext input &amp;quot;vrts&amp;quot; to SDC proterty array &amp;quot;vrts_array&amp;quot;&lt;br /&gt;
	if #vrts_array==0 then&lt;br /&gt;
		return &amp;#039;missing&amp;#039;&lt;br /&gt;
	end&lt;br /&gt;
	for _, vrts_str in ipairs(vrts_array) do&lt;br /&gt;
		if vrts_str==vrts then&lt;br /&gt;
			return &amp;#039;matching&amp;#039; -- match was found&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	return &amp;#039;mismatch&amp;#039;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- ===========================================================================&lt;br /&gt;
-- === Version of the functions to be called from template namespace&lt;br /&gt;
-- ===========================================================================&lt;br /&gt;
&lt;br /&gt;
function p.render(frame)&lt;br /&gt;
	-- debugging function for bare-bones teplate rendering&lt;br /&gt;
	local args = core.getArgs(frame)&lt;br /&gt;
	local tag, cat = render_template(args.id, args.lang, args.namespace or &amp;#039;&amp;#039;)&lt;br /&gt;
	return tag .. &amp;#039;\n&amp;#039; .. cat&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-------------------------------------------------------------------------------&lt;br /&gt;
function p.PermissionTicket(frame)&lt;br /&gt;
	local args = core.getArgs(frame)&lt;br /&gt;
	args.id = args.id or args[1]&lt;br /&gt;
	&lt;br /&gt;
	local cat_lut = {  -- SDC related templates&lt;br /&gt;
		matching = &amp;#039;&amp;#039;, -- was &amp;quot;[[Category:P6305 SDC]]&amp;quot; but no longer needed&lt;br /&gt;
		mismatch = &amp;#039;[[Category:Files with PermissionTicket ID different from SDC]]&amp;#039;,&lt;br /&gt;
		missing  = &amp;#039;[[Category:Files with PermissionTicket template but without P6305 SDC statement]]&amp;#039;,	&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	-- get entity and P6305&lt;br /&gt;
	local page = mw.title.getCurrentTitle()&lt;br /&gt;
	local vrts_array = get_sdc_vrts(args.mid, page.namespace)&lt;br /&gt;
	&lt;br /&gt;
	-- categorize&lt;br /&gt;
	local tags, cats = {}, {}&lt;br /&gt;
	if args.id and page.namespace==6 then&lt;br /&gt;
		local cat = p.compare_ids(args.id, vrts_array)&lt;br /&gt;
		table.insert(cats, cat_lut[cat])&lt;br /&gt;
	end&lt;br /&gt;
	local cat = check_template_parameters(args)&lt;br /&gt;
	local allowed_namespaces = {[6]=1, [7]=1, [10]=1, [14]=1} &lt;br /&gt;
	if cat and allowed_namespaces[page.namespace] then&lt;br /&gt;
		table.insert(cats, cat)&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	-- render template&lt;br /&gt;
	if args.id then -- template wikitext vrts id has priority&lt;br /&gt;
		vrts_array = { args.id }&lt;br /&gt;
	elseif #vrts_array==0 then -- if no wikitext id and no SDC id ...&lt;br /&gt;
		vrts_array = { &amp;#039;&amp;#039; }&lt;br /&gt;
	end&lt;br /&gt;
	for _, vrts_str in ipairs(vrts_array) do -- render one or more templates&lt;br /&gt;
		local tag, cat = render_template(vrts_str, args.lang, page.namespace)&lt;br /&gt;
		table.insert(tags, tag)&lt;br /&gt;
		table.insert(cats, cat)&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	-- create final output&lt;br /&gt;
	local output = table.concat(tags, &amp;#039;\n&amp;#039;)&lt;br /&gt;
	if not core.yesno(args.nocat, false) then -- if &amp;quot;nocat&amp;quot; then ignore categories&lt;br /&gt;
		output = output .. &amp;#039;\n&amp;#039; ..table.concat(cats, &amp;#039;\n&amp;#039;)&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	return output&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>Colani</name></author>
	</entry>
</feed>