[/usr/script/wiki-lenny] Possibilit de mettre des sondages "doodle" sur le wiki
darcs-hash:20081127185443-bd074-1400dfead3b4c3b60e7c56676d9953e069a7e439.gz
This commit is contained in:
parent
c02dc05821
commit
1d6dfd9ccb
2 changed files with 199 additions and 0 deletions
91
wiki-lenny/local/action/fillpoll.py
Normal file
91
wiki-lenny/local/action/fillpoll.py
Normal 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()
|
108
wiki-lenny/local/parser/Doodle.py
Normal file
108
wiki-lenny/local/parser/Doodle.py
Normal file
|
@ -0,0 +1,108 @@
|
||||||
|
# -*- 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&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)
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue