Semantic MediaWikiDit bericht verdwijnt nadat alle relevante taken zijn afgerond.

Er is één onvoltooide of openstaande taak, die nodig is om het bijwerken van Semantic MediaWiki te voltooien. Een beheerder of gebruiker met voldoende rechten kan deze uitvoeren. Dit moet worden gedaan voordat nieuwe gegevens worden toegevoegd om tegenstrijdigheden te voorkomen.

Module:Award event category




local p = {}
local mSlot = require('Module:Slot')

--[[
Ignore - generic test
{{#invoke:Award category |main |json={{#slot:ws-data|{{FULLPAGENAME}}}} }}

]]--
function p.main ( frame )
	local json = frame.args["json"]
	if json == nil or json == "" then
		return error("No JSON string found")
	end
	return json
end

--[[
Local helper function for p.store below
Stores each instance in a subobject
]]--
local function store_award_as_subobject( frame, args, award, awardCategory, awardEvent, awardEventCategory )
	--local frame = mw.getCurrentFrame()
	if mw.smw then
		local recipient = args["Title"] or args["Book"] or args["Person"] or ""
		local subobject = {
			["Class"] = "Award recognition",
			["Belongs to award"] = award or "",
			["Belongs to award category"] = awardCategory or "",
			["Belongs to award event"] = awardEvent or "",
			["Has position"] = args["Rank"] or "",
			-- ["Has recognition type"] = args["Type"] or "",
			-- ["Has category"] = args["Categorie"] or "",
			["Has recipient"] = mw.text.split( recipient, ',', true ) or "",
			["Has description"] = args["Description"] or ""
		}
		local subobjectStore = mw.smw.subobject( subobject )
	end
	return
end

--[[
Store in SMW
Consider using Lua version of parser function instead

{{#invoke:Award event category|store
|page={{FULLPAGENAME}} 
|slot=ws-data
|id=
}}

]]--

p.store = function( frame )
	local page = frame.args["page"] or nil
	if page == nil or page == "" then return end
	local slot = frame.args["slot"] or "ws-data"
	local id = frame.args["id"] or ""

	local jsonstr = mw.slots.slotContent( slot, page )
	if jsonstr == nil or jsonstr == "" then return end
	-- jsontree
	local json = mw.text.jsonDecode( jsonstr )
	if type(json) ~= "table" then return end

	local awardCategory = json["Award category"] or ""
	local awardEvent = json["Award event"] or ""
	mw.log( "awardEvent: " .. awardEvent )
	-- @todo query award
	local award = mSlot.getValueFromTemplateData( "ws-page-props", awardEvent, "Award event", "Prijs" ) or ""
	mw.log( "award: " .. award )

	-- p.getSlotValue( page, slot, "Award" )

	-- @todo derive name from category + event?
	local name = json["Name"] or ""
	
	-- #set:
	local setResult = nil
	if mw.smw then
		local setTable = {
			-- Dutch-language label
			["Klasse"] = "Prijscategorie op evenement",
			["Has ID"] = id,
			["Belongs to award"] = award,
			["Belongs to award category"] = awardCategory,
			["Belongs to award event"] = awardEvent
			--["Belongs to award event category"] = page,
			--["Title"] = json["Name"] or "",
			--["Has name"] = json["Name"] or "",
			--["Has description"] = json["Description"] or "",
			--["Has category"] = json["Category"] or ""
		}
		setResult = mw.smw.set( setTable )
	end

	-- #subobjects
	local awardInstances = nil
	if json["Titles"] ~= nil then
		awardInstances = json["Titles"]
	elseif json["Books"] ~= nil then
		awardInstances = json["Books"]
	elseif json["Persons"] ~= nil then
		awardInstances = json["Persons"]
	end

	if awardInstances ~= nil then
		local awardEventCategory = page
		for i, v in ipairs( awardInstances ) do
			local subobjectStore = store_award_as_subobject( 
				frame, v, award, awardCategory, awardEvent, awardEventCategory
			)
		end
	end

	--ternary
	--local sign = if x < 0 then 'negative' else 'non-negative' end
	return

end

--[[
use a template to format a (Lua) table
]]--
local function send_to_template( frame, templateName, argsTable )
	if templateName ~= nil and argsTable ~= nil then
		return frame:expandTemplate{ title = templateName, args = argsTable }
	else
		return ""
	end
end

--[[
]]--
function p.show_award_recognitions( frame )
	local jsonstr = frame.args["json"] or nil
	local page = frame.args["page"] or page
	local template = frame.args["template"] or nil

	local jsonstr = mw.slots.slotContent( slot, page )
	if jsonstr == nil or jsonstr == "" then return end
	-- jsontree
	local json = mw.text.jsonDecode( jsonstr )
	if type(json) ~= "table" then return "" end

	res = ""
	local awards = json["Awards"] or nil
	if awards == nil then return "" end
	for i,v in ipairs(awards) do
		--res = res .. send_to_template( frame, template, v )
	end
	-- 
	--etc
	
	return res
end

--[[ @todo maybe - naming has changed so this won't work ]]--
p.getAwardEventFromPageName = function( page ) 
	local page = frame.args["page"] or nil
	if page == nil or page == "" then return end
	local slot = frame.args["slot"] or "ws-data"
	

	local awardEvent = nil
	-- get awardEvent on the basis of the page name
	if page ~= nil then
		local pageParts = mw.text.split( page, "/" )
		-- ??? remove last part ??
		table.remove( pageParts );
		--- ??
		awardEvent = table.concat( pageParts, "/" )
	end
	return awardEvent
end

return p