[mrg]:lp:~openerp-dev/openobject-addons/trunk-website-forum-tpa

bzr revid: sunilsharma.sharma07@gmail.com-20140319121853-6h9pmz1zxr8fk5vy
This commit is contained in:
Sunil Sharma (OpenERP) 2014-03-19 17:48:53 +05:30
commit cf338062c9
4 changed files with 103 additions and 31 deletions

View File

@ -34,7 +34,9 @@ class gamification_badge_user(osv.Model):
_name = 'gamification.badge.user'
_description = 'Gamification user badge'
_inherit = ['mail.thread']
_order = "create_date desc"
_rec_name = "badge_name"
_columns = {
'user_id': fields.many2one('res.users', string="User", required=True),
@ -57,16 +59,16 @@ class gamification_badge_user(osv.Model):
"""
res = True
temp_obj = self.pool.get('email.template')
user_obj = self.pool.get('res.users')
template_id = self.pool['ir.model.data'].get_object(cr, uid, 'gamification', 'email_template_badge_received', context)
for badge_user in self.browse(cr, uid, ids, context=context):
body_html = temp_obj.render_template(cr, uid, template_id.body_html, 'gamification.badge.user', badge_user.id, context=context)
res = user_obj.message_post(cr, uid, badge_user.user_id.id, body=body_html, context=context)
res = self.message_post(cr, uid, badge_user.id, body=body_html, partner_ids=[badge_user.user_id.partner_id.id], context=context)
return res
def create(self, cr, uid, vals, context=None):
create_context = dict(context, mail_create_nolog=True)
self.pool.get('gamification.badge').check_granting(cr, uid, badge_id=vals.get('badge_id'), context=context)
return super(gamification_badge_user, self).create(cr, uid, vals, context=context)
return super(gamification_badge_user, self).create(cr, uid, vals, context=create_context)
class gamification_badge(osv.Model):

View File

@ -53,6 +53,15 @@ class website_forum(http.Controller):
}, context=request.context)
return request.redirect("/forum/%s" % forum_id)
def _get_notifications(self, **kwargs):
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)
return Message.browse(cr, uid, notification_ids, context=context)
@http.route(['/forum/<model("website.forum"):forum>', '/forum/<model("website.forum"):forum>/page/<int:page>'], type='http', auth="public", website=True, multilang=True)
def questions(self, forum, page=1, filters='', sorting='', **searches):
cr, uid, context = request.cr, request.uid, request.context
@ -94,6 +103,7 @@ class website_forum(http.Controller):
'uid': uid,
'total_questions': question_count,
'question_ids': question_ids,
'notifications': self._get_notifications(),
'forum': forum,
'pager': pager,
'filters': filters,
@ -103,14 +113,27 @@ class website_forum(http.Controller):
return request.website.render("website_forum.index", values)
@http.route('/forum/notification_read/', type='json', auth="user", multilang=True, methods=['POST'], website=True)
def notification_read(self, **kwarg):
request.registry['mail.message'].set_message_read(request.cr, request.uid, [int(kwarg.get('notification_id'))], read=True, context=request.context)
return True
@http.route(['/forum/<model("website.forum"):forum>/faq'], type='http', auth="public", website=True, multilang=True)
def faq(self, forum, **post):
values = { 'searches': {}, 'forum':forum }
values = {
'searches': {},
'forum':forum,
'notifications': self._get_notifications(),
}
return request.website.render("website_forum.faq", values)
@http.route(['/forum/<model("website.forum"):forum>/ask'], type='http', auth="public", website=True, multilang=True)
def question_ask(self, forum, **post):
values = { 'searches': {}, 'forum': forum }
values = {
'searches': {},
'forum': forum,
'notifications': self._get_notifications(),
}
return request.website.render("website_forum.ask_question", values)
@http.route(['/forum/<model("website.forum"):forum>/question/<model("website.forum.post"):question>'], type='http', auth="public", website=True, multilang=True)
@ -122,6 +145,7 @@ class website_forum(http.Controller):
filters = 'question'
values = {
'question': question,
'notifications': self._get_notifications(),
'searches': post,
'filters': filters,
'answer_done': answer_done,
@ -162,6 +186,7 @@ class website_forum(http.Controller):
Activity = request.registry['mail.message']
Data = request.registry["ir.model.data"]
#questions asked by user.
question_ids = Post.search(cr, uid, [('forum_id', '=', forum.id), ('user_id', '=', user.id), ('parent_id', '=', False)], context=context)
user_questions = Post.browse(cr, uid, question_ids, context=context)
@ -170,16 +195,21 @@ class website_forum(http.Controller):
user_answers = Post.browse(cr, uid, obj_ids, context=context)
answers = [answer.parent_id for answer in user_answers]
#votes which given on users questions and answers.
total_votes = Vote.search(cr, uid, [('post_id.forum_id', '=', forum.id), ('post_id.user_id', '=', user.id)], count=True, context=context)
up_votes = Vote.search(cr, uid, [('post_id.forum_id', '=', forum.id), ('post_id.user_id', '=', user.id), ('vote', '=', '1')], count=True, context=context)
down_votes = Vote.search(cr, uid, [('post_id.forum_id', '=', forum.id), ('post_id.user_id', '=', user.id), ('vote', '=', '-1')], count=True, context=context)
#Votes which given by users on others questions and answers.
post_votes = Vote.search(cr, uid, [('user_id', '=', uid)], context=context)
vote_ids = Vote.browse(cr, uid, post_votes, context=context)
#activity by user.
user_post_ids = question_ids + obj_ids
model, comment = Data.get_object_reference(cr, uid, 'mail', 'mt_comment')
activity_ids = Activity.search(cr, uid, [('res_id', 'in', user_post_ids), ('model', '=', 'website.forum.post'), '|', ('subtype_id', '!=', comment), ('subtype_id', '=', False)], context=context)
activities = Activity.browse(cr, uid, activity_ids, context=context)
posts = {}
for act in activities:
posts[act.res_id] = True
@ -200,7 +230,9 @@ class website_forum(http.Controller):
'up_votes': up_votes,
'down_votes': down_votes,
'activities': activities,
'posts': posts
'posts': posts,
'vote_post':vote_ids,
'notifications': self._get_notifications(),
}
return request.website.render("website_forum.user_detail_full", values)
@ -245,6 +277,7 @@ class website_forum(http.Controller):
values = {
'post': post,
'post_answer': post_answer,
'notifications': self._get_notifications(),
'forum': forum,
'searches': kwargs
}
@ -271,6 +304,7 @@ class website_forum(http.Controller):
values = {
'question_ids': question_ids,
'notifications': self._get_notifications(),
'pager': pager,
'forum': forum,
'searches': kwargs
@ -285,6 +319,7 @@ class website_forum(http.Controller):
tags = Tag.browse(cr, uid, obj_ids, context=context)
values = {
'tags': tags,
'notifications': self._get_notifications(),
'forum': forum,
'searches': {'tags': True}
}
@ -298,6 +333,7 @@ class website_forum(http.Controller):
badges = Badge.browse(cr, uid, badge_ids, context=context)
values = {
'badges': badges,
'notifications': [],
'forum': forum,
'searches': {'badges': True}
}
@ -310,6 +346,7 @@ class website_forum(http.Controller):
values = {
'badge': badge,
'notifications': [],
'users': users,
'forum': forum,
'searches': kwargs
@ -331,6 +368,7 @@ class website_forum(http.Controller):
values = {
'users': users,
'notifications': self._get_notifications(),
'pager': pager,
'forum': forum,
'searches': searches,
@ -364,7 +402,8 @@ class website_forum(http.Controller):
values = {
'post': post,
'forum': forum,
'searches': kwarg
'searches': kwarg,
'notifications': self._get_notifications(),
}
return request.website.render("website_forum.edit_question", values)
@ -382,7 +421,8 @@ class website_forum(http.Controller):
'post': post,
'post_answer': answer,
'forum': forum,
'searches': kwarg
'searches': kwarg,
'notifications': self._get_notifications(),
}
return request.website.render("website_forum.edit_answer", values)
@ -415,6 +455,7 @@ class website_forum(http.Controller):
'forum': forum,
'searches': kwarg,
'countries': countries,
'notifications': self._get_notifications(),
}
return request.website.render("website_forum.edit_profile", values)

View File

@ -90,7 +90,15 @@ $(document).ready(function () {
.then(function (data) {
$link.parents('#comment').remove();
});
return false;
return true;
});
$('.notification_close').on('click', function (ev) {
ev.preventDefault();
var $link = $(ev.currentTarget);
openerp.jsonRpc("/forum/notification_read/", 'call', {
'notification_id': $link.attr("id")})
return true;
});
});

View File

@ -66,7 +66,7 @@
<template id="header" name="Forum Index">
<t t-call="website.layout">
<t t-set="head">
<link rel='stylesheet' href='/website_forum/static/src/css/website_forum.css' />
<link rel='stylesheet' href='/website_forum/static/src/css/website_forum.css'/>
</t>
<div class="container mt16">
<div class="navbar navbar-default">
@ -100,7 +100,7 @@
<div class="form-group">
<input type="search" class="form-control"
name="search" placeholder="Search a question..."
t-att-value="searches.get('search') or ''" />
t-att-value="searches.get('search') or ''"/>
<button type="submit" class="btn btn-default">Search</button>
</div>
</form>
@ -111,13 +111,14 @@
<div id="wrap" class="container">
<div class="row">
<div class="col-sm-9">
<div class="alert alert-success alert-dismissable">
<button type="button" class="close" data-dismiss="alert" aria-hidden="true">&amp;times;</button>
<strong>Congratulation!</strong> You received the <em>New Author</em> badge!<br/>
<div t-foreach="notifications" t-as="notification" class="alert alert-success alert-dismissable">
<button type="button" class="close notification_close" t-att-id="notification.id" data-dismiss="alert" aria-hidden="true">&amp;times;</button>
<div t-field="notification.body"/>
<a t-attf-href="/forum/#{ slug(forum) }/badge" class="fa fa-arrow-right">View Your Badges</a>
</div>
<t t-raw="0"/>
</div><div class="col-sm-3" id="right-column">
</div>
<div class="col-sm-3" id="right-column">
<a class="btn btn-primary btn-lg btn-block mb16" t-attf-href="/forum/#{ slug(forum) }/ask">Ask a Question</a>
<div t-field="forum.right_column"/>
</div>
@ -189,9 +190,9 @@
</small>
</h1>
<div t-foreach="question_ids" t-as="question" class="mb16">
<t t-call="website_forum.post_list" />
<t t-call="website_forum.post_list"/>
</div>
<t t-call="website.pager" />
<t t-call="website.pager"/>
</t>
</template>
@ -380,7 +381,7 @@
</div>
</div>
<div style="margin-left: 95px;" class="clearfix">
<t t-raw="answer.content" />
<t t-raw="answer.content"/>
<div class="mt16">
<ul class="list-inline pull-right">
<li>
@ -418,11 +419,9 @@
<div class="col-sm-10 col-sm-offset-2">
<div t-foreach="reversed(object.website_message_ids)" t-as="message" id="comment" class="oe_grey" style="padding: 4px;">
<small class="text-muted">
<t t-if="uid == message.create_uid.id">
<button type="button" t-att-id="message.id" class="close comment_delete">&amp;times;</button>
</t>
<div t-field="message.body"/>
<a t-attf-href="/forum/#{ slug(forum) }/user/#{ message.create_uid.id }" t-field="message.create_uid"/>
<button type="button" t-if="uid == message.create_uid.id" t-att-id="message.id" class="close comment_delete">&amp;times;</button>
<span t-field="message.body"/>
<a t-attf-href="/forum/#{ slug(forum) }/user/#{ message.create_uid.id }" t-field="message.create_uid"/>
on <span t-field="message.date" t-field-options='{"format":"short"}'/>
</small>
</div>
@ -450,7 +449,7 @@
<div class="row">
<div class="col-sm-3 mt16" t-foreach="tags" t-as="tag">
<a t-attf-href="/forum/#{ slug(forum) }/tag/#{ slug(tag) }" class="badge">
<span t-field="tag.name" />
<span t-field="tag.name"/>
</a>
<span>
X <t t-esc="tag.posts_count"/>
@ -477,7 +476,7 @@
<span t-if="badge.level == 'gold'" class="fa fa-circle badge-gold"/>
<span t-if="badge.level == 'silver'" class="fa fa-circle badge-silver"/>
<span t-if="badge.level == 'bronze'" class="fa fa-circle badge-bronze"/>
<span t-field="badge.name" />
<span t-field="badge.name"/>
</a>
</td><td>
<b t-esc="badge.stat_count_distinct"/>
@ -531,7 +530,7 @@
</div>
</div>
<div class="pull-left">
<t t-call="website.pager" />
<t t-call="website.pager"/>
</div>
</t>
</template>
@ -656,26 +655,32 @@
<li>
<a href="#followed_question" data-toggle="tab">Followed Question</a>
</li>
<li>
<a href="#votes" data-toggle="tab">Votes</a>
</li>
</ul>
<div class="tab-content mt16">
<div class="tab-pane active" id="questions">
<div t-foreach="questions" t-as="question">
<t t-call="website_forum.post_list" />
<t t-call="website_forum.post_list"/>
</div>
</div><div class="tab-pane" id="answers">
<div t-foreach="answers" t-as="question">
<t t-call="website_forum.post_list" />
<t t-call="website_forum.post_list"/>
</div>
</div>
<div class="tab-pane" id="karma">
<h1>Karma</h1>
</div>
<div class="tab-pane" id="badges">
<t t-call="website_forum.user_badges" />
<t t-call="website_forum.user_badges"/>
</div>
<div class="tab-pane" id="followed_question">
<h1>Followed Questions</h1>
</div>
<div class="tab-pane" id="votes">
<t t-call="website_forum.user_votes"/>
</div>
<div class="tab-pane" id="activity">
<ul class="list-unstyled">
<li t-foreach="activities" t-as="activity">
@ -701,7 +706,7 @@
<div class="row mb16">
<div class="col-sm-3 mt16" t-foreach="user.badges" t-as="badge">
<a t-attf-href="/forum/#{ slug(forum) }/badge/#{ slug(badge.badge_id) }" class="badge">
<span t-field="badge.badge_id.name" />
<span t-field="badge.badge_id.name"/>
</a>
<span>
X <t t-esc="badge.badge_id.stat_count_distinct"/>
@ -714,5 +719,21 @@
</div>
</template>
<template id="user_votes">
<div t-foreach="vote_post" t-as="vote">
<t t-esc="vote.post_id.create_date"/>
<span t-if="vote.vote == '1'" class="fa fa-thumbs-up text-success" style="margin-left:30px"/>
<span t-if="vote.vote == '-1'" class="fa fa-thumbs-down text-warning" style="margin-left:30px"/>
<t t-if="vote.post_id.parent_id">
<a t-attf-href="/forum/#{ slug(forum) }/question/#{ vote.post_id.parent_id.id }/#answer-#{ vote.post_id.id }" t-esc="vote.post_id.parent_id.name" style="margin-left:10px"/>
</t>
<t t-if="not vote.post_id.parent_id">
<a t-attf-href="/forum/#{ slug(forum) }/question/#{ vote.post_id.id }" style=" color:black;margin-left:10px" t-esc="vote.post_id.name"/>
</t>
</div>
<div class="mb16" t-if="not vote_post">
<b>No vote given by you yet!</b>
</div>
</template>
</data>
</openerp>