Modulo:WLM/Sandbox

Da Wikipedia, l'enciclopedia libera.
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