<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="de">
	<id>https://wikimirror.piraten.tools/wiki/index.php?action=history&amp;feed=atom&amp;title=Benutzer%3AWibogel%2FSource</id>
	<title>Benutzer:Wibogel/Source - Versionsgeschichte</title>
	<link rel="self" type="application/atom+xml" href="https://wikimirror.piraten.tools/wiki/index.php?action=history&amp;feed=atom&amp;title=Benutzer%3AWibogel%2FSource"/>
	<link rel="alternate" type="text/html" href="https://wikimirror.piraten.tools/wiki/index.php?title=Benutzer:Wibogel/Source&amp;action=history"/>
	<updated>2026-06-01T23:51:40Z</updated>
	<subtitle>Versionsgeschichte dieser Seite in Piratenwiki Mirror</subtitle>
	<generator>MediaWiki 1.35.14</generator>
	<entry>
		<id>https://wikimirror.piraten.tools/wiki/index.php?title=Benutzer:Wibogel/Source&amp;diff=55772821&amp;oldid=prev</id>
		<title>imported&gt;Thilo: /* Quelltext */</title>
		<link rel="alternate" type="text/html" href="https://wikimirror.piraten.tools/wiki/index.php?title=Benutzer:Wibogel/Source&amp;diff=55772821&amp;oldid=prev"/>
		<updated>2011-10-23T20:05:30Z</updated>

		<summary type="html">&lt;p&gt;&lt;span dir=&quot;auto&quot;&gt;&lt;span class=&quot;autocomment&quot;&gt;Quelltext&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Neue Seite&lt;/b&gt;&lt;/p&gt;&lt;div&gt;= Lizenz =&lt;br /&gt;
[[Datei:CC-BY-SA icon.svg]]&lt;br /&gt;
:Der Quelltext wurde wie alle Artikel dieses Wikis unter der [http://creativecommons.org/licenses/by-sa/3.0/de/deed.de CC-BY-SA 3.0]-Lizenz veröffentlicht.&lt;br /&gt;
&lt;br /&gt;
= Quelltext =&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/usr/bin/perl -w&lt;br /&gt;
&lt;br /&gt;
use MediaWiki::API;&lt;br /&gt;
use Tree::Simple;&lt;br /&gt;
use Digest::MD5 qw(md5_hex);&lt;br /&gt;
use utf8;&lt;br /&gt;
&lt;br /&gt;
#&lt;br /&gt;
#&lt;br /&gt;
# READ THE SITE STRUCTURE&lt;br /&gt;
#&lt;br /&gt;
#&lt;br /&gt;
my $mw = MediaWiki::API-&amp;gt;new();&lt;br /&gt;
$mw-&amp;gt;{config}-&amp;gt;{api_url} = 'http://wiki.piratenpartei.de/wiki/api.php';&lt;br /&gt;
&lt;br /&gt;
# log in&lt;br /&gt;
$mw-&amp;gt;login( { lgname =&amp;gt; 'Wibogel', lgpassword =&amp;gt; '*****' } ) || die &amp;quot;Wikibot wibogel: &amp;quot;.$mw-&amp;gt;{error}-&amp;gt;{code} . ': ' . $mw-&amp;gt;{error}-&amp;gt;{details};&lt;br /&gt;
&lt;br /&gt;
# get all pages with Prefix &amp;quot;Landesverband&amp;quot; in namespace 246 (LSA)&lt;br /&gt;
my $articles = $mw-&amp;gt;list ( {&lt;br /&gt;
	action =&amp;gt; 'query',&lt;br /&gt;
	list =&amp;gt; 'allpages',&lt;br /&gt;
	apprefix =&amp;gt; 'Landesverband',&lt;br /&gt;
	apnamespace =&amp;gt; '246',&lt;br /&gt;
	apfilterredir =&amp;gt; 'nonredirects',&lt;br /&gt;
	aplimit =&amp;gt; '2000'&lt;br /&gt;
&lt;br /&gt;
} ) || die &amp;quot;Wikibot wibogel: &amp;quot;.$mw-&amp;gt;{error}-&amp;gt;{code} . ': ' . $mw-&amp;gt;{error}-&amp;gt;{details};&lt;br /&gt;
&lt;br /&gt;
# to collect all data, we use a simple graph and assume tree structure caused by wiki name conventions&lt;br /&gt;
my $tree = Tree::Simple-&amp;gt;new(&amp;quot;/&amp;quot;, Tree::Simple-&amp;gt;ROOT);&lt;br /&gt;
&lt;br /&gt;
# hang in subtrees&lt;br /&gt;
foreach (@{$articles}) {&lt;br /&gt;
	addTree( $tree, $_-&amp;gt;{title} );&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# uncomment to get a html encoded preview&lt;br /&gt;
#use Tree::Simple::View::HTML;&lt;br /&gt;
#my $viewer = Tree::Simple::View::HTML-&amp;gt;new( $tree );&lt;br /&gt;
#print $viewer-&amp;gt;expandAll();&lt;br /&gt;
&lt;br /&gt;
# inform users about the bots acitvity&lt;br /&gt;
$wikiheader = qq~&amp;lt;noinclude&amp;gt;&lt;br /&gt;
{{Achtung|Diese Wikiseite wird durch den Wiki-Bot [[Benutzer:Wibogel|Wibogel]] automatisch gepflegt. Wende Dich zuerst an die Betreiber des Bots, bevor Du &amp;amp;amp;Auml;nderungen vornimmst, der Bot wird sonst Deine &amp;amp;amp;Auml;nderungen ungepr&amp;amp;amp;uuml;ft &amp;amp;amp;uuml;berschreiben.}}&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;~;&lt;br /&gt;
&lt;br /&gt;
# header of the whole frame&lt;br /&gt;
$wikiheader = $wikiheader.qq~{{LSA-Menu}}{{#ifeq: {{#titleparts:{{FULLPAGENAME}}|1|0}} | LSA:Landesverband | {{#ifeq: {{FULLPAGENAME}} | LSA:Landesverband | &amp;lt;!-- LSA-Menu wird auf der Startseite durch ein individuelles Men&amp;amp;amp;uuml; ersetzt --&amp;gt; | &amp;lt;div style=&amp;quot;padding:0px;margin:0px;float:right;width:320px;overflow:auto;&amp;quot;&amp;gt;{{Vorlage:Textbox-Orange|Navigation|2=\n~;#&amp;lt;span&amp;gt;&amp;lt;!-- span as workaround --&amp;gt;&amp;lt;/span&amp;gt;~;&lt;br /&gt;
&lt;br /&gt;
# get the menu itself&lt;br /&gt;
my $menu = printTree( $tree-&amp;gt;getChild(0), -1 , &amp;quot;LSA:Landesverband&amp;quot;, 1, 0 , &amp;quot;&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
# finish with footer, usage and licence information&lt;br /&gt;
my $wikifooter =&amp;quot;&amp;lt;p style=\&amp;quot;text-align:center;font-size:10pt;\&amp;quot;&amp;gt;[[Benutzer:Wibogel|Men&amp;amp;uuml; bearbeiten]]&amp;lt;/p&amp;gt;}}&amp;quot;;&lt;br /&gt;
$wikifooter = $wikifooter.qq~&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
{{#if: {{{1|}}}&lt;br /&gt;
|&amp;lt;div style=&amp;quot;margin-right:270px;&amp;quot;&amp;gt;{{{1}}}&amp;lt;/div&amp;gt;&lt;br /&gt;
}} | &amp;lt;!-- Menü wird nur im Bereich des Landesverbandes angezeigt --&amp;gt; }}&lt;br /&gt;
}}&lt;br /&gt;
&amp;lt;noinclude&amp;gt;&lt;br /&gt;
= Verwendung =&lt;br /&gt;
&amp;amp;lt;pre&amp;gt;&lt;br /&gt;
{{PST:Header|1=&lt;br /&gt;
Seiteninhalt&lt;br /&gt;
}}&lt;br /&gt;
&amp;amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Der Seiteninhalt muss nicht zwingend in die Header-Vorlage &amp;amp;amp;uuml;bernommen wird. Bei sich &amp;amp;amp;uuml;berlappenden Div-Boxen (beispielsweise mit dem Men&amp;amp;amp;uuml;) oder &amp;amp;amp;Uuml;berlappungen mit anderen Vorlagen aus dem Wiki, ist das allerdigns empfehlenswert.&lt;br /&gt;
&lt;br /&gt;
= Info =&lt;br /&gt;
* Filter f&amp;amp;amp;uuml;r den Internet Explorer (IE) werden zur Zeit nicht vom Wiki unterst&amp;amp;amp;uuml;tzt.&lt;br /&gt;
* R&amp;amp;amp;uuml;ckfragen bitte per http://www.twitter.com/0l1h7&lt;br /&gt;
&lt;br /&gt;
= Grundlage f&amp;amp;amp;uuml;r diese Arbeit =&lt;br /&gt;
* Theme Name: PiratenSachsenTheme&lt;br /&gt;
* Theme URI: http://www.piraten-sachsen.de/theme&lt;br /&gt;
* Descripxion: This theme is made for the pirate party saxony. The whole * Template, Design and it containing files are licencend under CC-BY-SA&lt;br /&gt;
* Author: Thomas&lt;br /&gt;
* Author URI: http://twitter.com/dasllama&lt;br /&gt;
* Version: 0.9&lt;br /&gt;
* Tags: orange, multiple sidebars, cms, widgets&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;br /&gt;
~;&lt;br /&gt;
&lt;br /&gt;
# connect all information for output&lt;br /&gt;
$content = $wikiheader.$menu.$wikifooter;&lt;br /&gt;
&lt;br /&gt;
#&lt;br /&gt;
#&lt;br /&gt;
# CHECK IF CHANGES EXIST&lt;br /&gt;
#&lt;br /&gt;
#&lt;br /&gt;
&lt;br /&gt;
my $lastmd5 = &amp;quot;&amp;quot;;&lt;br /&gt;
open( FILE, &amp;quot;+&amp;gt;/PATH/TO/lsamd5&amp;quot; ) || die &amp;quot;WikiBot wibogel: Couldn't read former md5sum.&amp;quot;;&lt;br /&gt;
read(FILE,  $lastmd5, 32);&lt;br /&gt;
my $newmd5 = md5_hex( $content );&lt;br /&gt;
&lt;br /&gt;
# uncomment for debugging&lt;br /&gt;
# print $content.&amp;quot;\n&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
if( $lastmd5 ne  $newmd5 ) # &amp;amp;amp;&amp;amp;amp; 0 == 1 ) # include for debugging&lt;br /&gt;
{&lt;br /&gt;
&lt;br /&gt;
	#&lt;br /&gt;
	#&lt;br /&gt;
	# APPLY CHANGES&lt;br /&gt;
	#&lt;br /&gt;
	#&lt;br /&gt;
&lt;br /&gt;
	# write information to the wiki&lt;br /&gt;
	my $pagename = &amp;quot;Vorlage:LSA-Header&amp;quot;;&lt;br /&gt;
	my $ref = $mw-&amp;gt;get_page( { title =&amp;gt; $pagename } );&lt;br /&gt;
&lt;br /&gt;
	unless ( $ref-&amp;gt;{missing} ) {&lt;br /&gt;
		my $timestamp = $ref-&amp;gt;{timestamp};&lt;br /&gt;
		$mw-&amp;gt;edit( {&lt;br /&gt;
			action =&amp;gt; 'edit',&lt;br /&gt;
			title =&amp;gt; $pagename,&lt;br /&gt;
			basetimestamp =&amp;gt; $timestamp, # to avoid edit conflicts&lt;br /&gt;
			text =&amp;gt; $content&lt;br /&gt;
		} )&lt;br /&gt;
		|| die &amp;quot;Wikibot wibogel: &amp;quot;.$mw-&amp;gt;{error}-&amp;gt;{code} . ': ' . $mw-&amp;gt;{error}-&amp;gt;{details};&lt;br /&gt;
	}&lt;br /&gt;
	print FILE $newmd5;&lt;br /&gt;
}&lt;br /&gt;
close( FILE );&lt;br /&gt;
&lt;br /&gt;
#&lt;br /&gt;
# addTree( Tree::Simple $tree, String $wikipagename)&lt;br /&gt;
#&lt;br /&gt;
sub addTree {&lt;br /&gt;
	my $tree  = shift;		# tree/subtree node&lt;br /&gt;
	my $wikipagename = shift;	# pagename of the node/subtree, which should be added&lt;br /&gt;
&lt;br /&gt;
	my $result = -1;&lt;br /&gt;
&lt;br /&gt;
	# take out the next node's value&lt;br /&gt;
	if($wikipagename =~ /\//g)&lt;br /&gt;
	{&lt;br /&gt;
		$result = pos($wikipagename);&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	my $nextNodeValue;&lt;br /&gt;
&lt;br /&gt;
	# check if its a leaf&lt;br /&gt;
	if( $result &amp;gt; 1 )&lt;br /&gt;
	{&lt;br /&gt;
		$nextNodeValue = substr( $wikipagename, 0, $result - 1 );&lt;br /&gt;
		$wikipagename = substr( $wikipagename, $result );&lt;br /&gt;
	}&lt;br /&gt;
	else&lt;br /&gt;
	{&lt;br /&gt;
		$nextNodeValue = $wikipagename;&lt;br /&gt;
		$wikipagename = &amp;quot;&amp;quot;;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	my $nextNode;&lt;br /&gt;
&lt;br /&gt;
	# for each child node add new subtree recursively&lt;br /&gt;
	# first check, if new node allready exists&lt;br /&gt;
	my @children = $tree-&amp;gt;getAllChildren();&lt;br /&gt;
	foreach (@children)&lt;br /&gt;
	{&lt;br /&gt;
		if( $_-&amp;gt;getNodeValue() eq $nextNodeValue )&lt;br /&gt;
		{&lt;br /&gt;
			$nextNode = $_;&lt;br /&gt;
			last;&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	# create new subtree, if the new node does not exist in the tree&lt;br /&gt;
	if( !defined( $nextNode ) )&lt;br /&gt;
	{&lt;br /&gt;
		$nextNode = Tree::Simple-&amp;gt;new( $nextNodeValue, $tree );&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	# add the new node to the tree&lt;br /&gt;
	if( $wikipagename ne &amp;quot;&amp;quot; )&lt;br /&gt;
	{&lt;br /&gt;
		addTree( $nextNode, $wikipagename );&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#&lt;br /&gt;
# printTree( Tree::Simple $tree, int $depth, String $link, int $siblingsc, int $siblingscc, String $depthline )&lt;br /&gt;
#&lt;br /&gt;
sub printTree {&lt;br /&gt;
	my $tree       = shift; # tree structure for recursive traverse&lt;br /&gt;
	my $depth      = shift; # depth of traverse&lt;br /&gt;
	my $link       = shift; # wikilink according to the node&lt;br /&gt;
	my $siblingsc  = shift; # number of siblings&lt;br /&gt;
	my $siblingscc = shift; # sibling id of the node&lt;br /&gt;
	my $depthline  = shift;	# visualisation of the tree structure&lt;br /&gt;
&lt;br /&gt;
	my $nodeValue         = $tree-&amp;gt;getNodeValue();&lt;br /&gt;
	my $menu              = &amp;quot;&amp;quot;;&lt;br /&gt;
	my $fork              = &amp;quot;&amp;amp;amp;#9500;&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
	my @children          = $tree-&amp;gt;getAllChildren();&lt;br /&gt;
	my $childrenc         = scalar @children;&lt;br /&gt;
	my $depthlineAddition = &amp;quot;&amp;amp;amp;#9474;&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
	if( $siblingscc + 1 == $siblingsc )&lt;br /&gt;
	{&lt;br /&gt;
		$fork = &amp;quot;&amp;amp;amp;#9492;&amp;quot;;&lt;br /&gt;
		$depthlineAddition = &amp;quot;&amp;amp;amp;nbsp;&amp;quot;;&lt;br /&gt;
	}&lt;br /&gt;
	else&lt;br /&gt;
	{&lt;br /&gt;
		if( $siblingscc == 0 &amp;amp;amp;&amp;amp;amp; $depth &amp;lt; 0 )&lt;br /&gt;
		{&lt;br /&gt;
			$fork = &amp;quot;&amp;amp;amp;#9484;&amp;quot;;&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	my $newtree = &amp;quot;&amp;amp;amp;#9516;&amp;quot;;&lt;br /&gt;
	# check if we are root&lt;br /&gt;
	if( $nodeValue eq &amp;quot;LSA:Landesverband&amp;quot; )&lt;br /&gt;
	{&lt;br /&gt;
		$nodeValue = &amp;quot;Startseite&amp;quot;;&lt;br /&gt;
		$depthline = &amp;quot;&amp;quot;;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	# if there are no children, make a simple menu entry&lt;br /&gt;
	# if there are children, print submenu frame and call prinTree recursively&lt;br /&gt;
	if( $childrenc == 0 )&lt;br /&gt;
	{&lt;br /&gt;
		$menu = &amp;quot;&amp;lt;div style=\&amp;quot;white-space:nowrap;\&amp;quot;&amp;gt;{{PST:MenuTree|$depthline$fork|&amp;amp;amp;#9642;}} [[$link|$nodeValue]]&amp;lt;/div&amp;gt;\n&amp;quot;;&lt;br /&gt;
	}&lt;br /&gt;
	else&lt;br /&gt;
	{&lt;br /&gt;
&lt;br /&gt;
		$menu = &amp;quot;{{#ifeq: {{#titleparts:{{FULLPAGENAME}}|&amp;quot;.($depth+2).&amp;quot;|0}} | $link | &amp;lt;div style=\&amp;quot;white-space:nowrap;\&amp;quot;&amp;gt;{{PST:MenuTree|$depthline$fork$newtree|&amp;amp;amp;#9662;}} [[$link|$nodeValue]]&amp;lt;/div&amp;gt;\n&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
		my $childrencc = 0;&lt;br /&gt;
		foreach (@children)&lt;br /&gt;
		{&lt;br /&gt;
			$menu = $menu.printTree($_, $depth + 1, $link.&amp;quot;/&amp;quot;.$_-&amp;gt;getNodeValue(), $childrenc, $childrencc, $depthline.$depthlineAddition );&lt;br /&gt;
			$childrencc++;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		$menu = $menu.&amp;quot;| &amp;lt;div style=\&amp;quot;white-space:nowrap;\&amp;quot;&amp;gt;{{PST:MenuTree|$depthline$fork|&amp;amp;amp;#9656;}}  [[$link|$nodeValue]]&amp;lt;/div&amp;gt;}}\n&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
	}&lt;br /&gt;
	return($menu);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
$mw-&amp;gt;logout();&lt;br /&gt;
$tree-&amp;gt;DESTROY;&lt;br /&gt;
&lt;br /&gt;
exit;&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>imported&gt;Thilo</name></author>
	</entry>
</feed>