Modül:TeamCard/Storage
Modül belgelemesi[oluştur]
require('Module:Module wikitext')._addText([[{{Sil|Kullanıcı talebi}}]]);
--
local Json = require('Module:Json')
local String = require('Module:StringUtils')
local Table = require('Module:Table')
local Variables = require('Module:Variables')
local Custom = require('Module:TeamCard/Custom')
-- TODO: Once the Template calls are not needed (when RL has been moved to Module), deprecate Qualifier Module
local Qualifier = require('Module:TeamCard/Qualifier')
local OpponentLibrary = require('Module:OpponentLibraries')
local Opponent = OpponentLibrary.Opponent
local TeamCardStorage = {}
---@param args table
---@param teamObject {teamtemplate: string?, lpdb: string, team2: string?, team3: string?, aliases: string[]?}
---@param players table
---@param playerPrize number
function TeamCardStorage.saveToLpdb(args, teamObject, players, playerPrize)
local team, teamTemplateName
if type(teamObject) == 'table' then
if teamObject.team2 or teamObject.team3 then
team = 'TBD'
else
teamTemplateName = teamObject.teamtemplate
team = teamObject.lpdb
end
end
local lpdbPrefix = args.lpdb_prefix or args.smw_prefix
or Variables.varDefault('lpdb_prefix') or Variables.varDefault('smw_prefix') or ''
-- Setup LPDB Data
local lpdbData = {}
lpdbData = TeamCardStorage._addStandardLpdbFields(lpdbData, team, args, lpdbPrefix)
lpdbData.participanttemplate = teamTemplateName
lpdbData.players = players
lpdbData.individualprizemoney = playerPrize
-- If a custom override for LPDB exists, use it
lpdbData = Custom.adjustLpdb and Custom.adjustLpdb(lpdbData, team, args, lpdbPrefix) or lpdbData
-- Store aliases (page names) for opponents for setting page vars
if Table.isNotEmpty(teamObject.aliases) then
lpdbData.extradata.opponentaliases = teamObject.aliases
end
-- Store into the standardized lpdb fields
lpdbData = Table.mergeInto(lpdbData, Opponent.toLpdbStruct(Opponent.resolve(
Opponent.readOpponentArgs{type = Opponent.team, template = teamTemplateName} or Opponent.tbd(Opponent.team),
lpdbData.date
)))
lpdbData = Json.stringifySubTables(lpdbData)
lpdbData.opponentplayers = lpdbData.players -- Until this is included in Opponent
mw.ext.LiquipediaDB.lpdb_placement(lpdbData.objectName, lpdbData)
end
-- Adds basic lpdb fields
---@param lpdbData table
---@param team string
---@param args table
---@param lpdbPrefix string
---@return table
function TeamCardStorage._addStandardLpdbFields(lpdbData, team, args, lpdbPrefix)
-- Name must match prize pool insertion
lpdbData.objectName = TeamCardStorage._getLpdbObjectName(team, lpdbPrefix)
local title = mw.title.getCurrentTitle().text
local tournamentName = Variables.varDefault('tournament name pp') or Variables.varDefault('tournament_name')
local date = Variables.varDefault('tournament_date')
local startDate = Variables.varDefault('tournament_startdate', date)
local endDate = Variables.varDefault('tournament_enddate', date)
lpdbData.participant = team
lpdbData.tournament = tournamentName or title
lpdbData.series = Variables.varDefault('tournament_series')
lpdbData.parent = Variables.varDefault('tournament_parent')
lpdbData.startdate = startDate
lpdbData.date = args.date
or Variables.varDefault(lpdbData.objectName .. '_placementdate')
or endDate
lpdbData.qualifier, lpdbData.qualifierpage, lpdbData.qualifierurl = Qualifier.parseQualifier(args.qualifier)
if team ~= 'TBD' then
lpdbData.image = args.image1
lpdbData.imagedark = args.imagedark1
end
lpdbData.mode = Variables.varDefault('tournament_mode', 'team')
lpdbData.publishertier = Variables.varDefault('tournament_publishertier')
lpdbData.icon = Variables.varDefault('tournament_icon')
lpdbData.icondark = Variables.varDefault('tournament_icondark')
lpdbData.game = Variables.varDefault('tournament_game')
lpdbData.liquipediatier = Variables.varDefault('tournament_liquipediatier')
lpdbData.liquipediatiertype = Variables.varDefault('tournament_liquipediatiertype')
lpdbData.extradata = {}
return lpdbData
end
-- Build the standard LPDB "Object Name", which is used as primary key in the DB record
---@param team string
---@param lpdbPrefix string?
---@return string
function TeamCardStorage._getLpdbObjectName(team, lpdbPrefix)
local storageName = (team == 'TBD' and 'participant') or 'ranking'
if String.isNotEmpty(lpdbPrefix) then
storageName = storageName .. '_' .. lpdbPrefix
end
storageName = storageName .. '_' .. mw.ustring.lower(team)
if team == 'TBD' then
local placement = tonumber(Variables.varDefault('TBD_placements', '1'))
storageName = storageName .. '_' .. placement
Variables.varDefine('TBD_placements', placement + 1)
end
return storageName
end
return TeamCardStorage