scripts/wiki-lenny/local/parser/Doodle.py
Antoine Durand-Gasselin 1d6dfd9ccb [/usr/script/wiki-lenny] Possibilit de mettre des sondages "doodle" sur le wiki
darcs-hash:20081127185443-bd074-1400dfead3b4c3b60e7c56676d9953e069a7e439.gz
2008-11-27 19:54:43 +01:00

108 lines
4 KiB
Python

# -*- coding: utf-8 -*-
"""
..
.... ............ ........
. ....... . .... ..
. ... .. .. .. .. ..... . ..
.. .. ....@@@. .. . ........ .
.. . .. ..@.@@..@@. .@@@@@@@ @@@@@@. ....
.@@@@. .@@@@. .@@@@..@@.@@..@@@..@@@..@@@@.... ....
@@@@... .@@@.. @@ @@ .@..@@..@@...@@@. .@@@@@. ..
.@@@.. . @@@. @@.@@..@@.@@..@@@ @@ .@@@@@@.. .....
...@@@.... @@@ .@@.......... ........ ..... ..
. ..@@@@.. . .@@@@. .. ....... . .............
. .. .... .. .. . ... ....
. . .... ............. .. ...
.. .. ... ........ ... ...
................................
MoinMoin - Doodle poll parser
PURPOSE:
un joli sondage doodle sur le wiki
AUTHOR:
Antoine Durand-Gasselin <adg@crans.org>
CALLING SEQUENCE:
{{{
#!Doodle pollname; choix1; choix2; choix3
participant1; choix1=1; choix2=0; choix3=1
participant2; choix1=0; choix2=1; choix3=1
}}}
"""
import os, string, re, StringIO, base64
from MoinMoin import config, wikiutil
from MoinMoin.parser.text_moin_wiki import Parser as WikiParser
Dependencies = []
class Parser:
parsername = "Doodle"
Dependencies = Dependencies
def __init__ (self, raw, request, **kw):
self.form = request.form
self.request = request
self.raw = raw
self.parseArgs(kw["format_args"])
def parseArgs(self, argsString):
argList = argsString.split(';')
self.poll_name=argList[0]
self.poll_choices=filter ((lambda x: x != ""), [ i.strip() for i in argList[1:]])
def format(self, f):
entries = self.raw.splitlines()
code = '\n\n<form action="?action=fillpoll&amp;pollname=%s" method="post">' % self.poll_name
code += f.table(1)
code += f.table_row(1)
code += f.table_cell(1)
code += f.table_cell(0)
for choice in self.poll_choices:
code += f.table_cell(1)
code += f.text(choice)
code += f.table_cell(0)
code += f.table_row(0)
for entry in entries:
code += f.table_row(1)
code += f.table_cell(1)
code += f.text(entry.split(";",1)[0].strip())
code += f.table_cell(0)
for choice in self.poll_choices:
resp = re.search(re.escape(choice)+'=?', entry)
if resp:
disp = entry[resp.end()]
if '1' == disp: color= 'green'
elif '0' == disp: color= 'red'
else: color = 'grey'
code += f.table_cell(1,{'style':'background-color: %s;' % color})
code += f.text(disp)
else:
code += f.table_cell(1,{'style':'background-color: grey;'})
code += f.text('nsp')
code += f.table_cell(0)
code += f.table_row(0)
code += f.table_row(1)
code += f.table_cell(1)
code += ('<input type="text" name="user" value="%s"/>' % self.request.user.name)
code += f.table_cell(0)
for choice in self.poll_choices:
if isinstance(choice, unicode):
name = base64.encodestring(choice.strip().decode('utf-8')).strip('\r\t \n=') # l'utf-8, c'est bien!
else:
name = base64.encodestring(choice.strip()).strip('\r\t \n=') # mais ça peut bien chier!
code += f.table_cell(1)
code += '<input type="checkbox" name="%s" value="1">' % name
code += f.table_cell(0)
code += f.table(0)
code += '<input type="submit" name="boutok" value="envoyer"/>'
code += '</form>'
self.request.write(code)