X-Git-Url: https://git.openstreetmap.org./osqa.git/blobdiff_plain/d7a18910f5d471a3fa37f3a1cf202fa5302ac25f..cc041eef8cd45e535ba702e46822d10f6939bfc5:/forum_modules/default_badges/badges.py diff --git a/forum_modules/default_badges/badges.py b/forum_modules/default_badges/badges.py index 279f778..f9da788 100644 --- a/forum_modules/default_badges/badges.py +++ b/forum_modules/default_badges/badges.py @@ -36,25 +36,23 @@ class FamousQuestion(QuestionViewBadge): nviews = settings.FAMOUS_QUESTION_VIEWS - - class NodeScoreBadge(AbstractBadge): abstract = True listen_to = (VoteAction,) - @property - def description(self): - return _('Answer voted up %s times') % str(self.expected_score) - def award_to(self, action): if (action.node.node_type == self.node_type) and (action.node.score == int(self.expected_score)): return action.node.author - + class QuestionScoreBadge(NodeScoreBadge): abstract = True node_type = "question" + @property + def description(self): + return _('Question voted up %s times') % str(self.expected_score) + class NiceQuestion(QuestionScoreBadge): expected_score = settings.NICE_QUESTION_VOTES_UP name = _("Nice Question") @@ -74,6 +72,10 @@ class AnswerScoreBadge(NodeScoreBadge): abstract = True node_type = "answer" + @property + def description(self): + return _('Answer voted up %s times') % str(self.expected_score) + class NiceAnswer(AnswerScoreBadge): expected_score = settings.NICE_ANSWER_VOTES_UP name = _("Nice Answer") @@ -89,7 +91,6 @@ class GreatAnswer(AnswerScoreBadge): name = _("Great Answer") - class FavoriteQuestionBadge(AbstractBadge): abstract = True listen_to = (FavoriteAction,) @@ -113,7 +114,6 @@ class StellarQuestion(FavoriteQuestionBadge): expected_count = settings.STELLAR_QUESTION_FAVS - class Disciplined(AbstractBadge): listen_to = (DeleteAction,) name = _("Disciplined") @@ -158,7 +158,7 @@ class Supporter(AbstractBadge): class FirstActionBadge(AbstractBadge): award_once = True abstract = True - + def award_to(self, action): if (self.listen_to[0].objects.filter(user=action.user).count() == 1): return action.user @@ -202,7 +202,6 @@ class Autobiographer(AbstractBadge): return user - class CivicDuty(AbstractBadge): type = Badge.SILVER award_once = True @@ -222,7 +221,8 @@ class Pundit(AbstractBadge): description = _('Left %s comments') % settings.PUNDIT_COMMENT_COUNT def award_to(self, action): - if (action.user.nodes.filter(node_type="comment", deleted=None)) == int(settings.CIVIC_DUTY_VOTES): + if action.user.nodes.filter_state(deleted=False).filter(node_type="comment").count() == int( + settings.PUNDIT_COMMENT_COUNT): return action.user @@ -233,7 +233,7 @@ class SelfLearner(AbstractBadge): def award_to(self, action): if (action.node.node_type == "answer") and (action.node.author == action.node.parent.author) and ( - action.node.score == int(settings.SELF_LEARNER_UP_VOTES)): + action.node.score == int(settings.SELF_LEARNER_UP_VOTES)): return action.node.author @@ -256,7 +256,8 @@ class Student(AbstractBadge): description = _('Asked first question with at least one up vote') def award_to(self, action): - if (action.node.node_type == "question") and (action.node.author.nodes.filter_state(deleted=False).filter(node_type="question", score=1).count() == 1): + if (action.node.node_type == "question") and (action.node.author.nodes.filter_state(deleted=False).filter( + node_type="question", score=1).count() == 1): return action.node.author @@ -267,7 +268,8 @@ class Teacher(AbstractBadge): description = _('Answered first question with at least one up vote') def award_to(self, action): - if (action.node.node_type == "answer") and (action.node.author.nodes.filter_state(deleted=False).filter(node_type="answer", score=1).count() == 1): + if (action.node.node_type == "answer") and (action.node.author.nodes.filter_state(deleted=False).filter( + node_type="answer", score=1).count() == 1): return action.node.author @@ -280,7 +282,7 @@ class Enlightened(AbstractBadge): def award_to(self, action): if (action.node.node_type == "answer") and (action.node.accepted) and ( - action.node.score >= int(settings.ENLIGHTENED_UP_VOTES)): + action.node.score >= int(settings.ENLIGHTENED_UP_VOTES)): return action.node.author @@ -292,7 +294,7 @@ class Guru(AbstractBadge): def award_to(self, action): if (action.node.node_type == "answer") and (action.node.accepted) and ( - action.node.score >= int(settings.ENLIGHTENED_UP_VOTES)): + action.node.score >= int(settings.GURU_UP_VOTES)): return action.node.author @@ -305,7 +307,8 @@ class Necromancer(AbstractBadge): def award_to(self, action): if (action.node.node_type == "answer") and ( - action.node.added_at >= (action.node.question.added_at + timedelta(days=int(settings.NECROMANCER_DIF_DAYS)))): + action.node.added_at >= (action.node.question.added_at + timedelta(days=int(settings.NECROMANCER_DIF_DAYS))) + ) and (int(action.node.score) == int(settings.NECROMANCER_UP_VOTES)): return action.node.author class Taxonomist(AbstractBadge): @@ -317,3 +320,11 @@ class Taxonomist(AbstractBadge): def award_to(self, action): return None +class ValidatedEmail(AbstractBadge): + type = Badge.BRONZE + listen_to = (EmailValidationAction,) + name = _("Validated Email") + description = _("User who has validated email associated to the account") + + def award_to(self, action): + return action.user \ No newline at end of file