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
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