summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--askbot/auth.py24
-rw-r--r--askbot/conf/minimum_reputation.py18
-rw-r--r--askbot/conf/vote_rules.py9
-rw-r--r--askbot/models/__init__.py84
-rw-r--r--askbot/skins/default/templates/faq.html4
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>