Difference between revisions of "Publications"
From ACES
| (9 intermediate revisions by the same user not shown) | |||
| Line 39: | Line 39: | ||
function p.getBibTeX(entry) | function p.getBibTeX(entry) | ||
local out = {} | local out = {} | ||
table.insert(out, fstr("@%s {%s", entry.entry, | local pagename = entry._pageName | ||
pagename = mw.ustring.gsub(pagename, "%s", "") | |||
table.insert(out, fstr("@%s {%s", entry.entry, pagename)) | |||
for k, v in pairs(fields) do | for k, v in pairs(fields) do | ||
if v.BibTeX and entry[k] and entry[k] ~= "" and entry[k] ~= "0" then | if v.BibTeX and entry[k] and entry[k] ~= "" and entry[k] ~= "0" then | ||
| Line 45: | Line 47: | ||
end | end | ||
end | end | ||
return table.concat(out, ",\n").."\n}\n" | if entry.pdf and entry.pdf ~= "" and entry.pdf ~= "0" then | ||
local titleobject = mw.title.new('File:' .. entry.pdf) | |||
if titleobject.fileExists then | |||
table.insert(out, fstr("%s = {%s}", "pdf", entry.pdf)) | |||
end | |||
end | |||
table.insert(out, fstr("%s = {%s}", "_pageName", entry._pageName)) | |||
return table.concat(out, ",\n") .. "\n}\n" | |||
end | end | ||
function p._main(args) | function p._main(args) | ||
local cargoFields = {} | local cargoFields = {} | ||
for k, _ in pairs(fields) do table.insert(cargoFields, k) end | for k, _ in pairs(fields) do table.insert(cargoFields, k) end | ||
| Line 59: | Line 67: | ||
groupBy = nil, | groupBy = nil, | ||
having = nil, | having = nil, | ||
orderBy = 'year', | orderBy = 'year DESC, month DESC', | ||
limit = | limit = args.limit or "9999999", | ||
offset = nil | offset = nil | ||
} | } | ||
local results = cargo.query( | local results = cargo.query('publication', cargoFields, args) | ||
mw.logObject(results) | mw.logObject(results) | ||
local rSet = {} | |||
local out = {} | local out = {} | ||
for _, entry in ipairs(results) do | for _, entry in ipairs(results) do | ||
table.insert(out, p.getBibTeX(entry)) | if rSet[entry._pageName] ~= true then | ||
table.insert(out, p.getBibTeX(entry)) | |||
rSet[entry._pageName] = true | |||
end | |||
end | end | ||
return table.concat(out, "") | return table.concat(out, "") | ||
Latest revision as of 16:51, 9 November 2021
Documentation for this module may be created at Module:Publications/doc
local getArgs = require([[Module:Arguments]]).getArgs
local date = require([[Module:Date]])
local cargo = mw.ext.cargo
local fstr = mw.ustring.format
local p = {}
local fields = {
entry = {},
address = {BibTeX = true},
annote = {BibTeX = true},
author = {BibTeX = true},
booktitle = {BibTeX = true},
chapter = {BibTeX = true},
edition = {BibTeX = true},
editor = {BibTeX = true},
howpublished = {BibTeX = true},
institution = {BibTeX = true},
journal = {BibTeX = true},
month = {BibTeX = true},
note = {BibTeX = true},
number = {BibTeX = true},
organization = {BibTeX = true},
pages = {BibTeX = true},
publisher = {BibTeX = true},
school = {BibTeX = true},
series = {BibTeX = true},
title = {BibTeX = true},
type = {BibTeX = true},
volume = {BibTeX = true},
year = {BibTeX = true},
doi = {BibTeX = true},
issn = {BibTeX = true},
isbn = {BibTeX = true},
url = {BibTeX = true},
_pageName = {},
pdf = {}
}
function p.getBibTeX(entry)
local out = {}
local pagename = entry._pageName
pagename = mw.ustring.gsub(pagename, "%s", "")
table.insert(out, fstr("@%s {%s", entry.entry, pagename))
for k, v in pairs(fields) do
if v.BibTeX and entry[k] and entry[k] ~= "" and entry[k] ~= "0" then
table.insert(out, fstr("%s = {%s}", k, entry[k]))
end
end
if entry.pdf and entry.pdf ~= "" and entry.pdf ~= "0" then
local titleobject = mw.title.new('File:' .. entry.pdf)
if titleobject.fileExists then
table.insert(out, fstr("%s = {%s}", "pdf", entry.pdf))
end
end
table.insert(out, fstr("%s = {%s}", "_pageName", entry._pageName))
return table.concat(out, ",\n") .. "\n}\n"
end
function p._main(args)
local cargoFields = {}
for k, _ in pairs(fields) do table.insert(cargoFields, k) end
cargoFields = table.concat(cargoFields, ",")
local args = {
where = nil,
join = nil,
groupBy = nil,
having = nil,
orderBy = 'year DESC, month DESC',
limit = args.limit or "9999999",
offset = nil
}
local results = cargo.query('publication', cargoFields, args)
mw.logObject(results)
local rSet = {}
local out = {}
for _, entry in ipairs(results) do
if rSet[entry._pageName] ~= true then
table.insert(out, p.getBibTeX(entry))
rSet[entry._pageName] = true
end
end
return table.concat(out, "")
end
-- test: =p._main{}
function p.main(frame) return p._main(getArgs(frame)) end
return p