Module:Submit an edit request

From Zoophilia Wiki
Revision as of 07:16, 10 June 2014 by meta>Mr. Stradivarius (don't pass the query string through the uri object so that we can be sure that the parameters are in the right order)
Jump to navigationJump to search

Documentation for this module may be created at Module:Submit an edit request/doc

-- This module implements {{Submit an edit request}}.

local cfg = {}

cfg['preload-template'] = 'Template:Submit an edit request/preload'
cfg['preload-title-text'] = '$1 edit request on $2'
cfg['preload-title-date-format'] = 'j F Y'

cfg['semi-editintro'] = 'Template:Edit semi-protected/editintro'
cfg['semi-request-template'] = 'edit semi-protected'
cfg['semi-protectionlevel'] = 'Semi-protected'

cfg['template-editintro'] = 'Template:Edit template-protected/editintro'
cfg['template-request-template'] = 'edit template-protected'
cfg['template-protectionlevel'] = 'Template-protected'

cfg['full-editintro'] = 'Template:Edit protected/editintro'
cfg['full-request-template'] = 'edit protected'
cfg['full-protectionlevel'] = 'Protected'

local mRedirect = require('Module:Redirect')

local p = {}

local function message(key, ...)
	local params = {...}
	local msg = cfg[key]
	if #params < 1 then
		return msg
	else
		return mw.message.newRawMessage(msg):params(params):plain()
	end
end

function p.makeRequestUrl(level, titleObj)
	titleObj = titleObj or mw.title.getCurrentTitle()
	
	local editintro, requestTemplate, levelText
	do
		local messages = {
			semi = {
				editintro = 'semi-editintro',
				requestTemplate = 'semi-request-template',
				levelText = 'semi-protectionlevel'
			},
			template = {
				editintro = 'template-editintro',
				requestTemplate = 'template-request-template',
				levelText = 'template-protectionlevel'
			},
			full = {
				editintro = 'full-editintro',
				requestTemplate = 'full-request-template',
				levelText = 'full-protectionlevel'
			}
		}
		local levelMessages = messages[level]
		editintro = message(levelMessages.editintro)
		requestTemplate = message(levelMessages.requestTemplate)
		levelText = message(levelMessages.levelText)
	end
	
	local preloadtitle, talkpagename
	do
		-- Get the date text.
		local dateFormat = message('preload-title-date-format')
		local lang = mw.language.getContentLanguage()
		local date = lang:formatDate(dateFormat)
		
		-- Get the talk page name, and resolve it if it is a redirect.
		local namespace = titleObj.namespace
		if namespace % 2 == 0 then
			namespace = namespace + 1
		end
		talkpagename = mw.site.namespaces[namespace].name .. ':' ..  titleObj.text
		talkpagename = mRedirect.main{talkpagename}
		preloadtitle = message('preload-title-text', levelText, date)
	end
	
	local preloadTemplate = message('preload-template')
	
	local function encode(key, value)
		key = mw.uri.encode(key)
		value = mw.uri.encode(value)
		return key .. '=' .. value
	end

	local query = {}
	query[#query + 1] = encode('preload', preloadTemplate)
	query[#query + 1] = encode('editintro', editintro)
	query[#query + 1] = encode('preloadparams[]', requestTemplate)
	query[#query + 1] = encode('preloadtitle', preloadtitle)
	query[#query + 1] = 'section=new'
	query[#query + 1] = encode('preloadparams[]', titleObj.prefixedText)
	
	local url = mw.uri.fullUrl(talkpagename, {action = 'edit'})
	url = tostring(url) .. '&' .. table.concat(query, '&')
	return url
end

return p