Modul:Onboarding

Aus lernlog Hilfesystem
Version vom 12. März 2025, 09:16 Uhr von Bk admin (Diskussion | Beiträge) (1 Version importiert)
(Unterschied) ← Nächstältere Version | Aktuelle Version (Unterschied) | Nächstjüngere Version → (Unterschied)
Wechseln zu: Navigation, Suche

Die Dokumentation für dieses Modul kann unter Modul:Onboarding/Doku erstellt werden

Skriptfehler: Interner Lua-Fehler: Der Interpreter beendet sich mit dem Status 1.

local p = {} --p stands for package

-- joins two tables of users
function p.mergeTables( frame )
	primary_table_str = frame.args[1]
	secondary_table_str = frame.args[2]
	output = ""
	data_row_number = 0

	join_table = {}
	for item in primary_table_str:gmatch("<tr.-</tr>") do
		tab = {}
		for split in item:gmatch("<td.-</td>") do table.insert(tab, split) end
		mitarbeiter = tab[1]
		prozeduren = tab[2]
		aufgaben = tab[3]

		if mitarbeiter then
	    	table.insert(join_table, '\n'..mitarbeiter..'\n'..prozeduren..'\n'..aufgaben)
	    end
	end

	for item in secondary_table_str:gmatch("<tr.-</tr>") do
	    tab = {}
		for split in item:gmatch("<td.-</td>") do table.insert(tab, split) end
		mitarbeiter = tab[1]
		prozeduren = tab[2]
		aufgaben = tab[3]
		
	    mitarbeiter_short = mitarbeiter:match("%[%[.-%]%]"):gsub('%[',''):gsub('%]','')
	    found = false
	    for key,value in pairs(join_table) do
	    	if string.find(value, mitarbeiter_short) then
	    		found = true;
	    	end
	    end
	    if not found then
			table.insert(join_table, '\n'..mitarbeiter..'\n'..prozeduren..'\n'..aufgaben)
	    end
	end
	
	table.sort(join_table)
	
	output = '<table class="sortable wikitable smwtable broadtable"><th class="Mitarbeiter-Name">Mitarbeiter Name</th><th class="Zugewiesene-Prozeduren">Zugewiesene Prozeduren</th><th class="Zugewiesene-Aufgaben">Zugewiesene Aufgaben</th>'
	for key,value in pairs(join_table) do
		data_row_number = data_row_number + 1
		if (data_row_number % 2 == 0) then
			class = "row-even"
		else
			class = "row-odd"
		end
		output = output..'\n<tr data-row-number="'..data_row_number..'" class="'..class..'">'..value..'\n</tr>'
	end
	output = output..'\n</table>'
	return output
	--:gsub('<','('):gsub('>',')'):gsub('%[','('):gsub('%]',')').."<br><br>"
end

-- get infos about user
function p.getInfos( frame)
	user = frame.args[1]

	role = "Role: " .. parseFunction(frame, '#ifingroup:mitarbeiter', {'true', 'false'} ) .. "|" .. parseFunction(frame, '#ifingroup:personal', {'true', 'false'} )
	--"Role: " .. getRole( frame )
	
	if mw.title.makeTitle( 'Benutzer', user ).exists then 
		user_site_exist = "Benutzer-Seite existiert"
	else
		user_site_exist = "Benutzer-Seite existiert nicht"
	end
	
	if mw.title.new( user ).exists then
		onboarding_exists = "Onboarding-Seite existiert"
	else
		onboarding_exists = "Onboarding-Seite existiert"
	end
	
	return role .. '\n\n' .. user_site_exist .. '\n\n' .. onboarding_exists
end


-- creates a list of "mitarbeiter" 
--{{dropdown|1=[https://duckduckgo.com/?q=foo&ia=web Search for Foo]|2=Bar}}
--{{{field|Onboarding_Aufgabe|input type=dropdown|values=1,2,3,4}}}
function p.listWorkers( frame )
	users_args = frame.args[1]:gsub("%s+", "")..", "
	onboardings_args = frame.args[2]:gsub("%s+", "")..", "
	--output = '<select id="title" name="title">\n'
	output = '{{dropdown'
	onboardings_array = {}
	for item in onboardings_args:gmatch("%w+") do 
		table.insert(onboardings_array, item) 
	end
	
	users_array = {}
	for item in users_args:gmatch("%w+:%w+,") do
		user = item:gsub("Benutzer:",""):gsub(",","")
		if has_value (onboardings_array, user) or user == 'Maintenancescript' then
		    -- output = output..user..' - exists\n\n'
		else
		    -- output = output..user..' - NOT exists\n\n'
		    --output = output..'<option value="'..user..'">'..user..'</option>\n\n'
		    output = output..'|'..user
		end
	end
	--output = output..'</select>\n'
	output = output..' }}\n'
	return output
end


-- pervorms ask request to smw
function p.ask(frame)

    if not mw.smw then
        return "mw.smw module not found"
    end

    if frame.args[1] == nil then
        return "no parameter found"
    end

    local queryResult = mw.smw.ask( frame.args )

    if queryResult == nil then
        return "(no values)"
    end

    if type( queryResult ) == "table" then
        local myResult = '\n\n'
        for num, row in pairs( queryResult ) do
            -- myResult = myResult .. '* This is result #' .. num .. '\n'
            for property, data in pairs( row ) do
                local dataOutput = data
                if type( data ) == 'table' then
                    dataOutput = mw.text.listToText( data, ', ', ' and ')
                end
                --myResult = myResult .. '** ' .. property .. ': ' .. dataOutput .. '\n'
                myResult = myResult .. dataOutput .. '\n\n'
            end
        end
        return myResult
    end

    return queryResult
end

--- Tests ----------------------------------------------------------------------

-- creates a breadcrumps over frame parents
function p.parentCrump(frame)
	if frame:getParent() == nil then
		-- end
		result = ""
	else
		-- go deeper
		result = " >> " .. p.parentCrump(frame:getParent())
	end
	return frame:getTitle() .. result	
end

--- Tools ----------------------------------------------------------------------

function parseFunction (frame, name, args)
	pf = function (frame, name, args)
		return frame:callParserFunction{ name = name, args = args }
	end
	callback = { pcall( pf, frame, name, args) }
	if callback[1] then
		return callback[2]
	else
		return "not applicable here"
	end
end

function toboolean(str)
    if str == "true" then
        return true
    else
    	return false
    end
end

function has_value (arr, val)
    for index, value in ipairs(arr) do
        if value == val then
            return true
        end
    end
    return false
end

return p