[MERGE] from master
[odoo/odoo.git] / addons / website_forum / controllers / main.py
index bc3a7bc..78eb41d 100644 (file)
@@ -261,7 +261,7 @@ class WebsiteForum(http.Controller):
         if not request.session.uid:
             return login_redirect()
         user = request.env.user
-        if not post_type in ['question', 'link', 'discussion']:  # fixme: make dynamic
+        if post_type not in ['question', 'link', 'discussion']:  # fixme: make dynamic
             return werkzeug.utils.redirect('/forum/%s' % slug(forum))
         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))
@@ -272,10 +272,8 @@ class WebsiteForum(http.Controller):
                  '/forum/<model("forum.forum"):forum>/<model("forum.post"):post_parent>/reply'],
                 type='http', auth="public", methods=['POST'], website=True)
     def post_create(self, forum, post_parent=None, post_type=None, **post):
-        cr, uid, context = request.cr, request.uid, request.context
         if not request.session.uid:
             return login_redirect()
-
         post_tag_ids = forum._tag_to_write_vals(post.get('post_tags', ''))
         new_question = request.env['forum.post'].create({
             'forum_id': forum.id,
@@ -420,18 +418,26 @@ class WebsiteForum(http.Controller):
         Data = request.env["ir.model.data"]
 
         user = User.sudo().search([('id', '=', user_id)])
-        if not user or user.karma < 1:
+        current_user = request.env.user.sudo()
+
+        # Users with high karma can see users with karma <= 0 for
+        # moderation purposes, IFF they have posted something (see below)
+        if (not user or (user.karma < 1 and current_user.karma < forum.karma_unlink_all)):
             return werkzeug.utils.redirect("/forum/%s" % slug(forum))
         values = self._prepare_forum_values(forum=forum, **post)
-        if user_id != request.session.uid and not user.website_published:
-            return request.website.render("website_forum.private_profile", values)
+
         # questions and answers by user
-        user_questions, user_answers = [], []
         user_question_ids = Post.search([
             ('parent_id', '=', False),
             ('forum_id', '=', forum.id), ('create_uid', '=', user.id)],
             order='create_date desc')
         count_user_questions = len(user_question_ids)
+
+        if (user_id != request.session.uid and not
+                (user.website_published or
+                    (count_user_questions and current_user.karma > forum.karma_unlink_all))):
+            return request.website.render("website_forum.private_profile", values)
+
         # displaying only the 20 most recent questions
         user_questions = user_question_ids[:20]