[/usr/script/wiki-lenny] Possibilit de mettre des sondages "doodle" sur le wiki

darcs-hash:20081127185443-bd074-1400dfead3b4c3b60e7c56676d9953e069a7e439.gz
This commit is contained in:
Antoine Durand-Gasselin 2008-11-27 19:54:43 +01:00
parent c02dc05821
commit 1d6dfd9ccb
2 changed files with 199 additions and 0 deletions

View file

@ -0,0 +1,91 @@
# -*- coding: iso-8859-1 -*-
"""
MoinMoin - gallery2Image Actionmacro
PURPOSE::
This action macro is used to update a poll
CALLING SEQUENCE::
called by Doodle area with POST
PROCEDURE::
Ask adg@crans.org to stop doing drugs
RESTRICTIONS::
Written in python
AUTHOR::
Antoine Durand-Gasselin <adg@crans.org>
"""
import re, locale, base64
from MoinMoin import wikiutil
from MoinMoin.Page import Page
from MoinMoin.PageEditor import PageEditor
def execute(pagename, request):
if not request.user.may.write(pagename):
request.theme.add_msg(_('You are not allowed to edit this page.'), "error")
Page(request, pagename).send_page()
return
raw = Page(request, pagename).body
pollname = request.form.get("pollname")[0]
doosearchre = "{{{\s*#!Doodle\s*%s.*?}}}" % re.escape(pollname)
doosearch = re.search(doosearchre, raw, re.S)
doos = doosearch.start()
dooe = doosearch.end()
if not doosearch:
request.theme.add_msg(request.getText (u"Le sondage \"%s\" n'a pas été trouvé" % pollname), "error")
Page(request, pagename).send_page()
return
doostring= raw[doos+3:dooe-3]
doolines = [ l.strip() for l in doostring.splitlines()]
doodata = filter (lambda x: x != "", doolines)
fields = filter (lambda x: x != "", [f.strip() for f in doodata[0].split(';')[1:]])
userl = request.form.get("user")
if not userl: user = request.user.name
else:
if userl[0].strip(): user = userl[0].strip()
else: user = request.user.name
newentry = user + ";"
for f in fields:
if isinstance(f, unicode):
formfield = base64.encodestring(f.strip().decode('utf-8')).strip('\r\t \n=') # l'utf-8, c'est bien!
else:
formfield = base64.encodestring(f.strip()).strip('\r\t \n=') # mais ça peut bien chier!
disp = request.form.get(formfield)
if disp:
newentry += " %s=%s;" % (f, disp[0])
else:
newentry += " %s=%s;" % (f, '0')
updatepoll = False
newdoolist = doodata[0:1]
for participant in doodata[1:]:
findentry = re.search ("^\s*%s\s*;.*$" % re.escape(user), participant)
if findentry:
if updatepoll: pass
else:
updatepoll = True
newdoolist += [newentry]
else:
newdoolist += [participant]
if not updatepoll:
newdoolist.append(newentry)
newdoostring = "\n".join(newdoolist)
pg = PageEditor(request, pagename)
try:
pg.saveText(raw[:doos+3]+ newdoostring + raw[dooe-3:], 0)
except:
request.theme.add_msg(request.getText(u"Aucune modification n'a été effectuée"), "error")
Page(request, pagename).send_page()