Módulo:Zona de pruebas/Agabi10/Ficha de centro educativo

Este módulo no tiene página de documentación[crear]
local z = {}

local argumentos    -- Tabla de argumentos con los que se llama a la función 
local argumento={}  -- Argumentos eliminando los argumentos sin datos
local Entidad       -- Tabla con los datos en Wikidata del libro.
--                         Ver Wikidata:WikiProject Books para las propicedades posibles
local algunaPropiedadEnlazaWikidata -- Para alguna propiedad no existe la etiqueta ni el enlace mostrándose algo de la forma d:...

-- Módulos utilizados
local ModuloArgumentos       = require('Módulo:Argumentos')
local ModuloFicha            = require('Módulo:Ficha')
local ModuloIdentificadores  = require('Módulo:Identificadores')
local ModuloPaginas          = require('Módulo:Páginas')	
local ModuloWikidataFormatos = require('Módulo:Wikidata/Formatos')	
local ModuloWikidata         = require('Módulo:Wikidata')
local ModuloTablas           = require('Módulo:Tablas')
local ModuloURL              = require('Módulo:URL')

-- Constantes
local enMayusculas       = {['formatoTexto'] = 'mayúscula'}
local enMayusculasO      = {['formatoTexto'] = 'mayúscula', ['conjunción']=' o '}
local listaNoOrdenada    = {['lista'] = 'no ordenada'} --, ['debeExistir'] = 'sí'
local lugar              = {['conjunción']=' o ', ['valor-función'] = ModuloWikidataFormatos.formatoLugar}
local debeExistir        = {['debeExistir'] = 'sí'}
local conPeriodo         = {['lista'] = 'no ordenada', ['formatoTexto'] = 'mayúscula', ['calificativo'] = ModuloWikidataFormatos.formatoPeriodo}
local formatoCoordenadas = {['tipo'] = 'landmark', ['uno'] = 'sí'}
	
function z.Ficha(frame)
    --  Hacer que funcione la función formatBandera	 y formatoGentilicio
    ModuloWikidata:setFrame(frame)  -- No funciona si se pone ModuloWikidata.setFrame(marco)    
    
    -- Obtener una copia de los argumentos eliminando los argumentos sin valor
    local argumento = ModuloArgumentos.obtenerArgumentosConValor(frame)
    
    -- Obtener datos complejos
    
    -- Obtener los datos de la página donde se inserta la ficha de Wikidata.
    Entidad = mw.wikibase.getEntityObject() or {}
    
    --if true then
    --	return ModuloTablas.tostring(Entidad)
    --end
    
    nombre = argumento['nombre'] or argumento['Nombre'] or
             obtenerEtiquetaWikidata() or 
             ModuloPaginas.nombrePagina({desambiguar='sí'})
             
    if argumento['lema'] then
    	lema = "''" .. argumento['lema'] .. "''" .. (argumento['lemaref'] or '')
    end
    
    if argumento['lemaesp'] then
    	lemaEsp = "«" .. argumento['lemaesp'] .. "»" .. (argumento['lemaespref'] or '')
    end
    
    if lema and lemaEsp then
    	lemaMostrar = lema .. "<br />" .. lemaEsp
    else
    	lemaMostrar = lema or lemaEsp
    end
    
    web = propiedad('P856') or argumento['web'] or argumento['página web'] or 
    		argumento['website'] or argumento['sitio web']
          
    twitter  = argumento['twitter']  or argumento['Twitter'] or obtenerTwitter()
    facebook = argumento['facebook'] or argumento['Facebook'] or obtenerFacebook()
    
    if (not argumento['coordenadas'] == 'no') then
    	coordenadas = propiedad('P625', formatoCoordenadas)
    end
    
    estilotitulo = 'background-color:#5F81AD; color:#FFFFFF'
    
    local Ficha = {
        clase           = 'biography vcard',

        -- Título
        tipocabecera    = 'libro',                   
        titulo          = nombre,
        colorfondo      = colorfondo,        
        estilotitulo    = estilotitulo,
        --Imagen
        imagen          = argumento['imagen']  or argumento['Imagen'] or 
                          argumento['foto']    or 
                          propiedad('P18', {uno='sí'}),
        ['tamañoimagen']= argumento['tamaño de imagen'] or argumento['tamaño'] or 
                          argumento['tamaño imagen'] or argumento['tamañoimagen'] or argumento['tamañodelaimagen'] or
                          argumento['tamaño de foto'] or 
                          '220px', -- or '200px' en la ficha de escritor, 192 en la ficha de artista. Tomo por defecto 220, el tamaño de thumb
        pie             = argumento['pie de imagen'] or argumento['descripción'] or
                          argumento['pie de foto'] or argumento['piedefoto'] or
                          argumento['textoimagen'] or argumento['TextoImagen'] or argumento['texto_imagen'] or
                          argumento['pie de foto']
                          ,
        
        --Etiquetas y datos                  
        estiloetiqueta  = 'width:33%',
        estilodatos     = 'padding:0.2em; line-height:1.3em; vertical-align:middle;',
        
        {tipo='sección',
        	estilotitulo = estilotitulo,
        	{'[[Sigla]]',       argumento['sigla'] },
        	{'[[Acrónimo]]',    argumento['acrónimo'] },
        	{'[[Alias]]',       argumento['sobrenombre'] },
        	{'[[Lema]]',        lemaMostrar },
        	{'Nombre original', argumento['nombre_original'] },
        },
        
        {tipo='sección',
        	['titulo'] = 'Información',
        	estilotitulo = estilotitulo,
        	{'Tipo', argumento['tipo'] or argumento['tipo_de_escuela'] },
        	{'[[Universidad]]', argumento['universidad'] },
        	{'[[Dotación financiera|Dotación]]', argumento['dotación'] },
        	{'Afiliación religiosa', argumento['afiliación_religiosa'] },
        	{'Patron(es)', argumento['patrón'] },
        	{'Establecida', argumento['establecida'] },
        	{'Fundación', argumento['fundación'] or argumento['apertura'] },
        	{'Fundador(es)', argumento['fundador'] },
        	{'Estatus', argumento['estatus'] },
        	{'Clausura', argumento['clausura'] or argumento['cierre'] },
        	{'Distrito escolar', argumento['distrito'] },
        	{'Género', argumento['género'] },
        	{'Escuelas hermanas', argumento['escuelas_hermanas'] },
        	{'Afiliaciones', argumento['afiliaciones'] },
        },
        
        {tipo='sección',
        	['titulo'] = 'Localización',
        	estilotitulo = estilotitulo,
        	{'Ubicación', argumento['ubicación'] },
        	{'Dirección', argumento['dirección'] },
        	{'[[Coordenadas geográficas|Coordenadas]]', coordenadas },
        	{'Otras sedes', argumento['sedes'] },
        	{'[[Campus]]', argumento['campus'] },
        },
        
        {tipo='sección',
        	['titulo'] = 'Academia',
        	estilotitulo = estilotitulo,
        	{'Estudiantes', argumento['estudiantes'] },
        	{'Profesores', argumento['profesores'] },
        	{'Jornada', argumento['jornada'] },
        	{'Colores', argumento['colores'] },
        	{'[[Mascota (símbolo)|Mascota]]', argumento['mascota'] },
        },
        
        {tipo='sección',
        	['titulo'] = 'Administración',
        	estilotitulo = estilotitulo,
        	{'Funcionarios', argumento['funcionarios'] },
        	{'Administrativos', argumento['administrativos'] },
        	{'Presupuesto', argumento['presupuesto'] },
        },
        
        {tipo='sección',
			['titulo'] = 'Autoridades',
			estilotitulo = estilotitulo,
			{'Rector/a', argumento['rector'] },
			{'Vicerrector/a', argumento['vicerrector'] },
			{'Inspector/a General', argumento['inspector'] },
			{'Director/a', argumento['director'] },
			{'Vicedirector/a', argumento['vicedirector'] },
			{'Coordinador/a', argumento['coordinador'] },
			{'Administrador/a', argumento['administrador'] },
		},
        
        {tipo='sección', -- Web
            clase       ='plainlinks',
            {'Sitio web', ModuloURL.enlazar(web)}, 
            {'Facebook', facebook and ('[http://www.facebook.com/' .. facebook .. ' ' .. facebook .. ']')}, -- Ver la plantilla facebook
            {'Twitter',  twitter  and ('[http://www.twitter.com/'  .. twitter  .. ' ' .. twitter .. ']')},  -- Ver la plantilla twitter
        },
        
        {tipo='sección',
            titulo      ='Notas',
            estilotitulo='border-top:1px solid #c0c0c0;text-align:left',
            {'', argumento['notas'], estilodatos='text-align:left;font-size:90%; line-height:1.2em'}
        },
        
        imageninferior = argumento['logo'],
        ['tamañoimageninferior'] = argumento['logo_tamaño'] or '200px',
    }
    
    categorias = ''
    
    if algunaPropiedadEnlazaWikidata then
    	categorias = '[[Categoría:Wikipedia:Páginas con propiedades de Wikidata sin etiqueta]]'
    end
    
    return ModuloFicha.infobox(Ficha) .. categorias
end

-- Función que devuelve la lista de los valores de una propiedad en Wikidata formateados
function propiedad(idPropiedad,opciones)
    if Entidad and Entidad.claims and Entidad.claims[idPropiedad] then
    	if not opciones then
    		opciones = {}
    	end
    	opciones['propiedad'] = idPropiedad

        valorPropiedad = ModuloWikidata.getPropiedad(opciones,Entidad.claims[idPropiedad])

        if valorPropiedad and valorPropiedad:match('%[%[:d:') then
          algunaPropiedadEnlazaWikidata = true
        end

    	return valorPropiedad
    end
end

function obtenerEtiquetaWikidata()
	if Entidad and Entidad.labels and Entidad.labels.es then
        return Entidad.labels.es.value
    end
end

function listaDesplegable(titulo, lista, frame)
	if not lista then
		return
	end
	
	return frame:preprocess('{{lista desplegable|título=' .. titulo .. 
		--'|marco_estilo=border:0; padding:0; border-top:1px solid #c0c0c0;' ..
		'|marco_estilo=border:0; padding:0;' ..
		'|título_estilo=background:transparent; text-align:left|lista_estilo=padding-left:33%;text-align:left; display:none|1='
		.. lista .. '}}')
end

function estaEnlazado(que)
	if not que then 
		return
	end
	
	for contenido in que:gmatch("%[%[(.+)]]") do
		if not contenido:match('^:d:') then
			return que
		end
	end
end

function obtenerValorCalificativo(Propiedad, Calificativo, ValorPropiedad)
	-- Obtener el valor del primer calificativo de la propiedad con el valor recibido 
	if not Entidad or not Entidad.claims or not Entidad.claims[Propiedad] then
		return
	end
	
	for k,v in pairs(Entidad.claims[Propiedad]) do
		if     v.mainsnak
		   and v.mainsnak.datavalue
		   and v.mainsnak.datavalue.value
		   and v.mainsnak.datavalue.value['numeric-id'] == ValorPropiedad
		   and v.qualifiers
		   and v.qualifiers[Calificativo]
		   and v.qualifiers[Calificativo][1]
		   and v.qualifiers[Calificativo][1].datavalue then 
			return v.qualifiers[Calificativo][1].datavalue.value
		end
    end		
end

function obtenerFacebook()
	return obtenerValorCalificativo('P553' -- cuenta en red social
                      , 'P554' --dirección en red social
                      , 355)   -- Facebook
            or propiedad('P2013'); -- Ejemplo: Gillian Flynn
end

function obtenerTwitter()
	return obtenerValorCalificativo('P553' -- cuenta en red social
                      , 'P554' --dirección en red social
                      , 918)   -- Twitter
end

return z