From: jordan Date: Wed, 5 Jan 2011 17:20:57 +0000 (+0000) Subject: Work on issue #OSQA-510. Added support for ReCaptcha for users with low reputation... X-Git-Tag: live~464 X-Git-Url: https://git.openstreetmap.org/osqa.git/commitdiff_plain/fa5ec9e2a70331da5da884a13ff5b70bdc2eada6 Work on issue #OSQA-510. Added support for ReCaptcha for users with low reputation. Added an option should be the upper limit for showing ReCaptcha when adding/editing questions and answers, called CAPTCHA_IF_REP_LESS_THAN in the Minimum reputation set. git-svn-id: http://svn.osqa.net/svnroot/osqa/trunk@670 0cfe37f9-358a-4d5e-be75-b63607b5c754 --- diff --git a/forum/forms/qanda.py b/forum/forms/qanda.py index b499cbd..9370550 100644 --- a/forum/forms/qanda.py +++ b/forum/forms/qanda.py @@ -8,6 +8,9 @@ from django.contrib.humanize.templatetags.humanize import apnumber from django.utils.safestring import mark_safe from general import NextUrlField, UserNameField, SetPasswordForm from forum import settings + +from forum_modules.recaptcha.formfield import ReCaptchaField + import logging class TitleField(forms.CharField): @@ -154,6 +157,9 @@ class AskForm(forms.Form): super(AskForm, self).__init__(data, *args, **kwargs) self.fields['tags'] = TagNamesField(user) + + if int(user.reputation) < settings.CAPTCHA_IF_REP_LESS_THAN and not (user.is_superuser or user.is_staff): + self.fields['captcha'] = ReCaptchaField() if settings.WIKI_ON: self.fields['wiki'] = WikiField() @@ -162,16 +168,15 @@ class AnswerForm(forms.Form): text = AnswerEditorField() wiki = WikiField() - def __init__(self, question, *args, **kwargs): - super(AnswerForm, self).__init__(*args, **kwargs) + def __init__(self, data=None, user=None, *args, **kwargs): + super(AnswerForm, self).__init__(data, *args, **kwargs) + + if int(user.reputation) < settings.CAPTCHA_IF_REP_LESS_THAN and not (user.is_superuser or user.is_staff): + self.fields['captcha'] = ReCaptchaField() if settings.WIKI_ON: self.fields['wiki'] = WikiField() - #if question.nis.wiki: - # self.fields['wiki'].initial = True - - class RetagQuestionForm(forms.Form): tags = TagNamesField() # initialize the default values @@ -214,6 +219,9 @@ class EditQuestionForm(forms.Form): self.fields['tags'] = TagNamesField(user) self.fields['tags'].initial = revision.tagnames + if int(user.reputation) < settings.CAPTCHA_IF_REP_LESS_THAN and not (user.is_superuser or user.is_staff): + self.fields['captcha'] = ReCaptchaField() + if settings.WIKI_ON: self.fields['wiki'] = WikiField(disabled=(question.nis.wiki and not user.can_cancel_wiki(question)), initial=question.nis.wiki) @@ -229,6 +237,9 @@ class EditAnswerForm(forms.Form): self.fields['text'].initial = revision.body + if int(user.reputation) < settings.CAPTCHA_IF_REP_LESS_THAN and not (user.is_superuser or user.is_staff): + self.fields['captcha'] = ReCaptchaField() + if settings.WIKI_ON: self.fields['wiki'] = WikiField(disabled=(answer.nis.wiki and not user.can_cancel_wiki(answer)), initial=answer.nis.wiki) diff --git a/forum/settings/minrep.py b/forum/settings/minrep.py index b2ff60d..8206823 100644 --- a/forum/settings/minrep.py +++ b/forum/settings/minrep.py @@ -3,6 +3,10 @@ from django.utils.translation import ugettext_lazy as _ MIN_REP_SET = SettingSet('minrep', _('Minimum reputation config'), _("Configure the minimum reputation required to perform certain actions on your site."), 300) +CAPTCHA_IF_REP_LESS_THAN = Setting('CAPTCHA_IF_REP_LESS_THAN', 0, MIN_REP_SET, dict( +label = _("Show captcha if user with less reputation than"), +help_text = _("If the user has less reputation, captcha is used to when adding new content."))) + REP_TO_VOTE_UP = Setting('REP_TO_VOTE_UP', 15, MIN_REP_SET, dict( label = _("Minimum reputation to vote up"), help_text = _("The minimum reputation an user must have to be allowed to vote up."))) diff --git a/forum/skins/default/templates/answer_edit.html b/forum/skins/default/templates/answer_edit.html index c9d8466..c0315e6 100644 --- a/forum/skins/default/templates/answer_edit.html +++ b/forum/skins/default/templates/answer_edit.html @@ -90,6 +90,14 @@
{{ form.summary.help_text }}
+ + {% if form.captcha %} +
+ {{ form.captcha.errors }} + {{ form.captcha }} +
+ {% endif %} + diff --git a/forum/skins/default/templates/ask.html b/forum/skins/default/templates/ask.html index bb4ad67..04e959e 100644 --- a/forum/skins/default/templates/ask.html +++ b/forum/skins/default/templates/ask.html @@ -148,6 +148,15 @@

{{ form.tags.help_text }}

+ + {% if form.captcha %} +
+ {{ form.captcha.errors }} + {{ form.captcha }} +
+
+ {% endif %} + {% if not request.user.is_authenticated %} {% else %} diff --git a/forum/skins/default/templates/question.html b/forum/skins/default/templates/question.html index efb797b..4873d14 100644 --- a/forum/skins/default/templates/question.html +++ b/forum/skins/default/templates/question.html @@ -241,6 +241,15 @@ {{ answer.text.errors }}
+ + {% if answer.captcha %} +
+ {{ answer.captcha.errors }} + {{ answer.captcha }} +
+
+ {% endif %} +

{{ form.summary.help_text }} + + {% if form.captcha %} +
+ {{ form.captcha.errors }} + {{ form.captcha }} +
+
+ {% endif %} +
diff --git a/forum/views/readers.py b/forum/views/readers.py index e092922..f8113be 100644 --- a/forum/views/readers.py +++ b/forum/views/readers.py @@ -314,9 +314,9 @@ def question(request, id, slug='', answer=None): return HttpResponsePermanentRedirect(question.get_absolute_url()) if request.POST: - answer_form = AnswerForm(question, request.POST) + answer_form = AnswerForm(request.POST, user=request.user) else: - answer_form = AnswerForm(question) + answer_form = AnswerForm(user=request.user) answers = request.user.get_visible_answers(question) diff --git a/forum/views/writers.py b/forum/views/writers.py index 125318b..dbc68c0 100644 --- a/forum/views/writers.py +++ b/forum/views/writers.py @@ -218,7 +218,7 @@ def answer(request, id): question = get_object_or_404(Question, id=id) if request.POST: - form = AnswerForm(question, request.POST) + form = AnswerForm(request.POST, request.user) if request.session.pop('reviewing_pending_data', False) or not form.is_valid(): request.session['redirect_POST_data'] = request.POST