Модуль:Roadmap

Материал из Справочника наблюдателя
Перейти к:навигация, поиск

(i)      Описание модуля[]

Документация отсутствует!


local p = {}

local global = mw.ext.luaglobal

local family = 'Дорожная карта'
local tab  = mw.loadData( 'Модуль:' .. family .. '/Параметры')
local billModule = require ('Модуль:Ссылки на закон')

global.strict( true )

local function defValue( val, def )
	if ( val or '' ) == '' then
		return def
	end
	return val
end



local function err( s )
	return '<p class="error">' .. s .. '</p>'
end

local outRes = { '' }  -- 1 строка для сообщений об ошибках
--local Err = {}
--local function outputErr( s )
--	Err[#Err+1] = '<p class="error">' .. s .. '</p>'
--end







function p.Start( frame )
	local args = frame:getParent().args
	local param = {}

	param.method = mw.ustring.lower( defValue( args['подсчет'], 'ручной' ))
	if not tab.methods [param.method] then
		return err( 'Ошибка: недопустимое значение параметра «подсчет»' )
	elseif type( tab.methods[param.method] ) == 'string' then
		param.method = tab.methods[param.method]
	end

	param.code = defValue( args['код'], 'все' )

	param.elections = tonumber (args ['кампаний'] or 1) or 1
	if param.elections < 1 then
		param.elections = '1'
	end

	param.constituencies = args ['округов'] or ''
	if param.constituencies == 'нет' or param.constituencies == '1' then
		param.constituencies = ''
	end

	param.twitter = defValue (args ['твиттер'], 'выборы')
	param.twitter = mw.ustring.gsub (param.twitter, '#', '')

	param.format = defValue( args['вид'], 'Экран' )
	param.format = mw.ustring.upper( mw.ustring.sub( param.format, 1, 1 ) )
		.. mw.ustring.lower( mw.ustring.sub( param.format, 2, -1 ) )
	if param.format == 'Нет' then
		param.format = 'Экран'
	end
	if not tab.views[param.format] then
		return err( 'Ошибка: недопустимое значение параметра «вид»' )
	end

	param.flags = args['условия'] or ''

	param.candidates = args['кандидатов'] or ''

	param.sms = args['смс'] or ''

	local pageName = mw.title.getCurrentTitle().baseText
	local pageCity, pageReg, pageDate = mw.ustring.match( pageName, '^(.+) %((.+)%)%, (%d%d%.%d%d%.%d%d%d%d)' )
	if not pageCity then
		pageCity, pageDate = mw.ustring.match( pageName, '^(.+)%, (%d%d%.%d%d%.%d%d%d%d)' )
		pageReg = ''
	end

	param.city = defValue( args ['место'], pageCity or '' )
	param.reg = defValue( args ['регион'], pageReg or '' )
	param.date = defValue( args['дата'], pageDate or '' )

	local d,m,y =  mw.ustring.match( param.date, '^(%d%d)%.(%d%d)%.(%d%d%d%d)$' )
	if d then
		local months = { 'января', 'февраля', 'марта', 'апреля', 'мая', 'июня', 'июля', 'августа', 'сентября', 'октября', 'ноября', 'декабря' }
		d = tonumber (d)
		m = months [tonumber(m)]
		y = tonumber (y)
		param.date = d .. ' ' .. m .. ' ' .. y  .. ' года'
	end


end



function p.Row( frame )
	local args = frame:getParent().args

	local function bool( z )
		local x = args[z]
		if x == 'да' or x == 'есть' then
			return true
		end
		if x == 'нет' or (x or '') == '' then
			return false
		end
		outRes[#outRes+1] = err( 'Недопустимое значение параметра «' .. z .. ' = ' .. x ..'»' )
	end

	local regNo = ( args['кроме'] or '') ~= ''
	if ( args['для'] or '') ~= '' and regNo then
		outRes[#outRes+1] = err( 'Одновременно заданы параметры «для» и «кроме»' )
	end

	local record = { '',
		_table = 'roadmap',
		event = args['событие'],
		action = args['совет'],
		field = bool( args['показатель'] ),
		forKOIB = bool( args['дляКОИБ'] ),
		situation = args['ТС'],
		complaint = args['жалоба'],
		KoAP = args['КоАП'],
		UK = args['УК'],
		regions = ( args['для'] or '' ) .. ( args['кроме'] or '' ),
		regExcept = regNo,
		condition = args['если'],
	}
	args['событие'], args['совет'], args['показатель'], args['дляКОИБ'],
		args['ТС'], args['жалоба'], args['КоАП'], args['УК'], args['для'],
		args['кроме'], args['если'] = nil

	local keys,values = {}, {}
	for key,value in pairs( args ) do
		keys[#keys+1] = key
		values[#values+1] = value
	end
	record.keys = table.concat( keys, mw.ustring.char( 0xB6 ) )
	record.values = table.concat( values, mw.ustring.char( 0xB6 ) )
	outRes[#outRes+1] = frame:callParserFunction( '#cargo_store', record )
	outRes[#outRes+1] = record.event .. '<br>'
	return table.concat( outRes )
end

--[===[
Параметры строки:
	debug
-	дляКОИБ
-	для
-	кроме
-	если
-	событие
-	совет
-	показатель
	все
	КОИБ
	(code)
	(code)+
-	КоАП
-	УК
-	ТС
-	жалоба


--]===]
return p