Модуль:Справочник

Материал из Кадровый состав НКВД 1935-1939
Перейти к навигации Перейти к поиску

Для документации этого модуля может быть создана страница Модуль:Справочник/doc

local pp = {}

local global = mw.ext.luaglobal
local tools = require( 'Модуль:Tools' )

local function pattern( args, pars )
	return mw.ustring.format( pars, mw.uri.encode( args[2] or '', 'PATH' ) )
end

local function ruwp( args )
	local name = args[2]
	if not name then
		local gFio = global.get( 'gFIO' )[1]
		if ( gFio.f or '' ) ~= '' then
			name = gFio.l .. ', ' .. gFio.f .. ' ' .. gFio.m
		else
			name = gFio.l
		end
	end
	return '[[ru:' .. name .. '|Википедия]]'
end

local function openlist( args )
	local pref = 'ol'
	local name = args[2]
	local birth = ''
	if ( name or '' ) == '' then
		local gFio = global.get( 'gFIO' )[1]
		if ( gFio.f or '' ) ~= '' then
			name = gFio.l .. ' ' .. gFio.f .. ' ' .. gFio.m
		else
			name = gFio.l
		end
		birth =  global.get( 'gBirth' ) or {}
		birth = birth[1] or ''
		if birth ~= '' then
			birth = ' (' ..  string.sub( birth, 1, 4 ) .. ')'
		end
	end

	if args[3] == 'укр' then
		pref = 'olua'
	end
	return 'cайт «[[' .. pref .. ':' .. name .. birth .. '|Открытый список]]»'
end

local function cyclo( args )
	local name = args[2]
	if not name then
		local gFio = global.get( 'gFIO' )[1]
		name = table.concat( { gFio.f, gFio.m, gFio.l }, ' ')
	end
	return 'сайт «[[cyclo:' .. name .. '|Циклопедия]]»'
end

local function simpleURL( args, pars )
	return mw.ustring.format( pars, args[1] or '' )
end

local function podvig( args )
	local id = args[2] or ''
	return 'картотека награждений на сайтах ОБД МО «[http://podvignaroda.ru/?#id=' .. id
		.. ' Подвиг] / [https://pamyat-naroda.ru/heroes/podvig-chelovek_kartoteka' .. id
		.. ' Память] народа»'
end

local function upk( args )
	if args[2] == 'нет' then
		return -1, '[[Категория:Персоналии с отсутствующей учетно-послужной картотекой]]'
	end
	if #args == 2 then
		return pattern( args,
				'[https://pamyat-naroda.ru/heroes/kld-card_uchet_officer%s учетно-послужная картотека]')
	end
	return string.format( '[https://pamyat-naroda.ru/heroes/kld-card_uchet_officer%s учетно-послужная картотека] (%s)', args[2], args[3] ),
		'Персоналии с данными из учетно-послужной картотеки ОБД МО'
end


local function pn( args )
	local name = args[2]
	if not name then
		name = global.get( 'gFIO' )[1]
	else
		name = mw.text.split( name, ' ' )
	end
	local birth =  global.get( 'gBirth' ) or {}
	birth = tools.reparseDate( birth[1] or '—' )
	if birth == '—' then
		birth = ''
	end
	return 'на сайте Минобороны России «[https://pamyat-naroda.ru/heroes/?last_name=' .. name.l
		.. '&first_name=' .. (name.f or '') .. '&middle_name=' .. (name.m or '')
		.. '&date_birth=' .. birth .. ' Память народа]»'
end
local function archive( args )
	local pages = args[6]
	if ( pages or '' ) == '' or pages == '-' then
		pages = ''
	else
		pages = '. Л. '	.. pages
	end
	return args[2] .. '. Ф.  ' .. args[3].. '. Оп. ' .. args[4].. '. Д. '
		.. args[5] .. pages
end


local function garf( args )
	if args[2] == '7523' then
		args[2] = 'Р7523'
	end
	local pages = args[5]
	if pages == '' or pages == '-' then
		pages = ''
	else
		pages = '. Л. '	.. pages
	end
	if args[2] == 'Р7523' then
		if args[3] == '7' then
			return 'личное дело в отделе Верховного Совета СССР по учету и регистрации награжденных (ГАРФ. Ф. Р7523. Оп. ' .. args[3] .. '. Д. '
				.. args[4] .. pages .. ')'
		elseif args[3] == '60' then
			return 'материалы отдела Верховного Совета СССР по учету и регистрации награжденных (ГАРФ. Ф. Р7523. Оп. ' .. args[3] .. '. Д. '
				.. args[4] .. pages .. ')'
		elseif args[3] == '44' then
			return 'переписка по вопросам лишения наград в спецсекторе отдела Верховного Совета СССР по учету и регистрации награжденных (ГАРФ. Ф. Р7523. Оп. 44. Д. '
				.. args[4] .. pages .. ')'
		end
	elseif args[2] == '10249' then
		return 'личное дело персонального пенсионера в комиссии СМ СССР ([[Категория:Персональные пенсионеры союзного значения]]ГАРФ. Ф. 10249. Оп. ' .. args[3].. '. ['
			.. args.url .. ' Д. '.. args[4] .. '])'
	end
	return 'ГАРФ. Ф.  ' .. args[2].. '. Оп. ' .. args[3].. '. Д. '
		.. args[4] .. pages
end

local function rgva( args )
	if args[2] == '37837' and args[3] == '3' then
		return 'материалы наградного отдела Управления кадров РККА (РГВА. Ф. 37837. Оп. 3. Д. '
			.. args[4] .. '. Л. ' .. args[5] .. ')'
	elseif args[2] == '37837' and args[3] == '1' and args[4] == '1002' then
		return 'переписка Управления кадров РККА о награждении сотрудников ОГПУ и подведомственных ему учреждений (РГВА. Ф. 37837. Оп. 1. Д. 1002'
			.. '. Л. ' .. args[5] .. ')'
	else
		return 'РГВА. Ф.  ' .. args[2].. '. Оп. ' .. args[3].. '. Д. '
			.. args[4] .. '. Л. ' .. args[5]
	end
end

local list = {
	['кто-1'] = {
		pars = '[http://www.memo.ru/history/NKVD/kto/biogr/gb%s.htm Н. Петров, К. Скоркин. Кто руководил НКВД, 1934-1941: Справочник] (М.: Звенья, 1999. ISBN 5-7870-0032-3)',
		func = pattern,
		ctg = 'Персоналии в справочнике Петрова—Скоркина',
		online = true,
	},
	['кто-2'] = {
		pars = '[http://www.memo.ru/history/NKVD/kto2/kto_2-%s.html Н. Петров. Кто руководил органами госбезопасности, 1941-1954: Справочник] (М.: Звенья, 2010. ISBN 5-7870-0109-9)',
		func = pattern,
		ctg = 'Персоналии в справочнике Петрова',
		online = true,
	},
	['открытый список'] = {
--		pars = 'cайт «[[ol:%s|Открытый список]]»',
		func = openlist,
		ctg = 'Персоналии на сайте «Открытый список»',
		online = true,
		min = 0,
		max = 2,
	},
	['википедия'] = {
		func = ruwp,
		ctg = 'Персоналии в Википедии',
		online = true,
		min = 0,
	},
	['циклопедия'] = {
		func = cyclo,
		ctg = 'Персоналии в Циклопедии',
		online = true,
		min = 0,
	},
	['nkvd.tomsk.ru'] = {
		pars = 'cайт [%s Томского мемориального музея «Следственная тюрьма НКВД»]',
		func = simpleURL,
		ctg = 'Персоналии на сайте Томского мемориального музея «Следственная тюрьма НКВД»',
		online = true,
		min = 0,
		max = 0,
	},
	['stopgulag.org'] = {
		pars = 'cайт «[%s Рязанский мартиролог]»',
		func = simpleURL,
		ctg = 'Персоналии на сайте «Рязанский мартиролог»',
		online = true,
		min = 0,
		max = 0,
	},
	['www.centrasia.ru'] = {
		pars = 'cайт «[%s ЦентрАзия]»',
		func = simpleURL,
		ctg = 'Персоналии на сайте «ЦентрАзия»',
		online = true,
		min = 0,
		max = 0,
	},
	['centrasia.org'] = {
		pars = 'cайт «[%s ЦентрАзия]»',
		func = simpleURL,
		ctg = 'Персоналии на сайте «ЦентрАзия»',
		online = true,
		min = 0,
		max = 0,
	},
	['www.knowbysight.info'] = {
		pars = 'сайт «[%s Справочник по истории КПСС и Советского Союза]»',
		func = simpleURL,
		ctg = 'Персоналии на сайте «Справочник по истории КПСС и Советского Союза»',
		online = true,
		min = 0,
		max = 0,
	},
	['iamkushner.com'] = {
		pars = 'cайт «[%s Большевистский актив Куйбышева]» (сайт Кушнера)',
		func = simpleURL,
		ctg = 'Персоналии на сайте Кушнера',
		online = true,
		min = 0,
		max = 0,
	},
	['krasnoznamenci.ru'] = {
		pars = 'сайт «[%s Краснознамёнцы]»',
		func = simpleURL,
		ctg = 'Персоналии на сайте «Краснознамёнцы»',
		online = true,
		min = 0,
		max = 0,
	},
	['shieldandsword.mozohin.ru'] = {
		pars = 'сайт «[%s История отечественных спецслужб]»',
		func = simpleURL,
		ctg = 'Персоналии на сайте В. Мзареулова',
		online = true,
		min = 0,
		max = 0,
	},
	['myisk.net'] = {
		pars = 'сайт «[%s Таловская трагедия]»',
		func = simpleURL,
		ctg = 'Персоналии на сайте «Таловская трагедия»',
		online = true,
		min = 0,
		max = 0,
	},
	['base.memo.ru'] = {
		pars = 'база данных «[%s Жертвы политического террора в СССР]»',
		func = simpleURL,
		ctg = 'Персоналии в БД «Жертвы политических репрессий»',
		online = true,
		min = 0,
		max = 0,
	},
	['www.reabit.org.ua'] = {
		pars = 'база данных «[%s Национальный банк репрессированных]» (Украина)',
		func = simpleURL,
		ctg = 'Персоналии в БД «Національний банк репресованих»',
		online = true,
		min = 0,
		max = 0,
	},
	['blog.stepanivanovichkaragodin.org'] = {
		pars = 'сайт «[%s Расследование судьбы С. И. Карагодина]»',
		func = simpleURL,
		ctg = 'Персоналии в блоге Карагодина',
		online = true,
		min = 0,
		max = 0,
	},
	['karagodin.org'] = {
		pars = 'сайт «[%s Расследование судьбы С. И. Карагодина]»',
		func = simpleURL,
		ctg = 'Персоналии в блоге Карагодина',
		online = true,
		min = 0,
		max = 0,
	},
	['подвиг'] = {
		func = podvig,
		online = true,
	},
	['книга памяти'] = {
		pars = '[https://pamyat-naroda.ru/heroes/memorial-chelovek_pechatnoi_knigi_pamyati%s Книга памяти сотрудников органов контрразведки, погибших и пропавших без вести в годы Великой Отечественной войны 1941−1945 гг.] (М.: Граница, 1995. ISBN 5-86436-072-4)',
		func = pattern,
		ctg = 'Персоналии в «Книге памяти сотрудников контрразведки»',
		online = true,
	},
	['филиппов: цо'] = {
		pars = 'С. Г. Филиппов. Руководители центральных органов ВКП(б) в 1934-1939 гг.: Справочник (Москва : РОССПЭН, 2018. ISBN 978-5-8243-2252-1). — С. %s',
		func = pattern,
		ctg = 'Персоналии в справочнике Филиппова (центральные органы ВКП(б))',
	},
	['филиппов: то'] = {
		pars = 'С. Г. Филиппов. Территориальные руководители ВКП(б) в 1934-1939 гг.: Справочник (Москва : Политическая энциклопедия, 2016. ISBN 978-5-8243-2057-2). — С. %s',
		func = pattern,
		ctg = 'Персоналии в справочнике Филиппова (территориальные руководители ВКП(б))',
	},
	['упк'] = {
--		pars = '[https://pamyat-naroda.ru/heroes/kld-card_uchet_officer%s учетно-послужная картотека]',
--		func = pattern,
		ctg = 'Персоналии с данными учетно-послужной картотеки ОБД МО',
		func = upk,
		online = true,
		min = 1,
		max = 2,
	},
	['foto.pamyat-naroda.ru'] = {
		pars = '[%s фотогалерея ОБД МО]',
		func = simpleURL,
		ctg = 'Персоналии с данными из фотогалереи ОБД МО',
		online = true,
		min = 0,
		max = 0,
	},
	['1418museum.ru'] = {
		pars = '[%s сайт 1418museum.ru]',
		func = simpleURL,
		ctg = 'Персоналии с данными сайта 1418museum.ru',
		online = true,
		min = 0,
		max = 0,
	},
	['www.moypolk.ru'] = {
		pars = '[%s сайт «Бессмертный полк»]',
		func = simpleURL,
		ctg = 'Персоналии с данными сайта moypolk.ru',
		online = true,
		min = 0,
		max = 0,
	},
	['www.polkmoskva.ru'] = {
		pars = '[%s сайт «Бессмертный полк — Москва»]',
		func = simpleURL,
		ctg = 'Персоналии с данными сайта polkmoskva.ru',
		online = true,
		min = 0,
		max = 0,
	},
	['polk.mos.ru'] = {
		pars = '[%s сайт «Бессмертный полк — Москва»]',
		func = simpleURL,
		ctg = 'Персоналии с данными сайта polkmoskva.ru',
		online = true,
		min = 0,
		max = 0,
	},
	['arch2.iofe.center'] = {
		pars = '[%s электронный архив фонда Иофе]',
		func = simpleURL,
		ctg = 'Персоналии в архиве фонда Иофе',
		online = true,
		min = 0,
		max = 0,
	},
	['docs.historyrussia.org'] = {
		pars = '[%s Электронная библиотека исторических документов]',
		func = simpleURL,
		ctg = 'Персоналии со ссылками на docs.historyrussia.org',
		online = true,
		min = 0,
		max = 0,
	},
	['partizany.by'] = {
		pars = 'сайт «[%s Партизаны Беларуси]»',
		func = simpleURL,
		ctg = 'Персоналии сайта «Партизаны Беларуси»',
		online = true,
		min = 0,
		max = 0,
	},
	['гарф'] = {
		func = garf,
		min = 4,
		max = 4,
	},
	['ргва'] = {
		func = rgva,
		min = 4,
		max = 4,
	},
	['пн'] = {
		func = pn,
		ctg = 'Персоналии с поиском на ПН',
		online = true,
		min = 0,
	},
	['архив'] = {
		func = archive,
		min = 4,
		max = 5,
	},
}

pp[''] = function ( frame )
--	local args = tools.checkargs( frame:getParent().args, { true, true } )
	local Args = frame:getParent().args
--	local Info = global.get( 'gInfo' ) or {}
	local args = {}
	for u, v in pairs( Args ) do
		args[u] = mw.text.trim( v )
	end

	local what = args[1]
	if not what then
		return  tools.errorMsg( 'справочник', 'Не указан код справочника',
			'Используйте формат {{ справочник | <var>код справочника</var>'
				.. ' | <var>параметры (зависят от справочника)</var> }}' )
	end

	local url = string.match( what, '^https?://([^/]+)/' )
	if url then
		what = url
	end
	local descr = list[mw.ustring.lower( what )]
	if not descr then
		return  tools.errorMsg( 'справочник', 'Неизвестный код справочника',
 			'Используйте формат {{ справочник | <var>код справочника</var>'
				.. ' | <var>параметры (зависят от справочника)</var> }}' )
	end
	local min, max = descr.min or 1, descr.max or 1
	-- #args для frame работает некорректно, поэтому проверяем существование args[min] и несуществование args[max+1]
	--	if ( args[2+min] or '' ) == '' or ( args[3+max] or '' ) ~= '' then
	if #args < min+1 or #args > max+1 then
		return  tools.errorMsg( 'справочник', 'Неверное число параметров',
 			'Для этого типа справочника параметров должно быть от ' .. min .. ' до ' .. max )
	end

	local res, err = descr.func( args, descr.pars )
	if res == -1 then
		return err
	elseif res then
		if err or descr.ctg then
			res = res .. '[[Категория:' .. ( err or descr.ctg ) .. ']]'
		end
		global.add( 'gInfo', res )
	else
		return  tools.errorMsg( 'справочник', err or 'Ошибка при обработке' )
	end
	return '<i></i>'
end

return pp