2013-07-24 15:20:27 +00:00
# -*- coding: utf-8 -*-
##############################################################################
#
# OpenERP, Open Source Management Solution
2013-09-20 13:56:43 +00:00
# Copyright (C) 2013-Today OpenERP SA (<http://www.openerp.com>).
2013-07-24 15:20:27 +00:00
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as
# published by the Free Software Foundation, either version 3 of the
# License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU Affero General Public License for more details.
#
# You should have received a copy of the GNU Affero General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
#
##############################################################################
2014-04-02 09:37:21 +00:00
from openerp import SUPERUSER_ID
2014-03-20 15:10:04 +00:00
from openerp . tools import html2plaintext
2013-09-23 13:46:39 +00:00
from openerp . tools . translate import _
2014-04-02 09:37:21 +00:00
from openerp . osv import osv , fields , expression
2013-07-24 15:20:27 +00:00
2013-09-20 13:56:43 +00:00
class MailMessage ( osv . Model ) :
_inherit = ' mail.message '
2014-03-20 15:10:04 +00:00
def _get_description_short ( self , cr , uid , ids , name , arg , context = None ) :
res = dict . fromkeys ( ids , False )
for message in self . browse ( cr , uid , ids , context = context ) :
if message . subject :
res [ message . id ] = message . subject
else :
2014-12-15 15:56:00 +00:00
plaintext_ct = ' ' if not message . body else html2plaintext ( message . body )
2014-05-21 14:27:17 +00:00
res [ message . id ] = plaintext_ct [ : 30 ] + ' %s ' % ( ' [...] ' if len ( plaintext_ct ) > = 30 else ' ' )
2014-03-20 15:10:04 +00:00
return res
2013-07-24 15:20:27 +00:00
_columns = {
2014-03-20 15:10:04 +00:00
' description ' : fields . function (
_get_description_short , type = ' char ' ,
help = ' Message description: either the subject, or the beginning of the body '
) ,
2013-09-20 13:56:43 +00:00
' website_published ' : fields . boolean (
2014-07-06 14:44:26 +00:00
' Published ' , help = " Visible on the website as a comment " , copy = False ,
2013-09-20 13:56:43 +00:00
) ,
2013-07-24 15:20:27 +00:00
}
2013-09-23 13:46:39 +00:00
2014-02-17 14:20:06 +00:00
def default_get ( self , cr , uid , fields_list , context = None ) :
defaults = super ( MailMessage , self ) . default_get ( cr , uid , fields_list , context = context )
# Note: explicitly implemented in default_get() instead of _defaults,
# to avoid setting to True for all existing messages during upgrades.
# TODO: this default should probably be dynamic according to the model
# on which the messages are attached, thus moved to create().
if ' website_published ' in fields_list :
defaults . setdefault ( ' website_published ' , True )
return defaults
2013-09-30 16:15:48 +00:00
2013-09-23 13:46:39 +00:00
def _search ( self , cr , uid , args , offset = 0 , limit = None , order = None ,
context = None , count = False , access_rights_uid = None ) :
""" Override that adds specific access rights of mail.message, to restrict
messages to published messages for public users . """
2014-04-02 09:37:21 +00:00
if uid != SUPERUSER_ID :
group_ids = self . pool . get ( ' res.users ' ) . browse ( cr , uid , uid , context = context ) . groups_id
group_user_id = self . pool . get ( " ir.model.data " ) . get_object_reference ( cr , uid , ' base ' , ' group_public ' ) [ 1 ]
if group_user_id in [ group . id for group in group_ids ] :
args = expression . AND ( [ [ ( ' website_published ' , ' = ' , True ) ] , list ( args ) ] )
2013-09-23 13:46:39 +00:00
return super ( MailMessage , self ) . _search ( cr , uid , args , offset = offset , limit = limit , order = order ,
2014-03-11 15:53:09 +00:00
context = context , count = count , access_rights_uid = access_rights_uid )
2013-09-23 13:46:39 +00:00
def check_access_rule ( self , cr , uid , ids , operation , context = None ) :
""" Add Access rules of mail.message for non-employee user:
- read :
- raise if the type is comment and subtype NULL ( internal note )
"""
2014-08-08 14:56:44 +00:00
if uid != SUPERUSER_ID :
group_ids = self . pool . get ( ' res.users ' ) . browse ( cr , uid , uid , context = context ) . groups_id
group_user_id = self . pool . get ( " ir.model.data " ) . get_object_reference ( cr , uid , ' base ' , ' group_public ' ) [ 1 ]
if group_user_id in [ group . id for group in group_ids ] :
cr . execute ( ' SELECT id FROM " %s " WHERE website_published IS FALSE AND id = ANY ( %% s) ' % ( self . _table ) , ( ids , ) )
if cr . fetchall ( ) :
raise osv . except_osv (
_ ( ' Access Denied ' ) ,
_ ( ' The requested operation cannot be completed due to security restrictions. Please contact your system administrator. \n \n (Document type: %s , Operation: %s ) ' ) % ( self . _description , operation ) )
2013-09-23 13:46:39 +00:00
return super ( MailMessage , self ) . check_access_rule ( cr , uid , ids = ids , operation = operation , context = context )