91 lines
2.8 KiB
Python
91 lines
2.8 KiB
Python
# -*- 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()
|