Module:AchievementSystem: Difference between revisions

// via Wikitext Extension for VSCode
// via Wikitext Extension for VSCode
Line 378: Line 378:
     local userAchievements = Achievements.getUserAchievements(pageId)
     local userAchievements = Achievements.getUserAchievements(pageId)
     return #userAchievements > 0
     return #userAchievements > 0
end
--------------------------------------------------------------------------------
-- Check if a page/user has any badge-type achievements
-- @param pageId - The page ID to check
-- @param frame - The Scribunto frame object for preprocessing
-- @return Boolean indicating if the page has any badge-type achievements
--------------------------------------------------------------------------------
function Achievements.hasBadgeAchievements(pageId, frame)
    if not pageId or pageId == '' then
        return false
    end
    local userAchievements = Achievements.getUserAchievements(pageId)
    if #userAchievements == 0 then
        return false
    end
    local types = Achievements.loadTypes(frame)
   
    -- Build a lookup table for achievement types
    local typeDefinitions = {}
    for _, typeData in ipairs(types) do
        if typeData.id and typeData.type then
            typeDefinitions[typeData.id] = typeData
        end
    end
   
    -- Filter user achievements to only include badge types
    for _, achievement in ipairs(userAchievements) do
        local achType = achievement.type
        if achType and typeDefinitions[achType] and typeDefinitions[achType].type == "badge" then
            -- Found at least one badge, no need to check further
            return true
        end
    end
    -- No badge achievements were found
    return false
end
end