diff options
| author | Christophe Matthieu <chm@openerp.com> | 2013-07-25 16:57:43 +0200 |
|---|---|---|
| committer | Christophe Matthieu <chm@openerp.com> | 2013-07-25 16:57:43 +0200 |
| commit | 087989b12ed3af764bee6c916ee4e465e360d9fe (patch) | |
| tree | 819eb8b06873b16f30382ae212cbca83eb7403bb | |
| parent | 185827a579d1a03aec925a4daf2cd6f92e202011 (diff) | |
[IMP] website_mail: publish and post message
bzr revid: chm@openerp.com-20130725145743-uxt7lqxeavxb6u4g
| -rw-r--r-- | addons/website_mail/__openerp__.py | 2 | ||||
| -rw-r--r-- | addons/website_mail/controllers/main.py | 92 | ||||
| -rw-r--r-- | addons/website_mail/views/website_mail.xml | 67 | ||||
| -rw-r--r-- | 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/<int:mail_group_id>/<int:blog_id>'], 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)] + + editable = self.get_editable(blog_id) + if not editable: + domain += [("website_published", "=", True)] - if blog_id and not mail_message_obj.search(cr, uid, [("id", "=", blog_id)] + domain): + 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/<int:mail_group_id>/<int:blog_id>/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 @@ <openerp> <data> - <!-- add website_published field on mail group --> - - <record model="ir.ui.view" id="blog_website_form"> - <field name="name">mail.group.website.form</field> - <field name="model">mail.group</field> - <field name="inherit_id" ref="mail.group_all_employees"/> - <field name="arch" type="xml"> - <field name="public" position="after"> - <field name="website_published" attrs="{'invisible': [('public','!=','public')]}"/> - </field> - </field> - </record> - <!-- Layout add nav and footer --> <record id="header_website_mail" model="ir.ui.view"> @@ -33,8 +20,13 @@ <template id="index"> <t t-call="website.layout"> + <t t-set="head"> + <script type="text/javascript" src="/website_mail/static/src/js/blog.js"></script> + <link rel='stylesheet' href='/website_mail/static/src/css/blog.css'/> + <t t-raw="head"/> + </t> <t t-set="title">Blog</t> - <div class="container css_website_mail"> + <div class="container css_website_mail js_website_mail"> <div class="row"> <div class="span4"> <ul class="nav nav-list"> @@ -54,7 +46,13 @@ </div> <div class="span8" t-if="blog_id"> <div class="media"> - <div class="media-body well"> + <div t-att-class="'media-body well %%s' %% (blog_id.website_published and 'css_published' or '')"> + <t t-if="blog_editable"> + <a href="#" title="Click to publish or unpublish this blog" t-att-data-id="blog_id.id" class="js_publish css_button_publish"> + <i class="icon-ok-circle css_publish"></i> + <i class="icon-remove-sign css_unpublish"></i> + </a> + </t> <h3><t t-esc="blog_id.subject"/></h3> <p><t t-raw="blog_id.body"/></p> <small class="pull-right muted text-right"> @@ -63,9 +61,15 @@ </small> </div> <ul class="media-list"> - <t t-foreach="blog_id.child_ids or []" t-as="mail"> - <li class="media well well-small"> - <div class="media-body"> + <t t-foreach="blog_message_ids or []" t-as="mail"> + <li t-if="mail.website_published or blog_editable" class="media well well-small"> + <div t-att-class="'media-body %%s' %% (mail.website_published and 'css_published' or '')"> + <t t-if="blog_editable"> + <a href="#" title="Click to publish or unpublish this message" t-att-data-id="mail.id" class="js_publish css_button_publish"> + <i class="icon-ok-circle css_publish"></i> + <i class="icon-remove-sign css_unpublish"></i> + </a> + </t> <h4 t-if="mail.subject" class="media-heading"><t t-esc="mail.subject"/></h4> <div class="media"> <t t-raw="mail.body"/> @@ -77,13 +81,38 @@ </div> </li> </t> + <form id="post" t-att-action="'/blog/%%s/%%s/post#post' %% (blog_id.res_id, blog_id.id)" method="POST" class="form-horizontal"> + <div class="control-group"> + <label class="control-label">Name</label> + <div class="controls"> + <input type="text" name="name" placeholder="Name" class="span5"/> + </div> + </div> + <div class="control-group"> + <label class="control-label">Email</label> + <div class="controls"> + <input type="email" name="email" placeholder="Email" class="span5"/> + </div> + </div> + <div class="control-group"> + <label class="control-label">You message</label> + <div class="controls"> + <textarea rows="4" name="body" placeholder="You message" class="span5"> </textarea> + </div> + </div> + <div class="control-group"> + <div class="controls"> + <button type="submit" class="btn">Post</button> + </div> + </div> + </form> </ul> </div> </div> <div class="span8" t-if="not blog_id"> <ul class="media-list"> <t t-foreach="blog_ids or []" t-as="blog"> - <li class="media"> + <li class="media well"> <div class="media-body"> <h4 class="media-heading"><t t-esc="blog.subject"/></h4> <div class="media"> diff --git a/addons/website_sale/__openerp__.py b/addons/website_sale/__openerp__.py index 8f4f5932977..6565269b1b4 100644 --- a/addons/website_sale/__openerp__.py +++ b/addons/website_sale/__openerp__.py @@ -13,8 +13,6 @@ OpenERP E-Commerce 'views/ecommerce.xml', 'views/pricelist.xml' ], - 'js': ['static/src/js/*.js'], - 'css': ['static/src/css/*.css'], 'qweb': ['static/src/xml/*.xml'], 'installable': True, 'auto_install': True, |
