Module:Upload campaign link

From Wikimedia Commons, the free media repository
Jump to navigation Jump to search
Lua

CodeDiscussionEditHistoryLinksLink count Subpages:DocumentationTestsResultsSandboxLive code All modules

Support module for Template:UploadCampaignLink2.

Takes the campaign, id, lat, lon (or long), commonscat, categories, description and descriptionlang parameters from the template calling Template:UploadCampaignLink2 and uses these to create a link to an upload campaign.

Code

local p = {}

function p.campaignLink( frame )
    local ppargs = frame:getParent().args
    --as longitude naming isn't standardised
    local lon = ppargs['lon']
    if lon == nil then
        lon = ppargs['long']
    end
    --
    url = '//commons.wikimedia.org/wiki/special:uploadWizard?campaign=' .. ppargs['campaign'] .. '&id=' .. p.url_encode(ppargs['id']) .. '&descriptionlang='
    if ppargs['descriptionlang'] == "" or ppargs['descriptionlang'] == nil then
        url = url .. 'en'
    else
        url = url .. ppargs['descriptionlang']
    end
    url = url .. '&description=' .. p.url_encode(ppargs['description'])
    if ppargs['lat'] ~= "" and ppargs['lat'] ~= nil then
        url = url .. '&lat=' .. ppargs['lat'] .. '&lon=' .. ppargs['lon']
    end
    if ppargs['commonscat'] ~= ""  and ppargs['commonscat'] ~= nil then
        url = url .. '&categories=' .. p.url_encode(ppargs['commonscat'])
    elseif ppargs['categories'] ~= ""  and ppargs['categories'] ~= nil then
        url = url .. '&categories=' .. p.url_encode(ppargs['categories'])
    end
    return url
end

function p.url_encode(str)
    if (str) then
        str = string.gsub (str, "\n", "\r\n")
        str = string.gsub (str, "([^%w %-%_%.%~])",
            function (c) return string.format ("%%%02X", string.byte(c)) end)
        str = string.gsub (str, " ", "+")
    end
    return str    
end

return p