From 087989b12ed3af764bee6c916ee4e465e360d9fe Mon Sep 17 00:00:00 2001 From: Christophe Matthieu Date: Thu, 25 Jul 2013 16:57:43 +0200 Subject: [PATCH] [IMP] website_mail: publish and post message bzr revid: chm@openerp.com-20130725145743-uxt7lqxeavxb6u4g --- addons/website_mail/__openerp__.py | 2 - addons/website_mail/controllers/main.py | 92 +++++++++++++++++++--- addons/website_mail/views/website_mail.xml | 67 +++++++++++----- addons/website_sale/__openerp__.py | 2 - 4 files changed, 127 insertions(+), 36 deletions(-) diff --git a/addons/website_mail/__openerp__.py b/addons/website_mail/__openerp__.py index 2ed5290fdc2..aaa8ab5fe90 100644 --- a/addons/website_mail/__openerp__.py +++ b/addons/website_mail/__openerp__.py @@ -12,8 +12,6 @@ OpenERP Blog 'data': [ 'views/website_mail.xml', ], - 'js': ['static/src/js/*.js'], - 'css': ['static/src/css/*.css'], 'qweb': ['static/src/xml/*.xml'], 'installable': True, 'auto_install': True, diff --git a/addons/website_mail/controllers/main.py b/addons/website_mail/controllers/main.py index 05ef2130b12..7a768ba1d5f 100644 --- a/addons/website_mail/controllers/main.py +++ b/addons/website_mail/controllers/main.py @@ -1,12 +1,29 @@ # -*- coding: utf-8 -*- +import openerp from openerp.addons.web import http from openerp.addons.web.http import request from openerp.addons.website.controllers.main import template_values +from openerp.osv import osv, orm +import werkzeug class website_mail(http.Controller): + def get_editable(self, blog_id): + try: + request.session.check_security() + uid = request.session._uid + + mail_group_obj = request.registry['mail.group'] + mail_group_obj.check_access_rights(request.cr, uid, 'write') + mail_group_obj.check_access_rule(request.cr, uid, [blog_id], 'write', context=context) + editable = True + except (http.SessionExpiredException, osv.except_osv, orm.except_orm): + editable = False + + return editable + @http.route(['/blog', '/blog//'], type='http', auth="admin") def blog(self, mail_group_id=None, blog_id=None, **post): cr = request.cr @@ -14,31 +31,80 @@ class website_mail(http.Controller): values = template_values() mail_group_obj = request.registry['mail.group'] - mail_message_obj = request.registry['mail.message'] + message_obj = request.registry['mail.message'] if not mail_group_id: mail_group_ids = mail_group_obj.search(cr, uid, [("public", "=", "public")]) mail_group_id = mail_group_ids[0] - domain = [("subject", "!=", False), ("parent_id", "=", False)]#, ("website_published", "=", True)] + domain = [("subject", "!=", False), ("parent_id", "=", False)] - if blog_id and not mail_message_obj.search(cr, uid, [("id", "=", blog_id)] + domain): + editable = self.get_editable(blog_id) + if not editable: + domain += [("website_published", "=", True)] + + if blog_id and not message_obj.search(cr, uid, [("id", "=", blog_id)] + domain): blog_id = None + else: + blog_domain = [("parent_id", "=", blog_id)] + if not editable: + blog_domain += [("website_published", "=", True)] - message_ids = mail_message_obj.search(cr, uid, [("res_id", "=", mail_group_id), ("model", "=", 'mail.group')]) + message_ids = message_obj.search(cr, uid, [("res_id", "=", mail_group_id), ("model", "=", 'mail.group')]) domain += [("id", "in", message_ids)] values.update({ + 'blog_editable': editable, 'res_company': request.registry['res.company'].browse(cr, uid, 1), - 'blog_ids': not blog_id and mail_message_obj.browse(cr, uid, - mail_message_obj.search(cr, uid, domain, order="create_date desc", limit=20)) or None, - 'popular_ids': mail_message_obj.browse(cr, uid, - mail_message_obj.search(cr, uid, domain, order="child_ids desc", limit=5)), - 'recent_ids': mail_message_obj.browse(cr, uid, - mail_message_obj.search(cr, uid, domain, order="create_date desc", limit=5)), - 'last_ids': mail_message_obj.browse(cr, uid, - mail_message_obj.search(cr, uid, domain, order="write_date desc", limit=5)), - 'blog_id': blog_id and mail_message_obj.browse(cr, uid, blog_id) or None, + 'blog_ids': not blog_id and message_obj.browse(cr, uid, + message_obj.search(cr, uid, domain, order="create_date desc", limit=20)) or None, + 'popular_ids': message_obj.browse(cr, uid, + message_obj.search(cr, uid, domain, order="child_ids desc", limit=5)), + 'recent_ids': message_obj.browse(cr, uid, + message_obj.search(cr, uid, domain, order="create_date desc", limit=5)), + 'last_ids': message_obj.browse(cr, uid, + message_obj.search(cr, uid, domain, order="write_date desc", limit=5)), + 'blog_id': blog_id and message_obj.browse(cr, uid, blog_id) or None, + 'blog_message_ids': blog_id and message_obj.browse(cr, uid, + message_obj.search(cr, uid, blog_domain, order="create_date asc", limit=20)) or None, }) html = request.registry.get("ir.ui.view").render(cr, uid, "website_mail.index", values) return html + + @http.route(['/blog/publish'], type='http', auth="admin") + def publish(self, **post): + cr = request.cr + uid = request.uid + message_id = int(post['message_id']) + message_obj = request.registry['mail.message'] + + blog = message_obj.browse(cr, openerp.SUPERUSER_ID, message_id) + website_published = blog.website_published + if self.get_editable(message_id): + website_published = not website_published + message_obj.write(cr, uid, [message_id], {'website_published': website_published}) + + return website_published and "1" or "0" + + @http.route(['/blog///post'], type='http', auth="admin") + def message_post(self, mail_group_id=None, blog_id=None, **post): + message_obj = request.registry['mail.message'] + partner_obj = request.registry['res.partner'] + blog = message_obj.browse(request.cr, request.uid, blog_id) + + if blog.website_published and post.get('body') and post.get('name') and post.get('email') and post.get('email').index('@') > 0: + partner_ids = partner_obj.search(request.cr, request.uid, [('email', '=', post.get('email'))]) + if partner_ids: + author_id = partner_ids[0] + else: + author_id = partner_obj.create(request.cr, request.uid, {'name': post.get('name'), 'email': post.get('email')}) + + values = { + 'body': post.get('body'), + 'parent_id': blog.id, + 'author_id': author_id, + 'website_published': True, + } + message_obj.create(request.cr, request.uid, values) + + return werkzeug.utils.redirect("/blog/%s/%s" % (mail_group_id, blog_id)) diff --git a/addons/website_mail/views/website_mail.xml b/addons/website_mail/views/website_mail.xml index 94c394c520a..8139f5d4b76 100644 --- a/addons/website_mail/views/website_mail.xml +++ b/addons/website_mail/views/website_mail.xml @@ -2,19 +2,6 @@ - - - - mail.group.website.form - mail.group - - - - - - - - @@ -33,8 +20,13 @@