Toggle menu
Toggle personal menu
Not logged in
Your IP address will be publicly visible if you make any edits.

Module:Number of works

From ProleWiki, the proletarian encyclopedia
Revision as of 14:58, 14 September 2024 by CriticalResist (talk | contribs)
local p = {}
local CACHE_EXPIRATION = 86400 -- Cache for 24 hours (in seconds)

-- Function to cache the result for the current page view
local function setCache(category, pages)
    local cache = mw.ext.LuaCache
    if cache then
        local key = "NumberOfWorks_" .. category
        cache:set(key, pages, CACHE_EXPIRATION)
    end
end

-- Function to get the cached result for the current page view
local function getCache(category)
    local cache = mw.ext.LuaCache
    if cache then
        local key = "NumberOfWorks_" .. category
        return cache:get(key)
    end
    return nil
end

-- Main function to get the number of works
function p.getWorkCount(frame)
    local category = frame.args.category or ''
    if category == '' then return "0 works" end

    -- Check the cache first
    local cachedPages = getCache(category)
    if cachedPages then
        if tonumber(cachedPages) == 1 then
            return "1 work"
        else
            return cachedPages .. " works"
        end
    end

    -- No cached result, perform expensive call
    local pages = mw.site.stats.pagesInCategory(category)

    -- Cache the result
    setCache(category, pages)

    -- Return the result
    if tonumber(pages) == 1 then
        return "1 work"
    else
        return pages .. " works"
    end
end

function p.main(frame)
    return p.getWorkCount(frame)
end

return p