モジュール:MultiProtect

require('strict')
local getArgs = require('モジュール:Arguments').getArgs
local yesno = require('モジュール:Yesno')
local makeList = require('モジュール:List').makeList
local function pagestatus(f_pagename, f_status, f_options)
	local frame = mw.getCurrentFrame()
	local m_title = mw.title.new(f_pagename)
	local m_historylink =  .. m_title:fullUrl('action=history') .. ' 履歴'
	local m_loglink =  .. mw.title.new('Special:Log'):fullUrl({ page = m_title.prefixedText }) .. ' ログ'
	local m_whatlinkshere = 'リンク元'
	local m_pagelink = 
	local m_pageinfo = 
	local m_tlcount
	local m_status_display = 
	local m_additional = {}
	
	-- 進捗判定
	if f_status then
		f_status = string.lower(f_status)
	elseif f_options.default_status then
		f_status = string.lower(f_options.default_status)
	end
	if f_status == '対処' or f_status == '済' or f_status == 'd' or f_status == 'done' then
		m_status_display = 'チェック '
	elseif f_status == '却下' or f_status == 'n' or f_status == 'nd' or f_status == 'not done' then
		m_status_display = '× '
	end
	
	if not m_title.isTalkPage then
		-- ノート（会話）ページでない
		table.insert(
			m_additional,
			m_title.talkPageTitle and 'ノート'
			)
	end
		
	if m_title.exists then
		-- ページが存在する場合
		
		-- リダイレクト判定
		if m_title.isRedirect then
			m_pagelink = string.format(
				'%s %s',
				m_title:fullUrl('redirect=no'),
				m_title.prefixedText
				)
		else
			m_pagelink = ':' .. m_title.prefixedText .. 
		end
		
		if f_options.pageinfo then
			local m_editprotect = '無'
			local m_editprotect_expiry_display =  -- 表示用
			local m_moveprotect = '無'
			local m_moveprotect_expiry_display =  -- 表示用
			
			-- 編集保護レベル
			if m_title.protectionLevels.edit1 == 'sysop' then
				m_editprotect = '全'
			elseif m_title.protectionLevels.edit1 == 'extendedconfirmed' then
				m_editprotect = '拡'
			elseif m_title.protectionLevels.edit1 == 'autoconfirmed' then
				m_editprotect = '半'
			end
			-- 移動保護レベル（移動半保護はないものとして扱う）
			if m_title.protectionLevels.move1 == 'sysop' then
				m_moveprotect = '全'
			elseif m_title.protectionLevels.move1 == 'extendedconfirmed' then
				m_moveprotect = '拡'
			end
			-- 編集保護期間。編集保護が存在する場合
			if m_editprotect == '全' or m_editprotect == '拡' or m_editprotect == '半' then
				if frame:callParserFunction('PROTECTIONEXPIRY','edit',m_title.prefixedText) == 'infinity' then
					m_editprotect_expiry_display = '(無)'
				else
					m_editprotect_expiry_display = '(有)'
				end
			end
			-- 移動保護期間
			if m_moveprotect == '全' or m_moveprotect == '拡' then
				if frame:callParserFunction('PROTECTIONEXPIRY','move',m_title.prefixedText) == 'infinity' then
					m_moveprotect_expiry_display = '(無)'
				else
					m_moveprotect_expiry_display = '(有)'
				end
			end
			-- 最終編集者
			local m_lastedituser = frame:callParserFunction('REVISIONUSER',m_title.prefixedText)
			
			m_pageinfo = string.format(
				'〈編:%s%s 移:%s%s 最終編集:%s〉',
				m_editprotect,
				m_editprotect_expiry_display,
				m_moveprotect,
				m_moveprotect_expiry_display,
				m_lastedituser,
				m_lastedituser
				)
		end
		-- テンプレート呼び出し数
		if f_options.tlcount ~= false then
			-- f_options.tlcountがtrueもしくはnilの場合
			
			if f_options.tlcount or m_title.namespace == 10 or m_title.namespace == 828 then
				m_tlcount = string.format(
					' 呼び出し数',
					m_title.namespace,
					m_title:partialUrl()
					)
			end
		end
		table.insert(m_additional, m_historylink)
		table.insert(m_additional, m_loglink)
		table.insert(m_additional, m_whatlinkshere)
		table.insert(m_additional, m_tlcount)
		
	else
		-- ページが存在しない場合
		
		-- ページリンク
		m_pagelink = ':' .. m_title.prefixedText .. 
		
		-- pageinfo
		if f_options.pageinfo then
			local m_createprotect = '無'
			local m_createprotect_expiry_display = 
			
			-- 作成保護レベル
			if m_title.protectionLevels.create then
				if m_title.protectionLevels.create1 == 'sysop' then
					m_createprotect = '全'
				elseif m_title.protectionLevels.create1 == 'extendedconfirmed' then
					m_createprotect = '拡'
				elseif m_title.protectionLevels.create1 == 'autoconfirmed' then
					m_createprotect = '半'
				end
			end
			-- 作成保護期間
			if m_createprotect == '全' or m_createprotect == '拡' or m_createprotect == '半' then
				if frame:callParserFunction('PROTECTIONEXPIRY','create',m_title.prefixedText) == 'infinity' then
					m_createprotect_expiry_display = '(無)'
				else
					m_createprotect_expiry_display = '(有)'
				end
			end
			m_pageinfo = string.format(
				'〈作:%s%s〉',
				m_createprotect,
				m_createprotect_expiry_display
				)
		end
		table.insert(m_additional, m_loglink)
		table.insert(m_additional, m_whatlinkshere)
	end
	return string.format(
		'%s%s%s（%s）',
		m_status_display,
		m_pageinfo,
		m_pagelink,
		table.concat(m_additional, ' / ')
		)
end
local p = {}
function p.Main(frame)
	-- 本体部分
	local args = getArgs(frame, { wrappers = 'Template:MultiProtect' })
	local list = {}
	local options = {
		pageinfo = yesno(args.pageinfo),
		tlcount = yesno(args.tlcount),
		default_status = args'status'
	}
	args51 = nil	-- args51以降は無視する
	for i, v in ipairs(args) do
		table.insert(list, pagestatus(v, args's' .. i, options))
	end
	return makeList('ordered', list)
end
return p