[IMP] improved url's and controller in order to represent forum as multi-forum
bzr revid: tpa@tinyerp.com-20140304104930-5tk6upw78pu2egos
This commit is contained in:
parent
ff9833efdc
commit
782b4acaf3
|
@ -35,8 +35,23 @@ from openerp.addons.website.controllers.main import Website as controllers
|
|||
controllers = controllers()
|
||||
|
||||
class website_forum(http.Controller):
|
||||
@http.route(['/forum/', '/forum/page/<int:page>'], type='http', auth="public", website=True, multilang=True)
|
||||
def questions(self, page=1, **searches):
|
||||
|
||||
@http.route(['/forum/'], type='http', auth="public", website=True, multilang=True)
|
||||
def forum(self, **searches):
|
||||
cr, uid, context = request.cr, request.uid, request.context
|
||||
forum_obj = request.registry['website.forum']
|
||||
obj_ids = forum_obj.search(cr, uid, [], context=context)
|
||||
forum_ids = forum_obj.browse(cr, uid, obj_ids, context=context)
|
||||
|
||||
values = {
|
||||
'forum_ids': forum_ids,
|
||||
'searches': {},
|
||||
}
|
||||
|
||||
return request.website.render("website_forum.forum_index", values)
|
||||
|
||||
@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, **searches):
|
||||
cr, uid, context = request.cr, request.uid, request.context
|
||||
forum_obj = request.registry['website.forum.post']
|
||||
user_obj = request.registry['res.users']
|
||||
|
@ -58,7 +73,7 @@ class website_forum(http.Controller):
|
|||
|
||||
step = 10
|
||||
question_count = forum_obj.search(cr, uid, domain, count=True, context=context)
|
||||
pager = request.website.pager(url="/forum/", total=question_count, page=page, step=step, scope=10)
|
||||
pager = request.website.pager(url="/forum/%s/" % forum.id, total=question_count, page=page, step=step, scope=10)
|
||||
|
||||
obj_ids = forum_obj.search(cr, uid, domain, limit=step, offset=pager['offset'], context=context)
|
||||
question_ids = forum_obj.browse(cr, uid, obj_ids, context=context)
|
||||
|
@ -67,6 +82,7 @@ class website_forum(http.Controller):
|
|||
values = {
|
||||
'total_questions': question_count,
|
||||
'question_ids': question_ids,
|
||||
'forum': forum,
|
||||
'pager': pager,
|
||||
'searches': searches,
|
||||
}
|
||||
|
@ -78,23 +94,25 @@ class website_forum(http.Controller):
|
|||
values = { 'searches': {}, 'forum':forum }
|
||||
return request.website.render("website_forum.faq", values)
|
||||
|
||||
@http.route(['/forum/ask'], type='http', auth="public", website=True, multilang=True)
|
||||
def question_ask(self, **post):
|
||||
@http.route(['/forum/<model("website.forum"):forum>/ask'], type='http', auth="public", website=True, multilang=True)
|
||||
def question_ask(self, forum, **post):
|
||||
values = {
|
||||
'searches': {}
|
||||
'searches': {},
|
||||
'forum': forum
|
||||
}
|
||||
return request.website.render("website_forum.ask_question", values)
|
||||
|
||||
@http.route(['/forum/question/<model("website.forum.post"):question>/page/<page:page>'], type='http', auth="public", website=True, multilang=True)
|
||||
def question(self, question, page, **post):
|
||||
@http.route(['/forum/<model("website.forum"):forum>/question/<model("website.forum.post"):question>/page/<page:page>'], type='http', auth="public", website=True, multilang=True)
|
||||
def question(self, forum, question, page, **post):
|
||||
values = {
|
||||
'question': question,
|
||||
'main_object': question
|
||||
'main_object': question,
|
||||
'forum': forum
|
||||
}
|
||||
return request.website.render(page, values)
|
||||
|
||||
@http.route(['/forum/question/<model("website.forum.post"):question>'], type='http', auth="public", website=True, multilang=True)
|
||||
def open_question(self, question, **post):
|
||||
@http.route(['/forum/<model("website.forum"):forum>/question/<model("website.forum.post"):question>'], type='http', auth="public", website=True, multilang=True)
|
||||
def open_question(self, forum, question, **post):
|
||||
answer_done = False
|
||||
for answer in question.child_ids:
|
||||
if answer.create_uid.id == request.uid:
|
||||
|
@ -103,12 +121,13 @@ class website_forum(http.Controller):
|
|||
'question': question,
|
||||
'main_object': question,
|
||||
'searches': post,
|
||||
'answer_done': answer_done
|
||||
'answer_done': answer_done,
|
||||
'forum': forum,
|
||||
}
|
||||
return request.website.render("website_forum.post_description_full", values)
|
||||
|
||||
@http.route(['/forum/user/<model("res.users"):user>'], type='http', auth="public", website=True, multilang=True)
|
||||
def open_user(self, user, **post):
|
||||
@http.route(['/forum/<model("website.forum"):forum>/user/<model("res.users"):user>'], type='http', auth="public", website=True, multilang=True)
|
||||
def open_user(self, forum, user, **post):
|
||||
answers = {}
|
||||
for answer in user.answer_ids:
|
||||
answers[answer.parent_id] = True
|
||||
|
@ -116,27 +135,28 @@ class website_forum(http.Controller):
|
|||
'user': user,
|
||||
'main_object': user,
|
||||
'searches': post,
|
||||
'forum': forum,
|
||||
'answers': answers.keys()
|
||||
}
|
||||
return request.website.render("website_forum.user_detail_full", values)
|
||||
|
||||
@http.route('/forum/question/ask/', type='http', auth="user", multilang=True, methods=['POST'], website=True)
|
||||
def register_question(self, forum_id=1, **question):
|
||||
@http.route('/forum/<model("website.forum"):forum>/question/ask/', type='http', auth="user", multilang=True, methods=['POST'], website=True)
|
||||
def register_question(self, forum, **question):
|
||||
cr, uid, context = request.cr, request.uid, request.context
|
||||
create_context = dict(context)
|
||||
new_question_id = request.registry['website.forum.post'].create(
|
||||
request.cr, request.uid, {
|
||||
#'forum_id': forum_id,
|
||||
'forum_id': forum.id,
|
||||
'name': question.get('question_name'),
|
||||
'content': question.get('question_content'),
|
||||
#'tags' : question.get('question_tags'),
|
||||
'state': 'active',
|
||||
'active': True,
|
||||
}, context=create_context)
|
||||
return werkzeug.utils.redirect("/forum/question/%s" % new_question_id)
|
||||
return werkzeug.utils.redirect("/forum/%s/question/%s" % (forum.id,new_question_id))
|
||||
|
||||
@http.route('/forum/question/postanswer/', type='http', auth="user", multilang=True, methods=['POST'], website=True)
|
||||
def post_answer(self, post_id, forum_id=1, **question):
|
||||
@http.route('/forum/<model("website.forum"):forum>/question/postanswer/', type='http', auth="user", multilang=True, methods=['POST'], website=True)
|
||||
def post_answer(self, forum ,post_id, **question):
|
||||
# TODO: set forum on user to True
|
||||
cr, uid, context = request.cr, request.uid, request.context
|
||||
request.registry['res.users'].write(cr, uid, uid, {'forum': True}, context=context)
|
||||
|
@ -144,16 +164,16 @@ class website_forum(http.Controller):
|
|||
create_context = dict(context)
|
||||
new_question_id = request.registry['website.forum.post'].create(
|
||||
request.cr, request.uid, {
|
||||
#'forum_id': forum_id,
|
||||
'forum_id': forum.id,
|
||||
'parent_id': post_id,
|
||||
'content': question.get('answer_content'),
|
||||
'state': 'active',
|
||||
'active': True,
|
||||
}, context=create_context)
|
||||
return werkzeug.utils.redirect("/forum/question/%s" % post_id)
|
||||
return werkzeug.utils.redirect("/forum/%s/question/%s" % (forum.id,post_id))
|
||||
|
||||
@http.route(['/forum/question/editanswer'], type='http', auth="user", website=True, multilang=True)
|
||||
def edit_answer(self, post_id, **kwargs):
|
||||
@http.route(['/forum/<model("website.forum"):forum>/question/editanswer'], type='http', auth="user", website=True, multilang=True)
|
||||
def edit_answer(self, forum, post_id, **kwargs):
|
||||
cr, uid, context = request.cr, request.uid, request.context
|
||||
request.registry['res.users'].write(cr, uid, uid, {'forum': True}, context=context)
|
||||
post = request.registry['website.forum.post'].browse(cr, uid, int(post_id), context=context)
|
||||
|
@ -163,22 +183,23 @@ class website_forum(http.Controller):
|
|||
values = {
|
||||
'post': post,
|
||||
'post_answer': post_answer,
|
||||
'forum': forum,
|
||||
'searches': kwargs
|
||||
}
|
||||
return request.website.render("website_forum.edit_answer", values)
|
||||
|
||||
@http.route('/forum/question/saveanswer/', type='http', auth="user", multilang=True, methods=['POST'], website=True)
|
||||
def save_edited_answer(self, forum_id=1, **post):
|
||||
@http.route('/forum/<model("website.forum"):forum>/question/saveanswer/', type='http', auth="user", multilang=True, methods=['POST'], website=True)
|
||||
def save_edited_answer(self, forum, **post):
|
||||
cr, uid, context = request.cr, request.uid, request.context
|
||||
request.registry['res.users'].write(cr, uid, uid, {'forum': True}, context=context)
|
||||
answer_id = int(post.get('answer_id'))
|
||||
new_question_id = request.registry['website.forum.post'].write( cr, uid, [answer_id], {
|
||||
'content': post.get('answer_content'),
|
||||
}, context=context)
|
||||
return werkzeug.utils.redirect("/forum/question/%s" % post.get('post_id'))
|
||||
return werkzeug.utils.redirect("/forum/%s/question/%s" % (forum.id,post.get('post_id')))
|
||||
|
||||
@http.route(['/forum/tag/<model("website.forum.tag"):tag>'], type='http', auth="public", website=True, multilang=True)
|
||||
def tag_questions(self, tag, page=1, **kwargs):
|
||||
@http.route(['/forum/<model("website.forum"):forum>/tag/<model("website.forum.tag"):tag>'], type='http', auth="public", website=True, multilang=True)
|
||||
def tag_questions(self, forum, tag, page=1, **kwargs):
|
||||
cr, uid, context = request.cr, request.uid, request.context
|
||||
step = 10
|
||||
pager = request.website.pager(url="/forum/", total=len(tag.post_ids), page=page, step=step, scope=10)
|
||||
|
@ -186,25 +207,27 @@ class website_forum(http.Controller):
|
|||
values = {
|
||||
'question_ids': tag.post_ids,
|
||||
'pager': pager,
|
||||
'forum': forum,
|
||||
'searches': kwargs
|
||||
}
|
||||
|
||||
return request.website.render("website_forum.index", values)
|
||||
|
||||
@http.route(['/forum/tags'], type='http', auth="public", website=True, multilang=True)
|
||||
def tags(self, page=1, **searches):
|
||||
@http.route(['/forum/<model("website.forum"):forum>/tags'], type='http', auth="public", website=True, multilang=True)
|
||||
def tags(self, forum, page=1, **searches):
|
||||
cr, uid, context = request.cr, request.uid, request.context
|
||||
tag_obj = request.registry['website.forum.tag']
|
||||
obj_ids = tag_obj.search(cr, uid, [], limit=None, context=context)
|
||||
tags = tag_obj.browse(cr, uid, obj_ids, context=context)
|
||||
values = {
|
||||
'tags': tags,
|
||||
'forum': forum,
|
||||
'searches': {}
|
||||
}
|
||||
return request.website.render("website_forum.tag", values)
|
||||
|
||||
@http.route(['/forum/users', '/forum/users/page/<int:page>'], type='http', auth="public", website=True, multilang=True)
|
||||
def users(self, page=1, **searches):
|
||||
@http.route(['/forum/<model("website.forum"):forum>/users', '/forum/users/page/<int:page>'], type='http', auth="public", website=True, multilang=True)
|
||||
def users(self, forum, page=1, **searches):
|
||||
cr, uid, context = request.cr, request.uid, request.context
|
||||
user_obj = request.registry['res.users']
|
||||
|
||||
|
@ -219,6 +242,7 @@ class website_forum(http.Controller):
|
|||
values = {
|
||||
'users': users,
|
||||
'pager': pager,
|
||||
'forum': forum,
|
||||
'searches': searches,
|
||||
}
|
||||
|
||||
|
|
|
@ -32,8 +32,7 @@ class Forum(osv.Model):
|
|||
_name = 'website.forum'
|
||||
_description = 'Forums'
|
||||
_inherit = ['mail.thread', 'website.seo.metadata']
|
||||
_order = 'name'
|
||||
_columnss = {
|
||||
_columns = {
|
||||
'name': fields.char('Name', required=True, translate=True),
|
||||
'faq': fields.html('FAQ'),
|
||||
'right_column': fields.html('FAQ'),
|
||||
|
|
|
@ -26,7 +26,8 @@
|
|||
name="Footer Questions Link">
|
||||
<xpath expr="//footer//ul[@name='products']" position="inside">
|
||||
<li>
|
||||
<a href="/forum">Q&A</a>
|
||||
<!--TODO: remove static id -->
|
||||
<a href="/forum/1">Q&A</a>
|
||||
</li>
|
||||
</xpath>
|
||||
</template>
|
||||
|
@ -46,17 +47,17 @@
|
|||
</div>
|
||||
<div style="margin-left: 95px;">
|
||||
<div class="question-name">
|
||||
<a t-attf-href="/forum/question/#{ slug(question) }" t-field="question.name"/>
|
||||
<a t-attf-href="/forum/#{ forum.id }/question/#{ slug(question) }" t-field="question.name"/>
|
||||
</div>
|
||||
<div class="text-muted">
|
||||
by <a t-attf-href="/forum/user/#{ question.create_uid.id }" t-field="question.create_uid"/>,
|
||||
by <a t-attf-href="/forum/#{ forum.id }/user/#{ question.create_uid.id }" t-field="question.create_uid"/>,
|
||||
on <span t-field="question.write_date"/>
|
||||
<div t-if="len(question.vote_ids)">
|
||||
<strong>with <span t-esc="len(question.vote_ids)"/> votes</strong>
|
||||
</div>
|
||||
</div>
|
||||
<t t-foreach="question.tags" t-as="tag">
|
||||
<a t-attf-href="/forum/tag/#{ tag.id }" class="badge" t-field="tag.name"/>
|
||||
<a t-attf-href="/forum/#{ forum.id }/tag/#{ tag.id }" class="badge" t-field="tag.name"/>
|
||||
</t>
|
||||
</div>
|
||||
</div>
|
||||
|
@ -87,19 +88,19 @@
|
|||
<div class="collapse navbar-collapse" id="oe-help-navbar-collapse">
|
||||
<ul class="nav navbar-nav">
|
||||
<li>
|
||||
<a href="/forum">Questions</a>
|
||||
<a t-attf-href="/forum/#{ forum.id }">Questions</a>
|
||||
</li>
|
||||
<li t-att-class="searches.get('users') and 'active' or '' ">
|
||||
<a href="/forum/users">People</a>
|
||||
<a t-attf-href="/forum/#{ forum.id }/users">People</a>
|
||||
</li>
|
||||
<li t-att-class="searches.get('tags') and 'active' or '' ">
|
||||
<a href="/forum/tags">Tags</a>
|
||||
<a t-attf-href="/forum/#{ forum.id }/tags">Tags</a>
|
||||
</li>
|
||||
<li t-att-class="searches.get('badge') and 'active' or '' ">
|
||||
<a href="/forum/badge">Badges</a>
|
||||
<a t-attf-href="/forum/#{ forum.id }/badge">Badges</a>
|
||||
</li>
|
||||
</ul>
|
||||
<form class="navbar-form navbar-right" role="search" action="/forum/" method="get">
|
||||
<form class="navbar-form navbar-right" role="search" t-attf-action="/forum/#{ forum.id }" method="get">
|
||||
<div class="form-group">
|
||||
<input type="search" class="form-control"
|
||||
name="search" placeholder="Search a question..."
|
||||
|
@ -117,11 +118,11 @@
|
|||
<div class="alert alert-success alert-dismissable">
|
||||
<button type="button" class="close" data-dismiss="alert" aria-hidden="true">&times;</button>
|
||||
<strong>Congratulation!</strong> You received the <em>New Author</em> badge!<br/>
|
||||
<a href="/forum/badge" class="fa fa-arrow-right">View Your Badges</a>
|
||||
<a t-attf-href="/forum/#{ forum.id }/badge" class="fa fa-arrow-right">View Your Badges</a>
|
||||
</div>
|
||||
<t t-raw="0"/>
|
||||
</div><div class="col-sm-3" id="right-column">
|
||||
<a class="btn btn-primary btn-lg btn-block mb16" href="/forum/ask">Ask a Question</a>
|
||||
<a class="btn btn-primary btn-lg btn-block mb16" t-attf-href="/forum/#{ forum.id }/ask">Ask a Question</a>
|
||||
|
||||
<div class="panel panel-default">
|
||||
<div class="panel-heading">
|
||||
|
@ -130,7 +131,7 @@
|
|||
<div class="panel-body">
|
||||
This community is for professional and enthusiast about our
|
||||
products and services.<br/>
|
||||
<a href="/forum/faq" class="fa fa-arrow-right"> Read Guidelines</a>
|
||||
<a t-attf-href="/forum/#{ forum.id }/faq" class="fa fa-arrow-right"> Read Guidelines</a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
@ -140,9 +141,24 @@
|
|||
</t>
|
||||
</template>
|
||||
|
||||
<template id="index">
|
||||
<t t-call="website_forum.faq">
|
||||
<div t-field="forum.faq"/>
|
||||
<template id="faq">
|
||||
<t t-call="website_forum.header">
|
||||
<!--TODO: Improve template -->
|
||||
<div>
|
||||
<h1>F.A.Q</h1>
|
||||
</div>
|
||||
</t>
|
||||
</template>
|
||||
|
||||
<template id="forum_index">
|
||||
<t t-call="website.layout">
|
||||
<!--TODO: Improve template -->
|
||||
<t t-foreach="forum_ids" t-as="forum">
|
||||
<a t-attf-href="/forum/#{ forum.id }" class="box oe_green" t-field="forum.name"/>
|
||||
</t>
|
||||
<!--t t-call="website_forum.faq">
|
||||
<div t-field="forum.faq"/>
|
||||
</t-->
|
||||
</t>
|
||||
</template>
|
||||
|
||||
|
@ -161,13 +177,13 @@
|
|||
<ul class="dropdown-menu">
|
||||
<li class="dropdown-header">Filter on</li>
|
||||
<li t-att-class="searches.get('type') == 'all' and 'active' or '' ">
|
||||
<a t-attf-href="/forum/?{{ keep_query( type='all') }}">All</a>
|
||||
<a t-attf-href="/forum/#{ forum.id }/?{{ keep_query( type='all') }}">All</a>
|
||||
</li>
|
||||
<li t-att-class="searches.get('type') == 'unanswered' and 'active' or '' ">
|
||||
<a t-attf-href="/forum/?{{ keep_query( type='unanswered') }}">Unanswered</a>
|
||||
<a t-attf-href="/forum/#{ forum.id }/?{{ keep_query( type='unanswered') }}">Unanswered</a>
|
||||
</li>
|
||||
<li t-att-class="searches.get('type') == 'followed' and 'active' or '' ">
|
||||
<a t-attf-href="/forum/?{{ keep_query( type='followed') }}">Followed</a>
|
||||
<a t-attf-href="/forum/#{ forum.id }/?{{ keep_query( type='followed') }}">Followed</a>
|
||||
</li>
|
||||
<li class="dropdown-header">Sort by</li>
|
||||
<li>
|
||||
|
@ -204,7 +220,7 @@
|
|||
<div>
|
||||
<span t-field="user.image" t-field-options='{"widget": "image", "class":"pull-left img img-circle img-avatar"}' />
|
||||
<div>
|
||||
<a t-attf-href="/forum/user/#{ slug(user) }" t-field="user.name"/>
|
||||
<a t-attf-href="/forum/#{ forum.id }/user/#{ slug(user) }" t-field="user.name"/>
|
||||
<t t-raw="separator or ', '"/>
|
||||
<b>11 badges:</b>
|
||||
<span class="fa fa-certificate badge-gold"></span>
|
||||
|
@ -236,7 +252,7 @@
|
|||
</li>
|
||||
</ul>
|
||||
|
||||
<form action="/forum/question/ask/" method="post" role="form">
|
||||
<form t-attf-action="/forum/#{ forum.id }/question/ask/" method="post" role="form">
|
||||
<div class="col-xs-12">
|
||||
<input type="text" name="question_name" required="True"
|
||||
t-attf-value="#{question_name or ''}" id="textbox_user_question"
|
||||
|
@ -292,7 +308,7 @@
|
|||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<form action="/forum/question/postanswer/" method="post" role="form">
|
||||
<form t-attf-action="/forum/#{ forum.id }/question/postanswer/" method="post" role="form">
|
||||
<div class="col-xs-12">
|
||||
<div class="row">
|
||||
<div class="col-xs-12">
|
||||
|
@ -325,7 +341,7 @@
|
|||
<h3>Edit answer</h3>
|
||||
</div>
|
||||
<div class="row">
|
||||
<form action="/forum/question/saveanswer/" method="post" role="form">
|
||||
<form t-attf-action="/forum/#{ forum.id }/question/saveanswer/" method="post" role="form">
|
||||
<div >
|
||||
<div class="row">
|
||||
<div class="col-xs-12">
|
||||
|
@ -376,7 +392,7 @@
|
|||
<div class="mt16 clearfix">
|
||||
<div class="pull-right">
|
||||
<t t-foreach="question.tags" t-as="tag">
|
||||
<a t-attf-href="/forum/tag/#{ tag.id }" class="badge" t-field="tag.name"/>
|
||||
<a t-attf-href="/forum/#{ forum.id }/tag/#{ tag.id }" class="badge" t-field="tag.name"/>
|
||||
</t>
|
||||
</div>
|
||||
<t t-set="user" t-value="question.create_uid"/>
|
||||
|
@ -440,7 +456,7 @@
|
|||
</h1>
|
||||
<div class="row">
|
||||
<div class="col-sm-3 mt16" t-foreach="tags" t-as="tag">
|
||||
<a t-attf-href="/forum/tag/#{ slug(tag) }" class="badge">
|
||||
<a t-attf-href="/forum/#{ forum.id }/tag/#{ slug(tag) }" class="badge">
|
||||
<span t-field="tag.name" />
|
||||
</a>
|
||||
<span>
|
||||
|
|
Loading…
Reference in New Issue