Benutzer:Mc/Semantic/Portal

Aus Piratenwiki
Wechseln zu: Navigation, Suche

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]]
[[Kategorie:Verwendet DPL]]