Module:Request for permission links
This module implements {{Request for permission links}}. Please see the template page for documentation.
Example appearance
Example (t · th · c · del · cross-wiki · SUL · edit counter · pages created (xtools · sigma) · non-automated edits · BLP edits · undos · manual reverts · rollbacks · logs (blocks · rights · moves) · rfar · spi · cci)
Adding new links
To add a new link, find an empty line in the section between about lines 38 and 92 and add either a link l[#l+1] = '[URL label]'
or a wikilink l[#l+1] = '[[Page|label]]'
. However, replace any instance of a username in the link with '..userURL..'
(for a URL/external link) or
'..username..'
(for a wikilink).
Each new l
(link string) will automatically have a spaced middot between it and the previous link. To skip the spaced dot, add a line before the new link with before('')
. See the existing links in the module for examples.
For a permission-specific, wrap the link(s) with a condition, such as:
if permission == 'New page reviewer' then
l[#l+1] =
end
Differences since the template was converted to a module
The functional difference since converting to a module is primarily that this checks each permission subpage to see if there are requests for the user at each page. Then, if there are multiple, it adds a parenthetical such as (requesting AutoWikiBrowser, Pending changes reviewer) after the userpage link.
If there is only one request found, then the parenthetical appears on the main Wikipedia:Requests for permissions page but not on the subpage where the request appears. Additionally, in this case the links specific to that permission are also shown on the main page. Previously, these links only appeared when viewing the subpage for that permission.
Notify links
The following do not currently have "notify" links: {{subst:AutoWikiBrowser granted}}, {{subst:Confirmed granted}}, {{subst:Extended confirmed granted}}.
local p = {}
local getArgs = require('Module:Arguments').getArgs
function p.links(permission, parenthetical, username, userURL)
local l = {}
----------------------------------------------------------------------------
----------------------------------------------------------------------------
-- To add a new link, find an empty line in the section below
-- and add either a link or a wikilink, like so:
--
-- l[#l+1] = '[URL external link]'
-- l[#l+1] = '[[Page|wikilink]]'
--
-- However, replace any instance of a username with:
--
-- '..userURL..' -- For a [ ] URL/external link
-- '..username..' -- For a [[ ]] wikilink
--
-- Each new "l" (link string) will automatically have a spaced dot in
-- the final output. To skip the spaced dot, add a line before with:
--
-- before('')
--
-- See the existing links below for examples.
----------------------------------------------------------------------------
----------------------------------------------------------------------------
local Before = {'', '', ''} -- Skip dots before 1, 2, 3.
function before( replacement )
Before[#l+1] = replacement
end
-- First links: 1. Userpage, 2. parenthetical (defined below in p.main)
-- 3. User talk page, 4. User talk page history, 5. User contributions.
l[1] = '[[User:'..username..'|'..username..']]'
l[2] = parenthetical
l[3] = '([[User talk:'..username..'|t]]'
l[4] = '[[Special:History/User talk:'..username..'|th]]'
l[5] = '[[Special:Contribs/'..username..'|c]]'
-- Permission-specific contributions links
if permission == 'Template editor' then
before(' <sup>(')
l[#l+1] = '[https://en.wikipedia.org/w/index.php?title=Special:Contributions&target='..userURL..'&namespace=10 template space]'
l[#l+1] = '[https://en.wikipedia.org/w/index.php?title=Special:Contributions&target='..userURL..'&namespace=11 edit requests])</sup>'
elseif permission == 'Page mover' then
before(' <sup>(')
l[#l+1] = '[https://xtools.wmcloud.org/topedits/en.wikipedia.org/'..userURL..'/4/Requested_moves/Technical_requests RM/TR]'
l[#l+1] = '[https://sigma.toolforge.org/summary.py?name='..userURL..'&search=requested+move&server=enwiki RMs])</sup>'
elseif permission == 'File mover' then
before(' <sup>(')
l[#l+1] = '[https://en.wikipedia.org/w/index.php?title=Special:Contributions&target='..userURL..'&namespace=6 file space])</sup>'
end
l[#l+1] = '<span class="sysop-show">[[Special:DeletedContributions/'..username..'|del]]'
l[#l+1] = '</span>[[:luxo:'..username..'|cross-wiki]]'
l[#l+1] = '[[Special:CentralAuth/'..username..'|SUL]]'
l[#l+1] = '[https://xtools.wmcloud.org/ec/en.wikipedia.org/'..userURL..' edit counter]'
if permission == 'Event coordinator' then
l[#l+1] = '[https://en.wikipedia.org/w/index.php?title=Special:Log&type=newusers&user='..userURL..'&limit=5000 accounts created]'
elseif permission == 'Template editor' then
l[#l+1] = '[https://xtools.wmflabs.org/pages?project=en.wikipedia.org&username='..userURL..'&namespace=10 templates created]'
else
l[#l+1] = 'pages created ([https://xtools.wmflabs.org/pages?user='..userURL..'&project=en.wikipedia.org&namespace=all&redirects=noredirects xtools]'
l[#l+1] = '[https://sigma.toolforge.org/created.py?name='..userURL..'&server=enwiki&ns=,,&redirects=none sigma])'
end
l[#l+1] = '[https://xtools.wmflabs.org/autoedits/en.wikipedia.org/'..userURL..' non-automated edits]'
l[#l+1] = '[https://xtools.wmflabs.org/categoryedits/en.wikipedia.org/'..userURL..'/Living_people BLP edits]'
l[#l+1] = '[https://en.wikipedia.org/w/index.php?title=Special%3AContributions&target='..userURL..'&namespace=all&tagfilter=mw-undo undos]'
l[#l+1] = '[https://en.wikipedia.org/w/index.php?title=Special%3AContributions&target='..userURL..'&namespace=all&tagfilter=mw-manual-revert manual reverts]'
l[#l+1] = '[https://en.wikipedia.org/w/index.php?title=Special%3AContributions&target='..userURL..'&namespace=all&tagfilter=mw-rollback rollbacks]'
l[#l+1] = '[https://en.wikipedia.org/w/index.php?title=Special:Log&user='..userURL..' logs]'
before(' <sup>(')
l[#l+1] = '[https://en.wikipedia.org/w/index.php?title=Special:Log/block&page=User:'..userURL..' blocks]'
l[#l+1] = '[https://en.wikipedia.org/w/index.php?title=Special:Log/rights&page=User:'..userURL..' rights]'
l[#l+1] = '[https://en.wikipedia.org/w/index.php?title=Special:Log/move&user='..userURL..' moves])</sup>'
if permission == 'New page reviewer' then
l[#l+1] = '[https://en.wikipedia.org/w/index.php?title=Special:Log/pagetriage-curation&user='..userURL..' curation log]'
l[#l+1] = '[https://en.wikipedia.org/w/index.php?title=Special:Log/patrol&user='..userURL..'&subtype=patrol patrol log]'
l[#l+1] = '[https://afdstats.toolforge.org/afdstats.py?name='..userURL..'&max=&startdate=&altname= AFD stats]'
l[#l+1] = '[https://apersonbot.toolforge.org/afchistory/?user='..userURL..' AFC stats]'
l[#l+1] = '[[User:'..username..'/CSD log|CSD log]]'
l[#l+1] = '[[User:'..username..'/PROD log|PROD log]]'
l[#l+1] = '[[User:'..username..'/Draftify log|Draftify log]]'
l[#l+1] = '[https://xtools.wmcloud.org/ec-namespacetotals/en.wikipedia.org/'..userURL..' Mainspace edits]'
elseif permission == 'Page mover' then
l[#l+1] = '[[User:'..username..'/CSD log|CSD log]]'
end
l[#l+1] = '[[WP:Arbitration/Requests/Case/'..username..'|rfar]]'
l[#l+1] = '[[WP:Sockpuppet investigations/'..username..'|spi]]'
l[#l+1] = '[[WP:Contributor copyright investigations/'..username..'|cci]])'
----------------------------------------------------------------------------
----------------------------------------------------------------------------
-- New links should be somewhere above this line.
-- Next, links for assigning permissions and notifying the user.
----------------------------------------------------------------------------
----------------------------------------------------------------------------
before(' <span class="sysop-show perm-assign-permissions"><span class="nowrap">(')
if permission == 'AutoWikiBrowser' then
l[#l+1] = "[https://en.wikipedia.org/w/index.php?title=Wikipedia:AutoWikiBrowser/CheckPageJSON&action=edit edit CheckPage])"
else
l[#l+1] = "[[Special:UserRights/"..username.."|<span style='color: #03B;'>'''assign permissions'''</span>]])"
end
local subpages = {'Account creator', 'Autopatrolled', 'AutoWikiBrowser', 'Confirmed', 'Event coordinator', 'Extended confirmed', 'File mover', 'Mass message sender', 'New page reviewer', 'Page mover', 'Pending changes reviewer', 'Rollback', 'Template editor'}
local templates = {['Account creator']='acc', ['Autopatrolled']='ap', ['AutoWikiBrowser']=false, ['Confirmed']=false, ['Event coordinator']='ev', ['Extended confirmed']=false, ['File mover']='fm', ['Mass message sender']='mms', ['New page reviewer']='npr', ['Page mover']='pm', ['Pending changes reviewer']='pc', ['Rollback']='rb', ['Template editor']='te'}
if permission then
if templates[permission] then
local templateURL = mw.ustring.gsub(permission..' granted', '%s', '%%20')
local headingURL = templateURL
if permission == 'Rollback' then
templateURL = templateURL..'%20'..'2' -- [[Template:Rollback granted 2]]
end
before('<sup>(')
l[#l+1] = '[https://en.wikipedia.org/w/index.php?title=User_talk:'..userURL..'&action=edit§ion=new&preloadtitle='
..headingURL..'&preload=Template:'..templateURL..' notify])</sup></span>'
else
l[#l] = l[#l]..'</span>'
end
else
before('</span><sup>(')
for i=1,#subpages do
if templates[subpages[i]] then
local templateURL = mw.ustring.gsub(subpages[i]..' granted', '%s', '%%20')
l[#l+1] = '[https://en.wikipedia.org/w/index.php?title=User_talk:'..userURL..'&action=edit§ion=new&preloadtitle='
..templateURL..'&preload=Template:'..templateURL..' '..templates[subpages[i]]..']'
end
end
l[#l] = l[#l]..')</sup>'
end
-- All links should be within a plainlinks span
Before[1] = '<span class="plainlinks">'
l[#l] = l[#l]..'</span></span>'
local ret = ''
for n=1,#l do
ret = ret .. (Before[n] or " '''·''' ") .. l[n]
end
return ret
end
----------------------------------------------------------------------------
----------------------------------------------------------------------------
-- This is the main function (the one directly called by the template).
-- It determines the permission (if uniquely determined), the username,
-- and the URL encoding of the username, then creates a parenthetical
-- listing any permission(s) sought at subpages of WP:PERM (if viewing the
-- main WP:PERM page rather than a subpage WP:PERM/[...]).
-- It then uses this information to call the p.links function above.
----------------------------------------------------------------------------
----------------------------------------------------------------------------
function p.main(frame)
local args = getArgs(frame)
local username = args['User'] or args['1'] or 'Example' -- {{{User|{{{1|Example}}}}}}
local userURL = frame:callParserFunction('urlencode', username, 'PATH') -- {{urlencode:{{{User|{{{1|Example}}}}}}|PATH}}
local permission = args['permission'] -- {{{permission|nil}}}
local base = 'Wikipedia:Requests for permissions' -- A/K/A [[WP:PERM]].
local current = mw.allToString(mw.title.getCurrentTitle()) -- {{FULLPAGENAME}}
local shortened = mw.ustring.gsub(current, base..'/', '') -- Subtitle, if the current title is a subpage of [[WP:PERM]].
-- The 13 subpages of WP:PERM currently used for requesting permissions:
local subpages = {'Account creator', 'Autopatrolled', 'AutoWikiBrowser', 'Confirmed', 'Event coordinator', 'Extended confirmed', 'File mover', 'Mass message sender', 'New page reviewer', 'Page mover', 'Pending changes reviewer', 'Rollback', 'Template editor'}
local check = {['Account creator']=true, ['Autopatrolled']=true, ['AutoWikiBrowser']=true, ['Confirmed']=true, ['Event coordinator']=true, ['Extended confirmed']=true, ['File mover']=true, ['Mass message sender']=true, ['New page reviewer']=true, ['Page mover']=true, ['Pending changes reviewer']=true, ['Rollback']=true, ['Template editor']=true} -- Use check[x] to check whether x is one of the subpages.
-- Ignore any provided args.permission if not valid
if not check[permission] then
permission = nil
end
local intext = {}
local count = 0
local tentative = ''
-- If viewing [[WP:PERM]] or its subpages, then check each subpage for a request for this user.
if current == base or check[shortened] then
local text = {}
local pattern = mw.ustring.gsub('{{rfplinks|1='..username..'}}', "([%(%)%.%%%+%-%*%?%[%^%$%]])", "%%%1" ) -- Copied from _escapePattern in [[Module:String]]
for i=1,#subpages do
text[i] = mw.title.new( base..'/'..subpages[i] ):getContent() or ''
if text[i] ~= mw.ustring.gsub(text[i], pattern, '') then
intext[i] = true
tentative = subpages[i]
count = count + 1
end
end
-- If exactly one subpage with a request, then use that as the permission.
if count == 1 then
permission = tentative
end
-- If the page is one one of the subpages, then use that as the permission.
if check[shortened] then
permission = shortened
end
end
-- Now to form the parenthetical.
local parenthetical = ' '
-- If requesting multiple perms at [[WP:PERM]], show each one requested.
if count > 1 then
parenthetical = ' (<small>requesting '
local first = true
for i=1,#subpages do
if intext[i] then
if not first then
parenthetical = parenthetical .. ', '
else
first = false
end
parenthetical = parenthetical..'[['..base..'/'..subpages[i]
-- Unless the link is to the current page, add a section link.
if subpages[i] ~= shortened then
parenthetical = parenthetical..'#User:'..username
end
parenthetical = parenthetical..'|'..subpages[i]..']]'
end
end
parenthetical = parenthetical..'</small>) '
-- If requesting one perm, but viewed on a page other than that
-- perm's subpage of [[WP:PERM]], then show the permission requested.
elseif permission then
if current ~= base..'/'..permission then
parenthetical = ' (<small>requesting [['..base..'/'..permission..'#User:'..username..'|'..permission..']]</small>) '
end
end
return p.links(permission, parenthetical, username, userURL)
end
return p