[IMP] website: new class website with route decorator

bzr revid: chm@openerp.com-20130726141333-047bdk1qocrpodqp
This commit is contained in:
Christophe Matthieu 2013-07-26 16:13:33 +02:00
parent 18248b94e8
commit 69acb34f3e
5 changed files with 56 additions and 35 deletions

View File

@ -9,6 +9,21 @@ from openerp.addons.web.http import request
class website(http.Controller):
public_user_id = None
def get_uid(self):
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
def isloggued(self):
return website.public_user_id != self.get_uid()
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))
@ -24,29 +39,11 @@ class website(http.Controller):
_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 _funct(self, request.cr, self.get_uid(), *a, **k)
return wrapper
return wrap

View File

@ -1,5 +1,6 @@
# -*- coding: utf-8 -*-
import openerp
from openerp.addons.web.http import request
from openerp.addons.website import website
import werkzeug
@ -52,23 +53,22 @@ class website_mail(website):
@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(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(cr, uid, [('email', '=', post.get('email'))])
if partner_ids:
author_id = partner_ids[0]
if post.get('body') and post.get('name') and post.get('email') and post.get('email').index('@') > 0:
if self.isloggued():
author_id = request.registry['res.users'].browse(cr, uid, uid).partner_id.id
else:
author_id = partner_obj.create(cr, uid, {'name': post.get('name'), 'email': post.get('email')})
partner_obj = request.registry['res.partner']
partner_ids = partner_obj.search(cr, uid, [('name', '=', post.get('name')), ('email', '=', post.get('email'))])
if partner_ids:
author_id = partner_ids[0]
else:
author_id = partner_obj.create(cr, openerp.SUPERUSER_ID, {'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(cr, uid, values)
request.registry['mail.group'].message_post(cr, uid, mail_group_id,
body=post.get('body'),
parent_id=blog_id,
author_id=author_id,
website_published= blog_id and True or False
)
return werkzeug.utils.redirect("/blog/%s/%s" % (mail_group_id, blog_id))

View File

@ -5,5 +5,27 @@
<field name="name">Visitors can reply on blogs</field>
<field name="category_id" ref="base.module_category_hidden"/>
</record>
<record id="website_mail_public" model="ir.rule">
<field name="name">website_mail: Public message</field>
<field name="model_id" ref="model_mail_message"/>
<field name="domain_force">[('website_published', '=', True), ("model", "=", 'mail.group')]</field>
<field name="groups" eval="[(4, ref('base.group_public'))]"/>
<field name="perm_read" eval="True"/>
<field name="perm_write" eval="False"/>
<field name="perm_create" eval="False"/>
<field name="perm_unlink" eval="False"/>
</record>
<record id="website_mail_public_post" model="ir.rule">
<field name="name">website_mail: Public post message</field>
<field name="model_id" ref="model_mail_message"/>
<field name="domain_force">[('website_published', '=', True), ("model", "=", 'mail.group')]</field>
<field name="groups" eval="[(4, ref('group_website_mail_reply'))]"/>
<field name="perm_read" eval="True"/>
<field name="perm_write" eval="False"/>
<field name="perm_create" eval="True"/>
<field name="perm_unlink" eval="False"/>
</record>
</data>
</openerp>

View File

@ -1,5 +1,6 @@
.css_website_mail .media {
position: relative;
clear: both;
}
.css_website_mail .media .css_button_publish {
position: absolute;

View File

@ -3,6 +3,7 @@
.css_website_mail
.media
position: relative
clear: both
.css_button_publish
position: absolute
right: 5px