diff options
| author | Turkesh Patel (Open ERP) <tpa@tinyerp.com> | 2014-03-21 14:49:24 +0530 |
|---|---|---|
| committer | Turkesh Patel (Open ERP) <tpa@tinyerp.com> | 2014-03-21 14:49:24 +0530 |
| commit | 283af4b6e5a00dabce60d8580a2fab4e93521ef2 (patch) | |
| tree | fd4dae413a87f48165c60e81392777f6d0172e49 | |
| parent | 7a82d51f844e3cb983ac9a5c62f98499a4de6499 (diff) | |
| parent | 1185f7b8b51da1e217d32b9018185ea5b7e3eab1 (diff) | |
[MRG] merged branch with improvements for assigning badges on running challange,improved some badge data.
bzr revid: tpa@tinyerp.com-20140321091924-mc3acnpx66oar555
| -rw-r--r-- | addons/website_forum/data/forum_badges_data.xml | 79 | ||||
| -rw-r--r-- | addons/website_forum/models/__init__.py | 3 | ||||
| -rw-r--r-- | addons/website_forum/models/forum.py (renamed from addons/website_forum/models/website_forum.py) | 6 | ||||
| -rw-r--r-- | addons/website_forum/models/gamification.py | 72 |
4 files changed, 113 insertions, 47 deletions
diff --git a/addons/website_forum/data/forum_badges_data.xml b/addons/website_forum/data/forum_badges_data.xml index a51dbd267ea..71387fe96fc 100644 --- a/addons/website_forum/data/forum_badges_data.xml +++ b/addons/website_forum/data/forum_badges_data.xml @@ -2,7 +2,6 @@ <openerp> <data> - <!--NOTE: Will have to test all--> <!--NOTE: if we have to get no of votes on any post than we are using vote_count at this time--> <record id="badge_1" model="gamification.badge"> <field name="name">Autobiographer</field> @@ -32,7 +31,7 @@ <field name="reward_id" eval="ref('badge_1')" /> <field name="autojoin_group_id" eval="ref('base.group_user')" /> <field name="state">inprogress</field> - <field name="category">other</field> + <field name="category">forum</field> </record> <record model="gamification.challenge.line" id="line_configure_profile"> @@ -65,7 +64,7 @@ <field name="reward_id" eval="ref('badge_3')" /> <field name="autojoin_group_id" eval="ref('base.group_user')" /> <field name="state">inprogress</field> - <field name="category">other</field> + <field name="category">forum</field> </record> <record model="gamification.challenge.line" id="line_cleanup"> @@ -98,7 +97,7 @@ <field name="reward_id" eval="ref('badge_4')" /> <field name="autojoin_group_id" eval="ref('base.group_user')" /> <field name="state">inprogress</field> - <field name="category">other</field> + <field name="category">forum</field> </record> <record model="gamification.challenge.line" id="line_commentator"> @@ -131,7 +130,7 @@ <field name="reward_id" eval="ref('badge_5')" /> <field name="autojoin_group_id" eval="ref('base.group_user')" /> <field name="state">inprogress</field> - <field name="category">other</field> + <field name="category">forum</field> </record> <record model="gamification.challenge.line" id="line_critic"> @@ -167,7 +166,7 @@ <field name="reward_id" eval="ref('badge_6')" /> <field name="autojoin_group_id" eval="ref('base.group_user')" /> <field name="state">inprogress</field> - <field name="category">other</field> + <field name="category">forum</field> </record> <record model="gamification.challenge.line" id="line_disciplined"> @@ -200,7 +199,7 @@ <field name="reward_id" eval="ref('badge_7')" /> <field name="autojoin_group_id" eval="ref('base.group_user')" /> <field name="state">inprogress</field> - <field name="category">other</field> + <field name="category">forum</field> </record> <record model="gamification.challenge.line" id="line_editor"> @@ -233,7 +232,7 @@ <field name="reward_id" eval="ref('badge_8')" /> <field name="autojoin_group_id" eval="ref('base.group_user')" /> <field name="state">inprogress</field> - <field name="category">other</field> + <field name="category">forum</field> </record> <record model="gamification.challenge.line" id="line_enlightened"> @@ -275,7 +274,7 @@ result = get_counter(cr, uid, context=context) <field name="reward_id" eval="ref('badge_9')" /> <field name="autojoin_group_id" eval="ref('base.group_user')" /> <field name="state">inprogress</field> - <field name="category">other</field> + <field name="category">forum</field> </record> <record model="gamification.challenge.line" id="line_enthusiast"> @@ -317,7 +316,7 @@ result = get_counter(cr, uid, context=context) <field name="reward_id" eval="ref('badge_10')" /> <field name="autojoin_group_id" eval="ref('base.group_user')" /> <field name="state">inprogress</field> - <field name="category">other</field> + <field name="category">forum</field> </record> <record model="gamification.challenge.line" id="line_expert"> @@ -350,7 +349,7 @@ result = get_counter(cr, uid, context=context) <field name="reward_id" eval="ref('badge_11')" /> <field name="autojoin_group_id" eval="ref('base.group_user')" /> <field name="state">inprogress</field> - <field name="category">other</field> + <field name="category">forum</field> </record> <record model="gamification.challenge.line" id="line_famous_question"> @@ -365,7 +364,7 @@ result = get_counter(cr, uid, context=context) <field name="level">silver</field> </record> - <!--NOTE: passing default value 1 for res otherwise it gives error in gamification, will improve in gamification --> + <!--NOTE: passing default value 1 for res forumwise it gives error in gamification, will improve in gamification --> <record model="gamification.goal.definition" id="definition_favorite_question"> <field name="name">Favorite Question</field> <field name="description">Ask a question which can be favorited by minimum 5 users</field> @@ -392,7 +391,7 @@ result = count_favorites(cr, uid, context=context) <field name="reward_id" eval="ref('badge_12')" /> <field name="autojoin_group_id" eval="ref('base.group_user')" /> <field name="state">inprogress</field> - <field name="category">other</field> + <field name="category">forum</field> </record> <record model="gamification.challenge.line" id="line_favorite_question"> @@ -425,7 +424,7 @@ result = count_favorites(cr, uid, context=context) <field name="reward_id" eval="ref('badge_13')" /> <field name="autojoin_group_id" eval="ref('base.group_user')" /> <field name="state">inprogress</field> - <field name="category">other</field> + <field name="category">forum</field> </record> <record model="gamification.challenge.line" id="line_good_answer"> @@ -458,7 +457,7 @@ result = count_favorites(cr, uid, context=context) <field name="reward_id" eval="ref('badge_14')" /> <field name="autojoin_group_id" eval="ref('base.group_user')" /> <field name="state">inprogress</field> - <field name="category">other</field> + <field name="category">forum</field> </record> <record model="gamification.challenge.line" id="line_good_question"> @@ -491,7 +490,7 @@ result = count_favorites(cr, uid, context=context) <field name="reward_id" eval="ref('badge_15')" /> <field name="autojoin_group_id" eval="ref('base.group_user')" /> <field name="state">inprogress</field> - <field name="category">other</field> + <field name="category">forum</field> </record> <record model="gamification.challenge.line" id="line_great_answer"> @@ -524,7 +523,7 @@ result = count_favorites(cr, uid, context=context) <field name="reward_id" eval="ref('badge_16')" /> <field name="autojoin_group_id" eval="ref('base.group_user')" /> <field name="state">inprogress</field> - <field name="category">other</field> + <field name="category">forum</field> </record> <record model="gamification.challenge.line" id="line_great_question"> @@ -557,7 +556,7 @@ result = count_favorites(cr, uid, context=context) <field name="reward_id" eval="ref('badge_17')" /> <field name="autojoin_group_id" eval="ref('base.group_user')" /> <field name="state">inprogress</field> - <field name="category">other</field> + <field name="category">forum</field> </record> <record model="gamification.challenge.line" id="line_guru"> @@ -601,12 +600,12 @@ result = get_posts(cr, uid, context=context) <field name="reward_id" eval="ref('badge_18')" /> <field name="autojoin_group_id" eval="ref('base.group_user')" /> <field name="state">inprogress</field> - <field name="category">other</field> + <field name="category">forum</field> </record> <record model="gamification.challenge.line" id="line_necromancer"> <field name="definition_id" eval="ref('definition_necromancer')" /> - <field name="target_goal">1</field> + <field name="target_goal">2</field> <field name="challenge_id" eval="ref('challenge_necromancer')" /> </record> @@ -634,7 +633,7 @@ result = get_posts(cr, uid, context=context) <field name="reward_id" eval="ref('badge_19')" /> <field name="autojoin_group_id" eval="ref('base.group_user')" /> <field name="state">inprogress</field> - <field name="category">other</field> + <field name="category">forum</field> </record> <record model="gamification.challenge.line" id="line_nice_answer"> @@ -667,7 +666,7 @@ result = get_posts(cr, uid, context=context) <field name="reward_id" eval="ref('badge_20')" /> <field name="autojoin_group_id" eval="ref('base.group_user')" /> <field name="state">inprogress</field> - <field name="category">other</field> + <field name="category">forum</field> </record> <record model="gamification.challenge.line" id="line_nice_question"> @@ -700,7 +699,7 @@ result = get_posts(cr, uid, context=context) <field name="reward_id" eval="ref('badge_21')" /> <field name="autojoin_group_id" eval="ref('base.group_user')" /> <field name="state">inprogress</field> - <field name="category">other</field> + <field name="category">forum</field> </record> <record model="gamification.challenge.line" id="line_notable_question"> @@ -733,7 +732,7 @@ result = get_posts(cr, uid, context=context) <field name="reward_id" eval="ref('badge_22')" /> <field name="autojoin_group_id" eval="ref('base.group_user')" /> <field name="state">inprogress</field> - <field name="category">other</field> + <field name="category">forum</field> </record> <record model="gamification.challenge.line" id="line_notable_question"> @@ -752,24 +751,24 @@ result = get_posts(cr, uid, context=context) it should shange boolean field?. at this time we are showing post with 3 down vote(not deleted) --> <record model="gamification.goal.definition" id="definition_peer_pressure"> - <field name="name">Discipline</field> - <field name="description">Delete own post with 3 or more upvotes</field> + <field name="name">Peer Pressure</field> + <field name="description">Delete own post with 3 or more down votes</field> <field name="computation_mode">count</field> <field name="display_mode">boolean</field> <field name="model_id" eval="ref('website_forum.model_website_forum_post')" /> - <field name="domain">[('user_id','=',user.id), ('vote_count', '>=', -3)]</field> + <field name="domain">[('user_id','=',user.id), ('vote_count', '<=', -3)]</field> <field name="condition">higher</field> </record> <record model="gamification.challenge" id="challenge_peer_pressure"> - <field name="name">Disciplined</field> + <field name="name">Peer Pressure</field> <field name="period">once</field> <field name="visibility_mode">personal</field> <field name="report_message_frequency">never</field> <field name="reward_id" eval="ref('badge_23')" /> <field name="autojoin_group_id" eval="ref('base.group_user')" /> <field name="state">inprogress</field> - <field name="category">other</field> + <field name="category">forum</field> </record> <record model="gamification.challenge.line" id="line_peer_pressure"> @@ -802,7 +801,7 @@ result = get_posts(cr, uid, context=context) <field name="reward_id" eval="ref('badge_24')" /> <field name="autojoin_group_id" eval="ref('base.group_user')" /> <field name="state">inprogress</field> - <field name="category">other</field> + <field name="category">forum</field> </record> <record model="gamification.challenge.line" id="line_popular_question"> @@ -847,7 +846,7 @@ result = get_count(cr, uid, context=context) <field name="reward_id" eval="ref('badge_25')" /> <field name="autojoin_group_id" eval="ref('base.group_user')" /> <field name="state">inprogress</field> - <field name="category">other</field> + <field name="category">forum</field> </record> <record model="gamification.challenge.line" id="line_pundit"> @@ -881,7 +880,7 @@ result = get_count(cr, uid, context=context) <field name="reward_id" eval="ref('badge_26')" /> <field name="autojoin_group_id" eval="ref('base.group_user')" /> <field name="state">inprogress</field> - <field name="category">other</field> + <field name="category">forum</field> </record> <record model="gamification.challenge.line" id="line_scholar"> @@ -918,7 +917,7 @@ result = get_count(cr, uid, context=context) <field name="reward_id" eval="ref('badge_27')" /> <field name="autojoin_group_id" eval="ref('base.group_user')" /> <field name="state">inprogress</field> - <field name="category">other</field> + <field name="category">forum</field> </record> <record model="gamification.challenge.line" id="line_self_learner"> @@ -933,7 +932,7 @@ result = get_count(cr, uid, context=context) <field name="level">bronze</field> </record> - <!--NOTE: passing default value 1 for res otherwise it gives error in gamification, will improve in gamification --> + <!--NOTE: passing default value 1 for res forumwise it gives error in gamification, will improve in gamification --> <record model="gamification.goal.definition" id="definition_stellar_question"> <field name="name">Stellar Question</field> <field name="description">Ask a question which can be favorited by minimum 25 users</field> @@ -960,7 +959,7 @@ result = count_favorites(cr, uid, context=context) <field name="reward_id" eval="ref('badge_28')" /> <field name="autojoin_group_id" eval="ref('base.group_user')" /> <field name="state">inprogress</field> - <field name="category">other</field> + <field name="category">forum</field> </record> <record model="gamification.challenge.line" id="line_stellar_question"> @@ -993,7 +992,7 @@ result = count_favorites(cr, uid, context=context) <field name="reward_id" eval="ref('badge_29')" /> <field name="autojoin_group_id" eval="ref('base.group_user')" /> <field name="state">inprogress</field> - <field name="category">other</field> + <field name="category">forum</field> </record> <record model="gamification.challenge.line" id="line_associate_editor"> @@ -1026,7 +1025,7 @@ result = count_favorites(cr, uid, context=context) <field name="reward_id" eval="ref('badge_30')" /> <field name="autojoin_group_id" eval="ref('base.group_user')" /> <field name="state">inprogress</field> - <field name="category">other</field> + <field name="category">forum</field> </record> <record model="gamification.challenge.line" id="line_student"> @@ -1059,7 +1058,7 @@ result = count_favorites(cr, uid, context=context) <field name="reward_id" eval="ref('badge_31')" /> <field name="autojoin_group_id" eval="ref('base.group_user')" /> <field name="state">inprogress</field> - <field name="category">other</field> + <field name="category">forum</field> </record> <record model="gamification.challenge.line" id="line_supporter"> @@ -1092,7 +1091,7 @@ result = count_favorites(cr, uid, context=context) <field name="reward_id" eval="ref('badge_32')" /> <field name="autojoin_group_id" eval="ref('base.group_user')" /> <field name="state">inprogress</field> - <field name="category">other</field> + <field name="category">forum</field> </record> <record model="gamification.challenge.line" id="line_taxonomist"> @@ -1125,7 +1124,7 @@ result = count_favorites(cr, uid, context=context) <field name="reward_id" eval="ref('badge_33')" /> <field name="autojoin_group_id" eval="ref('base.group_user')" /> <field name="state">inprogress</field> - <field name="category">other</field> + <field name="category">forum</field> </record> <record model="gamification.challenge.line" id="line_teacher"> diff --git a/addons/website_forum/models/__init__.py b/addons/website_forum/models/__init__.py index 510e6b63aa0..15f26e908cd 100644 --- a/addons/website_forum/models/__init__.py +++ b/addons/website_forum/models/__init__.py @@ -19,4 +19,5 @@ # ############################################################################## -import website_forum +import gamification +import forum diff --git a/addons/website_forum/models/website_forum.py b/addons/website_forum/models/forum.py index ed25cbb42b1..0f19f08f2ec 100644 --- a/addons/website_forum/models/website_forum.py +++ b/addons/website_forum/models/forum.py @@ -316,12 +316,6 @@ class Vote(osv.Model): post.refresh() return {'vote_count': post.vote_count} -class Badge(osv.Model): - _inherit = 'gamification.badge' - _columns = { - 'level': fields.selection([('bronze', 'bronze'), ('silver', 'silver'), ('gold', 'gold')], 'Forum Badge Level'), - } - class MailMessage(osv.Model): _inherit = 'mail.message' _columns = { diff --git a/addons/website_forum/models/gamification.py b/addons/website_forum/models/gamification.py new file mode 100644 index 00000000000..f29b5985aa9 --- /dev/null +++ b/addons/website_forum/models/gamification.py @@ -0,0 +1,72 @@ +# -*- coding: utf-8 -*- +############################################################################## +# +# OpenERP, Open Source Management Solution +# Copyright (C) 2013-Today OpenERP SA (<http://www.openerp.com>). +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as +# published by the Free Software Foundation, either version 3 of the +# License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. +# +############################################################################## + +import openerp +from openerp.osv import osv, fields +from openerp.tools.translate import _ + +class gamification_challenge(osv.Model): + _inherit = 'gamification.challenge' + + def _get_categories(self, cr, uid, context=None): + res = super(gamification_challenge, self)._get_categories(cr, uid, context=context) + res.append(('forum', 'Website / Forum')) + return res + + _columns = { + 'category': fields.selection(lambda s, *a, **k: s._get_categories(*a, **k), + string="Appears in", help="Define the visibility of the challenge through menus", required=True), + } + + def check_challenge_reward(self, cr, uid, ids, force=False, context=None): + """NOTE: gamification module never assigns reward for and on going challenge, + here we need to assign badges to the users who have completed their goal.""" + if isinstance(ids, (int,long)): + ids = [ids] + context = context or {} + badge_user_obj = self.pool.get('gamification.badge.user'); + super(gamification_challenge, self).check_challenge_reward(cr, uid, ids, force=False, context=context) + for challenge in self.browse(cr, uid, ids, context=context): + if challenge.category == 'forum': + rewarded_users = [] + for user in challenge.user_ids: + bages_user_ids = badge_user_obj.search(cr, uid, [('user_id', '=', user.id),('badge_id', '=', challenge.reward_id.id)],context=None) + # if user not rewarded before then give reward. + if not bages_user_ids: + reached_goal_ids = self.pool.get('gamification.goal').search(cr, uid, [ + ('challenge_id', '=', challenge.id), + ('user_id', '=', user.id), + ('state', '=', 'reached'), + ], context=context) + if len(reached_goal_ids) == len(challenge.line_ids): + self.reward_user(cr, uid, user.id, challenge.reward_id.id, context) + rewarded_users.append(user) + if rewarded_users: + message_body = _("Reward (badge %s) for every succeeding user was sent to %s." % (challenge.reward_id.name, ", ".join([user.name for user in rewarded_users]))) + self.message_post(cr, uid, challenge.id, body=message_body, context=context) + return True + +class Badge(osv.Model): + _inherit = 'gamification.badge' + _columns = { + 'level': fields.selection([('bronze', 'bronze'), ('silver', 'silver'), ('gold', 'gold')], 'Forum Badge Level'), + } + |
