Modulo:Camera.it
Da Wikipedia, l'enciclopedia encyclopedia
local getArgs = require('Modulo:Arguments').getArgs local mWikidataCheck = require('Modulo:Controllo Wikidata')._main local mEditAtWikidata = require('Modulo:Modifica su Wikidata')._showMessage local mPipetrick = require('Modulo:Pipetrick')._pipetrick local mRoman = require('Modulo:Numero romano').main local mCitazione = require('Modulo:Citazione') local mWikidata = require('Modulo:Wikidata')
-- costanti local ERROR_CAT = '' local PROP_CARICA = 'P39' local PROP_ID_DEPUTATO = 'P1341' local PROP_LEGISLATURA = 'P2937'
local romanToNumber = { ['I'] = 1, ['II'] = 2, ['III'] = 3, ['IV'] = 4, ['IIII'] = 4, ['V'] = 5, ['VI'] = 6, ['VII'] = 7, ['VIII'] = 8, ['IX'] = 9, ['X'] = 10, ['XI'] = 11, ['XII'] = 12, ['XIII'] = 13, ['XIV'] = 14, ['XV'] = 15, ['XVI'] = 16, ['XVII'] = 17, ['XVIII'] = 18, ['XIX'] = 19 }
local function buildUrl(legNum, id) local leg = tonumber(legNum) return leg == 0 and "http://legislature.camera.it/chiosco.asp?content=altre_sezioni/assemblea_costituente/composizione/costituenti/framedeputato.asp?Deputato=d" .. id or leg == 1 and "http://legislature.camera.it/chiosco.asp?content=deputati/legislatureprecedenti/framedeputato.asp?Deputato=d" .. id or leg >= 2 and leg <= 9 and string.format("http://legislature.camera.it/chiosco.asp?content=deputati/legislatureprecedenti/Leg0%d/framedeputato.asp?Deputato=d%s", leg, id) or leg >= 10 and leg <= 12 and string.format("http://legislature.camera.it/chiosco.asp?content=deputati/legislatureprecedenti/Leg%d/framedeputato.asp?Deputato=d%s", leg, id) or leg == 13 and "http://leg13.camera.it/cartellecomuni/leg13/Deputati/scheda_deputato/scheda.asp?id=d" .. id or leg == 14 and string.format("http://leg14.camera.it/organiparlamentari/assemblea/contenitore_dati.asp?tipopagina=&deputato=d%s&source=%%2Fdeputatism%%2F240%%2Fdocumentoxml.asp&position=Deputati\La%%20Scheda%%20Personale&Pagina=Deputati/Composizione/01.camera/nuovacomposizione/datpersonali2.asp%%3Fdeputato=d%s", id, id) or leg == 15 and string.format("http://leg15.camera.it/cartellecomuni/leg15/include/contenitore_dati.asp?deputato=d%s&source=%%2Fdeputatism%%2F240%%2Fdocumentoxml.asp&Pagina=Deputati/Composizione/SchedeDeputati/SchedeDeputati.asp%%3Fdeputato=%s", id, id) or leg == 16 and "http://leg16.camera.it/29?shadow_deputato=" .. id or leg >= 17 and string.format("http://www.camera.it/leg%s/29?shadow_deputato=%s&idLegislatura=%s", leg, id, leg) end
local function formatError(error_msg) return string.format('Errore: %s.%s', error_msg, mw.title.getCurrentTitle().namespace == 0 and ERROR_CAT or ) end
local function paramError(param_name, no_wikidata) local error_msg = "il parametro " .. param_name .. " non è compilato"
if no_wikidata == false then error_msg = error_msg .. " e non è ricavabile da Wikidata" end
return formatError(error_msg) end
-- La funzione ricava da Wikidata l'id del deputato -- (restituisce nil se è impossibile ricavare l'id) local function getIdFromWikidata(item) local claims = mWikidata._getClaims(PROP_ID_DEPUTATO, { from = item }) -- ritorna il primo id (possiamo assumere che ve ne sia uno soltanto) if claims ~= nil and #claims > 0 then return mWikidata._formatStatement(claims[1]) end end
-- La funzione converte il numero di legislatura in una stringa numerica (es. da "xiv" a "14") -- (restituisce nil se è impossibile trasformare l'input in un numero naturale) local function formatLegislatura(leg) -- l'Assemblea Costituente ("AC") viene trattata come legislatura 0 if leg:upper() == 'AC' or leg == 'costituente' then return 0 else return leg:match("^%d+$") and leg ~= '0' and leg or romanToNumber[leg:upper()] end end
-- La funzione ricava da Wikidata tutte le legislature da deputato local function getAllLegsFromWikidata(item) local legs = {} local claims = mWikidata._getClaims(PROP_CARICA, { from = item }) if claims ~= nil then for _, claim in ipairs(claims) do local carica = claim.mainsnak.datavalue.value['id']
-- Se la carica ricoperta è "deputato dell'Assemblea Costituente della Repubblica Italiana" (Q3705737) if carica == 'Q3705737' then -- allora inserisci 0 come numero di legislatura table.insert(legs, 0)
-- altrimenti, se la carica ricoperta è "deputato della Repubblica Italiana" (Q18558478) elseif carica == 'Q18558478' then -- allora ricava la/e legislatura/e (P2937) local leg = mWikidata._formatQualifiers(claim, PROP_LEGISLATURA) for l in string.gmatch(leg, "(%w+)") do table.insert(legs, formatLegislatura(l)) break end end end end return legs end
local p = {}
-- La funzione ritorna i collegamenti ad una o più legislature per il deputato function p._main(args) local item = args.from
-- argomenti in input local id = args[1] or args['id'] local leg = args[2] or args['legislatura'] local name = mPipetrick(args[3] or args['nome']) local access_date = args['accesso']
-- costanti local site = 'Camera.it' local publisher = 'Parlamento italiano'
local id_from_WD = not id and getIdFromWikidata(item) or nil local legs = leg and { formatLegislatura(leg) } or getAllLegsFromWikidata(item)
-- gestione messaggi e categorie di errore local err = select(2, pcall(function () if id == nil and id_from_WD == nil then return paramError('id', leg and true or false) elseif #legs == 0 and leg then return formatError("il numero di legislatura indicato è errato") elseif #legs == 0 then return paramError('legislatura', id and true or false) end end))
if err then return args['mostra errori'] ~= 'no' and err or nil end
-- icona e categoria Wikidata local wd_icon = mEditAtWikidata({ pid = PROP_ID_DEPUTATO, qid = item, id }) or local wd_tracking_cat = mWikidataCheck({ PROP_ID_DEPUTATO, id }) or
-- generazione dei link local altri_link = {} local first_url, first_title
-- link disposti sempre in ordine crescente di legislatura table.sort(legs, function(n, m) return tonumber(n) < tonumber(m) end)
for i = 1, #legs do local leg = legs[i] local url = buildUrl(leg, id or id_from_WD) local short_name, long_name if leg == 0 then short_name = "Assemblea Costituente" long_name = short_name .. " (Italia)" else local roman = mRoman({ leg }):upper() short_name = roman .. " legislatura" long_name = short_name .. " della Repubblica Italiana" end if i == 1 then first_url = url if #legs == 1 then first_title = name site = string.format("%s - %s", site, long_name, short_name) else first_title = string.format("%s (%s)", name, long_name) end else table.insert(altri_link, { url, short_name }) end end
return mCitazione.cita_da_modulo('args', { url = first_url, titolo = first_title, altrilink = altri_link, sito = site, editore = publisher, accesso = access_date }) .. wd_icon .. wd_tracking_cat end
-- Entry-point per il template Camera.it function p.getLinks(frame) local args = getArgs(frame) args['mostra errori'] = frame.args['mostra errori'] return p._main(args) end
return p