Difference between revisions of "Module:HonorUtils"

From Pathfinder Wiki
Line 46: Line 46:
 
end
 
end
  
function p.getVariantsData( frame, landingPage )
+
function p.getVariantsData( frame, landingPage, variantType, variantNumber )
 
if ( frame == nil ) then
 
if ( frame == nil ) then
 
frame = mw.getCurrentFrame()
 
frame = mw.getCurrentFrame()
Line 54: Line 54:
 
landingPage = frame:expandTemplate{ title='GetHonorLandingPage' }
 
landingPage = frame:expandTemplate{ title='GetHonorLandingPage' }
 
end
 
end
local parentFrame = frame:getParent()
 
 
local srcIsHonor = false
 
local srcIsHonor = false
 +
local getAnswerVariants = true
 +
local tAnswerVariants = nil
 +
local getRequirementVariants = true
 +
local tRequirementVariants = nil
 
 
-- see if template has variants as arguments
+
-- check if only one variant is needed
local tAnswerVariants = getHonorVariants( 'answerKey', landingPage, srcIsHonor )
+
if ( variantType ~= nil and variantType ~= '' and
if ( tAnswerVariants == nil and parentFrame ~= nil ) then
+
variantNumber ~= nil
mw.log('HonorUtils.getVariantsData (parentFrame:getTitle): '..parentFrame:getTitle())
+
) then
local cnt_answerKey_variants = parentFrame.args['cnt_answerKey_variants']
+
if (variantType == 'requirements') then
if ( cnt_answerKey_variants ~= nil and cnt_answerKey_variants ~= '' ) then
+
getAnswerVariants = false
tAnswerVariants = {}
+
elseif (variantType == 'answerKey') then
-- get answer Variants
+
getRequirementVariants = false
mw.log('HonorUtils.getVariantsData (cnt_answerKey_variants): '..cnt_answerKey_variants)
+
else
for actVariant = 1, tonumber(cnt_answerKey_variants), 1 do
+
mw.log( 'HonorUtils.getVariantData: Invalid variantType!' )
mw.log('HonorUtils.getVariantsData (actVariant) answerkey: '..actVariant)
+
return nil;
strActVariant = 'answerKey_' .. actVariant
+
end
tAnswerVariants[actVariant] = parentFrame.args[strActVariant]
+
end
mw.log('HonorUtils.getVariantsData (tAnswerVariants[actVariant]): '..tAnswerVariants[actVariant])
+
 
end
+
if ( getAnswerVariants == true ) then
 +
tAnswerVariants = getHonorVariants( 'answerKey', landingPage, srcIsHonor, variantNumber )
 +
if ( tAnswerVariants == nil ) then
 +
mw.log("HonorUtils.getVariantsData: It isn't possible to get any answer variant's data!")
 
end
 
end
else
 
mw.log("HonorUtils.getVariantsData: It isn't possible to get any answer variant's data!")
 
 
end
 
end
 
 
local tRequirementVariants = getHonorVariants( 'requirements', landingPage, srcIsHonor )
+
if ( getRequirementVariants == true ) then
if ( tRequirementVariants == nil and parentFrame ~= nil ) then
+
tRequirementVariants = getHonorVariants( 'requirements', landingPage, srcIsHonor, variantNumber )
local cnt_requirements_variants = parentFrame.args['cnt_requirements_variants']
+
if ( tRequirementVariants == nil ) then
if ( cnt_requirements_variants ~= nil and cnt_requirements_variants ~= ''  ) then
+
mw.log("HonorUtils.getVariantsData: It isn't possible to get any requirement variant's data!")
tRequirementVariants = {}
 
-- get requirement Variants
 
mw.log('HonorUtils.getVariantsData (cnt_answerKey_variants): '..cnt_requirements_variants)
 
for actVariant = 1, tonumber(cnt_requirements_variants), 1 do
 
mw.log('HonorUtils.getVariantsData (actVariant) requirements: '..actVariant)
 
strActVariant = 'requirements_' .. actVariant
 
tRequirementVariants[actVariant] = parentFrame.args[strActVariant]
 
mw.log('HonorUtils.getVariantsData (tRequirementVariants[actVariant]): '..tRequirementVariants[actVariant])
 
end
 
 
end
 
end
else
 
mw.log("HonorUtils.getVariantsData: It isn't possible to get any answer variant's data!")
 
 
end
 
end
 +
 
local tVariants = {
 
local tVariants = {
 
answers = tAnswerVariants,
 
answers = tAnswerVariants,
Line 230: Line 224:
 
function getHonorVariants( variantType, src, srcIsHonor, variantNumber )
 
function getHonorVariants( variantType, src, srcIsHonor, variantNumber )
 
local frame = mw.getCurrentFrame()
 
local frame = mw.getCurrentFrame()
 +
local parentFrame = frame:getParent()
 
mw.log('HonorUtils.getHonorVariants (frame): '..frame:getTitle())
 
mw.log('HonorUtils.getHonorVariants (frame): '..frame:getTitle())
 +
local onLandingPage = false
 
if (variantType == nil or variantType == '') then
 
if (variantType == nil or variantType == '') then
 
variantType = 'requirement'
 
variantType = 'requirement'
 
end
 
end
local cntOfVariants = tonumber(p.getHonorMetadata(src, 'cnt_'..variantType..'_variants', srcIsHonor))
+
local cntOfVariantsArgString = 'cnt_'..variantType..'_variants'
 +
local cntOfVariants = tonumber(p.getHonorMetadata(src, cntOfVariantsArgString, srcIsHonor))
 
if (cntOfVariants == nil or cntOfVariants == 0) then
 
if (cntOfVariants == nil or cntOfVariants == 0) then
mw.log('HonorUtils.getHonorVariants: There are no '..variantType..' variants!')
+
-- check if we are on the honor landing page, if so check the template's argument's
return nil
+
if ( parentFrame ~= nil and
 +
parentFrame:getTitle() == 'Template:HonorLanding' and
 +
parentFrame.args[cntOfVariantsArgString] ~= nil and
 +
parentFrame.args[cntOfVariantsArgString] ~= ''
 +
) then
 +
onLandingPage = true
 +
cntOfVariants = parentFrame.args[cntOfVariantsArgString]
 +
else
 +
mw.log('HonorUtils.getHonorVariants: There are no '..variantType..' variants!')
 +
return nil
 +
end
 
end
 
end
 
mw.log('HonorUtils.getHonorVariants (cntOfVariants): '..cntOfVariants)
 
mw.log('HonorUtils.getHonorVariants (cntOfVariants): '..cntOfVariants)
 
local actVariant = 0
 
local actVariant = 0
 
local tVariantArguments = {}
 
local tVariantArguments = {}
if ( variantNumber ~= nil and variantNumber <= cntOfVariants ) then
+
if ( variantNumber ~= nil ) then
 
-- only get the defined Variant
 
-- only get the defined Variant
tVariantArguments[1] = variantType..'_'..variantNumber
+
if ( variantNumber <= cntOfVariants ) then
 +
tVariantArguments[1] = variantType..'_'..variantNumber
 +
else
 +
mw.log('HonorUtils.getHonorVariants: invalid variantNumber ('..variantNumber..')!')
 +
return nil
 +
end
 
else
 
else
 
-- get all variants
 
-- get all variants
Line 253: Line 265:
 
end
 
end
 
 
local strVariantArguments = mw.text.listToText(tVariantArguments, ':', ':')
+
local tVariants = {}
mw.log('HonorUtils.getHonorVariants (strVariantArguments): '..strVariantArguments)
+
if ( onLandingPage == true ) then
local strVariant = p.getHonorMetadata(src, strVariantArguments, srcIsHonor)
+
for key, variantArg in paris(tVariantArguments) do
strVariant = mw.ustring.gsub(strVariant,"[\n\r]", "")
+
tVariants[key] = parentFrame.args[variantArg]
mw.log('HonorUtils.getHonorVariants (strVariant): '..strVariant)
+
end
tVariants = mw.text.split(strVariant, '|', notUseLUAPattern)
+
else
 +
local strVariantArguments = mw.text.listToText(tVariantArguments, ':', ':')
 +
mw.log('HonorUtils.getHonorVariants (strVariantArguments): '..strVariantArguments)
 +
local strVariant = p.getHonorMetadata(src, strVariantArguments, srcIsHonor)
 +
strVariant = mw.ustring.gsub(strVariant,"[\n\r]", "")
 +
mw.log('HonorUtils.getHonorVariants (strVariant): '..strVariant)
 +
tVariants = mw.text.split(strVariant, '|', notUseLUAPattern)
 +
end
 
mw.log('HonorUtils.getHonorVariants (#tVariants): '..#tVariants)
 
mw.log('HonorUtils.getHonorVariants (#tVariants): '..#tVariants)
 
return tVariants
 
return tVariants

Revision as of 09:52, 22 July 2021

Documentation for this module may be created at Module:HonorUtils/doc

local p = {}
local utilities = require ( "Module:Utilities" )
local notUseLUAPattern = true

function p.getVariantData( frame, landingPage, variantType, variantNumber )
	-- check input variables
	if ( frame == nil ) then
		frame = mw.getCurrentFrame()
	end
	mw.log( 'HonorUtils.getVariantData (frame): '..frame:getTitle() )
	if ( landingPage == nil or landingPage == "" ) then
		landingPage = frame:expandTemplate{ title='GetHonorLandingPage' }
	end
	mw.log( 'HonorUtils.getVariantData (landingPage): '..landingPage )
	local keyToStore = ''
	if (variantType == 'requirements') then
		keyToStore = 'requirements'
	elseif (variantType == 'answerKey') then
		keyToStore = 'answers'
	else
		mw.log( 'HonorUtils.getVariantData: Invalid variantType!' )
		return nil;
	end
	mw.log( 'HonorUtils.getVariantData: variantType ('..variantType..') resulted in keyToStore ('..keyToStore..')!' )
	
	local srcIsHonor = false
	local parentFrame = frame:getParent()
	local tVariantData = getHonorVariants( variantType, landingPage, srcIsHonor, variantNumber)
	local variantName = variantType..'_'..variantNumber
	if (tVariantData == nil and parentFrame ~= nil and parentFrame.args[variantName] ~= nil) then
		mw.log('HonorUtils.getVariantData (parentFrame:getTitle): '..parentFrame:getTitle())
		-- get answer Variants
		tVariantData[1] = parentFrame.args[variantName]
		mw.log('HonorUtils.getVariantData (tVariantData[1]): '..tVariantData[1])
	else
		mw.log("HonorUtils.getVariantData (variantType_variantNumber): It isn't possible to get any data of the requested Variant! "..variantType..'_'..variantNumber)
	end
	
	local tVariants = {
		keyToStore = tVariantData
	}
	tVariants = expandHonorVariants( frame, tVariants )
	
	tVariants = translateHonorVariants( frame, tVariants )
	return tVariants
end

function p.getVariantsData( frame, landingPage, variantType, variantNumber )
	if ( frame == nil ) then
		frame = mw.getCurrentFrame()
		mw.log( 'HonorUtils.getVariantsData (frame): '..frame:getTitle() )
	end
	if ( landingPage == nil or landingPage == "" ) then
		landingPage = frame:expandTemplate{ title='GetHonorLandingPage' }
	end
	local srcIsHonor = false
	local getAnswerVariants = true
	local tAnswerVariants = nil
	local getRequirementVariants = true
	local tRequirementVariants = nil
	
	-- check if only one variant is needed
	if ( variantType ~= nil and variantType ~= '' and
		 variantNumber ~= nil
		) then
		if (variantType == 'requirements') then
			getAnswerVariants = false
		elseif (variantType == 'answerKey') then
			getRequirementVariants = false
		else
			mw.log( 'HonorUtils.getVariantData: Invalid variantType!' )
			return nil;
		end
	end

	if ( getAnswerVariants == true ) then
		tAnswerVariants = getHonorVariants( 'answerKey', landingPage, srcIsHonor, variantNumber )
		if ( tAnswerVariants == nil ) then
			mw.log("HonorUtils.getVariantsData: It isn't possible to get any answer variant's data!")
		end
	end
	
	if ( getRequirementVariants == true ) then
		tRequirementVariants = getHonorVariants( 'requirements', landingPage, srcIsHonor, variantNumber )
		if ( tRequirementVariants == nil ) then
			mw.log("HonorUtils.getVariantsData: It isn't possible to get any requirement variant's data!")
		end
	end
	
	local tVariants = {
		answers = tAnswerVariants,
		requirements = tRequirementVariants
	}
	
	tVariants = expandHonorVariants( frame, tVariants )
	
	tVariants = translateHonorVariants( frame, tVariants )
	return tVariants
end

function expandHonorVariants( frame, tVariants )
	local tRetVariants = tVariants
	if ( tVariants == nil ) then
		mw.log('HonorUtils.expandHonorVariants: No Variants to Expand (nil)!')
		return {}
	end
	if ( tVariants['answers'] == nil ) then
		mw.log('HonorUtils.expandHonorVariants: No Answer Variants to Expand!')
	else
		-- expand the answer Variants
		local tAnswers = tVariants['answers']
		mw.log('HonorUtils.expandHonorVariants: There are '..#tAnswers..' Answer Variants to Expand!')
		for key, variant in pairs(tAnswers) do
			mw.log('HonorUtils.expandHonorVariants (key, variant): '..key..', '..variant)
			-- seperate Countries and Authority
			local tSplitAnsVariant = mw.text.split(variant, ';;', notUseLUAPattern)
			local tActVariant = {
				orig = variant,
				countries = {}
			}
			if ( tSplitAnsVariant[1] ~= '') then
				tActVariant['countries']['orig'] = tSplitAnsVariant[1]
				-- seperate the Countries
				tActVariant['countries']['split'] = mw.text.split(tActVariant['countries']['orig'], ';', notUseLUAPattern)
				mw.log('HonorUtils.expandHonorVariants (Countries - Orig): '..tActVariant['countries']['orig'])
			else
				mw.log('HonorUtils.expandHonorVariants: There are no countries for that variant!')
			end
			-- set the authority
			if ( tSplitAnsVariant[2] == nil ) then
				tActVariant['authority'] = nil
				mw.log('HonorUtils.expandHonorVariants (Authority): nil')
			else
				tActVariant['authority'] = tSplitAnsVariant[2]
				mw.log('HonorUtils.expandHonorVariants (Authority): '..tActVariant['authority'])
			end
			-- save act. Variant into the table
			tAnswers[key] = tActVariant
		end
		tVariants['answers'] = tAnswers
		mw.log('HonorUtils.expandHonorVariants: '..#tVariants['answers']..' Answer Variants expanded!')
	end
	if ( tVariants['requirements'] == nil ) then
		mw.log('HonorUtils.expandHonorVariants: No Requirement Variants to Expand!')
	else
		-- expand the requirement Variants
		local tRequirements = tVariants['requirements']
		mw.log('HonorUtils.expandHonorVariants: There are '..#tRequirements..' Requirement Variants to Expand!')
		for key, variant in pairs(tRequirements) do
			mw.log('HonorUtils.expandHonorVariants (key, variant): '..key..', '..variant)
			-- seperate Authorities
			local tSplitReqVariant = mw.text.split(variant, ';', notUseLUAPattern)
			local tActReqVariant = {
				orig = variant,
				authorities = tSplitReqVariant
			}
			tRequirements[key] = tActReqVariant
		end
		tVariants['requirements'] = tRequirements
		mw.log('HonorUtils.expandHonorVariants: '..#tVariants['requirements']..' Requirement Variants expanded!')
	end
	return tRetVariants
end

function translateHonorVariants( frame, tVariants )
	local tRetVariants = tVariants
	if ( tRetVariants == nil ) then
		mw.log('HonorUtils.translateHonorVariants: There are no Variants (nil)!')
	end
	if ( tRetVariants['answers'] == nil ) then
		mw.log('HonorUtils.translateHonorVariants: There are no Answer Variants!')
	else
		mw.log('HonorUtils.translateHonorVariants: There are '..#tRetVariants['answers']..' Answer Variants to translate!')
		for varKey, variant in pairs(tRetVariants['answers']) do
			if ( variant == nil or variant['countries'] == nil or variant['countries']['split'] == nil ) then
				mw.log('HonorUtils.translateHonorVariants: Answer Variant is invalid!')
			else
				mw.log('HonorUtils.translateHonorVariants: There are '..#variant['countries']['split']..' Answer Variant Countries to translate!')
				for countryKey, country in pairs(variant['countries']['split']) do
					local trans = utilities.localize( country, 'Countries' )
					-- check if Localization returned something, if not set the original string
					mw.log('HonorUtils.translateHonorVariants (country, trans): '..country..', '..trans)
					if ( trans == '' ) then
						trans = country
					end
					tRetVariants['answers'][varKey]['countries']['split'][countryKey] = {
						orig = country,
						translated = trans
					}
				end
				mw.log('HonorUtils.translateHonorVariants: '..#tRetVariants['answers'][varKey]['countries']['split']..' Answer Variant Countries were translated!')
			end
		end
		mw.log('HonorUtils.translateHonorVariants: '..#tRetVariants['answers']..' Answer Variants were translated!')
	end
	if ( tRetVariants['requirements'] == nil ) then
		mw.log('HonorUtils.translateHonorVariants: There are no Requirement Variants!')
	else
		mw.log('HonorUtils.translateHonorVariants: There are '..#tRetVariants['requirements']..' Requriement Variants to translate!')
		for varKey, variant in pairs(tRetVariants['requirements']) do
			if ( variant == nil or variant['authorities'] == nil ) then
				mw.log('HonorUtils.translateHonorVariants: Requriement Variant is invalid!')
			else
				mw.log('HonorUtils.translateHonorVariants: There are '..#variant['authorities']..' Requriement Variant Authorities to translate!')
				for authorityKey, authority in pairs(variant['authorities']) do
					local trans = utilities.localize( authority, 'Authorities' )
					-- check if Localization returned something, if not set the original string
					if ( trans == '' ) then
						trans = authority
					end
					tRetVariants['requirements'][varKey]['authorities'][authorityKey] = {
						orig = authority,
						translated = trans
					}
				end
				mw.log('HonorUtils.translateHonorVariants: '..#tRetVariants['requirements'][varKey]['authorities']..' Requriement Variant Authorities were translated!')
			end
		end
		mw.log('HonorUtils.translateHonorVariants: '..#tRetVariants['requirements']..' Requriement Variants were translated!')
	end
	return tRetVariants
end

function getHonorVariants( variantType, src, srcIsHonor, variantNumber )
	local frame = mw.getCurrentFrame()
	local parentFrame = frame:getParent()
	mw.log('HonorUtils.getHonorVariants (frame): '..frame:getTitle())
	local onLandingPage = false
	if (variantType == nil or variantType == '') then
		variantType = 'requirement'
	end
	local cntOfVariantsArgString = 'cnt_'..variantType..'_variants'
	local cntOfVariants = tonumber(p.getHonorMetadata(src, cntOfVariantsArgString, srcIsHonor))
	if (cntOfVariants == nil or cntOfVariants == 0) then
		-- check if we are on the honor landing page, if so check the template's argument's
		if ( parentFrame ~= nil and
			 parentFrame:getTitle() == 'Template:HonorLanding' and
			 parentFrame.args[cntOfVariantsArgString] ~= nil and 
			 parentFrame.args[cntOfVariantsArgString] ~= ''
			) then
			onLandingPage = true
			cntOfVariants = parentFrame.args[cntOfVariantsArgString]
		else
			mw.log('HonorUtils.getHonorVariants: There are no '..variantType..' variants!')
			return nil
		end
	end
	mw.log('HonorUtils.getHonorVariants (cntOfVariants): '..cntOfVariants)
	local actVariant = 0
	local tVariantArguments = {}
	if ( variantNumber ~= nil ) then
		-- only get the defined Variant
		if ( variantNumber <= cntOfVariants ) then
			tVariantArguments[1] = variantType..'_'..variantNumber
		else
			mw.log('HonorUtils.getHonorVariants: invalid variantNumber ('..variantNumber..')!')
			return nil
		end
	else
		-- get all variants
		for actVariant = 1, cntOfVariants, 1 do
			mw.log('HonorUtils.getHonorVariants (actVariant): '..actVariant)
			tVariantArguments[actVariant] = variantType .. '_' .. actVariant
		end
	end
	
	local tVariants = {}
	if ( onLandingPage == true ) then
		for key, variantArg in paris(tVariantArguments) do
			tVariants[key] = parentFrame.args[variantArg]
		end
	else
		local strVariantArguments = mw.text.listToText(tVariantArguments, ':', ':')
		mw.log('HonorUtils.getHonorVariants (strVariantArguments): '..strVariantArguments)
		local strVariant = p.getHonorMetadata(src, strVariantArguments, srcIsHonor)
		strVariant = mw.ustring.gsub(strVariant,"[\n\r]", "")
		mw.log('HonorUtils.getHonorVariants (strVariant): '..strVariant)
		tVariants = mw.text.split(strVariant, '|', notUseLUAPattern)
	end
	mw.log('HonorUtils.getHonorVariants (#tVariants): '..#tVariants)
	return tVariants
end

function p.getHonorMetadata(src, metadata, srcIsHonor)
	local frame = mw.getCurrentFrame()
	local lPage = ''
	if (src ~= '' and src ~= nil) then
		if (srcIsHonor == true) then
			lPage = 'AY Honors/' .. src
		else
			lPage = src
		end
	end
	lPage = frame:expandTemplate{ title = 'GetHonorLandingPage', args = {page = lPage}}
	return frame:preprocess( '{{#dpl:|debug=0|title=' .. lPage .. '|include={HonorLanding}:' .. metadata ..'}}' )
end

return p