<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en-GB">
	<id>https://stockhub.co/index.php?action=history&amp;feed=atom&amp;title=Module%3ASandbox%2FDanski454%2FSPI_report</id>
	<title>Module:Sandbox/Danski454/SPI report - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://stockhub.co/index.php?action=history&amp;feed=atom&amp;title=Module%3ASandbox%2FDanski454%2FSPI_report"/>
	<link rel="alternate" type="text/html" href="https://stockhub.co/index.php?title=Module:Sandbox/Danski454/SPI_report&amp;action=history"/>
	<updated>2026-06-19T07:10:43Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.43.5</generator>
	<entry>
		<id>https://stockhub.co/index.php?title=Module:Sandbox/Danski454/SPI_report&amp;diff=145308&amp;oldid=prev</id>
		<title>imported&gt;Legoktm: Replace Module:No globals with require( &quot;strict&quot; )</title>
		<link rel="alternate" type="text/html" href="https://stockhub.co/index.php?title=Module:Sandbox/Danski454/SPI_report&amp;diff=145308&amp;oldid=prev"/>
		<updated>2022-10-23T21:05:50Z</updated>

		<summary type="html">&lt;p&gt;Replace &lt;a href=&quot;/research/Module:No_globals&quot; title=&quot;Module:No globals&quot;&gt;Module:No globals&lt;/a&gt; with require( &amp;quot;strict&amp;quot; )&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;require(&amp;#039;strict&amp;#039;)&lt;br /&gt;
local yesno = require(&amp;#039;Module:Yesno&amp;#039;)&lt;br /&gt;
local getArgs = require(&amp;#039;Module:Arguments&amp;#039;).getArgs&lt;br /&gt;
local TableTools = require(&amp;#039;Module:TableTools&amp;#039;)&lt;br /&gt;
local p = {}&lt;br /&gt;
&lt;br /&gt;
local newPageHeader = &amp;#039;&amp;lt;noinclude&amp;gt;__TOC__&amp;lt;/noinclude&amp;gt;\n{{SPIarchive notice|__SUBPAGENAME__}}\n{{SPIpriorcases}}\n&amp;#039;&lt;br /&gt;
&lt;br /&gt;
function p.main(frame)&lt;br /&gt;
	local args = getArgs(frame)&lt;br /&gt;
	return p._main(args)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p._main(args)&lt;br /&gt;
	local outText = &amp;#039;&amp;#039;&lt;br /&gt;
	local master = mw.title.getCurrentTitle().subpageText&lt;br /&gt;
	local socks = {}&lt;br /&gt;
	local ips = {}&lt;br /&gt;
	&lt;br /&gt;
	--Wikipedia:Sockpuppet investigations/SPI/Blank report template header&lt;br /&gt;
	if not mw.title.getCurrentTitle().exists then&lt;br /&gt;
		outText = string.gsub(newPageHeader, &amp;#039;__SUBPAGENAME__&amp;#039;, master)&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	local status = &amp;#039;&amp;#039;&lt;br /&gt;
	if args.status then&lt;br /&gt;
		status = args.status&lt;br /&gt;
	elseif args.admincomment then&lt;br /&gt;
		status = &amp;#039;close&amp;#039;&lt;br /&gt;
	elseif yesno(args.checkuser) then&lt;br /&gt;
		status = &amp;#039;CUrequest&amp;#039;&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	outText = outText .. &amp;#039;===&amp;#039; .. mw.language.getContentLanguage():formatDate(&amp;#039;d F Y&amp;#039;) .. &lt;br /&gt;
		&amp;#039;===\n{{SPI case status|&amp;#039; .. status .. &amp;#039;}}\n&amp;#039;&lt;br /&gt;
	&lt;br /&gt;
	--SPI report&lt;br /&gt;
	outText = outText .. &amp;#039;====Suspected sockpuppets====\n&amp;#039;&lt;br /&gt;
	if args.socksraw then&lt;br /&gt;
		outText = outText .. args.socksraw .. &amp;#039;\n&amp;#039;&lt;br /&gt;
		-- Twinkle uses this to pass in reports (and loads are filed this way),&lt;br /&gt;
		-- so parse the reports for use by the tools section&lt;br /&gt;
		local socksraw = mw.ustring.gsub(args.socksraw, &amp;#039;&amp;lt;!%-%-.-%-%-&amp;gt;&amp;#039;, &amp;#039;&amp;#039;) --rm comments&lt;br /&gt;
		local sockMatches = mw.ustring.gmatch(socksraw, &amp;#039;{{%s*[Cc]heckuser%s*|%s*1%s*=%s*(.-)%s*}}&amp;#039;)&lt;br /&gt;
		local ipMatches = mw.ustring.gmatch(socksraw, &amp;#039;{{%s*[Cc]heckip%s*|%s*1%s*=%s*(.-)%s*}}&amp;#039;)&lt;br /&gt;
		for i in sockMatches do&lt;br /&gt;
			socks[#socks + 1] = i&lt;br /&gt;
		end&lt;br /&gt;
		for i in ipMatches do&lt;br /&gt;
			ips[#ips + 1] = i&lt;br /&gt;
		end&lt;br /&gt;
	else&lt;br /&gt;
		-- loop over ip# and sock# args (copied from [[Module:Old XfD multi]])&lt;br /&gt;
		for k, v in pairs(args) do&lt;br /&gt;
			if type(k) == &amp;#039;string&amp;#039; then&lt;br /&gt;
				local prefix, num = k:match(&amp;#039;^(.-)([1-9][0-9]*)$&amp;#039;)&lt;br /&gt;
				if prefix and num then&lt;br /&gt;
					num = tonumber(num)&lt;br /&gt;
					if prefix == &amp;#039;sock&amp;#039; then&lt;br /&gt;
						socks[num] =  v&lt;br /&gt;
					elseif prefix == &amp;#039;ip&amp;#039; then&lt;br /&gt;
						ips[num] =  v&lt;br /&gt;
					end&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		socks = TableTools.compressSparseArray(socks)&lt;br /&gt;
		ips = TableTools.compressSparseArray(ips)&lt;br /&gt;
		for i=1,#socks do&lt;br /&gt;
			outText = outText .. &amp;#039;* {{checkuser|1=&amp;#039; .. socks[i] .. &amp;#039;}}\n&amp;#039;&lt;br /&gt;
		end&lt;br /&gt;
		for i=1,#ips do&lt;br /&gt;
			outText = outText .. &amp;#039;* {{checkip|1=&amp;#039; .. ips[i] .. &amp;#039;}}\n&amp;#039;&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	outText = outText .. &amp;#039;&amp;lt;!-- You may duplicate the templates above ({{checkuser}} and {{checkIP}}) to list more accounts--&amp;gt;\n&amp;#039;&lt;br /&gt;
	&lt;br /&gt;
	--Tools&lt;br /&gt;
	outText = outText .. &amp;#039;*\&amp;#039;\&amp;#039;\&amp;#039;Tools\&amp;#039;\&amp;#039;\&amp;#039;: &amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;[https://tools.wmflabs.org/sigma/editorinteract.py?users=&amp;#039; ..&lt;br /&gt;
		mw.uri.encode(master)&lt;br /&gt;
	for i=1,#socks do&lt;br /&gt;
		outText = outText .. &amp;#039;&amp;amp;users=&amp;#039; .. mw.uri.encode(socks[i])&lt;br /&gt;
	end&lt;br /&gt;
	for i=1,#ips do&lt;br /&gt;
		outText = outText .. &amp;#039;&amp;amp;users=&amp;#039; .. mw.uri.encode(ips[i])&lt;br /&gt;
	end&lt;br /&gt;
	outText = outText .. &amp;#039; Editor interaction utility] • [https://tools.wmflabs.org/interaction-timeline?wiki=enwiki&amp;amp;user=&amp;#039; ..&lt;br /&gt;
		mw.uri.encode(master)&lt;br /&gt;
	if socks[1] then&lt;br /&gt;
		outText = outText .. &amp;#039;&amp;amp;user=&amp;#039; .. mw.uri.encode(socks[1])&lt;br /&gt;
	end&lt;br /&gt;
	outText = outText .. &amp;#039; Interaction Timeline] • [https://tools.wmflabs.org/betacommand-dev/UserCompare/&amp;#039; ..&lt;br /&gt;
		mw.uri.encode(master) .. &amp;#039;.html User compare report]&amp;lt;/span&amp;gt; &amp;lt;small&amp;gt;\&amp;#039;\&amp;#039;Auto-generated every hour.\&amp;#039;\&amp;#039;&amp;lt;/small&amp;gt;\n\n&amp;#039;&lt;br /&gt;
	&lt;br /&gt;
	--evidence&lt;br /&gt;
	if args.evidence then&lt;br /&gt;
		outText = outText .. args.evidence&lt;br /&gt;
	else&lt;br /&gt;
		outText = outText .. &amp;quot;&amp;#039;&amp;#039;No evidence submitted&amp;#039;&amp;#039;&amp;quot;&lt;br /&gt;
	end&lt;br /&gt;
	outText = outText .. &amp;#039; ~~~~\n\n&amp;#039; ..&lt;br /&gt;
		&amp;#039;====&amp;lt;big&amp;gt;Comments by other users&amp;lt;/big&amp;gt;====\n&amp;#039; ..&lt;br /&gt;
		&amp;#039;&amp;lt;small&amp;gt;\&amp;#039;\&amp;#039;Accused parties may also comment/discuss in this section below. See [[Wikipedia:Sockpuppet investigations/SPI/Guidance#Defending yourself against claims|Defending yourself against claims]].\&amp;#039;\&amp;#039;&amp;lt;/small&amp;gt;&amp;#039; ..&lt;br /&gt;
		&amp;#039;\n\n====&amp;lt;big&amp;gt;Clerk, CheckUser, and/or patrolling admin comments&amp;lt;/big&amp;gt;====\n&amp;#039;&lt;br /&gt;
	&lt;br /&gt;
	if args.admincomment then&lt;br /&gt;
		outText = outText .. args.admincomment&lt;br /&gt;
	end&lt;br /&gt;
	outText = outText .. &amp;#039;\n\n----&amp;lt;!-- All comments go ABOVE this line, please. --&amp;gt;&amp;#039;&lt;br /&gt;
	&lt;br /&gt;
	return outText&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>imported&gt;Legoktm</name></author>
	</entry>
</feed>