Moduł:InformationProvider
Z Nonsensopedii, polskiej encyklopedii humoru
Moduł pobierający informacje semantyczne o innych plikach, czy to w lokalnym repozytorium, czy na Wikimedia Commons.
Zobacz też: Moduł:Information, który ustawia te informacje.
local autor = require('Module:Autor')
local p = {}
-- Pobiera informacje semantyczne o plikach. Zwraca tyle informacji, ile jest potrzebne do wyświetlenia w Information.
-- Argumenty:
-- files: tablica tytułów plików, w stringach, bylejakie przedrostki i w ogóle
-- Zwracana jest tablica indeksowana tytułami plików bez przedrostka
function p.getData(files)
-- Ustalamy źródła grafik i dzielimy na dwie kupki
local fileRepos = mw.ext.commonsClient.getFileRepo(files)
local result, todoLocal, todoCommons = {}, {}, {}
for k, v in pairs(fileRepos) do
if v == 'local' then table.insert(todoLocal, k)
else table.insert(todoCommons, k) end
end
-- Najpierw commonsowe, używamy SemanticCommonsClient
if #todoCommons > 0 then
local resCommons = mw.ext.commonsClient.getData(todoCommons)
for k, v in pairs(resCommons) do
if v.found then
local _, author = autor.getAuthorFromCommonsData(v.author)
local f = {
repo = 'Wikimedia Commons',
entityId = v.entityId,
author = author,
licenseShort = v.license.shortName or v.license.spdxId,
licenseLong = v.license.longName,
licenseUrl = v.license.url
}
-- Ponieważ nie ma jeszcze działającego systemu licencji semantycznych, wrzućmy teksty
-- w jakąś heurę do zgadywania jaki kolor licboxa temu nadać.
local lShort = mw.ustring.lower(v.license.shortName or '')
local lLong = mw.ustring.lower(v.license.longName or '')
-- najpierw CC żeby poprawnie łapało lickę CC0
if mw.ustring.find(lShort, 'cc') or mw.ustring.find(lLong, 'creative commons') then
f.licenseType = 'cc'
-- różne domenopublicznawe
elseif v.license.isPublicDomain or
mw.ustring.find(lShort .. lLong, 'public domain') or
mw.ustring.find(lShort, 'no restrictions')
then
f.licenseShort = 'domena publiczna'
f.licenseType = 'pd'
-- a to nie wiadomo, załóżmy GNU
else
f.licenseType = 'gnu'
end
result[mw.ustring.sub(k, 6)] = f
end
end
end
-- A teraz lokalne, przez Ask
if #todoLocal == 0 then return result end
local resLocal = mw.smw.getQueryResult{
'[[Plik:' .. table.concat(todoLocal, '||Plik:') .. ']]',
'?Ma opis autorstwa=author',
-- tu powinna być jeszcze licka, ale to nie działa na razie :(
-- tak, z Commons jest łatwiej to wyciągnąć niż z Nonsy.
limit = #todoLocal,
link = 'none'
}
for _, v in ipairs(resLocal.results or {}) do
if v.printouts then
result[mw.ustring.sub(v.fulltext, 6)] = {
repo = 'Nonsensopedia',
author = (v.printouts.author or {})[1]
}
end
end
return result
end
function p.test(files)
mw.logObject(p.getData({
'File:Uncyclopedia_logo_notext.svg',
'Mojżesz z iPadem.jpg',
'Plik:Drzewo murowane.jpg',
'Alfred Dedreux - Pug Dog in an Armchair.jpg',
'commons:file:Gillie helping to jam the printer (467241015).jpg',
'Margaret Thatcher (1983).jpg',
'nieistnieje'
}))
end
return p