[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.controllers.main import Website as controllers
from openerp.addons.website.models.website import slug from openerp.addons.website.models.website import slug
from openerp.tools import html2plaintext from openerp.tools import html2plaintext
from openerp.tools.translate import _
controllers = controllers() controllers = controllers()
@ -24,12 +23,13 @@ class WebsiteForum(http.Controller):
def _get_notifications(self): def _get_notifications(self):
cr, uid, context = request.cr, request.uid, request.context cr, uid, context = request.cr, request.uid, request.context
Message = request.registry['mail.message'] Message = request.registry['mail.message']
BadgeUser = request.registry['gamification.badge.user'] badge_st_id = request.registry['ir.model.data'].xmlid_to_res_id(cr, uid, 'gamification.mt_badge_granted')
#notification to user. if badge_st_id:
badgeuser_ids = BadgeUser.search(cr, uid, [('user_id', '=', uid)], context=context) msg_ids = Message.search(cr, uid, [('subtype_id', '=', badge_st_id), ('to_read', '=', True)], context=context)
notification_ids = Message.search(cr, uid, [('res_id', 'in', badgeuser_ids), ('model', '=', 'gamification.badge.user'), ('to_read', '=', True)], context=context) msg = Message.browse(cr, uid, msg_ids, context=context)
notifications = Message.browse(cr, uid, notification_ids, context=context) else:
return notifications msg = list()
return msg
def _prepare_forum_values(self, forum=None, **kwargs): def _prepare_forum_values(self, forum=None, **kwargs):
user = request.registry['res.users'].browse(request.cr, request.uid, request.uid, context=request.context) 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(), 'notifications': self._get_notifications(),
'header': kwargs.get('header', dict()), 'header': kwargs.get('header', dict()),
'searches': kwargs.get('searches', dict())} 'searches': kwargs.get('searches', dict())}
values.update(kwargs)
if forum: if forum:
values['forum'] = forum values['forum'] = forum
elif kwargs.get('forum_id'): 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 return values
# Forum # 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) 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))) return werkzeug.utils.redirect("/forum/%s/question/%s" % (slug(forum), slug(question)))
# Answers
# --------------------------------------------------
# Post # 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) @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): def post_comment(self, forum, post, **kwargs):
# tde: fix post / question
if not request.session.uid: if not request.session.uid:
return login_redirect() return login_redirect()
question = post.parent_id if post.parent_id else post 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))) 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) @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: if not request.session.uid:
return {'error': 'anonymous_user'} return {'error': 'anonymous_user'}
return request.registry['forum.post'].vote(request.cr, request.uid, [post.id], upvote=True, context=request.context) 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) @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): def post_downvote(self, forum, post, **kwargs):
# check for karma and not self vote
if not request.session.uid: if not request.session.uid:
return {'error': 'anonymous_user'} return {'error': 'anonymous_user'}
return request.registry['forum.post'].vote(request.cr, request.uid, [post.id], upvote=False, context=request.context) 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) 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) @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): def save_edited_profile(self, forum, user, **kwargs):
cr, uid, context = request.cr, request.uid, request.context request.registry['res.users'].write(request.cr, request.uid, [user.id], {
user = request.registry['res.users'].browse(cr, uid, int(post.get('user_id')),context=context) 'name': kwargs.get('name'),
request.registry['res.partner'].write( cr, uid, [user.partner_id.id], { 'website': kwargs.get('website'),
'name': post.get('name'), 'email': kwargs.get('email'),
'website': post.get('website'), 'city': kwargs.get('city'),
'email': post.get('email'), 'country_id': kwargs.get('country'),
'city': post.get('city'), 'website_description': kwargs.get('description'),
'country_id': post.get('country'), }, context=request.context)
'website_description': post.get('description'), user.refresh()
}, context=context) return werkzeug.utils.redirect("/forum/%s/user/%s" % (slug(forum), slug(user)))
return werkzeug.utils.redirect("/forum/%s/user/%s" % (slug(forum),post.get('user_id')))
# Badges # 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): def badges(self, forum, **searches):
cr, uid, context = request.cr, request.uid, request.context cr, uid, context = request.cr, request.uid, request.context
Badge = request.registry['gamification.badge'] 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) badges = Badge.browse(cr, uid, badge_ids, context=context)
values = self._prepare_forum_values(forum=forum, searches={'badges': True}) values = self._prepare_forum_values(forum=forum, searches={'badges': True})
values.update({ values.update({
@ -513,9 +510,8 @@ class WebsiteForum(http.Controller):
def badge_users(self, forum, badge, **kwargs): def badge_users(self, forum, badge, **kwargs):
user_ids = [badge_user.user_id.id for badge_user in badge.owner_ids] 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) 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({ values.update({
'badge': badge, 'badge': badge,
'users': users, 'users': users,