summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChristophe Matthieu <chm@openerp.com>2013-07-26 14:33:17 +0200
committerChristophe Matthieu <chm@openerp.com>2013-07-26 14:33:17 +0200
commitf3a8f62e7559577eb77687331b6190a526288333 (patch)
tree2c735723e722e9469fe2e58a16befa0f7839cfef
parent8bc4e0e8a407c6a7f9fe5261ca5a7ffd062d889a (diff)
[IMP] website: create website class and decorator
bzr revid: chm@openerp.com-20130726123317-idaxp6zfvdpr60k2
-rw-r--r--addons/website/__init__.py2
-rw-r--r--addons/website/__openerp__.py4
-rw-r--r--addons/website/controllers/main.py3
-rw-r--r--addons/website/website.py52
-rw-r--r--addons/website/website_data.xml2
-rw-r--r--addons/website_mail/__init__.py1
-rw-r--r--addons/website_mail/__openerp__.py2
-rw-r--r--addons/website_mail/controllers/main.py78
-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.xml24
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">