[FIX] website_forum: cleaning in notification fetch + in profil editoin

bzr revid: tde@openerp.com-20140411180637-n1q4rmac5q1amqrw
This commit is contained in:
Thibault Delavallée 2014-04-11 20:06:37 +02:00
parent 7d834f0579
commit 2ec3a40334
1 changed files with 26 additions and 30 deletions

View File

@ -12,7 +12,6 @@ from openerp.addons.web.http import request
from openerp.addons.website.controllers.main import Website as controllers
from openerp.addons.website.models.website import slug
from openerp.tools import html2plaintext
from openerp.tools.translate import _
controllers = controllers()
@ -24,12 +23,13 @@ class WebsiteForum(http.Controller):
def _get_notifications(self):
cr, uid, context = request.cr, request.uid, request.context
Message = request.registry['mail.message']
BadgeUser = request.registry['gamification.badge.user']
#notification to user.
badgeuser_ids = BadgeUser.search(cr, uid, [('user_id', '=', uid)], context=context)
notification_ids = Message.search(cr, uid, [('res_id', 'in', badgeuser_ids), ('model', '=', 'gamification.badge.user'), ('to_read', '=', True)], context=context)
notifications = Message.browse(cr, uid, notification_ids, context=context)
return notifications
badge_st_id = request.registry['ir.model.data'].xmlid_to_res_id(cr, uid, 'gamification.mt_badge_granted')
if badge_st_id:
msg_ids = Message.search(cr, uid, [('subtype_id', '=', badge_st_id), ('to_read', '=', True)], context=context)
msg = Message.browse(cr, uid, msg_ids, context=context)
else:
msg = list()
return msg
def _prepare_forum_values(self, forum=None, **kwargs):
user = request.registry['res.users'].browse(request.cr, request.uid, request.uid, context=request.context)
@ -38,11 +38,11 @@ class WebsiteForum(http.Controller):
'notifications': self._get_notifications(),
'header': kwargs.get('header', dict()),
'searches': kwargs.get('searches', dict())}
values.update(kwargs)
if forum:
values['forum'] = forum
elif kwargs.get('forum_id'):
values['forum'] = request.registry['forum.forum'].browse(request.cr, request.uid, kwargs['forum_id'], context=request.context)
values['forum'] = request.registry['forum.forum'].browse(request.cr, request.uid, kwargs.pop('forum_id'), context=request.context)
values.update(kwargs)
return values
# Forum
@ -248,9 +248,6 @@ class WebsiteForum(http.Controller):
request.registry['forum.post'].write(request.cr, request.uid, [question.id], {'active': True}, context=request.context)
return werkzeug.utils.redirect("/forum/%s/question/%s" % (slug(forum), slug(question)))
# Answers
# --------------------------------------------------
# Post
# --------------------------------------------------
@ -268,7 +265,6 @@ class WebsiteForum(http.Controller):
@http.route('/forum/<model("forum.forum"):forum>/post/<model("forum.post"):post>/comment', type='http', auth="public", methods=['POST'], website=True)
def post_comment(self, forum, post, **kwargs):
# tde: fix post / question
if not request.session.uid:
return login_redirect()
question = post.parent_id if post.parent_id else post
@ -344,13 +340,15 @@ class WebsiteForum(http.Controller):
return werkzeug.utils.redirect("/forum/%s/question/%s" % (slug(forum), slug(question)))
@http.route('/forum/<model("forum.forum"):forum>/post/<model("forum.post"):post>/upvote', type='json', auth="public", multilang=True, website=True)
def post_vote(self, forum, post, **kwargs):
def post_upvote(self, forum, post, **kwargs):
# check for karma and not self vote
if not request.session.uid:
return {'error': 'anonymous_user'}
return request.registry['forum.post'].vote(request.cr, request.uid, [post.id], upvote=True, context=request.context)
@http.route('/forum/<model("forum.forum"):forum>/post/<model("forum.post"):post>/downvote', type='json', auth="public", multilang=True, website=True)
def post_downvote(self, forum, post, **kwargs):
# check for karma and not self vote
if not request.session.uid:
return {'error': 'anonymous_user'}
return request.registry['forum.post'].vote(request.cr, request.uid, [post.id], upvote=False, context=request.context)
@ -481,27 +479,26 @@ class WebsiteForum(http.Controller):
return request.website.render("website_forum.edit_profile", values)
@http.route('/forum/<model("forum.forum"):forum>/user/<model("res.users"):user>/save', type='http', auth="user", multilang=True, website=True)
def save_edited_profile(self, forum, **post):
cr, uid, context = request.cr, request.uid, request.context
user = request.registry['res.users'].browse(cr, uid, int(post.get('user_id')),context=context)
request.registry['res.partner'].write( cr, uid, [user.partner_id.id], {
'name': post.get('name'),
'website': post.get('website'),
'email': post.get('email'),
'city': post.get('city'),
'country_id': post.get('country'),
'website_description': post.get('description'),
}, context=context)
return werkzeug.utils.redirect("/forum/%s/user/%s" % (slug(forum),post.get('user_id')))
def save_edited_profile(self, forum, user, **kwargs):
request.registry['res.users'].write(request.cr, request.uid, [user.id], {
'name': kwargs.get('name'),
'website': kwargs.get('website'),
'email': kwargs.get('email'),
'city': kwargs.get('city'),
'country_id': kwargs.get('country'),
'website_description': kwargs.get('description'),
}, context=request.context)
user.refresh()
return werkzeug.utils.redirect("/forum/%s/user/%s" % (slug(forum), slug(user)))
# Badges
# --------------------------------------------------
@http.route(['/forum/<model("forum.forum"):forum>/badge'], type='http', auth="public", website=True, multilang=True)
@http.route('/forum/<model("forum.forum"):forum>/badge', type='http', auth="public", website=True, multilang=True)
def badges(self, forum, **searches):
cr, uid, context = request.cr, request.uid, request.context
Badge = request.registry['gamification.badge']
badge_ids = Badge.search(cr, uid, [('level', '!=', False)], context=context)
badge_ids = Badge.search(cr, uid, [('challenge_id.category', '=', 'forum')], context=context)
badges = Badge.browse(cr, uid, badge_ids, context=context)
values = self._prepare_forum_values(forum=forum, searches={'badges': True})
values.update({
@ -513,9 +510,8 @@ class WebsiteForum(http.Controller):
def badge_users(self, forum, badge, **kwargs):
user_ids = [badge_user.user_id.id for badge_user in badge.owner_ids]
users = request.registry['res.users'].browse(request.cr, SUPERUSER_ID, user_ids, context=request.context)
kwargs['badges'] = 'True'
values = self._prepare_forum_values(forum=forum)
values = self._prepare_forum_values(forum=forum, searches={'badges': True})
values.update({
'badge': badge,
'users': users,