Moodul:Mall:Persoon
Ilme
Selle mooduli dokumentatsiooni saab kirjutada asukohta Moodul:Mall:Persoon/doc.
local wdLoadSuccess, mdlWikidata = pcall(require, "Moodul:Wikidata")
assert (wdLoadSuccess, "Wikidata mooduli laadimine ebaõnnestus.")
local p = {}
local gregorianCalendar = "Q1985727"
local propertyId = {
["birthdate"] = "P569",
["deathdate"] = "P570"
}
local trackingCatLink = "[[Kategooria:Wikidata kuupäevi kasutavad isikuartiklid]]"
local function getDateParts(strDate)
_,_,y,m,d=string.find(strDate, "(%d+)-(%d+)-(%d+)")
return tonumber(y),tonumber(m),tonumber(d)
end
local function isAlive()
local wdParameters = {}
local boolIsAlive = true
wdParameters["args"] = nil
wdParameters["args"] = {}
wdParameters["args"][1] = propertyId["deathdate"]
deathdate = mdlWikidata.claim(wdParameters) or nil
if (deathdate) then boolIsAlive = false end
return boolIsAlive
end
local function calcAge(birthDate, deathDate)
-- UTC +3
local TIMEZONE_OFFSET = 3 * 60 * 60
local MAX_AGE = 150
local age = nil
local ageErrorMsg = nil
fYear, fMonth, fDay = getDateParts(birthDate)
fMonth = fMonth or 0
fDay = fDay or 0
if (deathDate) then
sYear, sMonth, sDay = getDateParts(deathDate)
else
nowTable = os.date('*t', os.time() + TIMEZONE_OFFSET)
sYear = nowTable.year
sMonth = nowTable.month
sDay = nowTable.day
end
sMonth = sMonth or 0
sDay = sDay or 0
if (fYear and sYear) then
age = sYear - fYear
if (sMonth<fMonth or (sMonth==fMonth and sDay<fDay)) then
age = age - 1
end
if (age > MAX_AGE) then
ageErrorMsg = "[[Kategooria:Wikidata järgi liiga vanad inimesed]]"
end
end
return age, ageErrorMsg
end
function p.birthdateWithAge()
local outputStr = ""
local wdParameters = {}
wdParameters["args"] = nil
wdParameters["args"] = {}
wdParameters["args"][1] = propertyId["birthdate"]
wdParameters["args"]["parameter"] = "calendarmodel"
calendarType = mdlWikidata.claim(wdParameters) or nil
if (calendarType and calendarType == gregorianCalendar) then
wdParameters["args"]["parameter"] = "time:j. F Y"
birtdate = mdlWikidata.claim(wdParameters) or nil
if (birtdate) then
if (isAlive()) then
wdParameters["args"]["parameter"] = "time:Y-m-d"
birtdateISO = mdlWikidata.claim(wdParameters) or nil
age, ageErrorMsg = calcAge(birtdateISO)
end
if age then
outputStr = birtdate .. ' <span class="noprint" style="white-space:nowrap">(' .. age .. "-aastane)</span>"
if ageErrorMsg then outputStr = outputStr .. ageErrorMsg end
else
outputStr = birtdate
end
local showIcon = require("Moodul:EditAtWikidata").showMessage
local iconParameters = {}
iconParameters["args"] = nil
iconParameters["args"] = {}
iconParameters["args"]["pid"] = propertyId["birthdate"]
outputStr = outputStr .. showIcon(iconParameters) .. trackingCatLink
end
end
return outputStr
end
function p.deathdateWithAge()
local outputStr = ""
local wdParameters = {}
wdParameters["args"] = nil
wdParameters["args"] = {}
wdParameters["args"][1] = propertyId["deathdate"]
wdParameters["args"]["parameter"] = "calendarmodel"
calendarType = mdlWikidata.claim(wdParameters) or nil
if (calendarType and calendarType == gregorianCalendar) then
wdParameters["args"]["parameter"] = "time:j. F Y"
deathdate = mdlWikidata.claim(wdParameters) or nil
if (deathdate) then
wdParameters["args"]["parameter"] = "time:Y-m-d"
deathdateISO = mdlWikidata.claim(wdParameters) or nil
wdParameters["args"] = {}
wdParameters["args"][1] = propertyId["birthdate"]
wdParameters["args"]["parameter"] = "time:Y-m-d"
birtdateISO = mdlWikidata.claim(wdParameters) or nil
wdParameters["args"]["parameter"] = "calendarmodel"
calendarType = mdlWikidata.claim(wdParameters) or nil
if (birtdateISO and calendarType == gregorianCalendar and deathdateISO) then
age, ageErrorMsg = calcAge(birtdateISO, deathdateISO)
end
if age then
outputStr = deathdate .. ' <span class="noprint" style="white-space:nowrap">(' .. age .. "-aastaselt)</span>"
if ageErrorMsg then outputStr = outputStr .. ageErrorMsg end
else
outputStr = deathdate
end
local showIcon = require("Moodul:EditAtWikidata").showMessage
local iconParameters = {}
iconParameters["args"] = nil
iconParameters["args"] = {}
iconParameters["args"]["pid"] = propertyId["deathdate"]
outputStr = outputStr .. showIcon(iconParameters) .. trackingCatLink
end
end
return outputStr
end
return p