Modul:Åtgärdskategorier Wikidata

Från Wikipedia

Dokumentation [visa] [redigera] [historik] [rensa sidcachen]


Den här modulen lägger in åtgärdskategorier relaterade till Wikidata. Modulen ligger normalt inte direkt i artiklar, utan via andra moduler eller mallar. Idag ligger den bara i gruppen av utvalda artiklar, men den mängden går att utöka när man vill. funktionen p.atgard ska ha ett WD-objekt som invärde. Om det saknas, så hämtas Wikidata-objektet för den artikel modulen ligger i.

En undantagslista för Property P569 (födelsedatum) ligger överst. Den är för artiklar där det i praktiken är omöjligt att lägga in ett värde på Wikidata. Innan ett sådant undantag läggs in, överväg att istället lägga in ett värde med dålig precision eller med somevalue.

--Undantagslista för P569
local p569 = {['Oxiemästaren'] = ''}

local p570 = {['testsida'] = ''}

local pcomcat = {['Ödestuga'] = ''}

p = {}

function p.P373(frame)
	local ns = mw.title.getCurrentTitle().namespace
	if ns ~= 14 and ns ~= 0 then
		return ''
	end
	if pcomcat[mw.title.getCurrentTitle().text] then
		return ''
	end
	local link = frame:getParent().args[1] or mw.title.getCurrentTitle().text
	link = mw.text.trim(link)
	if frame:getParent().args[1] and mw.getCurrentFrame():preprocess('{{PAGENAME:' .. frame:getParent().args[1] .. '}}') ~= frame:getParent().args[1] then
		link = mw.getCurrentFrame():preprocess('{{PAGENAME:' .. frame:getParent().args[1] .. '}}')
	end
	link = mw.getCurrentFrame():preprocess('{{#titleparts:'..link..'}}')

	local entity = mw.wikibase.getEntityObject()
	if not entity then 
		if ns == 0 then
			return '[[Kategori:Wikipedia:Artiklar som saknar Wikidataobjekt]][[Kategori:Wikipedia:Alla artiklar med åtgärdsbehov relaterade till Wikidata]]'
		elseif ns == 14 then
			return '[[Kategori:Wikipedia:Sidor som saknar Wikidataobjekt]]'
		end
	end
	if not entity.claims or not entity.claims.P373 then
		if ns == 0 then
			return '[[Kategori:Wikipedia:Artiklar med Commonscatmall som saknar property P373]][[Kategori:Wikipedia:Alla artiklar med åtgärdsbehov relaterade till Wikidata]]'
		elseif ns == 14 then
			return '[[Kategori:Wikipedia:Sidor med Commonscatmall som saknar property P373]]'
		end
	else
		if entity.claims.P373[1].mainsnak.snaktype == 'value' then
			local linkwd = entity.claims.P373[1].mainsnak.datavalue.value
			if linkwd ~= link then
				if ns == 0 then
					return '[[Kategori:Wikipedia:Artiklar med Commonscatmall där property P373 har ett annat värde än mallen]][[Kategori:Wikipedia:Alla artiklar med åtgärdsbehov relaterade till Wikidata]]'
				elseif ns == 14 then
					return '[[Kategori:Wikipedia:Sidor med Commonscatmall där property P373 har ett annat värde än mallen]]'
				end
			else
				return ''-- Om allt funkar som det ska
			end
		else
			if ns == 0 then
				return '[[Kategori:Wikipedia:Artiklar med Commonscatmall där property P373 har novalue eller somevalue]][[Kategori:Wikipedia:Alla artiklar med åtgärdsbehov relaterade till Wikidata]]'				
			elseif ns == 14 then
				return '[[Kategori:Wikipedia:Sidor med Commonscatmall där property P373 har novalue eller somevalue]]'
			end
		end
	end
end

function p.atgard(item)
	local title = mw.title.getCurrentTitle()
	if title.namespace ~= 0 then
		return ''
	end
	if not item or not item.id then
		item = mw.wikibase.getEntityObject()
	end
	if not item then
		return '[[Kategori:Wikipedia:Artiklar som saknar Wikidataobjekt]][[Kategori:Wikipedia:Alla artiklar med åtgärdsbehov relaterade till Wikidata]]'
	end
	local numberoflabels = 0
	if item.labels then
		for i, label in pairs(item.labels) do
			numberoflabels = numberoflabels + 1
		end
	end
	local numberofdescriptions = 0
	if item.descriptions then
		for i, label in pairs(item.descriptions) do
			numberofdescriptions = numberofdescriptions + 1 
		end
	end
		
	cat = {}
	local manniska = false
	if not item.claims then
		table.insert(cat, '[[Kategori:Wikipedia:Artiklar som helt saknar Wikidata-egenskaper]]')
	else
		if not item.claims.P31 and not item.claims.P279 then
			table.insert(cat, '[[Kategori:Wikipedia:Artiklar som saknar grundläggande Wikidata-egenskap P31/P279]]')
		else
			if item.claims.P31 then
				for i, claim in pairs(item.claims.P31) do
					if claim.mainsnak.snaktype == 'value' and claim.mainsnak.datavalue.value['numeric-id'] == 5 then --P31:Q5 "instance of human"
						manniska = true
					end
				end
			end
		end
	end
	if not item.labels or not item.labels.sv then
		table.insert(cat, '[[Kategori:Wikipedia:Artiklar som saknar svensk Wikidata-etikett]]')
	end
	if numberoflabels < 2 then
		table.insert(cat, '[[Kategori:Wikipedia:Artiklar som har Wikidata-etikett på färre än två språk]]')
	end
	if numberofdescriptions < 2 then
		table.insert(cat, '[[Kategori:Wikipedia:Artiklar som har Wikidata-beskrivning på färre än två språk]]')
	elseif not item.descriptions.sv then
		table.insert(cat, '[[Kategori:Wikipedia:Artiklar som saknar svensk Wikidata-beskrivning]]')
	end
	if manniska and not item.claims.P21 then
		table.insert(cat, '[[Kategori:Wikipedia:Biografier som saknar Wikidata-egenskap för kön P21]]')
	end
	if manniska and not item.claims.P569 and not p569[title.text] then
		table.insert(cat, '[[Kategori:Wikipedia:Biografier som saknar Wikidata-egenskap för födelsedatum P569]]')
	end
	if manniska and (item.claims.P569 or p569[title.text]) and not item.claims.P570 and not p570[title.text] then 
		--kollar om födelsedag finns (alternativt finns i undantagslistan) och det saknas dödsdag, samt kollar att det inte finns i undantagslistan
		local fodelsedag = 0
		if item.claims.P569 and item.claims.P569[1].mainsnak.snaktype == 'value' then -- krånglar inte till det, utan tar bara första värdet och kollar så det inte är "no/somevalue" här
			local s = item.claims.P569[1].mainsnak.datavalue.value.time
			if string.sub(s, 1, 1) == '-' then -- årtal före kristus
				fodelsedag = 0
			else
				s = string.sub(s, 2) -- tar bort inledande +-tecken
				s = string.sub(s, 1, string.find( s, '-' ) -1)
				fodelsedag = tonumber(s)
			end
			if fodelsedag + 125 < tonumber(os.date('%Y')) then -- Om någon anges vara äldre än 125 år, så borde det finnas ett dödsdatum
				table.insert(cat, '[[Kategori:Wikipedia:Biografier som saknar Wikidata-egenskap för dödsdatum P570]]')
			end
		end	
	end	
		
	if #cat > 0 then 
		return table.concat(cat) .. '[[Kategori:Wikipedia:Alla artiklar med åtgärdsbehov relaterade till Wikidata]]' 
	end
	return ''
end

return p