Module:Current RfX

MyWikiBiz, Author Your Legacy — Monday November 25, 2024
Jump to navigationJump to search

This module returns information about currently open requests for adminship and requests for bureaucratship (RfX). It has two functions, rfxNames, which returns a table containing the page names of currently open RfX, and rfx, which returns a table of rfx objects created using Module:Rfx.

Usage

First, load the module.

<syntaxhighlight lang="lua"> local currentRfx = require('Module:Current RfX') </syntaxhighlight>

Then, choose the function that you wish to use. The functions are outlined in the subsections below.

For the purpose of explanation, in the examples below we will assume that there are currently two users running for adminship, Example and Example2. We will also assume that there is currently one user running for bureaucratship, Example3.

RfxNames

<syntaxhighlight lang="lua"> currentRfx.rfxnames() </syntaxhighlight>

This returns an array containing the page names of all current requests for adminship and bureaucratship. They are sorted by the order they appear on Wikipedia:Requests for adminship, and reqeuests for adminship (RfAs) and requests for bureaucratship (RfBs) are treated identically. For the example users, the table returned would be as follows:

<syntaxhighlight lang="lua"> { 'Wikipedia:Requests for adminship/Example', 'Wikipedia:Requests for adminship/Example2', 'Wikipedia:Requests for bureaucratship/Example3' } </syntaxhighlight>

Rfx

<syntaxhighlight lang="lua"> currentRfx.rfx() </syntaxhighlight>

This returns a table containing two arrays, rfa and rfb; rfa contains rfx objects for currently open RfAs, and rfb contains rfx objects for currently open RfBs. In the case that there are multiple RfAs or multiple RfBs they will appear in the same order as they do on Wikipedia:Requests for adminship. For a description of rfx objects and what they can do, please see Module:Rfx. For the example users, the table returned would be as follows:

<syntaxhighlight lang="lua"> { rfa = { -- Example's rfx object, -- Example2's rfx object }, rfb = { -- Example3's rfx object } } </syntaxhighlight>


-- This module gets information about RfXes (requests for adminship and requests for bureaucratship)
-- that are currently open. It can return a list of page names or a list of rfx objects found using
-- [[Module:Rfx]].

local rfx = require('Module:Rfx')
local p = {}
 
local exceptions = {
	['Front matter'] = true,
	['Header'] = true,
	['bureaucratship'] = true
}
 
-- Get an array of title objects for current RfXs.
function p.titles()
	local content = mw.title.new('Wikipedia:Requests for adminship'):getContent()
	local ret = {}
	for transclusion in string.gmatch(content, '{{(.-)}}') do
		transclusion = transclusion:gsub('|.*$', '') -- Discard parameters
		local title = mw.title.new(transclusion)
		if title and
			title.namespace == 4 and ( -- Wikipedia namespace
				title.rootText == 'Requests for adminship' or
				title.rootText == 'Requests for bureaucratship'
			) and
			title.isSubpage and
			title.baseText == title.rootText and -- Is first-level subpage
			not exceptions[ title.subpageText ]
		then
			ret[#ret + 1] = title
		end
	end
	return ret
end

-- Get an array of page names for current RfXs.
function p.rfxNames()
	local titles = p.titles()
	local ret = {}
	for i, title in ipairs(titles) do
		ret[#ret + 1] = title.prefixedText
	end
	return ret
end

-- Get a table of RfA and RfB arrays containing rfx objects for current rfxes.
function p.rfx()
	local rfa, rfb = {}, {}
	local rfxNames = p.rfxNames()
	for i, rfxName in ipairs(rfxNames) do
		local rfxObj = rfx.new(rfxName)
		if rfxObj then
			local rfxType = rfxObj.type
			if rfxType == 'rfa' then
				rfa[#rfa + 1] = rfxObj
			elseif rfxType == 'rfb' then
				rfb[#rfb + 1] = rfxObj
			end
		end
	end
	return {rfa = rfa, rfb = rfb}
end

return p