diff options
| -rw-r--r-- | addons/website/__init__.py | 2 | ||||
| -rw-r--r-- | addons/website/__openerp__.py | 4 | ||||
| -rw-r--r-- | addons/website/controllers/main.py | 3 | ||||
| -rw-r--r-- | addons/website/website.py | 52 | ||||
| -rw-r--r-- | addons/website/website_data.xml | 2 | ||||
| -rw-r--r-- | addons/website_mail/__init__.py | 1 | ||||
| -rw-r--r-- | addons/website_mail/__openerp__.py | 2 | ||||
| -rw-r--r-- | addons/website_mail/controllers/main.py | 78 | ||||
| -rw-r--r-- | addons/website_mail/security/website_mail.xml (renamed from addons/website_mail/security/website_mail_security.xml) | 0 | ||||
| -rw-r--r-- | addons/website_mail/views/website_mail.xml | 24 |
10 files changed, 95 insertions, 73 deletions
diff --git a/addons/website/__init__.py b/addons/website/__init__.py index ee5959455ad..be415754735 100644 --- a/addons/website/__init__.py +++ b/addons/website/__init__.py @@ -1 +1,3 @@ import controllers +import res_config +from website import website
\ No newline at end of file diff --git a/addons/website/__openerp__.py b/addons/website/__openerp__.py index bbd8a4f2fed..51e984d1afb 100644 --- a/addons/website/__openerp__.py +++ b/addons/website/__openerp__.py @@ -11,7 +11,9 @@ OpenERP Website CMS 'depends': ['base'], 'installable': True, 'data': [ - 'views/views.xml' + 'views/views.xml', + 'views/res_config.xml', + 'website_data.xml', ], 'js': [ 'static/lib/bootstrap/js/bootstrap.js', diff --git a/addons/website/controllers/main.py b/addons/website/controllers/main.py index 65d957784d3..8956c59e034 100644 --- a/addons/website/controllers/main.py +++ b/addons/website/controllers/main.py @@ -6,6 +6,8 @@ from openerp.addons.web import http from openerp.addons.web.controllers.main import manifest_list from openerp.addons.web.http import request + + def template_values(): script = "\n".join(['<script type="text/javascript" src="%s"></script>' % i for i in manifest_list('js', db=request.db)]) css = "\n".join('<link rel="stylesheet" href="%s">' % i for i in manifest_list('css', db=request.db)) @@ -16,6 +18,7 @@ def template_values(): except http.SessionExpiredException: loggued = False uid = openerp.SUPERUSER_ID + values = { 'loggued': loggued, 'editable': loggued, diff --git a/addons/website/website.py b/addons/website/website.py new file mode 100644 index 00000000000..8c06a3a0942 --- /dev/null +++ b/addons/website/website.py @@ -0,0 +1,52 @@ +# -*- coding: utf-8 -*- + +import openerp +from openerp.addons.web import http +from openerp.addons.web.controllers import main +from openerp.addons.web.http import request + + +class website(http.Controller): + public_user_id = None + + def render(self, cr, uid, template, add_values={}): + script = "\n".join(['<script type="text/javascript" src="%s"></script>' % i for i in main.manifest_list('js', db=request.db)]) + css = "\n".join('<link rel="stylesheet" href="%s">' % i for i in main.manifest_list('css', db=request.db)) + _values = { + 'request': request, + 'registry': request.registry, + 'cr': cr, + 'uid': uid, + 'script': script, + 'css': css, + 'host_url': request.httprequest.host_url, + } + _values.update(add_values) + return request.registry.get("ir.ui.view").render(cr, uid, template, _values) + + @staticmethod + def get_uid(): + try: + request.session.check_security() + uid = request.session._uid + except http.SessionExpiredException: + if not website.public_user_id: + data_obj = request.registry['ir.model.data'] + website.public_user_id = data_obj.get_object_reference(request.cr, openerp.SUPERUSER_ID, 'website', 'public_user')[1] + uid = website.public_user_id + + return uid + + @staticmethod + def isloggued(): + print website.public_user_id , website.get_uid() + return website.public_user_id != website.get_uid() + + @staticmethod + def route(*args, **kwargs): + def wrap(_funct): + @http.route(*args, **kwargs) + def wrapper(self, *a, **k): + return _funct(self, request.cr, website.get_uid(), *a, **k) + return wrapper + return wrap diff --git a/addons/website/website_data.xml b/addons/website/website_data.xml index 29c8be80b34..6356ab52816 100644 --- a/addons/website/website_data.xml +++ b/addons/website/website_data.xml @@ -12,7 +12,7 @@ <field name="share" eval="True"/> </record> - <record id="portal.group_public" model="res.groups"> + <record id="base.group_public" model="res.groups"> <field name="users" eval="[(4, ref('public_user'))]"/> </record> diff --git a/addons/website_mail/__init__.py b/addons/website_mail/__init__.py index f2eed8dcedb..7a2828a3906 100644 --- a/addons/website_mail/__init__.py +++ b/addons/website_mail/__init__.py @@ -1,2 +1,3 @@ import controllers import mail_message +import res_config
\ No newline at end of file diff --git a/addons/website_mail/__openerp__.py b/addons/website_mail/__openerp__.py index aaa8ab5fe90..4db4d339de9 100644 --- a/addons/website_mail/__openerp__.py +++ b/addons/website_mail/__openerp__.py @@ -11,6 +11,8 @@ OpenERP Blog 'depends': ['website', 'mail'], 'data': [ 'views/website_mail.xml', + 'views/res_config.xml', + 'security/website_mail.xml', ], 'qweb': ['static/src/xml/*.xml'], 'installable': True, diff --git a/addons/website_mail/controllers/main.py b/addons/website_mail/controllers/main.py index 7a768ba1d5f..13927aa9f82 100644 --- a/addons/website_mail/controllers/main.py +++ b/addons/website_mail/controllers/main.py @@ -1,60 +1,28 @@ # -*- 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 +from openerp.addons.website import website 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 - uid = request.uid - values = template_values() +class website_mail(website): + @website.route(['/blog', '/blog/<int:mail_group_id>', '/blog/<int:mail_group_id>/<int:blog_id>'], type='http', auth="admin") + def blog(self, cr, uid, mail_group_id=None, blog_id=None, **post): mail_group_obj = request.registry['mail.group'] 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)] - 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 = message_obj.search(cr, uid, [("res_id", "=", mail_group_id), ("model", "=", 'mail.group')]) - domain += [("id", "in", message_ids)] + domain += [("id", "in", message_obj.search(cr, uid, + mail_group_id and [("res_id", "=", mail_group_id), ("model", "=", 'mail.group')] or [("model", "=", 'mail.group')]))] - values.update({ - 'blog_editable': editable, + values = { 'res_company': request.registry['res.company'].browse(cr, uid, 1), '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, @@ -67,37 +35,33 @@ class website_mail(http.Controller): '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) + } + html = self.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 + @website.route(['/blog/publish'], type='http', auth="admin") + def publish(self, cr, uid, **post): 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}) + blog = message_obj.browse(cr, uid, message_id) + message_obj.write(cr, uid, [message_id], {'website_published': not blog.website_published}) + blog = message_obj.browse(cr, uid, message_id) - return website_published and "1" or "0" + return blog.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): + @website.route(['/blog/<int:mail_group_id>/<int:blog_id>/post'], type='http', auth="admin") + def message_post(self, cr, uid, 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) + blog = message_obj.browse(cr, 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'))]) + partner_ids = partner_obj.search(cr, 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')}) + author_id = partner_obj.create(cr, uid, {'name': post.get('name'), 'email': post.get('email')}) values = { 'body': post.get('body'), @@ -105,6 +69,6 @@ class website_mail(http.Controller): 'author_id': author_id, 'website_published': True, } - message_obj.create(request.cr, request.uid, values) + message_obj.create(cr, uid, values) return werkzeug.utils.redirect("/blog/%s/%s" % (mail_group_id, blog_id)) diff --git a/addons/website_mail/security/website_mail_security.xml b/addons/website_mail/security/website_mail.xml index 5dcd7a0cb62..5dcd7a0cb62 100644 --- a/addons/website_mail/security/website_mail_security.xml +++ b/addons/website_mail/security/website_mail.xml diff --git a/addons/website_mail/views/website_mail.xml b/addons/website_mail/views/website_mail.xml index 8139f5d4b76..763ffdfa591 100644 --- a/addons/website_mail/views/website_mail.xml +++ b/addons/website_mail/views/website_mail.xml @@ -47,12 +47,10 @@ <div class="span8" t-if="blog_id"> <div class="media"> <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> + <a href="#" title="Click to publish or unpublish this blog" t-att-data-id="blog_id.id" class="js_publish css_button_publish" groups="group_website_mail_manager"> + <i class="icon-ok-circle css_publish"></i> + <i class="icon-remove-sign css_unpublish"></i> + </a> <h3><t t-esc="blog_id.subject"/></h3> <p><t t-raw="blog_id.body"/></p> <small class="pull-right muted text-right"> @@ -62,14 +60,12 @@ </div> <ul class="media-list"> <t t-foreach="blog_message_ids or []" t-as="mail"> - <li t-if="mail.website_published or blog_editable" class="media well well-small"> + <li 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> + <a href="#" title="Click to publish or unpublish this message" t-att-data-id="mail.id" class="js_publish css_button_publish" groups="group_website_mail_manager"> + <i class="icon-ok-circle css_publish"></i> + <i class="icon-remove-sign css_unpublish"></i> + </a> <h4 t-if="mail.subject" class="media-heading"><t t-esc="mail.subject"/></h4> <div class="media"> <t t-raw="mail.body"/> @@ -81,7 +77,7 @@ </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"> + <form id="post" t-att-action="'/blog/%%s/%%s/post#post' %% (blog_id.res_id, blog_id.id)" method="POST" class="form-horizontal" groups="group_website_mail_reply"> <div class="control-group"> <label class="control-label">Name</label> <div class="controls"> |
