diff options
author | Evgeny Fadeev <evgeny.fadeev@gmail.com> | 2012-10-03 23:24:21 -0400 |
---|---|---|
committer | Evgeny Fadeev <evgeny.fadeev@gmail.com> | 2012-10-03 23:24:21 -0400 |
commit | 62c2f058a936ea657f8212d01a045a9e12ca406f (patch) | |
tree | a4a9d4808f469d7662ba2852a58654d13d885a08 | |
parent | 788bbce91e05373e8801e99ec60ec90699b1b972 (diff) | |
download | askbot-62c2f058a936ea657f8212d01a045a9e12ca406f.tar.gz askbot-62c2f058a936ea657f8212d01a045a9e12ca406f.tar.bz2 askbot-62c2f058a936ea657f8212d01a045a9e12ca406f.zip |
added minimum karma to accept any answer
-rw-r--r-- | askbot/conf/minimum_reputation.py | 9 | ||||
-rw-r--r-- | askbot/doc/source/changelog.rst | 1 | ||||
-rw-r--r-- | askbot/models/__init__.py | 20 | ||||
-rw-r--r-- | askbot/tests/db_api_tests.py | 11 | ||||
-rw-r--r-- | askbot/tests/permission_assertion_tests.py | 12 |
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') |