Module:Mailing list member/sandbox

From blackwiki
< Module:Mailing list member
Revision as of 22:02, 21 December 2014 by blackwiki>Technical 13 (notarget=no use case.)
Jump to navigation Jump to search

Documentation for this module may be created at Module:Mailing list member/sandbox/doc

local yesno = require('Module:Yesno')
 
local pageCutoffs = {
	-- minimum inactive cutoff, notarget cutoff, maximum inactive cutoff
	-- - minimum inactive cutoff and maximum inactive cutoff control
	--   the colours used to highlight an inactive member
	-- - notarget cutoff controls when a member is no longer sent a mass
	--   mailing
	['Wikipedia:WikiProject Maine/members'] = { '-10 years', '-10 years', '-10 years' },
	['Wikipedia:WikiProject Articles for creation/Participants/Message'] = { '-1 year', '-1 year', '-2 years' },
	['Wikipedia:WikiProject Baseball/Outreach/Newsletter/Subscriber list'] = { '-1 year', '-2 months', '-2 years' },
	['Template:Mailing list member/testcases'] = { '-1 year', '-18 months', '-2 years' }
}
 
local defaultCutoffs = { '-1 year', '-1 year', '-2 years' }
 
local p = {}
 
local function maybeLink(text, target)
	return target and ('[[' .. target .. '|' .. text .. ']]') or text
end
 
function p.main(frame)
	local pargs = frame:getParent().args
	local lang = mw.getContentLanguage()
	local page
	if pargs.user then
		page = 'User talk:' .. pargs.user
	else
		page = pargs.page
	end
	if yesno(pargs.blocked, true) then
		if pargs.user then
			return frame:expandTemplate{title = 'Userblocked', args = { pargs.user }} .. ' <span class="blocked-member" style="font-size: 0.95em; font-weight: bold; color: #E33;">(Blocked since: ' .. lang:formatDate('F Y', pargs.blocked) .. ')</span>'
		else
			return '<span class="error">No user defined</span>'
		end
	end
	if not page then
		return '<span class="error">No user or page defined</span>'
	end
	local notarget = yesno(pargs.notarget)
	local retval
	local cutoffs = pageCutoffs[mw.title.getCurrentTitle().prefixedText] or defaultCutoffs
	local inactiveTS = tonumber(lang:formatDate('U', pargs.inactive))
	local minInactive = tonumber(lang:formatDate('U', cutoffs[1]))
	local notargetInactive = tonumber(lang:formatDate('U', cutoffs[2]))
	local maxInactive = tonumber(lang:formatDate('U', cutoffs[3]))
	if yesno(pargs.inactive, true) then
		if notarget == nil then
			notarget = inactiveTS < notargetInactive
		end
		retval = ' <span class="inactive-member" style="font-size: 0.95em; font-weight: bold; color: #'
		if inactiveTS < maxInactive and not notarget then
			retval = retval .. 'F00;">(Inactive since: ';
		elseif inactiveTS < minInactive or (notarget and inactiveTS < maxInactive) then
			retval = retval .. '555;">(Inactive since: ';
		else
			retval = retval .. '080;">(Last active: ';
		end
		retval = retval .. maybeLink(lang:formatDate('F Y', pargs.inactive), pargs.user and ('Special:Contributions/' .. pargs.user) or pargs.page) .. ')</span>'
	else
		retval = ''
	end
	if notarget and inactiveTS > maxInactive then
		retval = retval .. ' <span style="font-size:0.95em;font-weight:bold;color:#F00">(Not receiving mass messages)</span>'
	else
		frame:callParserFunction('#target', page)
	end
	if pargs.user then
		return frame:expandTemplate{title = 'User', args = { pargs.user }} .. retval
	else
		return '[[' .. page .. ']]' .. retval
	end
end
 
return p