Jump to content

Module:WikidataCheck: Difference between revisions

From Wikipedia, the free encyclopedia
Content deleted Content added
fix "Lua error in Module:WikidataCheck at line 35: attempt to index field 'datavalue' (a nil value)" at BattleTech due to missing value on Wikidata
Allow templates to specify that the "same as" category should not be added. Tested first with /sandbox.
Line 10: Line 10:
local catbase = config.category
local catbase = config.category
local namespaces = config.namespaces
local namespaces = config.namespaces
local nocatsame = config.nocatsame or ""
local ok = false -- one-way flag to check if we're in a good namespace
local ok = false -- one-way flag to check if we're in a good namespace
local ns = mw.title.getCurrentTitle().namespace
local ns = mw.title.getCurrentTitle().namespace
Line 35: Line 36:
propValue = (v.mainsnak.datavalue or {}).value
propValue = (v.mainsnak.datavalue or {}).value
if propValue == value then
if propValue == value then
return "[[Category:" .. catbase .. " same as Wikidata]]" -- yay!
if nocatsame == "" then
return "[[Category:" .. catbase .. " same as Wikidata]]" -- yay!
else
return nil -- if nocatsame, the "same as" category is not added
end
end
end
end
end

Revision as of 02:25, 27 April 2019

local p = {}

function p.wikidatacheck(frame)
	local pframe = frame:getParent()
	local config = frame.args -- the arguments passed BY the template, in the wikitext of the template itself
	local args = pframe.args -- the arguments passed TO the template, in the wikitext that transcludes the template

	local property = config.property
	local value = config.value or ""
	local catbase = config.category
	local namespaces = config.namespaces
	local nocatsame = config.nocatsame or ""
	local ok = false -- one-way flag to check if we're in a good namespace
	local ns = mw.title.getCurrentTitle().namespace
	for v in mw.text.gsplit( namespaces, ",", true) do
		if tonumber(v) == ns then
			ok = true
		end
	end
	if not ok then -- not in one of the approved namespaces
		return ""
	end
	local entity = mw.wikibase.getEntityObject()
	if not entity then -- no Wikidata item
		return "[[Category:" .. catbase .. " not in Wikidata]]"
	end
	if value == "" then
		return nil -- Using Wikidata
	end
	local claims = entity.claims or {}
	local hasProp = claims[property]
	if not hasProp then -- no claim of that property
		return "[[Category:" .. catbase .. " not in Wikidata]]" -- bad. Bot needs to add the property
	end
	for i, v in ipairs(hasProp) do -- Now we try to iterate over all possible values?
		propValue = (v.mainsnak.datavalue or {}).value
		if propValue == value then
			if nocatsame == "" then
				return "[[Category:" .. catbase .. " same as Wikidata]]" -- yay!
			else
				return nil -- if nocatsame, the "same as" category is not added
			end
		end
	end
	return "[[Category:" .. catbase .. " different from Wikidata]]" -- needs human review :(
end

return p