diff options
Diffstat (limited to 'addons/website_forum/controllers/main.py')
| -rw-r--r-- | addons/website_forum/controllers/main.py | 51 |
1 files changed, 31 insertions, 20 deletions
diff --git a/addons/website_forum/controllers/main.py b/addons/website_forum/controllers/main.py index dd247fbca14..cd647d394bc 100644 --- a/addons/website_forum/controllers/main.py +++ b/addons/website_forum/controllers/main.py @@ -73,7 +73,7 @@ class WebsiteForum(WebsiteProfile): '''/forum/<model("forum.forum"):forum>/tag/<model("forum.tag"):tag>/questions''', '''/forum/<model("forum.forum"):forum>/tag/<model("forum.tag"):tag>/questions/page/<int:page>''', ], type='http', auth="public", website=True, sitemap=sitemap_forum) - def questions(self, forum, tag=None, page=1, filters='all', sorting=None, search='', **post): + def questions(self, forum, tag=None, page=1, filters='all', my=None, sorting=None, search='', **post): if not forum.can_access_from_current_website(): raise werkzeug.exceptions.NotFound() @@ -86,8 +86,21 @@ class WebsiteForum(WebsiteProfile): domain += [('tag_ids', 'in', tag.id)] if filters == 'unanswered': domain += [('child_ids', '=', False)] - elif filters == 'followed': - domain += [('message_partner_ids', '=', request.env.user.partner_id.id)] + elif filters == 'solved': + domain += [('has_validated_answer', '=', True)] + elif filters == 'unsolved': + domain += [('has_validated_answer', '=', False)] + + user = request.env.user + + if my == 'mine': + domain += [('create_uid', '=', user.id)] + elif my == 'followed': + domain += [('message_partner_ids', '=', user.partner_id.id)] + elif my == 'tagged': + domain += [('tag_ids.message_partner_ids', '=', user.partner_id.id)] + elif my == 'favourites': + domain += [('favourite_ids', '=', user.id)] if sorting: # check that sorting is valid @@ -123,11 +136,13 @@ class WebsiteForum(WebsiteProfile): values = self._prepare_user_values(forum=forum, searches=post, header={'ask_hide': not forum.active}) values.update({ 'main_object': tag or forum, + 'edit_in_backend': not tag, 'question_ids': question_ids, 'question_count': question_count, 'pager': pager, 'tag': tag, 'filters': filters, + 'my': my, 'sorting': sorting, 'search': search, }) @@ -153,10 +168,9 @@ class WebsiteForum(WebsiteProfile): first_char_tag = forum.get_tags_first_char() first_char_list = [(t, t.lower()) for t in first_char_tag if t.isalnum()] first_char_list.insert(0, (_('All'), 'all')) - # get active first char tag - active_char_tag = first_char_list[1][1] if len(first_char_list) > 1 else 'all' - if tag_char: - active_char_tag = tag_char.lower() + + active_char_tag = tag_char and tag_char.lower() or 'all' + # generate domain for searched tags domain = [('forum_id', '=', forum.id), ('posts_count', '>', 0)] order_by = 'name' @@ -174,10 +188,6 @@ class WebsiteForum(WebsiteProfile): }) return request.render("website_forum.tag", values) - @http.route('/forum/<model("forum.forum"):forum>/edit_welcome_message', auth="user", website=True) - def edit_welcome_message(self, forum, **kw): - return request.render("website_forum.edit_welcome_message", {'forum': forum}) - # Questions # -------------------------------------------------- @@ -226,13 +236,13 @@ class WebsiteForum(WebsiteProfile): def question_toggle_favorite(self, forum, question, **post): if not request.session.uid: return {'error': 'anonymous_user'} - # TDE: add check for not public - favourite = False if question.user_favourite else True + favourite = not question.user_favourite + question.sudo().favourite_ids = [(favourite and 4 or 3, request.uid)] if favourite: - favourite_ids = [(4, request.uid)] - else: - favourite_ids = [(3, request.uid)] - question.sudo().write({'favourite_ids': favourite_ids}) + # Automatically add the user as follower of the posts that he + # favorites (on unfavorite we chose to keep him as a follower until + # he decides to not follow anymore). + question.sudo().message_subscribe(request.env.user.partner_id.ids) return favourite @http.route('/forum/<model("forum.forum"):forum>/question/<model("forum.post"):question>/ask_for_close', type='http', auth="user", methods=['POST'], website=True) @@ -282,7 +292,7 @@ class WebsiteForum(WebsiteProfile): user = request.env.user if not user.email or not tools.single_email_re.match(user.email): return werkzeug.utils.redirect("/forum/%s/user/%s/edit?email_required=1" % (slug(forum), request.session.uid)) - values = self._prepare_user_values(forum=forum, searches={}, header={'ask_hide': True}) + values = self._prepare_user_values(forum=forum, searches={}, header={'ask_hide': True}, new_question=True) return request.render("website_forum.new_question", values) @http.route(['/forum/<model("forum.forum"):forum>/new', @@ -349,6 +359,7 @@ class WebsiteForum(WebsiteProfile): values.update({ 'tags': tags, 'post': post, + 'is_edit': True, 'is_answer': bool(post.parent_id), 'searches': kwargs, 'content': post.name, @@ -518,8 +529,8 @@ class WebsiteForum(WebsiteProfile): # ----------------------------------- @http.route(['/forum/<model("forum.forum"):forum>/user/<int:user_id>'], type='http', auth="public", website=True) - def view_user_forum_profile(self, forum, user_id, **post): - return werkzeug.utils.redirect('/profile/user/' + str(user_id) + '?forum_id=' + str(forum.id)) + def view_user_forum_profile(self, forum, user_id, forum_origin, **post): + return werkzeug.utils.redirect('/profile/user/' + str(user_id) + '?forum_id=' + str(forum.id) + '&forum_origin=' + str(forum_origin)) def _prepare_user_profile_values(self, user, **post): values = super(WebsiteForum, self)._prepare_user_profile_values(user, **post) |
