Modulo:WLM/Sandbox
Vai alla navigazione
Vai alla ricerca
-- Modulo per gestire le liste di monumenti di Wiki Loves Monuments
require('strict')
local getArgs = require('Module:Arguments').getArgs
local mWikidata = require('Modulo:Wikidata')
local p = {}
local root_category = 'Images from Wiki Loves Monuments 2020 in Italy'
-- Associa il nome della regione (come usato nelle sottopagine di
-- [[Progetto:Wiki Loves Monuments 2020/Monumenti]] con il nome (inglese)
-- usato nelle categorie su Commons e la presenza o meno di un concorso regionale
local regioni = {
['Abruzzo'] = {'Abruzzo', true},
['Basilicata'] = {'Basilicata', true},
['Calabria'] = {'Calabria', false},
['Campania'] = {'Campania', false},
['Emilia-Romagna'] = {'Emilia-Romagna', false},
['Friuli-Venezia Giulia'] = {'Friuli-Venezia Giulia', false},
['Lazio'] = {'Lazio', false},
['Liguria'] = {'Liguria', true},
['Lombardia'] = {'Lombardy', false},
['Marche'] = {'Marche', false},
['Molise'] = {'Molise', false},
['Piemonte'] = {'Piedmont', false},
['Puglia'] = {'Apulia', true},
['Sardegna'] = {'Sardinia', false},
['Sicilia'] = {'Sicily', false},
['Toscana'] = {'Tuscany', false}, -- il concorso locale c'è, ma la selezione è a parte
['Trentino-Alto Adige'] = {'Trentino-South Tyrol', false},
['Umbria'] = {'Umbria', false},
['Valle d\'Aosta'] = {'Aosta Valley', false},
['Veneto'] = {'Veneto', true},
}
-- Monumenti nelle province di Como e Lecco che non partecipano al concorso
-- locale del lago di Como
local lakecomo_exclude = {
'Q28375375', -- Faro Voltiano (Brunate)
'Q24937411', -- Fontana di Camerlata (Como)
'Q21592570', -- The Life Electric (Como)
'Q3862651', -- Monumento ai caduti (Como)
'Q3517634', -- Tempio voltiano (Como)
'Q24052892', -- Via Crucis (Esino Lario)
'Q533156' -- Villa Carlotta (Tremezzina)
}
local primopresepe_include = {
'Q223423', --Accumoli
'Q223427', --Amatrice
'Q223434', --Antrodoco
'Q223459', --Borbona
'Q223472', --Borgo Velino
'Q223476', --Cantalice
'Q223509', --Castel S. Angelo
'Q224039', --Cittaducale
'Q224043', --Cittareale
'Q118085', --Colli sul Velino
'Q224109', --Contigliano
'Q224144', --Greccio
'Q224149', --Labro
'Q224172', --Leonessa
'Q224211', --Micigliano
'Q224264', --Morro Reatino
'Q224300', --Poggio Bustone
'Q224333', --Posta
'Q13396', --Rieti
'Q224405' --Rivodutri
}
local function titleparts(inputstr)
local t = {}
for str in mw.ustring.gmatch(inputstr, "([^/]+)") do
table.insert(t, str)
end
return t
end
-- Restituisce il valore della proprietà P361 (parte di), purché sia istanza del tipo specificato
local function part_of_type(qid, part_type)
local statements = mWikidata._getProperty({ 'P361', from = qid, formatting = 'raw' }, true)
if statements then
for _, statement in ipairs(statements) do
if mWikidata._instanceOf({part_type, from = statement}) then
return statement
end
end
end
end
-- Verifica se le immagini da caricare per questo elemento devono essere viste.
local function is_municipality(qid)
-- Sì quando si tratta di comuni o comuni sparsi
return mWikidata._instanceOf({'Q747074', from = qid}) or mWikidata._instanceOf({'Q954172', from = qid})
end
-- Verifica se si tratta di un albero monumentale.
local function is_tree(qid)
return mWikidata._instanceOf({'Q811534', from = qid})
end
-- Se il monumento ha una categoria associata, restituisce quella.
-- Altrimenti, quella di un'area più vasta, come il comune di appartenenza.
local function get_main_category(qid, comcat)
-- La categoria associata su Wikidata o, in assenza, passata come parametro
local category = mWikidata._getProperty({'P373', from = qid, snaktype = 'value'}) or comcat
if category then
if is_municipality(qid) then
return {category, 'Foto del comune'}
else
return {category, 'Foto del monumento'}
end
end
-- Scavi archeologici di Ercolano
if mWikidata._propertyHasEntity('P361', {'Q178813', from = qid}) then
category = mWikidata._getProperty({'P373', from = 'Q178813', snaktype = 'value'})
return {category, 'Foto dell\'area archeologica'}
end
-- Scavi archeologici di Pompei
local insula = part_of_type(qid, 'Q26960982')
if insula then
category = mWikidata._getProperty({'P373', from = insula, snaktype = 'value'})
if not category then
local regio = part_of_type(insula, 'Q26912005')
if regio then
category = mWikidata._getProperty({'P373', from = regio, snaktype = 'value'})
end
end
if category then
return {category, 'Foto dell\'area archeologica'}
end
end
-- luogo (P276)
category = mWikidata._getProperty({'P276', from = qid, showprop = 'P373', snaktype = 'value'})
if not category or category == '' then
-- unità amministrativa in cui è situato (P131)
category = mWikidata._getProperty({'P131', from = qid, showprop = 'P373', snaktype = 'value'})
end
return {category, 'Foto nel comune'}
end
function p.main_category(frame)
local args = getArgs(frame)
local cat = get_main_category(args[1], args.comcat)
return '[[c:Category:' .. cat[1] .. '|' .. cat[2] .. ']]'
end
-- Restituisce la lista di categorie in cui tutte le foto del monumento
-- devono essere caricate.
-- Argomenti:
-- 1: l'id Q del monumento
-- comcat: categoria aggiuntiva da inserire
function p._categories(args)
local qid = args[1]
local categories = {}
local lakecomo
local primopresepe
-- categoria principale
table.insert(categories, get_main_category(qid, args.comcat)[1])
-- alberi monumentali
if is_tree(qid) then
table.insert(categories, root_category .. ' - veteran trees')
end
-- viste
if is_municipality(qid) then
table.insert(categories, root_category .. ' - cityscapes')
end
-- Wiki Loves Lake Como
local tp = titleparts(mw.title.getCurrentTitle().fullText)
local provincia = tp[4]
if provincia == 'Provincia di Como' or provincia == 'Provincia di Lecco' then
lakecomo = true
for _, x in pairs(lakecomo_exclude) do
if qid == x then
lakecomo = false
end
end
end
if lakecomo then
table.insert(categories, root_category .. ' - Lake Como')
end
-- Wiki Loves Valle del Primo Presepe
local tp = titleparts(mw.title.getCurrentTitle().fullText)
local provincia = tp[4]
if provincia == 'Provincia di Rieti' then
primopresepe = false
for _, x in pairs(primopresepe_include) do
if qid == x then
primopresepe = true
end
end
end
if primopresepe then
table.insert(categories, root_category .. ' - Valle del Primo Presepe')
end
-- foto per regione
local regione = tp[3]
if regioni[regione] then
table.insert(categories, root_category .. ' - ' .. regioni[regione][1])
if not regioni[regione][2] and not lakecomo then
table.insert(categories, root_category .. ' - without local award')
end
else
table.insert(categories, root_category .. ' - unknown region')
end
return categories
end
function p.categories(frame)
local args = getArgs(frame)
return table.concat(p._categories(args), '|')
end
-- Genera l'URL per il caricamento di un'immagine
function p._upload_url(qid, comcat)
local parameters = {}
parameters['campaign'] = 'wlm-it'
parameters['uselang'] = 'it'
parameters['descriptionlang'] = 'it'
parameters['id'] = mWikidata._getProperty({'P2186', from = qid, n = 1, snaktype = 'value'})
parameters['description'] = mWikidata._getLabel({qid})
if not is_municipality(qid) then
parameters['lat'] = mWikidata._getProperty({'P625', from = qid, n = 1, coord = 'latitude', snaktype = 'value'})
parameters['lon'] = mWikidata._getProperty({'P625', from = qid, n = 1, coord = 'longitude', snaktype = 'value'})
end
parameters['categories'] = table.concat(p._categories({qid, comcat = comcat}), '|')
return mw.uri.fullUrl('c:Special:UploadWizard', parameters)
end
function p.upload_url(frame)
local args = getArgs(frame)
return p._upload_url(args[1], args['comcat'])
end
-- Genera l'immagine di esempio da mostrare nelle liste
function p._image(qid)
local image
if is_municipality(qid) then
image = mWikidata._getProperty({'P4291', from = qid, n = 1, snaktype = 'value'})
if image == nil then
image = 'Italian traffic signs - città.svg'
end
else
image = mWikidata._getProperty({'P18', from = qid, n = 1, snaktype = 'value'})
if image == nil then
if is_tree(qid) then
image = 'Maki-park-11.svg'
else
image = 'BSicon_Castle.svg'
end
end
end
return '[[File:' .. image .. '|128px|centro]]'
end
function p.image(frame)
local args = getArgs(frame)
return p._image(args[1])
end
return p