Modulo:WLM
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 2023 in Italy'
-- Associa il nome della regione (come usato nelle sottopagine di
-- [[Progetto:Wiki Loves Monuments 2023/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', false},
['Calabria'] = {'Calabria', false},
['Campania'] = {'Campania', false},
['Emilia-Romagna'] = {'Emilia-Romagna', false},
['Friuli-Venezia Giulia'] = {'Friuli-Venezia Giulia', true},
['Lazio'] = {'Lazio', false},
['Liguria'] = {'Liguria', true},
['Lombardia'] = {'Lombardy', true},
['Marche'] = {'Marche', true},
['Molise'] = {'Molise', false},
['Piemonte'] = {'Piedmont', true},
['Puglia'] = {'Apulia', true},
['Sardegna'] = {'Sardinia', false},
['Sicilia'] = {'Sicily', false},
['Toscana'] = {'Tuscany', true},
['Trentino-Alto Adige'] = {'Trentino-South Tyrol', false},
['Umbria'] = {'Umbria', true},
['Valle d\'Aosta'] = {'Aosta Valley', true},
['Veneto'] = {'Veneto', false},
}
-- 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)
}
-- Comuni da includere nel concorso locale Valle del primo presepe
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
-- Verifica se si tratta di un edificio religioso patrocinato (P8001) dal Dicastero per la cultura.
-- Nota: possono esserci 0 , 1 , n patrocinatori. Nel primo caso enti vale nil dopo la chiamata a Wikidata.
local function is_religiousbuilding(qid)
local enti = mWikidata._getQualifier( { 'P2186', 'P8001', from = qid } )
if enti then
-- return string.match( enti, 'Dicastero per la cultura') == 'Dicastero per la cultura'
return true
else
return false
end
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 concorsosubregionale = false
local edificioreligioso = false
-- Parsing del titolo della pagina per "localizzare" il monumento
-- Casistica pagine concorsi subregionali: Progetto:Wiki Loves Monuments 2022/EDIZIONELOCALE/qualcosa_se_serve
-- Casistica pagine concorsi regionale e nazionale: Progetto:Wiki_Loves_Monuments_2022/Monumenti/REGIONE/PROVINCIA/qualcosa_se_serve
local tp = titleparts(mw.title.getCurrentTitle().fullText)
local edizionelocale = tp[2]
local regione = tp[3]
local provincia = tp[4]
-- 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
-- edificioreligioso (memorizza il risultato del test per usarlo anche per la classificazione regionale piu avanti)
if is_religiousbuilding(qid) then
table.insert(categories, root_category .. ' - religious buildings')
edificioreligioso = true
else
table.insert(categories, root_category .. ' - traditional contest')
end
-- Wiki Loves Lake Como (lo identica tramite la provincia in 4' posizione nelle pagine del concorso nazionale o il nome in 2' posizione nelle pagine del concorso locale.)
if provincia == 'Provincia di Como' or provincia == 'Provincia di Lecco' or edizionelocale == "Lake Como" then
concorsosubregionale = true
for _, x in pairs(lakecomo_exclude) do
if qid == x then
concorsosubregionale = false
end
end
if concorsosubregionale then
table.insert(categories, root_category .. ' - Lake Como')
end
end
-- Wiki Loves Avellino (lo identica tramite la provincia in 4' posizione nelle pagine del concorso nazionale o il nome in 2' posizione nelle pagine del concorso locale.)
if provincia == 'Provincia di Avellino' or edizionelocale == "Avellino" then
concorsosubregionale = true
table.insert(categories, root_category .. ' - Avellino')
end
-- Wiki Loves Valle del Primo Presepe
if provincia == 'Provincia di Rieti' or edizionelocale == "Valle del Primo Presepe" then
for _, x in pairs(primopresepe_include) do
local municipality = mWikidata._getProperty({'P131', from = qid, snaktype = 'value', n = 1, formatting = 'raw'})
if qid == x or municipality == x then
concorsosubregionale = true
table.insert(categories, root_category .. ' - Valle del Primo Presepe')
break
end
end
end
-- foto per regione (se il Modulo è invocato dalle pagine di un'edizione locale, imposta la regione in modo forzoso)
if edizionelocale == "Lake Como" then regione = "Lombardia" end
if edizionelocale == "Avellino" then regione = "Campania" end
if edizionelocale == "Valle del Primo Presepe" then regione = "Lazio" end
if regioni[regione] then
if edificioreligioso then
table.insert(categories, root_category .. ' - ' .. regioni[regione][1] .. ' - religious buildings')
else
table.insert(categories, root_category .. ' - ' .. regioni[regione][1])
end
if not regioni[regione][2] and not concorsosubregionale 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 = mWikidata._getProperty({'P8592', from = qid, n = 1, snaktype = 'value'})
end
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
if is_religiousbuilding(qid) then
image = 'BSicon_ARCH2.svg'
else
image = 'BSicon_CITY.svg'
end
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