[IMP] website_mail: publish and post message
bzr revid: chm@openerp.com-20130725145743-uxt7lqxeavxb6u4g
This commit is contained in:
@@ -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,
|
||||
|
||||
@@ -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)]
|
||||
|
||||
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/<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))
|
||||
|
||||
@@ -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">
|
||||
|
||||
@@ -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,
|
||||
|
||||
Reference in New Issue
Block a user