Module:Wikimedia engineering project date categories

Module documentation

Module to output Category:WMF Projects subcategories as appropriate for a start and end date, to be used in {{Wikimedia engineering project information }}

-- Module to output [[:Category:WMF Projects]] subcategories
-- as appropriate for a start and end date, to be used in
-- {{Wikimedia engineering project information}}

local p = {}
local lang = mw.language.getContentLanguage()

local function makeCategory( catdate, trail )
    local quarter, year
    quarter = math.ceil( tonumber( lang:formatDate( "m", catdate ) ) / 3 )
    year = lang:formatDate( "Y", catdate )
    return "[[Category:WMF Projects " .. year .. "q" .. tostring( quarter ) .. trail .. "]]"
end

function p.datesToCategories( frame )
    local startdate, curdate, enddate
    local categories = ""
    local trail = ""

    if (not frame.args.startdate) or frame.args.startdate == "" then
        return "[[Category:WMF Projects missing start date]]"
    else
        curdate = frame.args.startdate
        if string.len(curdate) < 4 then
        	return "[[Category:WMF Projects missing start date]]"
    	end
        if string.len(curdate) == 4 then
        	curdate = curdate .. "-01"
    	end
    end

    local title = mw.title.getCurrentTitle()
	if title and title.subpageText and mw.language.isSupportedLanguage(title.subpageText) and not (title.subpageText == mw.language.getContentLanguage():getCode()) then
    	--  Don't populate WMF quarter category with translations of every page
    	return ''
	end

	local now = lang:formatDate("U")
    if (not frame.args.enddate) or frame.args.enddate == "" then
        -- Ends now
        enddate = now
    else
        enddate = frame.args.enddate
        if string.len(enddate) == 4 then
        	enddate = enddate .. "-12"
        end
		enddate = lang:formatDate("U", enddate)
    end
    if enddate >= now then
    	 -- Current project 
    	 -- In unusual circumstances like [[Extension:Chart/Project]] a project can have a known future end date
    	 -- treat that the same way as a current end date for categorization
        categories = categories .. "[[Category:WMF Projects" .. trail .. "]]"
        enddate = now
    end
    
    while lang:formatDate( "U", curdate ) < enddate do
        categories = categories .. makeCategory( curdate, trail )
        curdate = lang:formatDate( "Y-m-d", curdate .. "+3 months" )
    end
    categories = categories .. makeCategory( "@"..enddate, trail )
    return categories
end

return p