250 |
250 |
if self.get_widget('__keep_referer'):
|
251 |
251 |
return self.get_widget('__keep_referer').parse()
|
252 |
252 |
|
253 |
|
def add_captcha(self):
|
|
253 |
def add_captcha(self, hint=None):
|
254 |
254 |
if not self.captcha and not (get_session().won_captcha or get_session().user):
|
255 |
|
self.captcha = CaptchaWidget('captcha')
|
|
255 |
self.captcha = CaptchaWidget('captcha', hint=hint)
|
256 |
256 |
|
257 |
257 |
def add(self, widget_class, name, *args, **kwargs):
|
258 |
258 |
if kwargs and not kwargs.has_key('render_br'):
|
... | ... | |
1079 |
1079 |
class CaptchaWidget(CompositeWidget):
|
1080 |
1080 |
def __init__(self, name, value = None, mode = 'arithmetic-simple', *args, **kwargs):
|
1081 |
1081 |
CompositeWidget.__init__(self, name, value, **kwargs)
|
|
1082 |
self.render_br = False
|
1082 |
1083 |
if value:
|
1083 |
1084 |
token = value
|
1084 |
1085 |
else:
|
... | ... | |
1104 |
1105 |
if b > a:
|
1105 |
1106 |
a, b = b, a
|
1106 |
1107 |
answer = a - b
|
1107 |
|
question = _('What is the result of %(a)d %(op)s %(b)d?') % {
|
|
1108 |
self.question = _('What is the result of %(a)d %(op)s %(b)d?') % {
|
1108 |
1109 |
'a': a, 'b': b, 'op': _(operator)}
|
1109 |
|
hint = _('Please answer this simple mathematical question as proof you are not a bot.')
|
1110 |
|
self.add(StringWidget, 'q', title = question, hint = hint, required=True)
|
|
1110 |
self.hint = kwargs.get('hint')
|
|
1111 |
if self.hint is None:
|
|
1112 |
self.hint = _('Please answer this simple mathematical question as proof you are not a bot.')
|
|
1113 |
self.add(StringWidget, 'q', required=True)
|
1111 |
1114 |
token['answer'] = str(answer)
|
1112 |
1115 |
|
1113 |
1116 |
def _parse(self, request):
|
... | ... | |
1120 |
1123 |
else:
|
1121 |
1124 |
self.error = _('wrong answer')
|
1122 |
1125 |
|
|
1126 |
def get_title(self):
|
|
1127 |
return self.question
|
|
1128 |
|
|
1129 |
def render_content(self):
|
|
1130 |
r = TemplateIO(html=True)
|
|
1131 |
for widget in self.get_widgets():
|
|
1132 |
r += widget.render_content()
|
|
1133 |
return r.getvalue()
|
1123 |
1134 |
|
1124 |
1135 |
class WidgetList(quixote.form.widget.WidgetList):
|
1125 |
1136 |
def render(self):
|
1126 |
|
-
|