Benutzer:Mc/Semantic/Portal
Aus Piratenwiki
Version vom 3. Januar 2013, 01:00 Uhr von BundesMurphy (Diskussion | Beiträge)
Antragsfabrik für dummies:
<nowiki>
1. Vorlage erstellen:
{{
| AntragsTitel = Titel des Antrags
| Organ = Organ, an welches der Antrag gerichtet ist.
| AntragsDatum =
| AntragsText =
| AntragsSteller =
}}
2. Formular erstellen
<noinclude>
{{#forminput:form=BeschlussVorstand}}
</noinclude><includeonly>
{{{info|page name=Bundesvorstand/Umlaufbeschluss/<unique number;start=001>}}}
## !!!!!-----------------------!!!---- das wird der name der zu erstellenden Seite
{{{for template|AntragBeschlussVorstand||label=Antrag an den Vorstand}}}
## !!!----------------!!!-- das ist die Vorlage aus Schritt 1
{{#vardefine:date|{{CURRENTYEAR}}-{{CURRENTMONTH}}-{{CURRENTDAY2}} }}
{|
| align=right | Ich, der '''Antragsteller:'''
| {{{field|AntragsSteller|size=80}}}
|-
| align=right | stelle hiermit den Antrag an das '''Organ:'''
| {{{field|Organ|values=Bundesvorstand|size=80}}}
|-
| align=right | '''(kurzer!) Titel:'''
| {{{field|AntragsTitel|size=100}}}
|-
| align=right | Die Verantwortung für die Umsetzung soll der Vorstand delegieren an
| {{{field|Umsetzung|size=80}}}
|-
| align=right | (gerne langer) '''Antragstext:'''
| {{{field|AntragsText|input type=textarea|rows=15|cols=100|mandatory}}}
|-
| align=right | '''Begründung:'''
| {{{field|Begründung|input type=textarea|rows=5|cols=100|mandatory}}}
|-
| align=right | Link zu Diskussion/Meinungsbild/Abstimmung:
| {{{field|LiquidURL|size=100}}}
|}
{{{field|AntragsDatum|hidden|default={{#var:date}} }}}
{{{end template}}}
{{{standard input|summary}}}
{{{standard input|watch}}}
{{{standard input|save}}} {{{standard input|preview}}} {{{standard input|changes}}} {{{standard input|cancel}}}
</includeonly><noinclude>
Wichtig: Die meisten Optionen MÜSSEN innerhalb des includeonly stehen.
Wichtig: Das Formular kann immer nur einen "Antrag" auf eine Seite schreiben. Wenn man mehrfach auf die selbe Seite schreibt, bleibt immer nur das letzte haengen!!
Die Optionen fuer die {{{field}}} kann man einfach hintendran haengen, das erste Feld nach field ist der Name der Variable aus der Vorlage (aus Schritt 1).
Alles folgende sind echte Optionen wie
- size (Laenge des Eingabefeldes)
- input type=textarea (TextBox statt TextZeile)
- rows, cols (definiert die Dimension der Box
- values=option1, option2, option3 (Baut eine Select-Box mit den angegebenen werten)
- hidden (Es wird kein Eingabefeld angezeigt, die Option wird "silent" weitergegeben. Tipp: Soll das Feld leer sein, ein reinpacken, da ein nicht zugewiesenes Feld auf der Ausgabeseite nicht erscheint)
- mandatory (Erzwungenes Feld)
3. Link auf das Formular erzeugen:
{{#formlink:form=BeschlussVorstand|link text=Neuen Beschluss beantragen|query string=AntragBeschlussVorstand[Organ]=Bundesvorstand}}
## !!!!------!!-- Formularname aus Schritt 2 !!!-----!!!!!----- Vorausgefuellte Felder
Die vorausgefuellten Felder sind wiederum der Name der Vorlage (Schritt1) und des Feldes
4. DPL zum Anzeigen erzeugen
zum Beispiel so:
{| {{prettytable}}
|-
!Datum Antrag
!Datum Beschluss
!Nr
!AntragsTitel
!Ergebnis
!Seite
{{#dpl:
| category=Beschluss Bundesvorstand
| mode=userformat
| listseparators=,\n¦-\n,,
| multisecseparators=\n¦-\n¦
| secseparators=\n¦,,\n¦,
| include={AntragBeschlussVorstand}:AntragsDatum:BeschlussDatum:BeschlussNummer:AntragsTitel:Ergebnis:[[%PAGE%]]
| uses=Vorlage:AntragBeschlussVorstand
| noresultsheader=\n¦-\n¦colspan=5¦Noch kein Antrag gestellt
}}
|}
Das DPL erzeugt eine Tabellen-Zeile pro Treffer, daher kann das so unkompliziert in die Vorgegebene Tabelle eingebunden werden.
uses und include verweisen auf die Vorlage, die durchsucht werden soll, sowie uses verweist auf die Felder, die angezeigt werden sollen.
5. Mail Notifikationen
Ich habe dafuer ein Skript geschrieben, das im Crontab laeuft, das etwa so aussieht:
#! /usr/bin/ruby1.8
require "net/smtp"
require '/home/user/lib/rbmediawiki'
require '/home/user/.conf/credentials.rb'
## Die verwendete library ist hier auffindbar https://github.com/mc/NumberFive
def mail_send(to, pagetitle, content)
msg = <<END_OF_MESSAGE
From: bot <absende@dres.se>
To: <#{to}>
Subject: Aenderung Wikiseite: #{pagetitle}
Folgende Seite wurde geaendert: #{pagetitle}
Neuer Inhalt:
#{content}
Viele Gruesse,
--
signatur
END_OF_MESSAGE
Net::SMTP.start('localhost') do |smtp|
smtp.send_message msg, "Absender@dres.se", to
end
end
def printArticle(page, wiki)
notifications = [
{
'regex' => Regexp.new('^Bundesvorstand/Umlaufbeschluss/'),
'type' => 'new',
'email' => 'em@ail1'
}, {
'regex' => Regexp.new('^Http'),
'email' => 'em@ail2'
}, {
'regex' => Regexp.new('^HE:Darmstadt/Kreisverband/Beschlussantrag_Umlaufbeschluss/'),
'type' => 'new',
'email' => 'em@ail3'
}
]
title = page['title']
notifications.each { |notification|
if title =~ notification['regex']
if (notification['type'] == nil || (notification['type'] == page['type']))
mail_send("#{notification['email']}", title, Page.new(title, wiki).get)
end
end
}
end
class String
require 'iconv'
def to_iso
Iconv.conv("ISO-8859-1", 'utf-8', self)
end
end
wiki = Api.new(nil, nil, WIKI_USER, WIKI_SERVER, WIKI_APIURL)
ts_new = Time.now
ts = nil
File.open('/var/tmp/rc-timestamp', 'r') {|f| ts = Time._load(f.read) }
result = wiki.query_list_recentchanges(
:rcstart => ts.to_i,
:rcprop => "user|comment|loginfo|title|ids|sizes|redirect",
:rclimit => 500,
:rcdir => 'newer'
)
rc_array = result["query"]["recentchanges"]["rc"]
if !rc_array.nil?
if (rc_array.is_a?(Array))
rc_array.each do |item|
printArticle(item, wiki)
end
else
printArticle(rc_array, wiki)
end
end
File.open('/var/tmp/rc-timestamp', 'w') {|f| f.write(ts_new._dump) }
[[Kategorie:Verwendet DPL]]