Modul:Participation: Unterschied zwischen den Versionen

This is [[MediaWiki:Tagline]]. Set to <code>display:none</code> by chameleon skin.
Wechseln zu:Navigation, Suche
Zeile 19: Zeile 19:
 
config.validNamespace
 
config.validNamespace
 
) then
 
) then
return false, alertBox(
+
return false, 'Diese Vorlage darf nur im Namensraum \'\''
'Diese Vorlage darf nur im Namensraum \'\''
 
 
.. config.validNamespace
 
.. config.validNamespace
.. '\'\' verwendet werden!' )
+
.. '\'\' verwendet werden!'
 
end
 
end
 
if not assertTargetIsValid(
 
if not assertTargetIsValid(
Zeile 28: Zeile 27:
 
config.validTargetPageCategory
 
config.validTargetPageCategory
 
) then
 
) then
local t, message = assertTargetIsValid(
+
return false, 'Die Seite mit dem Namen \'\''
getCurrentTitle().text,
+
.. getCurrentTitle().text
config.validTargetPageCategory
+
.. '\'\' existiert nicht oder ist keine Figur!'
)
 
return false, alertBox(
 
'Die Seite mit dem Namen \'\''
 
.. getCurrentTitle().text .. message
 
.. '\'\' existiert nicht oder ist keine Figur!' )
 
 
end
 
end
 
return true
 
return true
Zeile 54: Zeile 48:
 
local res = smw.ask ( query )
 
local res = smw.ask ( query )
 
if not res[1] or not res[1].pageCategories then
 
if not res[1] or not res[1].pageCategories then
return false, tt.printTable( query ) .. '~~' .. tt.printTable( res )
+
return false
 
end
 
end
return tt.inTable( res[1].pageCategories, 'Kategorie:' .. validCategory ), tt.printTable( query ) .. '---' .. tt.printTable( res )
+
return tt.inTable( res[1].pageCategories, 'Kategorie:' .. validCategory )
 
end
 
end
  
Zeile 88: Zeile 82:
 
end
 
end
 
local playData = {}
 
local playData = {}
for k, row in res do
+
for k, row in pairs(res) do
 
if row and row.number and row.title then
 
if row and row.number and row.title then
 
playData[row.number] = row
 
playData[row.number] = row
Zeile 106: Zeile 100:
 
local assesmentResult, assesmentMessage = assesPrerequisites()
 
local assesmentResult, assesmentMessage = assesPrerequisites()
 
if not assesmentResult then
 
if not assesmentResult then
return assesmentMessage
+
return alertBox( assesmentMessage )
 
end
 
end
 
-- all is well
 
-- all is well

Version vom 23. Dezember 2017, 21:38 Uhr

Documentation icon Module documentation[view] [edit] [history] [purge]

Dieses Modul kommt direkt auf Seiten im Namensraum "Spielteilnahme" zum Einsatz. Es prüft, ob es eine Spielfigur mit dem gleichen Namen wie die aktuelle Seite hat gibt und zeigt dann für die entsprechende Figur eine Übersicht aller Spiele und den Teilnahmestatus an. Zusätzlich gibt es für jedes Spiel eine Möglichkeit, sich direkt An- oder abzumelden.

Usage[Quelltext bearbeiten]

{{#invoke:Participation|main}}

Example[Quelltext bearbeiten]

See Spielteilnahme:Caspar.

local config = {
	validNamespace = 'Spielteilnahme',
	validTargetPageCategory = 'Figuren'
}

local p = {}
local smw = mw.smw
local tt = require( 'Module:TableTools' )

local currentTitle = nil

function assertCorrectNamespace( title, namespace )
	return title.nsText == namespace
end

function assesPrerequisites()
	if not assertCorrectNamespace(
		getCurrentTitle(),
		config.validNamespace
		) then
		return false, 'Diese Vorlage darf nur im Namensraum \'\''
			.. config.validNamespace
			.. '\'\' verwendet werden!'
	end
	if not assertTargetIsValid(
		getCurrentTitle().text,
		config.validTargetPageCategory
		) then
		return false, 'Die Seite mit dem Namen \'\''
			.. getCurrentTitle().text
			.. '\'\' existiert nicht oder ist keine Figur!'
	end
	return true
end

function assertTargetIsValid( targetPageName, validCategory )
	--[=[
	-- ssc's '?Category:' .. validCategory handling seems broken atm
	local query = {
		'[[' .. targetPageName .. ']]',
		'?Category:' .. validCategory
	}
	--]=]
	local query = {
		'[[' .. targetPageName .. ']]',
		'?Category#=pageCategories'
	}
	local res = smw.ask ( query )
	if not res[1] or not res[1].pageCategories then
		return false
	end
	return tt.inTable( res[1].pageCategories, 'Kategorie:' .. validCategory )
end

function alertBox( text )
	return '<div class="alert alert-danger" role="alert">'
		.. '<strong>Achtung:</strong> ' .. text
		.. '</div>'
end

function getCurrentTitle()
	if currentTitle ~= nil then
		return currentTitle
	end
	currentTitle = mw.title.getCurrentTitle()
	return currentTitle
end

function getPlayData()
	local query = {
		'[[Category:Spiele]]',
		'?#=play',
		'?Has number#=number',
		'?Has character participating#=players',
		'?Has display name#=displayName',
		'?Has title#=title',
		'mainlabel=-'
	}
	res = smw.ask( query )
	if not res then
		return {}
	end
	local playData = {}
	for k, row in pairs(res) do
		if row and row.number and row.title then
			playData[row.number] = row
		end
	end
	return playData
end

function printParticipationControl( playData, character )
	return '== ' .. character .. ' ==\n'
		.. '<pre>\n'
		.. tt.printTable( playData )
		.. '</pre>\n'
end

function p.main()
	local assesmentResult, assesmentMessage = assesPrerequisites()
	if not assesmentResult then
		return alertBox( assesmentMessage )
	end
	-- all is well
	local playData = getPlayData()
	return printParticipationControl(
		playData,
		getCurrentTitle().text
	)
end

-- pt = require('Module:TableTools').printTable

return p