diff options
| author | Martin Trigaux <mat@openerp.com> | 2014-04-14 16:54:15 +0200 |
|---|---|---|
| committer | Martin Trigaux <mat@openerp.com> | 2014-04-14 16:54:15 +0200 |
| commit | c40318a46a1fa8ebc5f8e66fc4d5e3cd094c40b4 (patch) | |
| tree | 3c744a9a0368bf1afeb08e550a5cf451f8a92798 | |
| parent | 0c8539846aaf3c55f1f42f7dd48dc2643667bd18 (diff) | |
[ADD] website_forum: self_reply field and some badges
bzr revid: mat@openerp.com-20140414145415-8g9jtp95d173183i
| -rw-r--r-- | addons/gamification/models/goal.py | 2 | ||||
| -rw-r--r-- | addons/website_forum/data/badges_answer.xml | 56 | ||||
| -rw-r--r-- | addons/website_forum/models/forum.py | 10 |
3 files changed, 46 insertions, 22 deletions
diff --git a/addons/gamification/models/goal.py b/addons/gamification/models/goal.py index a24df6e5c2d..268f27e3fe7 100644 --- a/addons/gamification/models/goal.py +++ b/addons/gamification/models/goal.py @@ -304,7 +304,7 @@ class gamification_goal(osv.Model): if end_date: subquery_domain.append((field_date_name, '>=', end_date)) - user_values = obj.read_group(cr, uid, subquery_domain, fields=[field_name], groupby=[field_name], context=context) + user_values = obj.read_group(cr, uid, subquery_domain, fields=[field_name], groupby=[field_name], context=context) for goal in [g for g in goals if g.id in query_goals.keys()]: for user_value in user_values: diff --git a/addons/website_forum/data/badges_answer.xml b/addons/website_forum/data/badges_answer.xml index b88ac0945d1..fa367e70ce8 100644 --- a/addons/website_forum/data/badges_answer.xml +++ b/addons/website_forum/data/badges_answer.xml @@ -61,6 +61,7 @@ <field name="visibility_mode">personal</field> <field name="report_message_frequency">never</field> <field name="reward_id" eval="ref('badge_a_2')" /> + <field name="reward_realtime">True</field> <field name="autojoin_group_id" eval="ref('base.group_user')"/> <field name="state">inprogress</field> <field name="category">forum</field> @@ -94,6 +95,7 @@ <field name="visibility_mode">personal</field> <field name="report_message_frequency">never</field> <field name="reward_id" eval="ref('badge_a_3')" /> + <field name="reward_realtime">True</field> <field name="autojoin_group_id" eval="ref('base.group_user')"/> <field name="state">inprogress</field> <field name="category">forum</field> @@ -127,6 +129,7 @@ <field name="visibility_mode">personal</field> <field name="report_message_frequency">never</field> <field name="reward_id" eval="ref('badge_a_4')" /> + <field name="reward_realtime">True</field> <field name="autojoin_group_id" eval="ref('base.group_user')"/> <field name="state">inprogress</field> <field name="category">forum</field> @@ -139,7 +142,7 @@ <!-- ACCEPTANCE --> <!-- Enlightened: at least 3 upvotes for an accepted answer --> -<!-- <record id="badge_a_5" model="gamification.badge"> + <record id="badge_a_5" model="gamification.badge"> <field name="name">Enlightened</field> <field name="description">Answer was accepted with 3 or more votes</field> <field name="level">silver</field> @@ -150,8 +153,11 @@ <field name="computation_mode">count</field> <field name="display_mode">boolean</field> <field name="model_id" eval="ref('website_forum.model_forum_post')"/> - <field name="domain">[('create_uid', '=', user.id), ('parent_id', '!=', False), ('vote_count', '>=', 3), ('is_correct', '=', True)]</field> <field name="condition">higher</field> + <field name="domain">[('parent_id', '!=', False), ('vote_count', '>=', 3), ('is_correct', '=', True)]</field> + <field name="batch_mode">True</field> + <field name="batch_distinctive_field" eval="ref('website_forum.field_forum_post_create_uid')" /> + <field name="batch_user_expression">user.id</field> </record> <record model="gamification.challenge" id="challenge_enlightened"> <field name="name">Enlightened</field> @@ -159,6 +165,7 @@ <field name="visibility_mode">personal</field> <field name="report_message_frequency">never</field> <field name="reward_id" eval="ref('badge_a_5')" /> + <field name="reward_realtime">True</field> <field name="autojoin_group_id" eval="ref('base.group_user')"/> <field name="state">inprogress</field> <field name="category">forum</field> @@ -167,9 +174,9 @@ <field name="definition_id" eval="ref('definition_enlightened')"/> <field name="challenge_id" eval="ref('challenge_enlightened')"/> <field name="target_goal">1</field> - </record> --> + </record> <!-- Guru: at least 15 upvotes for an accepted answer --> -<!-- <record id="badge_a_6" model="gamification.badge"> + <record id="badge_a_6" model="gamification.badge"> <field name="name">Guru</field> <field name="description">Answer accepted with 15 or more votes</field> <field name="level">silver</field> @@ -180,8 +187,11 @@ <field name="computation_mode">count</field> <field name="display_mode">boolean</field> <field name="model_id" eval="ref('website_forum.model_forum_post')" /> - <field name="domain">[('create_uid', '=', user.id), ('parent_id', '!=', False), ('vote_count', '>=', 15), ('is_correct', '=', True)]</field> <field name="condition">higher</field> + <field name="domain">[('parent_id', '!=', False), ('vote_count', '>=', 15), ('is_correct', '=', True)]</field> + <field name="batch_mode">True</field> + <field name="batch_distinctive_field" eval="ref('website_forum.field_forum_post_create_uid')" /> + <field name="batch_user_expression">user.id</field> </record> <record model="gamification.challenge" id="challenge_guru"> <field name="name">Great Answer</field> @@ -189,6 +199,7 @@ <field name="visibility_mode">personal</field> <field name="report_message_frequency">never</field> <field name="reward_id" eval="ref('badge_a_6')" /> + <field name="reward_realtime">True</field> <field name="autojoin_group_id" eval="ref('base.group_user')" /> <field name="state">inprogress</field> <field name="category">forum</field> @@ -197,7 +208,7 @@ <field name="definition_id" eval="ref('definition_guru')" /> <field name="target_goal">1</field> <field name="challenge_id" eval="ref('challenge_guru')" /> - </record> --> + </record> <!-- Necromancer: 30 days old question --> <!-- <record id="badge_a_7" model="gamification.badge"> @@ -209,18 +220,16 @@ <field name="name">Necromancer</field> <field name="description">Answered a question more than 30 days later with at least 2 votes</field> <field name="computation_mode">python</field> - <field name="compute_code">def get_posts(cr, uid, context=None): - res = 1 - Post = self.pool['website.forum.post'] - user_posts = Post.search(cr, uid, [('create_uid','=',object.user_id.id), ('parent_id', '!=', False), ('vote_count', '>=', 2)], context=context) - for post in Post.browse(cr, uid, user_posts, context=context): - print post.parent_id.create_date - question_date = datetime.strptime(post.parent_id.create_date, "%Y-%m-%d %H:%M:%S") - answer_date = datetime.strptime(post.create_date, "%Y-%m-%d %H:%M:%S") - if ((question_date - answer_date).days) >= 30: - res += 1 - return res -result = get_posts(cr, uid, context=context) + <field name="compute_code"> +result = 1 +Post = self.pool['website.forum.post'] +user_posts = Post.search(cr, uid, [('create_uid','=',object.user_id.id), ('parent_id', '!=', False), ('vote_count', '>=', 2)], context=context) +for post in Post.browse(cr, uid, user_posts, context=context): + print post.parent_id.create_date + question_date = datetime.strptime(post.parent_id.create_date, "%Y-%m-%d %H:%M:%S") + answer_date = datetime.strptime(post.create_date, "%Y-%m-%d %H:%M:%S") + if ((question_date - answer_date).days) >= 30: + result += 1 </field> <field name="display_mode">boolean</field> <field name="condition">higher</field> @@ -231,6 +240,7 @@ result = get_posts(cr, uid, context=context) <field name="visibility_mode">personal</field> <field name="report_message_frequency">never</field> <field name="reward_id" eval="ref('badge_18')" /> + <field name="reward_realtime">True</field> <field name="autojoin_group_id" eval="ref('base.group_user')"/> <field name="state">inprogress</field> <field name="category">forum</field> @@ -242,7 +252,7 @@ result = get_posts(cr, uid, context=context) </record> --> <!-- Sealf Leaner: own question, 3+ upvotes --> -<!-- <record id="badge_a_8" model="gamification.badge"> + <record id="badge_a_8" model="gamification.badge"> <field name="name">Self-Learner</field> <field name="description">Answered own question with at least 4 up votes</field> <field name="level">gold</field> @@ -253,8 +263,11 @@ result = get_posts(cr, uid, context=context) <field name="computation_mode">count</field> <field name="display_mode">boolean</field> <field name="model_id" eval="ref('website_forum.model_forum_post')" /> - <field name="domain">[('create_uid', '=', user.id), ('parent_id', '!=', False), ('parent_id.create_uid', '=', user.id), ('vote_count', '>=', 3)]</field> <field name="condition">higher</field> + <field name="domain">[('self_reply', '=', True), ('vote_count', '>=', 4)]</field> + <field name="batch_mode">True</field> + <field name="batch_distinctive_field" eval="ref('website_forum.field_forum_post_create_uid')" /> + <field name="batch_user_expression">user.id</field> </record> <record model="gamification.challenge" id="challenge_self_learner"> <field name="name">Self-Learner</field> @@ -262,6 +275,7 @@ result = get_posts(cr, uid, context=context) <field name="visibility_mode">personal</field> <field name="report_message_frequency">never</field> <field name="reward_id" eval="ref('badge_a_8')" /> + <field name="reward_realtime">True</field> <field name="autojoin_group_id" eval="ref('base.group_user')"/> <field name="state">inprogress</field> <field name="category">forum</field> @@ -270,7 +284,7 @@ result = get_posts(cr, uid, context=context) <field name="definition_id" eval="ref('definition_self_learner')"/> <field name="target_goal">1</field> <field name="challenge_id" eval="ref('challenge_self_learner')"/> - </record> --> + </record> </data> </openerp>
\ No newline at end of file diff --git a/addons/website_forum/models/forum.py b/addons/website_forum/models/forum.py index 74f4d9e5393..cd22992f6b3 100644 --- a/addons/website_forum/models/forum.py +++ b/addons/website_forum/models/forum.py @@ -97,6 +97,12 @@ class Post(osv.Model): res[post.id] = any(answer.create_uid.id == uid for answer in post.child_ids) return res + def _is_self_reply(self, cr, uid, ids, field_name, arg, context=None): + res = dict.fromkeys(ids, False) + for post in self.browse(cr, uid, ids, context=context): + res[post.id] = post.parent_id and post.parent_id.create_uid == post.create_uid or False + return res + _columns = { 'name': fields.char('Title', size=128), 'forum_id': fields.many2one('forum.forum', 'Forum', required=True), @@ -137,6 +143,10 @@ class Post(osv.Model): }), # hierarchy 'parent_id': fields.many2one('forum.post', 'Question', ondelete='cascade'), + 'self_reply': fields.function(_is_self_reply, 'Reply to own question', type='boolean', + store={ + 'forum.post': (lambda self, cr, uid, ids, c={}: ids, ['parent_id', 'create_uid'], 10), + }), 'child_ids': fields.one2many('forum.post', 'parent_id', 'Answers'), 'child_count': fields.function( _get_child_count, string="Answers", type='integer', |
