Jump to content

Module:Video game review score

From Wikipedia, the free encyclopedia
This is an old revision of this page, as edited by Ferret (talk | contribs) at 14:59, 13 April 2016. The present address (URL) is a permanent link to this revision, which may differ significantly from the current revision.

local vgR = require('Module:Sandbox/ferret/Video game reviews')

local p = {}

-- List of accepted aggregator arguments and their related QID.
local aggregators = {
    ['mc'] = 'Q150248',
    ['gr'] = 'Q40160'
}     

function p._main(frame, args)
	local aggregator = args["aggregator"];
	local df = args["df"];

	-- No aggregator, stop. Must have aggregator at least.
	if(aggregator == nil or aggregator == "" or aggregators[string.lower(aggregator)] == nil) then
		return "Invalid or missing aggregator";
	end;
	
	if(df == nil or df == "") then
		df = "mdy";
	end;
	
	aggregator = aggregators[string.lower(aggregator)];
	df = string.lower(df);
		
	local game = args["game"];
	local entity = nil;
	if(game == nil or game == "") then
		entity = mw.wikibase.getEntity();
	else
		entity = mw.wikibase.getEntity(game);
	end;
	
	if not entity then
		return "No entity found";
	end
	
	local ret = "";	
	local reviewscores = entity['claims']['P444'];
	local system = args["system"];
	local systemId = nil;
	if(not(system == nil or system == "")) then
		system = string.upper(system);
		systemId = vgR.getSystemID(system);
	end;

	-- Loop all of "score by" for this title
	for i = 1, #reviewscores do
		local reviewer = nil 
		if(not(reviewscores[i]['qualifiers']['P447'] == nil or reviewscores[i]['qualifiers']['P447'][1] == nil)) then
			reviewer = 'Q'..reviewscores[i]['qualifiers']['P447'][1]['datavalue']['value']['numeric-id'];
		end;
		if(reviewer == aggregator) then
			-- If template specified a system, we need to check for the specific system and only output that one.
			if(not(system == nil or system == "")) then
				if(not(reviewscores[i]['qualifiers']['P400'] == nil or reviewscores[i]['qualifiers']['P400'][1] == nil)) then
					local reviewSysId = reviewscores[i]['qualifiers']['P400'][1]['datavalue']['value']['numeric-id'];

					if(systemId == reviewSysId) then
						ret = ret .. vgR.printReviewRow(frame, reviewscores[i], df);
					else 
						local systemName = mw.wikibase.label('Q'..reviewSysId);
						if(not(systemName == nil) and string.upper(systemName) == system) then
							ret = ret .. vgR.printReviewRow(frame, reviewscores[i], df);
						end;
					end;
				end;
			else
				-- No system specified, so output each one found.
				ret = ret .. vgR.printReviewRow(frame, reviewscores[i], df);
			end;
		end;
	end;

	return ret;
end;

function p.main(frame)
	local args = require('Module:Arguments').getArgs(frame, {
		wrappers = 'User:Ferret/sandbox/Video game aggregator'
	})
	return p._main(frame, args)
end

return p