summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTurkesh Patel (Open ERP) <tpa@tinyerp.com>2014-03-21 14:49:24 +0530
committerTurkesh Patel (Open ERP) <tpa@tinyerp.com>2014-03-21 14:49:24 +0530
commit283af4b6e5a00dabce60d8580a2fab4e93521ef2 (patch)
treefd4dae413a87f48165c60e81392777f6d0172e49
parent7a82d51f844e3cb983ac9a5c62f98499a4de6499 (diff)
parent1185f7b8b51da1e217d32b9018185ea5b7e3eab1 (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.xml79
-rw-r--r--addons/website_forum/models/__init__.py3
-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.py72
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', '&lt;=', -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'),
+ }
+