diff options
-rw-r--r-- | askbot/auth.py | 24 | ||||
-rw-r--r-- | askbot/conf/minimum_reputation.py | 18 | ||||
-rw-r--r-- | askbot/conf/vote_rules.py | 9 | ||||
-rw-r--r-- | askbot/models/__init__.py | 84 | ||||
-rw-r--r-- | askbot/skins/default/templates/faq.html | 4 |
5 files changed, 113 insertions, 26 deletions
diff --git a/askbot/auth.py b/askbot/auth.py index 83821ff3..e9a93ec5 100644 --- a/askbot/auth.py +++ b/askbot/auth.py @@ -109,18 +109,18 @@ def onAnswerAccept(answer, user, timestamp=None): answer.question.answer_accepted = True answer.save() answer.question.save() - - answer.author.receive_reputation( - askbot_settings.REP_GAIN_FOR_RECEIVING_ANSWER_ACCEPTANCE - ) - answer.author.save() - reputation = Repute(user=answer.author, - positive=askbot_settings.REP_GAIN_FOR_RECEIVING_ANSWER_ACCEPTANCE, - question=answer.question, - reputed_at=timestamp, - reputation_type=2, - reputation=answer.author.reputation) - reputation.save() + if answer.author != user: + answer.author.receive_reputation( + askbot_settings.REP_GAIN_FOR_RECEIVING_ANSWER_ACCEPTANCE + ) + answer.author.save() + reputation = Repute(user=answer.author, + positive=askbot_settings.REP_GAIN_FOR_RECEIVING_ANSWER_ACCEPTANCE, + question=answer.question, + reputed_at=timestamp, + reputation_type=2, + reputation=answer.author.reputation) + reputation.save() user.receive_reputation(askbot_settings.REP_GAIN_FOR_ACCEPTING_ANSWER) user.save() diff --git a/askbot/conf/minimum_reputation.py b/askbot/conf/minimum_reputation.py index 6b00766e..4d181e48 100644 --- a/askbot/conf/minimum_reputation.py +++ b/askbot/conf/minimum_reputation.py @@ -33,6 +33,24 @@ settings.register( settings.register( livesettings.IntegerValue( MIN_REP, + 'MIN_REP_TO_ANSWER_OWN_QUESTION', + default=25, + description=_('Answer own question immediately') + ) +) + +settings.register( + livesettings.IntegerValue( + MIN_REP, + 'MIN_REP_TO_ACCEPT_OWN_ANSWER', + default=50, + description=_('Accept own answer') + ) +) + +settings.register( + livesettings.IntegerValue( + MIN_REP, 'MIN_REP_TO_FLAG_OFFENSIVE', default=15, description=_('Flag offensive') diff --git a/askbot/conf/vote_rules.py b/askbot/conf/vote_rules.py index a8b7d5f5..84b53f03 100644 --- a/askbot/conf/vote_rules.py +++ b/askbot/conf/vote_rules.py @@ -53,6 +53,15 @@ settings.register( settings.register( IntegerValue( VOTE_RULES, + 'MIN_DAYS_TO_ANSWER_OWN_QUESTION', + default=1, + description=_('Number of days required before answering own question') + ) +) + +settings.register( + IntegerValue( + VOTE_RULES, 'MIN_FLAGS_TO_HIDE_POST', default=3, description=_('Number of flags required to automatically hide posts') diff --git a/askbot/models/__init__.py b/askbot/models/__init__.py index ce1b5cff..a4c3911a 100644 --- a/askbot/models/__init__.py +++ b/askbot/models/__init__.py @@ -294,26 +294,42 @@ def _assert_user_can( def user_assert_can_unaccept_best_answer(self, answer = None): assert(isinstance(answer, Answer)) + blocked_error_message = _( + 'Sorry, you cannot accept or unaccept best answers ' + 'because your account is blocked' + ) + suspended_error_message = _( + 'Sorry, you cannot accept or unaccept best answers ' + 'because your account is suspended' + ) if self.is_blocked(): - error_message = _( - 'Sorry, you cannot accept or unaccept best answers ' - 'because your account is blocked' - ) + error_message = blocked_error_message elif self.is_suspended(): - error_message = _( - 'Sorry, you cannot accept or unaccept best answers ' - 'because your account is suspended' - ) + error_message = suspended_error_message elif self == answer.question.get_owner(): if self == answer.get_owner(): - error_message = _( - 'Sorry, you cannot accept or unaccept your own answer ' - 'to your own question' + if not self.is_administrator(): + #check rep + + min_rep_setting = askbot_settings.MIN_REP_TO_ACCEPT_OWN_ANSWER + low_rep_error_message = _( + ">%(points)s points required to accept or unaccept " + " your own answer to your own question" + ) % \ + {'points': askbot_settings.MIN_REP_TO_ACCEPT_OWN_ANSWER} + + _assert_user_can( + user = self, + blocked_error_message = blocked_error_message, + suspended_error_message = suspended_error_message, + min_rep_setting = min_rep_setting, + low_rep_error_message = low_rep_error_message ) + + return # success + else: - return #assertion success - else: - error_message = _( + error_message = _( 'Sorry, only original author of the question ' ' - %(username)s - can accept the best answer' ) % {'username': answer.get_owner().username} @@ -1271,6 +1287,45 @@ def user_post_answer( timestamp = None ): + if self == question.author and not self.is_administrator(): + + # check date and rep required to post answer to own question + + delta = datetime.timedelta(askbot_settings.MIN_DAYS_TO_ANSWER_OWN_QUESTION) + + now = datetime.datetime.now() + asked = question.added_at + if (now - asked < delta and self.reputation < askbot_settings.MIN_REP_TO_ANSWER_OWN_QUESTION): + diff = asked + delta - now + days = diff.days + hours = int(diff.seconds/3600) + minutes = int(diff.seconds/60) + + if days > 2: + if date.year == now.year: + date_token = date.strftime("%b %d") + else: + date_token = date.strftime("%b %d '%y") + if use_on_prefix: + left = _('on %(date)s') % { 'date': date_token } + else: + left = date_token + elif days == 2: + left = _('in two days') + elif days == 1: + left = _('tomorrow') + elif minutes >= 60: + left = ungettext('in %(hr)d hour','in %(hr)d hours',hours) % {'hr':hours} + else: + left = ungettext('in %(min)d min','in %(min)d mins',minutes) % {'min':minutes} + day = ungettext('%(days)d day','%(days)d days',askbot_settings.MIN_DAYS_TO_ANSWER_OWN_QUESTION) % {'days':askbot_settings.MIN_DAYS_TO_ANSWER_OWN_QUESTION} + error_message = _( + 'New users must wait %(days)s before answering their own question. ' + ' You can post an answer %(left)s' + ) % {'days': day,'left': left} + assert(error_message is not None) + raise django_exceptions.PermissionDenied(error_message) + self.assert_can_post_answer() if not isinstance(question, Question): @@ -2579,3 +2634,4 @@ __all__ = [ 'get_model' ] + diff --git a/askbot/skins/default/templates/faq.html b/askbot/skins/default/templates/faq.html index 0f992934..f1d34141 100644 --- a/askbot/skins/default/templates/faq.html +++ b/askbot/skins/default/templates/faq.html @@ -45,6 +45,10 @@ <td class="faq-rep-item"><strong>{{settings.MIN_REP_TO_VOTE_DOWN}}</strong></td> <td>{% trans %}downvote{% endtrans %}</td> </tr><tr> + <td class="faq-rep-item"><strong>{{settings.MIN_REP_TO_ACCEPT_OWN_ANSWER}}</strong></td> + <td>{% trans %} accept own answer to own questions{% endtrans %}</td> + </tr> + </tr><tr> <td class="faq-rep-item"><strong>{{settings.MIN_REP_TO_CLOSE_OWN_QUESTIONS}}</strong></td> <td>{% trans %}open and close own questions{% endtrans %}</td> </tr> |