Dies ist ein ReadOnly-Mirror von wiki.piratenpartei.de!
Die Daten werden täglich aktualisiert.

Änderungen

Zur Navigation springen Zur Suche springen
K
zu Kategorie Verwendet DPL hinzugefügt
== Doku zu dem Antragsbot ==

Der Sourcen unten sollte selbsterklärend sein.

config.php von wikimate.php

define('WIKI_USERNAME','Bot'); // bot name
define('WIKI_PASSWORD','BotPassword'); // bot password
define('WIKI_API','http://wiki.piratenpartei.de/wiki/api.php'); // api url
define('WIKIMATE_DEBUG', true); // turn debug output on/off


sowie die bei https://github.com/hamstar/Wikimate/blob/master/README.md
ervähnten curlwrapper in das Verzeichnis von wikimate.php legen.

Den Expect-Bug in wikimate.php http://chrismckee.co.uk/curl-http-417-expectation-failed/ beheben.

$antrag = "".$antragstexte[$seite]->getText()."";

holt sich den Antragstext und

$antragstexte[$seite]->setText($antrag);

schreibt den dann nach der Bearbeitung wieder zurück.

== Simple LPT2011Bot ==

Zählt die Stimmen auf der Antragsfabrik und schreibt sie vor das erste Vorkommen von "}}" mit |Ja =, |Nein = und |Enthaltung =

<pre>
<?php
/*
Benötigt wikimate php-curl shuber-curl.php
Im Prinzip war der Bot schon fast fertig, dann kam jemand auf den Gedanken
wegen seinen Edits den Bot vom editieren abzuhalten zu sperren.
Im Cron dann mit php LPT2011Bot.php
*/

include 'globals.php'; //globals von wikimate https://github.com/hamstar/Wikimate/blob/master/README.md

$wiki = new Wikimate; //neue Klasse von Wikimate
/*
Wenn der Bot fertig ist, dann lässt er auf $lastrun nur noch die Uhrzeit oder sowas
*/
//$lastrun = $wiki->getPage('Benutzer:LPT2011Bot/Lastrun'); // create a new page object

//if ( $lastrun->exists() ) die();

//$lastrunCode = $lastrun->getText(); //Sicherung
$date = date(DATE_RFC822); //Zeit
$text = "\n".$date."\n"; //Zeit
print $text; //für das Cronlog
//$lastrun->setText("$text"); //Löscht lastrun und setzt das neue Datum
//$section = 0;
//$summary = "$date";
//$minor = 1;
//$lastrun->setSection( $text, $section, $summary, $minor ); // Zurückschreiben

/*
Abfragen der Links von der Antragsfabrik, die bearbeitet wird
*/

$antragsfabrik = array(
'prop' => 'links',
'titles' => 'BY:Landesparteitag_2011.1/Antragsfabrik'
);

$link_result = $wiki->query($antragsfabrik);

/*
Nachdem alle Links der Antragsfabrik da sind gehen wir sie durch
*/
foreach ($link_result[query][pages] as $antrags_pageid) {
$antragsfabrik_links = $antrags_pageid[links];
}

/*
Für jeden Antrag machen wir eine Pageobjekt
*/

foreach ($antragsfabrik_links as $antragsfabrik_linktitle) {
$antragstexte["$antragsfabrik_linktitle[title]"] = $wiki->getPage("$antragsfabrik_linktitle[title]");
}

/*
Auf gehts, gehen wir die Anträge mal durch und versuchen Rauszufinden
wer wie abgestimmt hat
*/

foreach ($antragstexte as $seite => $text) {
// $lastrun = $wiki->getPage('Benutzer:LPT2011Bot/Lastrun'); //Debug auf lastrun
/*
Mag ja sein, dass auf der Antragsfabrik auch andere Links sind
Ich mag nur die Unterseiten mit dem String Antragsfabrik
*/
$posant = strpos($seite, 'Antragsfabrik');
if ($posant !== false) {
/*
Nur die Unterseiten von /Antragsfabrik sollten hier sein
*/
$ja = 0; // Paranoia ja auf 0
$nein = 0; // Paranoia nein auf 0
$enthaltung = 0; // Paranoia enthaltung auf 0
/*
Diese Regex, soll ein Stimmeintrag in FÜR/GEGEN/enthalten erwischen
aber die ... und ? natürlich nicht.
*/
$regex = '/# [0-9|a-z|A-Z|Ä|ä|Ü|ü|Ö|ö|\[|:|\||\]|\s|\w]+/';

/*
Durch Edits können die Sections schon irgendwo anders sein, als ich dachte
Macht nix, wir gehen alle durch und zählen bei den Schlüsselwörtern.
*/
foreach ($antragstexte[$seite]->getAllSections(false, WikiPage::SECTIONLIST_BY_NAME) as $key=>$value){
/*
Jastimmen
*/
$posfuer = strpos($key, 'FÜR');
if ($posfuer !== false){
if(preg_match_all($regex,$value,$matches))
{
// print_r($matches); // Debugsetting
foreach($matches[0] as $val){
$ja++;
}

}
$jastimmen = "\n|Ja = ".$ja."";
}
/*
Neinstimmen
*/
$posgegen = strpos($key, 'GEGEN');
if ($posgegen !== false){

if(preg_match_all($regex,$value,$matches))
{
// print_r($matches); // Debugsetting
foreach($matches[0] as $val){
$nein++;
}

}
$neinstimmen = "\n|Nein = ".$nein."";
}
/*
Enthaltungen
*/
$posent = strpos($key, 'enthalten');
if ($posent !== false){
if(preg_match_all($regex,$value,$matches)){
// print_r($matches); //Debugsetting
foreach($matches[0] as $val){
$enthaltung++;
}

}
$enthaltungstimmen = "\n|Enthaltung = ".$enthaltung."";
}

}

/*
Beim ersten Mal schreibt der Bot alle Stimmen
*/
$stimmen = $jastimmen."\n".$neinstimmen."\n".$enthaltungstimmen;
$antrag = "".$antragstexte[$seite]->getText()."";
$patterns = '/}}/';
$replace = "<!-- LPT2011Bot Count Begin //-->\n".$stimmen."\n<!-- LPT2011Bot Count End //-->\n}}";
/*
War ich schon da?
*/
/* den gesamten Antragstext zurückzuschreiben
ist overkill in welcher Section die }} denn
*/
$warschonda = strpos($antrag, '<!-- LPT2011Bot Count Begin //-->');
$beginpatterns = '/LPT2011Bot Count Begin/';
$endpatterns = '/LPT2011Bot Count End/';


$warschonda = strpos($antrag, '<!-- LPT2011Bot Count Begin //-->');
if ($warschonda === false){
/* War also noch nicht da, also die gesamte Auswertung in den Antragstext*/
$antrag = preg_replace($patterns, $replace, $antrag,1);
} else {
/* War schon da, also ersetzen wir nur die Stimmen jeweils */
$patterns = '/\|Ja = \d+/';
$replace = $jastimmen;
$antrag = preg_replace($patterns, $replace, $antrag,1);
$patterns = '/\|Nein = \d+/';
$replace = $neinstimmen;
$antrag = preg_replace($patterns, $replace, $antrag,1);
$patterns = '/\|Enthaltung = \d+/';
$replace = $enthaltungstimmen;
$antrag = preg_replace($patterns, $replace, $antrag,1);
}

/*
Noch nicht wirklich sinnvoll.
TODO Section edit.
*/
/*
foreach ($antragstexte[$seite]->getAllSections(true) as $index=>$value) {
//Wo steht was.

if(preg_match($beginpatterns,$value,$matches))
{
$beginsectiontext = $value;
$beginsection = $index;

}
if(preg_match($endpatterns,$value,$matches))
{
$endsectiontext = $value;
$endsection = $index;

}



if(preg_match($patterns,$value,$matches)) {
$patternsection = $index;

}





}

*/
print "SEITE:\n".seite."\n\n";
/*
patternsection von obiger foreach
*/
/*
$antragsectiontext = $antragstexte[$seite]->getSection($patternsection,true);
*/
/*
Hier wird es ernst. Wenn die Variable $antrag
verlorengeht, ist die Seite hin. Paar Haken und Ösen
mit Wikimate beim zurückschreiben. Unter anderem ERR 417
siehe http://chrismckee.co.uk/curl-http-417-expectation-failed/
Würgaround wikimate.php geändert auf:
$c->headers['Expect'] = "";
statt $c->headers['Content-Type'] = "application/x-www-form-urlencoded";
*/

$antragstexte[$seite]->setText($antrag);

/*
Tut nicht wirklich, weiss jetzt nicht warum
*/
/*
$antragstexte[$seite]->setSection($antragsectiontext, $patternsection,true,"Hätte gerne eine Summary reingeschrieben");
*/


}else{
print "\n\n\n".$seite." interessiert mich nicht!!!\n\n\n";
}
}

?>
</pre>

== DPL benötigt ==

Die [[mw:Extension:DynamicPageList (third-party)|Extension:DynamicPageList]] ist ein universelles reporting im [[Piratenwiki]] welches Inhalte von Seiten einer Kategorie darstellt. Ist bereits [[Piratenwiki:Host|installiert]] und kumuliert schon die [[Landesverband Baden-Württemberg/Stammtische#Stammtische nach Datum|BW Stammtische]] und auch schon über alpha (1.8.8). Testweise der [[Kontostand]] in [[KontostandDPL]].

Übernimmt bisher die Funkton von weiten [[Piratenwiki:WikiDB#DynamicPageList|Wikidatenbank]]-Diensten.

=== Anwendungen ===
==== Antragsfabrik Bayern ====
[[BY:Landesparteitag_2011.1/Antragsfabrik]] bindet bestimmte Inhalte von SÄA

* Erstellen von Anträgen mittels ''inputbox-create'' im obersten Teil und und den relevanten Vorlagen:
** [[BY:Landesparteitag_2011.1/Antragsfabrik/Vorlage SÄA]]
** [[BY:Landesparteitag_2011.1/Antragsfabrik/Vorlage Programmantrag]]
** [[BY:Landesparteitag_2011.1/Antragsfabrik/Vorlage Sonstiger Antrag]]

Strukturen dieser Seiten sind äquivalent, z.B. in SÄA:Einbindung von [[Vorlage:Satzungsänderungsantrag]] ist hauptsächlich (aber nicht nur!) damit das ganze nach was aussieht. Wichtiger ist die [[Vorlage:Satzungsänderungsantrag Bayern]] die alle für die Listendarstellung wichtigen Daten enthält.

Die Listenform kommt dann mit '''DPL''' zustande: Dabei wird erst nach einer Kategorie vorselektiert (die Kategorie wird in [[Vorlage:Satzungsänderungsantrag Bayern]] gesetzt), dann mittels eines regulären Ausdrucks (<code>includenotmatch/includematch</code>) eingereichte von nicht-eingereichten Anträgen unterschieden. Die Parameter zur [[Vorlage:Satzungsänderungsantrag Bayern]] werden dann an die [[Vorlage:Satzungsänderungsantrag Bayern Listview]] weitergegeben, und die dann ausgegeben. (Falls Teile des Templates möglicherweise schwer lesbar sind: Sorry, einfach als Magie begreifen :))

Das ist alles was für eine erste Version der Antragsfabrik nötig ist.

Für das was aktuell in Bayern läuft braucht man dann noch einen Hausmeister ein wenig Mathematik beherrscht, also Stimmen zählt und eine inverse, gewichtete Entropie (aka. mehr Magie) bestimmt - aber das kann mein Haustier auch für euch machen wenn ihr wollt.[[Benutzer:LPT2011Bot]]

=== Weblinks ===
* [http://semeb.com/dpldemo/DPL:Manual DPL:Manual]

== LPT2011Bot Autolist ==

[[Benutzer_Diskussion:LPT2011Bot/Autolist]]


== Beispiel ==

<div style="background-color:#e3e8ff; padding:10px; margin: 5px; border: 1px solid #9b9eae;">
== Antragsfabrik ==
Dies ist eine Beispielantragsfabrik für den Code auf http://antragsbot.sf.net
Die WIKI_ANTRAGSFABRIK ist hier Benutzer_Diskussion:LPT2011Bot
Die Beispielvorlage ist hier:
[[Benutzer Diskussion:LPT2011Bot/Vorlage]]

<center><big>'''Bitte <code><nowiki>[HIER ANTRAGSNAME]</nowiki></code> (etc...) durch deinen Antragstitel ersetzen!'''</big></center>

{| class="wikitable"
| '''Antrag:''' || <inputbox>
type = create
default = Benutzer_Diskussion:LPT2011Bot/[HIER ANTRAGSNAME]
preload = Benutzer_Diskussion:LPT2011Bot/Vorlage
buttonlabel = Anlegen
break = no
width = 70
</inputbox>
|-
|}
<br>
</div>
<div style="float:left; width:33%; margin:0; padding:0;">
===Anträge im Entwurfsstadium / zur Diskussion===
<br>
<div style="background-color: #000070; text-align: center; border: 2px solid #000070; color: #FFFFFF; padding: 5px; margin: 3px; font-weight: bold;">Entwürfe</div>
{{#dpl:
|category = ANTRAG
|ordermethod = sortkey
|nottitlematch = %Vorlage%
|mode = userformat
|include = {Antragsfabrikat} Listview
|includenotmatch = /\{{!}}\s*eingereicht\s*=\s*[^\s{{!}}\}]/i
|noresultsheader= <div style="text-align:center; padding: 1em;">''Aktuell liegen keine Anträge vor''</div>
}}

<br>
<br>

===Eingereichte Anträge===

<br>
<div style="background-color: #000070; text-align: center; border: 2px solid #000070; color: #FFFFFF; padding: 5px; margin: 3px; font-weight: bold;">ANTRAG</div>
{{#dpl:
|category = ANTRAG
|ordermethod = sortkey
|include = {Antragsfabrikat} Listview
|includematch = /\{{!}}\s*eingereicht\s*=\s*[^\s{{!}}\}]/i
|mode = userformat
|noresultsheader= <div style="text-align:center; padding: 1em;">''Aktuell liegen keine Anträge vor''</div>
}}
</div>
[[Kategorie:Verwendet DPL]]
Anonymer Benutzer

Navigationsmenü