mNo edit summary |
mNo edit summary |
||
(10 intermediate revisions by the same user not shown) | |||
Line 1: | Line 1: | ||
local getArgs = require('Module:Arguments').getArgs | local getArgs = require('Module:Arguments').getArgs | ||
local News = require('Module:NewsItem') | |||
local cargo = mw.ext.cargo | local cargo = mw.ext.cargo | ||
local limit = 100000 | |||
local NewsSearch = {} | local NewsSearch = {} | ||
Line 6: | Line 9: | ||
function NewsSearch.main(frame) | function NewsSearch.main(frame) | ||
local args = getArgs(frame) | local args = getArgs(frame) | ||
local results = NewsSearch.query( args) | |||
local | if #results > 0 then | ||
local container = mw.html.create('div'):attr('id', 'news-search-container') | |||
local ul = mw.html.create('ul') | |||
for r = 1, #results do | |||
ul:node(mw.html.create('li'):node(News.main(newsObject(results[r])))) | |||
end | |||
container:node(ul) | |||
return container | |||
end | |||
end | |||
function NewsSearch.query(args) | |||
local whereStr = '' | local whereStr = '' | ||
Line 36: | Line 54: | ||
end | end | ||
whereStr = whereStr | if args.tag then | ||
args.tag = string.gsub(args.tag, '_', ' ') | |||
if args.categories or args.games then | |||
whereStr = whereStr .. ' AND tags HOLDS LIKE "%' .. args.tag .. '%"' | |||
else | |||
whereStr = whereStr .. ' tags HOLDS LIKE "%' .. args.tag .. '%"' | |||
end | |||
end | |||
if args.title then | |||
args.title = string.gsub(args.title, '_', ' ') | |||
if whereStr ~= '' then | |||
whereStr = whereStr .. ' AND _pageName LIKE "%' .. args.title.. '%"' | |||
else | |||
whereStr = whereStr .. ' _pageName LIKE "%' .. args.title.. '%"' | |||
end | |||
end | |||
local tables = 'News' | local tables = 'News' | ||
local fields = '_pageName, date, category, game' | local fields = '_pageName, date, category, game, image, content' | ||
local cargoArgs = { | local cargoArgs = { | ||
where = whereStr, | where = whereStr, | ||
orderBy = 'date DESC', | orderBy = 'date DESC', | ||
limit = | limit = limit | ||
} | } | ||
local results = cargo.query(tables, fields, cargoArgs) | local results = cargo.query(tables, fields, cargoArgs) | ||
return results | |||
end | |||
function newsObject(result) | |||
local object = { | |||
date = result.date, | |||
_pageName = result._pageName, | |||
category = result.category, | |||
game = result.game, | |||
content = result.content, | |||
author = result.author | |||
} | |||
return object | |||
return | |||
end | end | ||
return NewsSearch | return NewsSearch |
Latest revision as of 11:59, 19 April 2024
Documentation for this module may be created at Module:NewsSearch/doc
local getArgs = require('Module:Arguments').getArgs
local News = require('Module:NewsItem')
local cargo = mw.ext.cargo
local limit = 100000
local NewsSearch = {}
function NewsSearch.main(frame)
local args = getArgs(frame)
local results = NewsSearch.query( args)
if #results > 0 then
local container = mw.html.create('div'):attr('id', 'news-search-container')
local ul = mw.html.create('ul')
for r = 1, #results do
ul:node(mw.html.create('li'):node(News.main(newsObject(results[r]))))
end
container:node(ul)
return container
end
end
function NewsSearch.query(args)
local whereStr = ''
if args.categories then
local categories = mw.text.split(args.categories, ',')
whereStr = whereStr .. '('
for i = 1, #categories do
if i ~= 1 then whereStr = whereStr .. ' OR ' end
whereStr = whereStr .. ' category HOLDS WITHIN "' .. categories[i] .. '"'
end
whereStr = whereStr .. ')'
end
if args.games then
if args.categories then
whereStr = whereStr .. ' AND ('
else
whereStr = whereStr .. '('
end
local games = mw.text.split(args.games, ',')
for i = 1, #games do
if i ~= 1 then whereStr = whereStr .. ' OR ' end
whereStr = whereStr .. ' game HOLDS WITHIN "' .. games[i] .. '"'
end
whereStr = whereStr .. ')'
end
if args.tag then
args.tag = string.gsub(args.tag, '_', ' ')
if args.categories or args.games then
whereStr = whereStr .. ' AND tags HOLDS LIKE "%' .. args.tag .. '%"'
else
whereStr = whereStr .. ' tags HOLDS LIKE "%' .. args.tag .. '%"'
end
end
if args.title then
args.title = string.gsub(args.title, '_', ' ')
if whereStr ~= '' then
whereStr = whereStr .. ' AND _pageName LIKE "%' .. args.title.. '%"'
else
whereStr = whereStr .. ' _pageName LIKE "%' .. args.title.. '%"'
end
end
local tables = 'News'
local fields = '_pageName, date, category, game, image, content'
local cargoArgs = {
where = whereStr,
orderBy = 'date DESC',
limit = limit
}
local results = cargo.query(tables, fields, cargoArgs)
return results
end
function newsObject(result)
local object = {
date = result.date,
_pageName = result._pageName,
category = result.category,
game = result.game,
content = result.content,
author = result.author
}
return object
end
return NewsSearch