summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEvgeny Fadeev <evgeny.fadeev@gmail.com>2012-10-03 23:24:21 -0400
committerEvgeny Fadeev <evgeny.fadeev@gmail.com>2012-10-03 23:24:21 -0400
commit62c2f058a936ea657f8212d01a045a9e12ca406f (patch)
treea4a9d4808f469d7662ba2852a58654d13d885a08
parent788bbce91e05373e8801e99ec60ec90699b1b972 (diff)
downloadaskbot-62c2f058a936ea657f8212d01a045a9e12ca406f.tar.gz
askbot-62c2f058a936ea657f8212d01a045a9e12ca406f.tar.bz2
askbot-62c2f058a936ea657f8212d01a045a9e12ca406f.zip
added minimum karma to accept any answer
-rw-r--r--askbot/conf/minimum_reputation.py9
-rw-r--r--askbot/doc/source/changelog.rst1
-rw-r--r--askbot/models/__init__.py20
-rw-r--r--askbot/tests/db_api_tests.py11
-rw-r--r--askbot/tests/permission_assertion_tests.py12
5 files changed, 47 insertions, 6 deletions
diff --git a/askbot/conf/minimum_reputation.py b/askbot/conf/minimum_reputation.py
index 2c3a3496..152a2079 100644
--- a/askbot/conf/minimum_reputation.py
+++ b/askbot/conf/minimum_reputation.py
@@ -53,6 +53,15 @@ settings.register(
settings.register(
livesettings.IntegerValue(
MIN_REP,
+ 'MIN_REP_TO_ACCEPT_ANY_ANSWER',
+ default=500,
+ description=_('Accept any answer')
+ )
+)
+
+settings.register(
+ livesettings.IntegerValue(
+ MIN_REP,
'MIN_REP_TO_FLAG_OFFENSIVE',
default=5,
description=_('Flag offensive')
diff --git a/askbot/doc/source/changelog.rst b/askbot/doc/source/changelog.rst
index 1b5a6c2b..d77e11ab 100644
--- a/askbot/doc/source/changelog.rst
+++ b/askbot/doc/source/changelog.rst
@@ -3,6 +3,7 @@ Changes in Askbot
Development version
-------------------
+* Added minimum reputation setting to accept any answer as correct (Evgeny)
* Added "VIP" option to groups - if checked, all posts belong to the group and users of that group in the future will be able to moderate those posts. Moderation features for VIP group are in progress (Evgeny)
* Added setting `NOTIFICATION_DELAY_TIME` to use with enabled celery daemon (Adolfo)
* Added setting `ASKBOT_INTERNAL_IPS` - to allow anonymous access to
diff --git a/askbot/models/__init__.py b/askbot/models/__init__.py
index 4a593d17..83e67bb9 100644
--- a/askbot/models/__init__.py
+++ b/askbot/models/__init__.py
@@ -511,6 +511,7 @@ def user_assert_can_unaccept_best_answer(self, answer = None):
'Sorry, you cannot accept or unaccept best answers '
'because your account is suspended'
)
+
if self.is_blocked():
error_message = blocked_error_message
elif self.is_suspended():
@@ -534,7 +535,9 @@ def user_assert_can_unaccept_best_answer(self, answer = None):
)
return # success
- elif self.is_administrator() or self.is_moderator() or self.is_post_moderator(answer):
+ elif self.reputation >= askbot_settings.MIN_REP_TO_ACCEPT_ANY_ANSWER or \
+ self.is_administrator() or self.is_moderator() or self.is_post_moderator(answer):
+
will_be_able_at = (
answer.added_at +
datetime.timedelta(
@@ -2705,9 +2708,18 @@ def user_leave_group(self, group):
self.edit_group_membership(group=group, user=self, action='remove')
def user_is_group_member(self, group=None):
- return GroupMembership.objects.filter(
- user=self, group=group
- ).count() == 1
+ """True if user is member of group,
+ where group can be instance of Group
+ or name of group as string
+ """
+ if isinstance(group, str):
+ return GroupMembership.objects.filter(
+ user=self, group__name=group
+ ).count() == 1
+ else:
+ return GroupMembership.objects.filter(
+ user=self, group=group
+ ).count() == 1
User.add_to_class(
'add_missing_askbot_subscriptions',
diff --git a/askbot/tests/db_api_tests.py b/askbot/tests/db_api_tests.py
index 65b0a950..25a2407f 100644
--- a/askbot/tests/db_api_tests.py
+++ b/askbot/tests/db_api_tests.py
@@ -442,6 +442,17 @@ class GroupTests(AskbotTestCase):
'answer_comment': answer_comment
}
+ def test_is_group_member(self):
+ group1 = models.Group.objects.create(
+ name='somegroup', openness=models.Group.OPEN
+ )
+ self.u1.join_group(group1)
+ group2 = models.Group.objects.create(name='othergroup')
+ self.assertEqual(self.u1.is_group_member(group1), True)
+ self.assertEqual(self.u1.is_group_member('somegroup'), True)
+ self.assertEqual(self.u1.is_group_member(group2), False)
+ self.assertEqual(self.u1.is_group_member('othergroup'), False)
+
def test_posts_added_to_global_group(self):
q = self.post_question(user=self.u1)
group_name = askbot_settings.GLOBAL_GROUP_NAME
diff --git a/askbot/tests/permission_assertion_tests.py b/askbot/tests/permission_assertion_tests.py
index 3849ce90..7f580dda 100644
--- a/askbot/tests/permission_assertion_tests.py
+++ b/askbot/tests/permission_assertion_tests.py
@@ -5,6 +5,7 @@ from django.conf import settings
from django.test import TestCase
from django.core import exceptions
from askbot.tests import utils
+from askbot.tests.utils import with_settings
from askbot.conf import settings as askbot_settings
from askbot import models
from askbot.templatetags import extra_filters_jinja as template_filters
@@ -1367,12 +1368,19 @@ class AcceptBestAnswerPermissionAssertionTests(utils.AskbotTestCase):
self.user_post_answer()
self.assert_user_cannot()
- def test_high_rep_other_user_cannot_accept_answer(self):
+ def test_low_rep_other_user_cannot_accept_answer(self):
self.other_post_answer()
self.create_user(username = 'third_user')
- self.third_user.reputation = 1000000
+ self.third_user.reputation = askbot_settings.MIN_REP_TO_ACCEPT_ANY_ANSWER - 1
self.assert_user_cannot(user = self.third_user)
+ @with_settings(MIN_DAYS_FOR_STAFF_TO_ACCEPT_ANSWER=0)
+ def test_high_rep_other_user_can_accept_answer(self):
+ self.other_post_answer()
+ self.create_user(username = 'third_user')
+ self.third_user.reputation = askbot_settings.MIN_REP_TO_ACCEPT_ANY_ANSWER
+ self.assert_user_can(user = self.third_user)
+
def test_moderator_cannot_accept_own_answer(self):
self.other_post_answer()
self.other_user.set_status('m')