[ADD] added new functionality to follow question and improved some code.
bzr revid: tpa@tinyerp.com-20140328051606-sgrmo7nlwtvps966
This commit is contained in:
parent
804ef37691
commit
02735c1982
|
@ -158,16 +158,25 @@ class website_forum(http.Controller):
|
||||||
request.session[request.session_id].append(question.id)
|
request.session[request.session_id].append(question.id)
|
||||||
post_obj._set_view_count(cr, SUPERUSER_ID, [question.id], 'views', 1, {}, context=context)
|
post_obj._set_view_count(cr, SUPERUSER_ID, [question.id], 'views', 1, {}, context=context)
|
||||||
|
|
||||||
|
#Check that user have answered question or not.
|
||||||
answer_done = False
|
answer_done = False
|
||||||
for answer in question.child_ids:
|
for answer in question.child_ids:
|
||||||
if answer.user_id.id == request.uid:
|
if answer.user_id.id == request.uid:
|
||||||
answer_done = True
|
answer_done = True
|
||||||
|
|
||||||
|
#Check that user is following question or not
|
||||||
|
partner_id = request.registry['res.users'].browse(cr, uid, request.uid, context=context).partner_id.id
|
||||||
|
message_follower_ids = [follower.id for follower in question.message_follower_ids]
|
||||||
|
following = True if partner_id in message_follower_ids else False
|
||||||
|
|
||||||
filters = 'question'
|
filters = 'question'
|
||||||
values = {
|
values = {
|
||||||
'question': question,
|
'question': question,
|
||||||
|
'question_data': True,
|
||||||
'notifications': self._get_notifications(),
|
'notifications': self._get_notifications(),
|
||||||
'searches': post,
|
'searches': post,
|
||||||
'filters': filters,
|
'filters': filters,
|
||||||
|
'following': following,
|
||||||
'answer_done': answer_done,
|
'answer_done': answer_done,
|
||||||
'reversed': reversed,
|
'reversed': reversed,
|
||||||
'forum': forum,
|
'forum': forum,
|
||||||
|
@ -205,29 +214,40 @@ class website_forum(http.Controller):
|
||||||
Post = request.registry['website.forum.post']
|
Post = request.registry['website.forum.post']
|
||||||
Vote = request.registry['website.forum.post.vote']
|
Vote = request.registry['website.forum.post.vote']
|
||||||
Activity = request.registry['mail.message']
|
Activity = request.registry['mail.message']
|
||||||
|
Followers = request.registry['mail.followers']
|
||||||
Data = request.registry["ir.model.data"]
|
Data = request.registry["ir.model.data"]
|
||||||
|
|
||||||
#questions asked by user.
|
#questions and answers by user.
|
||||||
question_ids = Post.search(cr, uid, [('forum_id', '=', forum.id), ('user_id', '=', user.id), ('parent_id', '=', False),
|
user_questions, user_answers = [], []
|
||||||
|
user_post_ids = Post.search(cr, uid, [('forum_id', '=', forum.id), ('user_id', '=', user.id),
|
||||||
'|', ('active', '=', False), ('active', '=', True)], context=context)
|
'|', ('active', '=', False), ('active', '=', True)], context=context)
|
||||||
user_questions = Post.browse(cr, uid, question_ids, context=context)
|
user_posts = Post.browse(cr, uid, user_post_ids, context=context)
|
||||||
|
for record in user_posts:
|
||||||
|
if record.parent_id:
|
||||||
|
user_answers.append(record)
|
||||||
|
else:
|
||||||
|
user_questions.append(record)
|
||||||
|
|
||||||
#showing questions in which user answered
|
#showing questions which user following
|
||||||
obj_ids = Post.search(cr, uid, [('forum_id', '=', forum.id), ('user_id', '=', user.id), ('parent_id', '!=', False)], context=context)
|
obj_ids = Followers.search(cr, SUPERUSER_ID, [('res_model', '=', 'website.forum.post'),('partner_id' , '=' , user.partner_id.id)], context=context)
|
||||||
user_answers = Post.browse(cr, uid, obj_ids, context=context)
|
post_ids = [follower.res_id for follower in Followers.browse(cr, uid, obj_ids, context=context)]
|
||||||
answers = [answer.parent_id for answer in user_answers]
|
que_ids = Post.search(cr, uid, [('id', 'in', post_ids), ('forum_id', '=', forum.id), ('parent_id', '=', False)], context=context)
|
||||||
|
followed = Post.browse(cr, uid, que_ids, context=context)
|
||||||
|
|
||||||
#votes which given on users questions and 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)
|
data = Vote.read_group(cr, uid, [('post_id.forum_id', '=', forum.id), ('post_id.user_id', '=', user.id)], ["vote"], groupby=["vote"], 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)
|
for rec in data:
|
||||||
down_votes = Vote.search(cr, uid, [('post_id.forum_id', '=', forum.id), ('post_id.user_id', '=', user.id), ('vote', '=', '-1')], count=True, context=context)
|
if rec['vote'] == '1':
|
||||||
|
up_votes = rec['vote_count']
|
||||||
|
elif rec['vote'] == '-1':
|
||||||
|
down_votes = rec['vote_count']
|
||||||
|
total_votes = up_votes + down_votes
|
||||||
|
|
||||||
#Votes which given by users on others questions and answers.
|
#Votes which given by users on others questions and answers.
|
||||||
post_votes = Vote.search(cr, uid, [('user_id', '=', user.id)], context=context)
|
post_votes = Vote.search(cr, uid, [('user_id', '=', user.id)], context=context)
|
||||||
vote_ids = Vote.browse(cr, uid, post_votes, context=context)
|
vote_ids = Vote.browse(cr, uid, post_votes, context=context)
|
||||||
|
|
||||||
#activity by user.
|
#activity by user.
|
||||||
user_post_ids = question_ids + obj_ids
|
|
||||||
model, comment = Data.get_object_reference(cr, uid, 'mail', 'mt_comment')
|
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)
|
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)
|
activities = Activity.browse(cr, uid, activity_ids, context=context)
|
||||||
|
@ -248,6 +268,7 @@ class website_forum(http.Controller):
|
||||||
'forum': forum,
|
'forum': forum,
|
||||||
'questions': user_questions,
|
'questions': user_questions,
|
||||||
'answers': user_answers,
|
'answers': user_answers,
|
||||||
|
'followed': followed,
|
||||||
'total_votes': total_votes,
|
'total_votes': total_votes,
|
||||||
'up_votes': up_votes,
|
'up_votes': up_votes,
|
||||||
'down_votes': down_votes,
|
'down_votes': down_votes,
|
||||||
|
@ -591,3 +612,23 @@ class website_forum(http.Controller):
|
||||||
tags = request.registry['website.forum.tag'].search_read(request.cr, request.uid, [], ['name'], context=request.context)
|
tags = request.registry['website.forum.tag'].search_read(request.cr, request.uid, [], ['name'], context=request.context)
|
||||||
data = [tag['name'] for tag in tags]
|
data = [tag['name'] for tag in tags]
|
||||||
return simplejson.dumps(data)
|
return simplejson.dumps(data)
|
||||||
|
|
||||||
|
@http.route('/forum/<model("website.forum"):forum>/question/<model("website.forum.post"):post>/subscribe', type='http', auth="public", multilang=True, website=True)
|
||||||
|
def subscribe(self, forum, post, **kwarg):
|
||||||
|
cr, uid, context = request.cr, request.uid, request.context
|
||||||
|
if not request.session.uid:
|
||||||
|
return login_redirect()
|
||||||
|
partner_id = request.registry['res.users'].browse(cr, uid, request.uid, context=context).partner_id.id
|
||||||
|
post_ids = [child.id for child in post.child_ids]
|
||||||
|
post_ids.append(post.id)
|
||||||
|
request.registry['website.forum.post'].message_subscribe( cr, uid, post_ids, [partner_id], context=context)
|
||||||
|
return werkzeug.utils.redirect("/forum/%s/question/%s" % (slug(forum),post.id))
|
||||||
|
|
||||||
|
@http.route('/forum/<model("website.forum"):forum>/question/<model("website.forum.post"):post>/unsubscribe', type='http', auth="user", multilang=True, website=True)
|
||||||
|
def unsubscribe(self, forum, post, **kwarg):
|
||||||
|
cr, uid, context = request.cr, request.uid, request.context
|
||||||
|
partner_id = request.registry['res.users'].browse(cr, uid, request.uid, context=context).partner_id.id
|
||||||
|
post_ids = [child.id for child in post.child_ids]
|
||||||
|
post_ids.append(post.id)
|
||||||
|
request.registry['website.forum.post'].message_unsubscribe( cr, uid, post_ids, [partner_id], context=context)
|
||||||
|
return werkzeug.utils.redirect("/forum/%s/question/%s" % (slug(forum),post.id))
|
||||||
|
|
|
@ -27,28 +27,28 @@
|
||||||
<record id="mt_question_create" model="mail.message.subtype">
|
<record id="mt_question_create" model="mail.message.subtype">
|
||||||
<field name="name">Asked a question</field>
|
<field name="name">Asked a question</field>
|
||||||
<field name="res_model">website.forum.post</field>
|
<field name="res_model">website.forum.post</field>
|
||||||
<field name="default" eval="False"/>
|
<field name="default" eval="True"/>
|
||||||
<field name="description">Asked a question</field>
|
<field name="description">Asked a question</field>
|
||||||
</record>
|
</record>
|
||||||
|
|
||||||
<record id="mt_answer_create" model="mail.message.subtype">
|
<record id="mt_answer_create" model="mail.message.subtype">
|
||||||
<field name="name">Answered a question</field>
|
<field name="name">Answered a question</field>
|
||||||
<field name="res_model">website.forum.post</field>
|
<field name="res_model">website.forum.post</field>
|
||||||
<field name="default" eval="False"/>
|
<field name="default" eval="True"/>
|
||||||
<field name="description">Answered a question</field>
|
<field name="description">Answered a question</field>
|
||||||
</record>
|
</record>
|
||||||
|
|
||||||
<record id="mt_question_edit" model="mail.message.subtype">
|
<record id="mt_question_edit" model="mail.message.subtype">
|
||||||
<field name="name">Question edited</field>
|
<field name="name">Question edited</field>
|
||||||
<field name="res_model">website.forum.post</field>
|
<field name="res_model">website.forum.post</field>
|
||||||
<field name="default" eval="False"/>
|
<field name="default" eval="True"/>
|
||||||
<field name="description">Question edited</field>
|
<field name="description">Question edited</field>
|
||||||
</record>
|
</record>
|
||||||
|
|
||||||
<record id="mt_answer_edit" model="mail.message.subtype">
|
<record id="mt_answer_edit" model="mail.message.subtype">
|
||||||
<field name="name">Answer edited</field>
|
<field name="name">Answer edited</field>
|
||||||
<field name="res_model">website.forum.post</field>
|
<field name="res_model">website.forum.post</field>
|
||||||
<field name="default" eval="False"/>
|
<field name="default" eval="True"/>
|
||||||
<field name="description">Answer edited</field>
|
<field name="description">Answer edited</field>
|
||||||
</record>
|
</record>
|
||||||
|
|
||||||
|
|
|
@ -126,6 +126,35 @@
|
||||||
<div class="col-sm-3" id="right-column">
|
<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>
|
<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 t-field="forum.right_column"/>
|
||||||
|
<div t-if="question_data">
|
||||||
|
<div class="panel panel-default">
|
||||||
|
<div class="panel-heading text-center">
|
||||||
|
<h3 class="panel-title">Question tools</h3>
|
||||||
|
</div>
|
||||||
|
<div class="panel-body text-center">
|
||||||
|
<a class="btn btn-block btn-default btn-md" t-if="not following"
|
||||||
|
t-attf-href="/forum/#{ slug(forum) }/question/#{ question.id }/subscribe">Follow</a>
|
||||||
|
<a class="btn btn-block btn-default btn-md" t-if="following"
|
||||||
|
t-attf-href="/forum/#{ slug(forum) }/question/#{ question.id }/unsubscribe">UnFollow</a>
|
||||||
|
<div class="mt8">
|
||||||
|
<strong><t t-raw="len(question.message_follower_ids)"/></strong> follower
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="panel-heading text-center">
|
||||||
|
<h3 class="panel-title ">Stats</h3>
|
||||||
|
</div>
|
||||||
|
<div class="panel-body">
|
||||||
|
<table class="table">
|
||||||
|
<thead><tr><td> Asked: <strong><span t-field="question.create_date" t-field-options='{"format":"short"}'/></strong></td></tr></thead>
|
||||||
|
<tr><td> Seen: <strong><t t-raw="question.views"/></strong>
|
||||||
|
<span t-if="question.views>1">times</span>
|
||||||
|
<span t-if="question.views<=1">time</span>
|
||||||
|
</td></tr>
|
||||||
|
<tr><td> Last updated: <strong><span t-field="question.write_date" t-field-options='{"format":"short"}'/></strong></td></tr>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
@ -744,9 +773,11 @@
|
||||||
<div class="tab-pane" id="badges">
|
<div class="tab-pane" id="badges">
|
||||||
<t t-call="website_forum.user_badges"/>
|
<t t-call="website_forum.user_badges"/>
|
||||||
</div>
|
</div>
|
||||||
<!--div class="tab-pane" id="followed_question">
|
<div class="tab-pane" id="followed_question">
|
||||||
<h1>Followed Questions</h1>
|
<div t-foreach="followed" t-as="question">
|
||||||
</div-->
|
<t t-call="website_forum.post_list"/>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
<div class="tab-pane" id="votes">
|
<div class="tab-pane" id="votes">
|
||||||
<t t-call="website_forum.user_votes"/>
|
<t t-call="website_forum.user_votes"/>
|
||||||
</div>
|
</div>
|
||||||
|
|
Loading…
Reference in New Issue