# -*- 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 """ 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()