Modul:Queries: Unterschied zwischen den Versionen

2.362 Bytes hinzugefügt ,  Montag um 17:32
uniFilter() Sternchen
(ask anstelle getQueryResult)
(uniFilter() Sternchen)
 
(25 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt)
Zeile 1: Zeile 1:
local p = {}
local p = {}
local c = require("Module:Common")
local com = require("Modul:Common")
local str = require("Modul:String")


function p.GetValues(frame)
function p.GetValues(frame)
-- Gets the values from an attribute on a page
-- Gets the values from an attribute on a page to be called from Wikitext by #invoke
local page = frame.args["page"] or ""
-- mw.log("GetValues(frame)")
local attr = frame.args["attr"] or ""
-- mw.logObject(frame)
local sep = frame.args["sep"] or ";"
local page = frame.args.page or ""
local debug = frame.args["debug"] or false
local attr = frame.args.attr or ""
local sep = frame.args.sep or ";"
local plain = frame.args.plain or false


local values = p.getValues(page, attr, debug)
local values = p.getValues(page, attr, plain)
local vallist = table.concat(values, sep)
-- mw.logObject(vallist)
return vallist
end
 
function p.getValues(page, attr, plain)
-- Gets the values from an attribute on a page to be called inside lua
-- mw.log("getValues(" .. page .. ", " ..  attr .. ", " ..  tostring(plain) .. ")")
local query = "[[:" .. page .."]]|?" .. attr -- selektiert nur die Seite selbst
if plain then
query = query .. "#-"
end
query = query  .. "|mainlabel=-|limit=1"
local t = ""
local ask_result = mw.smw.ask(query)
if values ~= nil then
local values = {}
for i = 1, #values do
if not com.isEmpty(ask_result) then
    t = t .. values[i]
values = ask_result[1][attr] -- Erste Ergebnis-Zeile, attr-Spalte
    if i ~= #values then
if type(values) ~= "table" then -- Immer als table rückgeben, auch wenn keine (dann umformen)
    t = t .. sep
values = { [1]=values }
    end
end
end
end
end
-- mw.logObject(values)
return values
end


if debug or false then
function p.getPages(query, plain)
mw.log("")
-- mw.log("getPages(" .. query .. ", " ..  tostring(plain) .. ")")
mw.log("GetValues(frame)=" .. t)
if plain then
query = query .. "|?#-"
end
end
query = query .. "|mainlabel=-"
return t
 
local ask_result = mw.smw.ask(query)
local values = {}
if not com.isEmpty(ask_result) then
for _, v  in pairs(ask_result) do
table.insert(values, v[1]) -- jede Zeile, 1. Spalte
end
end
-- mw.logObject(values)
return values
end
 
function p.UniFilter(frame)
-- mw.log("UniFilter(frame)")
-- mw.logObject(frame)
local suchtext = frame.args[1] or ""
local filter = p.uniFilter(suchtext)
-- mw.log(filter)
return filter
end
end


function p.getValues(page, attr, debug)
function p.uniFilter(suchtext)
local askResult = mw.smw.ask("[[:" .. page .."]]|?#-=page|?" .. attr .."#-=" .. attr .. "|mainlabel=-|limit=1") -- ask selektiert nur die Seite selbst
-- mw.log("uniFilter(" .. suchtext .. ")")
local filter = ""
local values = nil
suchtext = str.strip(tostring(suchtext or ""))
if askResult ~= nil then
if suchtext == "" or suchtext == "*" then
values = askResult[1][attr] -- Erste Ergebis-Zeile, attr-Spalte
filter = "+"
else
suchtext = string.gsub(suchtext, "%[", "")
suchtext = string.gsub(suchtext, "%]", "")
filter = filter .. suchtext -- exakte Suche (immer)
filter = filter .. "||~*" .. suchtext .. "*" -- Wildcard-Suche des ganzen Suchtextes (immer)
semikolonVorhanden = (string.find(suchtext, ";") ~= nil)
    if semikolonVorhanden then
suchtextSplit = str.split2(suchtext, ";") -- Einzelwort-Suche
if #suchtextSplit > 1 then
for _, ft in ipairs(suchtextSplit) do
ft = str.strip(ft)
if ft ~= "" then
filter = filter .. "||~*" .. ft .. "*" .. "||" .. ft
end
end
end
    end
end
end
-- mw.log(filter)
return filter
end


if debug or false then
function p.dateLastDayCompleter(date)
mw.log("")
local last_date
mw.log("getValues(" .. page .. "," ..  attr .. ")=")
if #date == 4 then -- nur "Jahr" vorhanden
mw.logObject(values)
last_date = date .. "/12/31"
elseif #date ~= 10 then -- "Monat Jahr" vorhanden
local days = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}
local month = string.sub(date, 1, string.find(date, " ") - 1)
month = com.getMonthnr(month)
local year = string.sub(date, string.find(date, " ") + 1)
last_date = year .. "/" .. month .. "/"
if month == 2 and year % 4 == 0 then -- Sonderfall Feb. Schaltjahr
last_date = last_date .. "29"
else
last_date = last_date .. days[month]
end
else
last_date = date
end
end
 
return last_date
return values
end
end


return p
return p