Moduł:Lista newsów: Różnice pomiędzy wersjami

Z Nonsensopedii, polskiej encyklopedii humoru
M (opcjonalny parametr limit)
M (byłyby bugi w lata przestępne)
 
(Nie pokazano 10 wersji utworzonych przez 2 użytkowników)
Linia 1: Linia 1:
local monthNames = {"styczeń", "luty", "marzec", "kwiecień", "maj", "czerwiec", "lipiec", "sierpień", "wrzesień", "październik", "listopad", "grudzień"}
local monthNames = {"styczeń", "luty", "marzec", "kwiecień", "maj", "czerwiec", "lipiec", "sierpień", "wrzesień", "październik", "listopad", "grudzień"}
local daysInMonth = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}


local function tfind(t, what)
local function tfind(t, what)
Linia 8: Linia 9:
end
end
return nil
return nil
end

local function leapYear(year)
return (year % 400 == 0 or (year % 100 ~= 0 and year % 4 == 0))
end

local function prevDate(obj)
obj.day = obj.day - 1
if obj.day < 1 then
obj.month = obj.month - 1
if obj.month < 1 then
obj.year = obj.year - 1
obj.month = 12
end
obj.day = daysInMonth[obj.month]
if obj.month == 2 and leapYear(obj.year) then
obj.day = obj.day + 1
end
end
end
end


local p = {}
local p = {}

function p.list(frame)
function p.list(frame)
local day = frame.args[1]
local day = frame.args[1]
local rawMonth = frame.args[2]
local rawMonth = frame.args[2]
local month
local month
local limit = frame.args['limit'] or 500
local limit = frame.args[5]
if rawMonth == "+" then
if rawMonth == "+" then
Linia 23: Linia 44:
if n ~= nil then
if n ~= nil then
if n > 0 and n <= #monthNames then
if n > 0 and n <= #monthNames then
month = monthNames[n]
month = n
else
else
return mw.smw.info('Niepoprawny numer miesiąca', 'error')
return mw.smw.info('Niepoprawny numer miesiąca', 'error')
Linia 30: Linia 51:
local find = tfind(monthNames, mw.ustring.lower(rawMonth))
local find = tfind(monthNames, mw.ustring.lower(rawMonth))
if find ~= nil then
if find ~= nil then
month = mw.ustring.lower(rawMonth)
month = find
else
else
return mw.smw.info('Niepoprawna nazwa miesiąca', 'error')
return mw.smw.info('Niepoprawna nazwa miesiąca', 'error')
Linia 38: Linia 59:
local eyear = frame.args[3]
local eyear = frame.args[3]
local year = frame.args[4]
local query = mw.smw.ask{"[[NonNews:+]] [[Ma dzień::" .. day .. "]] [[Ma miesiąc::" .. month .. "]]", "?Ma dzień=dzień", "?Ma miesiąc=miesiąc", "?Ma rok=rok", limit = limit, order = 'rand'}
local date = {year = year, month = month, day = day}
if query then
while true do
local map = {}
local query = mw.smw.ask{"[[NonNews:+]] [[Ma rok::<<" .. date.year .. "]] [[Ma dzień::" .. date.day .. "]] [[Ma miesiąc::" .. (monthNames[date.month] or "+") .. "]]", "?Ma dzień=dzień", "?Ma miesiąc=miesiąc", "?Ma rok=rok", limit = limit, order = 'rand'}
for k, v in pairs(query) do
if query then
--[[
local map = {}
mw.log(k)
for k, v in pairs(query) do
mw.logObject(v)
--]]
--[[
mw.log(k)
mw.logObject(v)
--]]
map[v.rok] = map[v.rok] or {}
table.insert(map[v.rok], v)
end
local wikitext = ""
map[v.rok] = map[v.rok] or {}
for i = 2005, eyear do
table.insert(map[v.rok], v)
if #(map[i] or {}) ~= 0 then
end
wikitext = wikitext .. "'''" .. i .. "'''\n"
for k, v in pairs(map[i]) do
local wikitext = ""
wikitext = wikitext .. "* " .. v[1] .. "\n"
for i = 2005, eyear do
end
if #(map[i] or {}) ~= 0 then
wikitext = wikitext .. "'''" .. i .. "'''\n"
for k, v in pairs(map[i]) do
wikitext = wikitext .. "* " .. v[1] .. "\n"
end
end
end
end
return frame:preprocess(wikitext)
end
end
if date.month == "+" or date.day == "+" then
return frame:preprocess(wikitext)
return "(brak wyników)"
else
end
return mw.smw.info('Błąd w zapytaniu SMW w module "Lista newsów z danego dnia".', 'error')
prevDate(date)
end
end
end
end

Aktualna wersja na dzień 00:19, 29 sie 2022

Dokumentacja dla tego modułu może zostać utworzona pod nazwą Moduł:Lista newsów/opis

local monthNames = {"styczeń", "luty", "marzec", "kwiecień", "maj", "czerwiec", "lipiec", "sierpień", "wrzesień", "październik", "listopad", "grudzień"}
local daysInMonth = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}

local function tfind(t, what)
	for k, v in ipairs(t) do
		if v == what then
			return k
		end
	end
	return nil
end

local function leapYear(year)
	return (year % 400 == 0 or (year % 100 ~= 0 and year % 4 == 0))
end

local function prevDate(obj)
	obj.day = obj.day - 1
	if obj.day < 1 then
		obj.month = obj.month - 1
		if obj.month < 1 then
			obj.year = obj.year - 1
			obj.month = 12
		end
		obj.day = daysInMonth[obj.month]
		if obj.month == 2 and leapYear(obj.year) then
			obj.day = obj.day + 1
		end
	end
end

local p = {}

function p.list(frame)
	local day = frame.args[1]
	local rawMonth = frame.args[2]
	local month
	local limit = frame.args[5]
	
	if rawMonth == "+" then
		month = rawMonth
	else
		local n = tonumber(rawMonth)
		if n ~= nil then
			if n > 0 and n <= #monthNames then
				month = n
			else
				return mw.smw.info('Niepoprawny numer miesiąca', 'error')
			end
		else
			local find = tfind(monthNames, mw.ustring.lower(rawMonth))
			if find ~= nil then
				month = find
			else
				return mw.smw.info('Niepoprawna nazwa miesiąca', 'error')
			end
		end
	end
			
	local eyear = frame.args[3]
	local year = frame.args[4]
	local date = {year = year, month = month, day = day}
	while true do
		local query = mw.smw.ask{"[[NonNews:+]] [[Ma rok::<<" .. date.year .. "]] [[Ma dzień::" .. date.day .. "]] [[Ma miesiąc::" .. (monthNames[date.month] or "+") .. "]]", "?Ma dzień=dzień", "?Ma miesiąc=miesiąc", "?Ma rok=rok", limit = limit, order = 'rand'}
		if query then
			local map = {}
			for k, v in pairs(query) do
				--[[
				mw.log(k)
				mw.logObject(v)
				--]]
				
				map[v.rok] = map[v.rok] or {}
				table.insert(map[v.rok], v)
			end
			
			local wikitext = ""
			for i = 2005, eyear do
				if #(map[i] or {}) ~= 0 then
					wikitext = wikitext .. "'''" .. i .. "'''\n"
					for k, v in pairs(map[i]) do
						wikitext = wikitext .. "* " .. v[1] .. "\n"
					end
				end
			end
			return frame:preprocess(wikitext)
		end
		if date.month == "+" or date.day == "+" then
			return "(brak wyników)"
		end
		prevDate(date)
	end
end

return p