You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
85 lines
3.7 KiB
85 lines
3.7 KiB
# -*- coding: utf-8 -*-
|
|
###############################################################################
|
|
#
|
|
# Cybrosys Technologies Pvt. Ltd.
|
|
#
|
|
# Copyright (C) 2023-TODAY Cybrosys Technologies(<https://www.cybrosys.com>)
|
|
# Author: Swetha Anand (odoo@cybrosys.com)
|
|
#
|
|
# You can modify it under the terms of the GNU AFFERO
|
|
# GENERAL PUBLIC LICENSE (AGPL v3), Version 3.
|
|
#
|
|
# 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 (AGPL v3) for more details.
|
|
#
|
|
# You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE
|
|
# (AGPL v3) along with this program.
|
|
# If not, see <http://www.gnu.org/licenses/>.
|
|
#
|
|
###############################################################################
|
|
from odoo.exceptions import AccessError
|
|
from odoo.http import request
|
|
from odoo import _
|
|
from odoo.addons.mail.controllers.discuss import DiscussController
|
|
|
|
|
|
class DiscussController(DiscussController):
|
|
"""This class is called to override mail_attachment_upload()."""
|
|
|
|
def mail_attachment_upload(self, ufile, thread_id,
|
|
thread_model, is_pending=False, **kwargs):
|
|
"""
|
|
Override the function mail_attachment_upload() to include
|
|
a check to see if the size of the attachment exceeds
|
|
the user-assigned maximum size. If true, an error
|
|
message is displayed.
|
|
"""
|
|
channel_member = request.env['mail.channel.member']
|
|
set_restriction = request.env.user.set_restriction
|
|
max_size = request.env.user.max_size * 1024 * 1024
|
|
if thread_model == 'mail.channel':
|
|
channel_member = request.env['mail.channel.member']. \
|
|
_get_as_sudo_from_request_or_raise(
|
|
request=request, channel_id=int(thread_id))
|
|
vals = {
|
|
'name': ufile.filename,
|
|
'raw': ufile.read(),
|
|
'res_id': int(thread_id),
|
|
'res_model': thread_model,
|
|
}
|
|
if is_pending and is_pending != 'false':
|
|
# Add this point, the message related to the uploaded file does
|
|
# not exist yet, so we use those placeholder values instead.
|
|
vals.update({
|
|
'res_id': 0,
|
|
'res_model': 'mail.compose.message',
|
|
})
|
|
if channel_member.env.user.share:
|
|
# Only generate the access token if absolutely
|
|
# necessary (= not for internal user).
|
|
vals['access_token'] = \
|
|
channel_member.env['ir.attachment']._generate_access_token()
|
|
try:
|
|
attachment = channel_member.env['ir.attachment'].create(vals)
|
|
attachment._post_add_create()
|
|
attachmentData = {
|
|
'filename': ufile.filename,
|
|
'id': attachment.id,
|
|
'mimetype': attachment.mimetype,
|
|
'name': attachment.name,
|
|
'size': attachment.file_size
|
|
}
|
|
if attachment.access_token:
|
|
attachmentData['accessToken'] = attachment.access_token
|
|
if set_restriction:
|
|
if attachmentData['size'] > max_size:
|
|
attachmentData = {'error': _('Attachment'
|
|
' size cannot exceed %s MB.'
|
|
) % request.env.user.max_size}
|
|
attachment.unlink()
|
|
except AccessError:
|
|
attachmentData = {'error': _("You are not allowed to "
|
|
"upload an attachment here.")}
|
|
return request.make_json_response(attachmentData)
|
|
|