Module:Cultural Heritage Finland wikidata id

From Wikimedia Commons, the free media repository
Jump to navigation Jump to search
Lua
CodeDiscussionEditHistoryLinksLink count Subpages:DocumentationTestsResultsSandboxLive code All modules

Documentation for this module may be created at Module:Cultural Heritage Finland wikidata id/doc

Code

local wlm = {}

-- Example usage:
-- {{#invoke:Cultural Heritage Finland wikidata id|get|wikidata=Q9321305}}
-- {{#invoke:Cultural Heritage Finland wikidata id|get|wikidata=Q30506316}}

-- Render Wikidata and rkylinks
function render_row(wikidata, rky)
	label="";
	details="";
	delim=" - "
	
	if wikidata == nil or wikidata == "" then
		return "";
	end
	
	label="{{WikidataItem|" .. wikidata .. "}}";
	
	if rky then
		details=delim .. details .. " [http://www.rky.fi/read/asp/r_kohde_det.aspx?KOHDE_ID=" .. rky .." RKY: " .. rky .."]";
		delim="; ";
	end
	
	ret="{{Autotranslate|base=Cultural Heritage Finland|1=".. label .. details .."}}";
	
	return ret
end

-- Function tries to get items P373 value from wikidata
-- If P373 doesn't exist then it loops through properties
-- and tries to get their P373 values.

function wlm.get(frame)
	local id= frame.args['wikidata']
	local out="";
	local valid_wlm_target=false;

	if id == nil or id == "" then
		entity = mw.wikibase.getEntityObject()
	else
		entity =  mw.wikibase.getEntityObject(id);
	end
	
	if not entity or not entity.claims then
		return nil
	end	
	
	-- use direct P4009 value if it exists
	if entity.claims["P4009"] then
		for i, j in pairs(entity.claims["P4009"]) do
			out=out .. render_row(id, j["mainsnak"]["datavalue"]["value"])
			valid_wlm_target=true;
		end
	else
		out=out .. render_row(id)
	end
	
	if (entity.claims["P361"]) then
		for p, claim in pairs(entity.claims["P361"]) do
			if claim["mainsnak"]["datatype"]=="wikibase-item" then
				tmp_id=claim["mainsnak"]["datavalue"]["value"]["id"]
				claim_entity =  mw.wikibase.getEntityObject(tmp_id);
				if claim_entity and claim_entity.claims and claim_entity.claims["P4009"] then
					for i, j in pairs(claim_entity.claims["P4009"]) do
						out=out .. render_row(tmp_id, j["mainsnak"]["datavalue"]["value"])
						valid_wlm_target=true;
					end
				else
					out=out .. render_row(tmp_id)
				end					
			end
		end
	end
	
	if valid_wlm_target==false then
		out=out .."[[Category:Cultural heritage monuments in Finland with unknown IDs]]";
	end
	
	if not entity.claims["P18"] then
		out = out .. "[[Category:Cultural heritage monuments in Finland without image in Wikidata]]"
	end
		
	return frame:preprocess(out);
end 
return wlm