Модуль:Copyright

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

Для шаблона авторских прав, в частности Шаблон:АП.

local p = {}

local r = {t = {}, c ={}}
function r:add(s) table.insert(self.t, s) end
function r:add_category(s) table.insert(self.c, '[[Категория:'..s..']]') end
function r:result() return table.concat(self.t) .. table.concat(self.c)  end

-- Расчёт года перехода в ОД по закону РФ: считая 70 лет pma и с 1 января следующего года
function year70pma(year_death, year_reability, war_status)
	local year_from = tonumber(year_reability) or tonumber(year_death); if not year_from then return end
	local years_war = 0; if war_status then war_status = mw.ustring.lower( war_status ); if war_status=='участник' or war_status=='работник' then years_war = 4 end end
	local year_free70 = year_from + years_war + 70 + 1  -- +1 год, от 1 января следующего года
	-- mw.logObject(year_from, "yf")
	return year_free70
end
function p.year70pma(frame)
	local pargs = frame:getParent().args
	return year70pma(pargs['ГОД'], pargs['ГОДРЕАБИЛИТАЦИИ'], pargs['ВОВ'])
end	


-- Шаблон:АП
function p.template(frame)
	local pargs = frame:getParent().args
	local year_death = tonumber(pargs['ГОД'])
	local approximate = (pargs[1] == '?') or nil
	local entity = mw.wikibase.getEntity()
	if entity then 
		local year_death_wd = get_year_death_wd(entity)  -- из ВД
		if year_death ~= year_death_wd then r:add_category('Викиданные:Год смерти отличается от указанного в шаблоне АП') end
		year_death = year_death_wd or year_death
	end
	local year_reability =  tonumber(pargs['ГОДРЕАБИЛИТАЦИИ'])
	local year_free70 = year70pma(year_death, year_reability, pargs['ВОВ']) 
	local year_from = year_reability or year_death
	local CURRENTYEAR = tonumber(os.date( '%Y' ))
	local NSMAIN; if mw.title.getCurrentTitle().namespace == 0 then NSMAIN = 0 end
	
	-- если год не указан
	if not year_from then
		r:add(frame:expandTemplate{ title = 'license', args = {image='Red copyright.svg', 
			text = "Публикация произведений этого автора в Викитеке возможна только с его согласия.",
			note = "См. также [[w:Википедия:Получение разрешений|Википедия:Получение разрешений]]."}})
		if NSMAIN then r:add_category("Авторы, публикация произведений которых возможна только с их согласия") end
	
	-- умер до 1917 года
	elseif year_death < 1917 then
		r:add(frame:expandTemplate{ title = 'PD-author-old', 
			-- args = {set_from_module_copyright='true'}  -- [[special:diff/3871262]] → [[Категория:Включения шаблона PD-author-old]]
		})
	
	-- 70 pma
	elseif year_free70 <= CURRENTYEAR then
		r:add(frame:expandTemplate{ title = 'АП/70' })
		-- if NSMAIN then r:add_category('Авторы, срок исключительных прав на произведения которых истёк в '..year_free70..' году') end   -- удалено по итогу на [[Викитека:К удалению]
		
	-- свободно по 1917, остальное нет
	else
		r:add(frame:expandTemplate{ title = 'license', args = {image='Red copyright.svg', 
			text = [=[В&nbsp;соответствии&nbsp;со&nbsp;[[Гражданский кодекс РФ/Глава 70#Статья 1281. Срок действия исключительного права на произведение|статьёй&nbsp;1281 ГК&nbsp;РФ]] произведения этого автора, впервые опубликованные (или обнародованные) после 7 ноября 1917 года (по новому стилю) на территории [[w:Российская Федерация|Российской Федерации]] или стран, правопреемником которых является Российская Федерация ([[w:СССР|СССР]], [[w:РСФСР|РСФСР]], [[w:Советская Россия (государство)|Советская Россия]]), перейдут в&nbsp;[[Викитека:Общественное достояние|общественное достояние]] '''1&nbsp;января ]=] ..year_free70.. "&nbsp;года'''." .. p.wikilivres( is(pargs['Wikilivres']), is(pargs['ВИКИЛИВРУ']) ) }})
		
		-- if NSMAIN then
		-- удалено по итогу на [[Викитека:К удалению]]
		-- 	r:add_category('Авторы, срок исключительных прав на произведения которых ещё не истёк')
		-- 	r:add_category('Авторы, срок исключительных прав на произведения которых истекает в '..year_free70..' году')
		-- end
	
	if approximate then
		r:add("\n<small>'''Примечание.''' Год смерти этого автора точно не известен и оценён как '''"..year_death.."'''.</small>")
	end	
	
	end
	return r:result()
end

function p.wikilivres(Wikilivres, Wikilivres_ru)
	local w = {t = {}}
	function w:add(s) table.insert(self.t, s) end
	function w:add_category(s) table.insert(self.t, '[[Категория:'..s..']]') end
	function w:result() return table.concat(self.t) end

	if Wikilivres then
		w:add('<br><small>')
		if Wikilivres == 'Нужно перенести' then
			w:add('Произведения этого автора должны быть удалены из Викитеки, поэтому их нужно срочно перенести на сайт [[Wikilivres:Main Page|Wikilivres]].')
			w:add_category('Авторы, чьи произведения нужно срочно перенести на сайт Wikilivres')
		else
			w:add('Содержание данной страницы временно перенесено на сайт [[Wikilivres:'..Wikilivres..'|Wikilivres]]')
			w:add_category('Авторы, чьи произведения были перенесены на сайт Wikilivres')
		end
		w:add('</small>')
	end
	if Wikilivres_ru then
		w:add('<br><small>')
		if Wikilivres_ru == 'Нужно перенести' then
			w:add('Произведения этого автора должны быть удалены из Викитеки, поэтому их нужно срочно перенести на&nbsp;сайт [[wikilivresru:|Wikilivres.ru]].')
			w:add_category('Авторы, чьи произведения нужно срочно перенести на сайт Wikilivres.ru')
		else
			w:add('Содержание данной страницы временно перенесено на&nbsp;сайт [[wikilivresru:'..Wikilivres_ru..'|Wikilivres.ru]]')
			w:add_category('Авторы, чьи произведения были перенесены на сайт Wikilivres.ru')
		end
		w:add('</small>')
	end
	return w:result()
end

-- год смерти из ВД
function get_year_death_wd(entity)
	local year_death_wd
	for _, s in pairs( entity:getBestStatements( 'P570' ) ) do
		if s.mainsnak.datavalue and s.mainsnak.datavalue.value.time then 
			local d = s.mainsnak.datavalue.value.time 
			return tonumber(mw.ustring.match( d, "(%-?%d+)%-%d+%-%d+T"))
		end	
	end
end

-- проверка переменной, возврат её или nil если пустая
function is(var)
	if (var == '' or var == nil) then return nil  else return var end
end

return p